diff --git a/.gitattributes b/.gitattributes index 344e42414..3e4f7281a 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,10 +1,19 @@ # Attribution hashes must match native checkouts even with core.autocrlf=true. +*.py text eol=lf rust/Cargo.lock text eol=lf rust/**/Cargo.toml text eol=lf pnpm-lock.yaml text eol=lf electron/package.json text eol=lf frontend/package.json text eol=lf +scripts/release/artifact-plan.json text eol=lf +scripts/release/licenses/managed-python-sources.json text eol=lf +scripts/release/torch-managed-python-acceptance.py text eol=lf +rust/crates/pumas-app-manager/src/version_manager/managed_python.rs text eol=lf +docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-*-cpu-rpc-restart-acceptance/runtime.json text eol=lf +docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/*/managed-python-licenses/full-archive-manifest.json text eol=lf # Preserve verbatim third-party legal bytes, including mixed line endings. scripts/release/licenses/* -text -whitespace docs/release-attribution/**/THIRD-PARTY-NOTICES.txt -text -whitespace +# Archive-captured CPython metadata and license texts are evidence and must remain verbatim. +docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/**/managed-python-licenses/full-archive/** -text -whitespace diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 48462d324..98aba5b1a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -5,7 +5,8 @@ on: branches: [main] tags: ['v*'] pull_request: - branches: [main] + # Temporary review bases for the three-part Torch PR stack. + branches: [main, prep/torch-managed-foundation, prep/torch-install-flow] workflow_dispatch: permissions: @@ -88,7 +89,7 @@ jobs: include: - os: ubuntu-24.04 headless_os: linux - - os: macos-14 + - os: macos-15 headless_os: macos - os: windows-2025 headless_os: windows @@ -164,12 +165,24 @@ jobs: if-no-files-found: error torch-quality: - name: Torch source QA + name: Torch native QA (${{ matrix.os }}) needs: lint-workflows - runs-on: ubuntu-24.04 - timeout-minutes: 10 + strategy: + fail-fast: false + matrix: + os: [ubuntu-24.04, windows-2025, macos-15] + runs-on: ${{ matrix.os }} + timeout-minutes: 60 steps: - uses: actions/checkout@v6 + with: + persist-credentials: false + - name: Install repository Rust toolchain + run: rustup toolchain install --no-self-update + - uses: Swatinem/rust-cache@v2 + with: + workspaces: rust -> target + key: torch-native-${{ runner.os }} - uses: actions/setup-python@v6 with: python-version-file: .python-version @@ -178,8 +191,82 @@ jobs: - run: python -m pip install -r torch-server/requirements-dev.txt - run: python -m ruff check torch-server scripts/release - run: python -m ruff format --check torch-server scripts/release - # Unit fixtures do not claim GPU inference or a shipped Torch runtime. + # Fixtures validate tags and resolver behavior; the native tests below + # validate host APIs without claiming GPU inference or model support. - run: python -m unittest discover -s torch-server/tests + - uses: actions/setup-python@v6 + with: + python-version: '3.14' + - name: Self-test native Torch acceptance script + run: python scripts/release/torch-managed-python-acceptance.py --self-test + - name: Test native Torch wheel filtering + run: cargo test --locked --manifest-path rust/Cargo.toml -p pumas-app-manager torch_alternatives + - name: Test native managed Python candidate selection + run: cargo test --locked --manifest-path rust/Cargo.toml -p pumas-app-manager version_manager::managed_python::tests + - name: Test native Torch preview provider paths + if: runner.os == 'Linux' + run: cargo test --locked --manifest-path rust/Cargo.toml -p pumas-app-manager version_manager::torch_preview::tests + - name: Test native Torch preview Python fallback selection + if: runner.os == 'Windows' || runner.os == 'macOS' + shell: pwsh + run: | + $testName = 'auto_python_fallback_requires_a_definite_unsupported_attempt' + $testList = @(cargo test --locked --manifest-path rust/Cargo.toml -p pumas-app-manager $testName -- --list) + if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } + if (@($testList | Where-Object { $_ -match '::auto_python_fallback_requires_a_definite_unsupported_attempt: test$' }).Count -eq 0) { + throw "No tests matched $testName" + } + cargo test --locked --manifest-path rust/Cargo.toml -p pumas-app-manager $testName + if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } + - name: Test Windows Torch activation fixture + if: runner.os == 'Windows' + run: cargo test --locked --manifest-path rust/Cargo.toml -p pumas-app-manager restart_falls_back_from_invalid_active_torch_to_verified_default + - name: Test Windows locked-stage cleanup ownership + if: runner.os == 'Windows' + run: cargo test --locked --manifest-path rust/Cargo.toml -p pumas-app-manager locked_stage_stays_owned + - name: Test native managed Python paths + run: cargo test --locked --manifest-path rust/Cargo.toml -p pumas-library test_venv_python_path + - name: Test Unix managed process-group ownership + if: runner.os != 'Windows' + run: cargo test --locked --manifest-path rust/Cargo.toml -p pumas-library platform::managed_child + - name: Test Windows managed Job ownership + if: runner.os == 'Windows' + run: cargo test --locked --manifest-path rust/Cargo.toml -p pumas-library platform::managed_child + + torch-native-e2e: + name: Torch native RPC E2E (${{ matrix.os }}) + needs: lint-workflows + if: github.event_name == 'workflow_dispatch' || (github.ref_type == 'tag' && startsWith(github.ref_name, 'v')) + strategy: + fail-fast: false + matrix: + os: [ubuntu-24.04, windows-2025, macos-15] + runs-on: ${{ matrix.os }} + timeout-minutes: 120 + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + - name: Install repository Rust toolchain + run: rustup toolchain install --no-self-update + - uses: Swatinem/rust-cache@v2 + with: + workspaces: rust -> target + key: torch-native-e2e-${{ runner.os }} + - uses: actions/setup-python@v6 + with: + python-version: '3.14' + - name: Build native RPC for Torch acceptance + run: cargo build --locked --manifest-path rust/Cargo.toml -p pumas-rpc + - name: Accept v2.14 CPU/Core via native RPC (${{ runner.os }}) + run: python scripts/release/torch-managed-python-acceptance.py rust/target/debug --evidence-dir torch-native-evidence + - name: Upload native Torch acceptance evidence + if: always() + uses: actions/upload-artifact@v7.0.1 + with: + name: torch-native-${{ runner.os }} + path: torch-native-evidence/ + if-no-files-found: ignore build-rust: name: Rust release (${{ matrix.os }}) @@ -188,7 +275,7 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-24.04, macos-14] + os: [ubuntu-24.04, macos-15] runs-on: ${{ matrix.os }} timeout-minutes: 120 steps: @@ -228,7 +315,7 @@ jobs: include: - os: ubuntu-24.04 platform: linux - - os: macos-14 + - os: macos-15 platform: mac runs-on: ${{ matrix.os }} timeout-minutes: 30 @@ -294,7 +381,7 @@ jobs: platform: linux headless: headless-linux check: linux-no-inference - - os: macos-14 + - os: macos-15 platform: mac headless: headless-macos check: mac-no-inference diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 01abe07d6..86dcf5b44 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -18,10 +18,10 @@ repos: rev: v4.5.0 hooks: - id: trailing-whitespace - # Preserve verbatim upstream legal texts and their recorded hashes. - exclude: ^(scripts/release/licenses/|docs/release-attribution/) + # Preserve verbatim upstream legal texts and hash-pinned archive evidence. + exclude: ^(scripts/release/licenses/|docs/release-attribution/|docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/.*/managed-python-licenses/full-archive/) - id: end-of-file-fixer - exclude: ^(scripts/release/licenses/|docs/release-attribution/) + exclude: ^(scripts/release/licenses/|docs/release-attribution/|docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/.*/managed-python-licenses/full-archive/) - id: check-yaml - id: check-merge-conflict - id: check-json diff --git a/docs/plans/current-standards-remediation-2026-09-03/issues.md b/docs/plans/current-standards-remediation-2026-09-03/issues.md index a1a7d4631..b4ff07428 100644 --- a/docs/plans/current-standards-remediation-2026-09-03/issues.md +++ b/docs/plans/current-standards-remediation-2026-09-03/issues.md @@ -34,7 +34,7 @@ acceptance. Current program-level coordination findings follow. | `PRG-I14` | High | Rust M2F's producer-owned `ConversionProgressOutcome` preserves the core contract's camelCase inner fields, while the handwritten frontend `api-conversion.ts` claims snake_case progress fields. | Cross-process contract drift; does not invalidate the closed Rust producer slice but blocks PRG-A2 consumer acceptance. | Preserve Rust as semantic owner. Platform M1 must generate/decode its exact shape after zero-Legacy, and frontend M4 must delete/migrate the handwritten mismatch rather than making another local schema copy. | Malformed/mismatched conversion payload corpus fails explicitly through the generated Electron/preload Adapter and renderer consumer tests. | | `PRG-I15` | High | Rust M2H review found the core interrupted-download scan mapped a `spawn_blocking` join failure to an empty list, while an intentionally disabled or failed-to-initialize HF client mapped status/mutation/list calls to not-found, false-without-reason, or successful empty data. | Producer truth and lifecycle composition; invalidated the affected M2H closed-outcome claim and would have made platform M1 generate unavailable/failure states as valid missing/empty results. | Resolved: the canonical core/public/desktop seams return disabled HF as `Err`, preserve task-join failure, and keep legitimate missing/false/empty results distinct. The transitional UniFFI caller only projects `Result` pending its accepted removal; no manifest/shared expansion occurred. | Passed: direct disabled-HF and deterministic join-failure tests, real desktop valid-missing/empty cases, real local-IPC method rejection, full core/RPC/adapter suites, default/no-default Clippy/check, format, and diff checks. This seam remains valid, but PRG-I19 separately reopens the recovery mutation commands, so aggregate M2H/count acceptance is suspended. | | `PRG-I16` | Medium | The post-M3 full frontend suite initially passed 470/471: unchanged `ModelMetadataModal.test.tsx` still queried deleted accessible backdrop label `Close metadata modal` and emitted `act` warnings from unawaited initial loads. | Focused evidence reconciliation; frontend owns the stale caller test, and the failure blocked M3-S3b/full-tranche acceptance without invalidating accepted ModalDialog behavior. | Resolved test-only: the caller awaits initial metadata, drives the aria-hidden backdrop's actual `mousedown` Interface, and sends Escape to `document`; no product source or obsolete accessible backdrop was restored. | Passed: focused modal/Popover tests, full lint/types/builds, and the expanded full frontend suite at 109 files/473 tests without the prior warnings. | -| `PRG-I17` | High | Platform M3 found that the reachable GUI-managed Torch path installed upstream source while its launcher expected Pumas `serve.py`; the manifest also advertised Python 3.10 despite the repository pinning 3.12.3. The embedded sidecar, upstream wheel resolver, and managed runtime path have since been implemented and exercised through RPC, including real 2.10 CUDA/Tuldok inference. | Cross-plan deployment authority; Torch runtime installation/process ownership stays in `pumas-app-manager`, sidecar execution stays in `torch-server`, and desktop/API projection consumes the RPC contract. | **Resolved within the repository-owner-authorized scope:** discover stable upstream `vMAJOR.MINOR.PATCH` tags independently of Pumas qualification, subject to a 20-page / 120-second complete-listing budget that fails without partial success. Offer CPU/CUDA/ROCm binary-wheel installation only when the full official hash-locked dependencies resolve for Linux x86_64 and an installed CPython 3.10–3.13. Do not provision Python, compile Torch from source, or claim XPU/other operating systems. Keep install, selection, default, start, and stop explicit. | Passed U1–U4: live discovery returned 63 stable tags; dynamic `v2.9.0+cpu` / CPython 3.12 preview resolved 25 hashed wheels, installed, passed identity/core probe, was selected, passed managed sidecar health/protocol 3, and stopped by owned generation. Cancellation/state-preservation and typed-preview rejection tests passed; the composed desktop projection test passed. See the [accepted plan](../torch-upstream-version-management/plan.md), [current runtime inventory](../torch-diffusion-serving/reports/upstream-version-manager-progress.md), and [retained acceptance summary and artifact manifest](../torch-upstream-version-management/reports/v2.9.0-cpu-rpc-acceptance.json). This is runtime-manager acceptance via RPC plus composed desktop controls, not a real interactive desktop run or an all-release image claim. The actual Tuldok image result remains the exact Torch 2.10 / CUDA 13.0 / Python 3.12 / FLUX.2 tuple. | +| `PRG-I17` | High | Platform M3 found that the reachable GUI-managed Torch path installed upstream source while its launcher expected Pumas `serve.py`; the manifest also advertised Python 3.10 despite the repository pinning 3.12.3. The embedded sidecar, upstream wheel resolver, and managed runtime path have since been implemented and exercised through RPC, including real 2.10 CUDA/Tuldok inference. | Cross-plan deployment authority; Torch runtime installation/process ownership stays in `pumas-app-manager`, sidecar execution stays in `torch-server`, and desktop/API projection consumes the RPC contract. | **Resolved for the accepted Linux runtime-management path:** discover stable upstream `vMAJOR.MINOR.PATCH` tags independently of Pumas qualification under a 20-page / 120-second complete-listing budget; resolve exact official CPU/CUDA/ROCm wheels and complete hash-locked dependencies against Pumas-managed stable CPython 3.10+ candidates, choosing the newest full resolution. Do not compile Torch from source or claim XPU. Windows x64 and macOS arm64 paths are implemented, with native acceptance still pending. Keep install, selection, default, start, and stop explicit. | Passed U1–U4 on Linux: discovery returned 63 stable tags; dynamic `v2.9.0+cpu` / CPython 3.12 preview resolved 25 hashed wheels, installed, passed identity/core probe, was selected, passed managed sidecar health/protocol 3, and stopped by owned generation. The v2.14.0 CPU/Core tuple then resolved 25 artifacts on managed CPython 3.14.7, installed and passed identity/CPU and sidecar dependency probes, was selected, and passed managed sidecar startup, health/protocol 3, and generation-owned stop. Its CUDA 13.2/Core preview resolved 44 artifacts but was not installed; CUDA/device and v2.14 image generation remain unverified. U6 discovers release-specific official wheels, filters GPU channels against detected display devices, and recommends only when scan and driver checks support it. Cancellation/state-preservation and typed-preview rejection tests passed; the composed desktop projection test passed. See the [accepted plan](../torch-upstream-version-management/plan.md), [current runtime inventory](../torch-diffusion-serving/reports/upstream-version-manager-progress.md), [v2.9.0 evidence](../torch-upstream-version-management/reports/v2.9.0-cpu-rpc-acceptance.json), and [v2.14.0 evidence](../torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-acceptance/acceptance.json). This is runtime-manager acceptance via RPC plus composed desktop controls, not a real interactive desktop run or an all-release image claim. The actual Tuldok image result remains the exact Torch 2.10 / CUDA 13.0 / Python 3.12 / FLUX.2 tuple. | | `PRG-I18` | High | Rust M2I review found four corrected producer counterexample families, then downstream consumer review found a fifth: a complete Q5 row still carried subordinate selected-Q4 recovery identity, and the current renderer prioritizes that identity when matching activity, falsely attaching Q4 state to the ready Q5 row. The earlier families were whole-catalog rejection of valid mixed state, bidirectional hierarchy dirtiness, host-dependent recovery grammar, and bounded run-ID collision. | Rust core/RPC catalog contract and program sequence; the consumer contradiction reopens M2I and blocks its count increase, M2J, RUST-A2, platform M1 generation, and frontend M4 consumption even though the corrected hierarchy/list/grammar/bounds subclaims remain valid. | Active corrective gate: `Complete` cannot carry subordinate recovery identity; only a truly partial row may expose a recovery action. Preserve authoritative ready classification without a renderer-unneeded mixed state, and keep the earlier corrected producer evidence as partial subclaims. | Cross-owner Q5-complete/Q4-part projection must serialize complete with no recovery identity, then the actual renderer matching/row-state corpus must keep Q5 ready and must not attach Q4 activity. Re-run both feature modes and independent review before M2I counts advance or M2J starts. | | `PRG-I19` | Critical | The original M2H recovery request accepted caller-owned repository/path authority. Corrected Slice A closes the durable publication/store prerequisite, and fourth-freeze Slice B now closes the deep task/blocking owner after three rejected boundaries exposed reservation, drain, projection, cancellation, callback, and filesystem-custody defects. C1 and C2 are internally verified, and C3's narrow ordinary admission/resume/restore checkpoint passed review and targeted evidence. The interrupted-response/fresh-owner-reopen path is verified; full C3 is active after PRG-I24's migration scope approval; hard process-crash recovery, stable runtime queue identity, comprehensive owned restore, stalled pause, relocation, and guard-free effects remain incomplete. Builder callback wrappers still spawn the real importer mutation and return before lifecycle observation; C4 owns that repair. Live desktop consumers still send the removed ambient shape. | Rust M2H mutation/filesystem/lifecycle authority plus the M2I/frontend handoff. The unresolved ordinary lifecycle can publish false active state, strand Pausing, signal or call user code under a guard, surrender shared marker/part authority while a state remains resumable, lose FIFO/crash truth, let importer metadata mutate after cancel/release, or regain ambient/path-string authority. M2I recovery/count acceptance stays reopened and M2J, RUST-A2, downstream generation/consumption, and incompatible standalone producer integration remain blocked. | The aggregate boundary remains decomposed into five serialized slices. Slices A/B and C1/C2 are internally accepted; C3 has only its narrow admission checkpoint verified. The focused Rust plan owns current evidence and remaining integration limits. Slice C uses the focused Rust plan's exact source write set, including its bounded shared finalization seam. It makes admission durably ordered before public success/effects; derives destination identity and effects from one held configured root plus validated relative target; exclusively persists ordinary, queue, and Pending/Verified quarantine truth with independent sticky provenance; retains Paused/recoverable Error or Pending authority; releases only verified published terminal state by exact generation with panic rescue; binds pause/resume/relocation to the owner; linearizes guard-free snapshots; owns the actual Aux/Completion importer futures under destination custody; and keeps public synchronous callbacks notification-only. No new public constructor/wire outcome is admitted. Preserve all A/B publication, custody, cleanup, failure-provenance, and projection guarantees. One active Pumas runtime per root remains the task-admission precondition. General client Drop remains M4/RUST-A6; public core/UniFFI ambient routes are transitional only. | Slice A passed both reviews after 18 atomic and 22 store tests per mode. Slice B passed both reviews and root reproduction at exact fourth-freeze hashes with lifecycle 18/18 and download 85/85 per mode, both Clippy modes, format/diff, and current plan gates. Slice C requires deterministic durable-admission/FIFO crash restore and malformed-v3 graph validation, quarantine begin/verify/remove ambiguity, alias/missing/replacement identity, atomic-marker ambiguity, production importer mutation/cancel/successor ordering, exact/partial/auxiliary/recovery-domain contention, pause/final-cleanup winners, dormant resume/cancel/relocation, terminal panic rescue, and reentrant guard/signal oracles; all A/B regressions and focused dual-mode gates must pass before its exact-hash freeze and reviews. Slices D/E then prove domain and closed/full claims. Coherent verified incremental commits follow the root commit decision; compatible reachable contracts are required, and full C3/consumer/release acceptance remains open. | | `PRG-I20` | High | Cross-owner review of the frozen Electron launcher-root recovery producer found that every resolved authority projected to generic `ready`, so a valid environment/argument authority incorrectly enabled a persisted selection that the same explicit authority would outrank on restart. The native chooser also had no single attempt owner: dialog rejection was not projected through the closed result, concurrent invocations could race, and attempts remained available after `restarting`, `replacement-visibility-unknown`, or `published-durability-unavailable`. | Platform M2 startup/selection lifecycle and the serialized frontend recovery handoff. The producer could not define an honest user decision or integrate with its renderer consumer while selection policy and attempt ownership were ambiguous. | Resolved at the corrected producer source boundary: path-free ready state carries `select-library|correct-launch-input`; only supersedable authority offers the chooser. One main-process handler owns dialog, validation, persistence, and synchronous relaunch request; concurrent callers share its Promise; unchanged outcomes explicitly retry; ambiguous, published, and restarting outcomes lock/replay; dialog and relaunch rejection have closed typed outcomes. | Passed locally: 18 focused recovery/preload checks, full Electron build and seven test files, lint, TypeScript validation, plan structure, and diff checks. Program independently reran the full Electron tests/lint/validation. These lifecycle subclaims remain valid, but PRG-I21 separately reopens the uncommitted producer/consumer tranche because the compiled sandboxed preload cannot load its decoder module. | diff --git a/docs/plans/torch-cross-platform-runtime-management/execution-ledger.md b/docs/plans/torch-cross-platform-runtime-management/execution-ledger.md new file mode 100644 index 000000000..34a486412 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/execution-ledger.md @@ -0,0 +1,567 @@ +# Execution Ledger: Cross-Platform Torch Runtime Management + +## 2026-09-26 — Current-source native Torch acceptance + +- Manual workflow + [36229508586](https://github.com/MrScripty/Pumas-Library/actions/runs/36229508586) + passed on runtime commit `21041697`: workflow/release contracts, + frontend/desktop contracts, headless checks, Rust quality, and all three + native Torch QA and RPC E2E jobs. +- Linux x86_64, Windows x86_64 MSVC, and macOS arm64 each provisioned + Pumas-managed CPython 3.14.7 with pinned uv 0.12.18; discovered and installed + v2.14.0 CPU/Core using 25 hashed official artifacts; persisted the interpreter + across a second backend; returned 14 from a fresh CPU tensor operation; passed + the resolver probe and protocol 3 sidecar trial/stop; shut down gracefully; + and reported safe cleanup. +- Full native evidence is retained in the per-target + `v2.14.0-*-current-source-cpu-rpc-restart-acceptance/` report directories, + including acceptance, runtime, wheel/dependency resolution, probe, and backend + session records. This verifies the current metadata-lock follow-up. +- PR head `57e5fb7f` adds the acceptance documentation and evidence after the + runtime-source commit. Electron UI-driven install, packaged Windows/macOS + install, provider cancellation/tamper/retry, CUDA/MPS, and v2.14.0 Tuldok + generation remain unverified. + +## 2026-09-26 — Torch install through the packaged Linux backend + +- Built the current branch's Linux AppImage/deb with the latest generated + CPython notice inventory and updated Electron RPC bridge. The exact resources + were checked in both installers, and each bundled backend passed `/health`. +- Ran `torch-managed-python-acceptance.py` against the packaged RPC backend + with its inherited `PATH` cleared. The acceptance fetched the upstream + `v2.14.0` release, selected the CPU profile, provisioned managed CPython + 3.14.7 through uv 0.12.18, and installed 25 SHA-256-verified wheel/dependency + artifacts. A CPU tensor operation returned 14 after a fresh backend restart; + the retained resolver probe, protocol 3 trial/stop, graceful shutdown, and + disposable-root cleanup all passed. +- The exact result is retained in + `reports/v2.14.0-linux-packaged-cpu-acceptance/acceptance.json`. The backend + SHA-256 is + `1b42b6cbedc0bf842990a895cf759537f60ba1564e054a8c8b5f7f022e4a2114`. + AppImage SHA-256 is + `1398ef0a9da1c0aab90681d3c91674ef88c6229a84984047938e7bd6eb350acd`; deb + SHA-256 is + `468b6f7c2af00ff8785f80e5486cd5133979e875dd351b4b9f5284ddfd195043`. +- This verifies the packaged Linux RPC backend, not Electron UI-driven + installation. Packaged Windows/macOS installation, CUDA/MPS, and v2.14.0 + Tuldok generation remain unverified; the local artifacts do not update the + public toolbar-linked release. + +## 2026-09-26 — Attribution repair and current Linux package candidate + +- Generated CPython full-archive notice supersets for Linux x86_64 GNU, + Windows x86_64 MSVC, and macOS arm64. The 0.7.0 inventory contains 371 + package entries, 78 hashed inputs, and all 57 captured CPython legal texts; + Windows CRLF bytes are preserved. +- Generation and packaging checks now bind the Rust uv version and each + `NativeTarget::pin()` enum arm to its target triple and SHA-256. They also + require the reviewed PBS release, selected/full archive URL, filename and + flavor to match `PYTHON.json`, and require each legal text exactly once. + Missing or malformed full-archive digests fail closed. Tests cover a + rehashed swapped uv pin and missing, uppercase, short, and non-hex archive + hashes. The Electron Builder hook is also tested with its context argument. +- Attribution checker and all release-script tests pass; Ruff passes. The + focused Electron packaging-hook and RPC allowlist tests pass. +- Built current-branch Linux v0.7.0 AppImage and deb locally with the updated + notices and bridge. Artifact checks, extracted resource hashes, and packaged + backend `/health` smoke pass. AppImage SHA-256 is + `1398ef0a9da1c0aab90681d3c91674ef88c6229a84984047938e7bd6eb350acd`; deb + SHA-256 is + `468b6f7c2af00ff8785f80e5486cd5133979e875dd351b4b9f5284ddfd195043`. +- This does not verify packaged Torch installation or v2.14.0 Tuldok image + generation. The public toolbar-linked v0.7.0 assets remain unchanged; these + files are local candidates only. + +## 2026-09-25 — Exact-wheel and native preflight follow-up + +- At `032045ad`, the manual native RPC run + [36222136437](https://github.com/MrScripty/Pumas-Library/actions/runs/36222136437) + passed the Linux v2.14.0 CPU/Core install and second-session restart with + managed CPython 3.14.7. The resolver used the discovered official Torch wheel + identity and completed the CPU operation, retained probe, sidecar trial/stop, + and graceful shutdown. +- Windows and macOS E2E stopped at version preflight before release discovery. + Their backend logs show GitHub 403 rate limits with `Retry-After` values of + 1411 seconds (Windows) and 1448 seconds (macOS); the acceptance harness + rejected both under its separate 900-second cap. These results do not test + Windows/macOS wheel resolution or installation. This Linux pass supersedes + the earlier incomplete Linux release-options scan. +- Removed the separate retry-delay cap. The harness accepts only exact + nonnegative integer delays that fit the 1800-second total budget, keeps the + three-attempt bound, and fails before sleeping if the delay would consume the + budget. The 1411-second sleep/success case, malformed values, over-budget + values, and final-attempt budget classification are covered. +- All 53 acceptance-script fixtures, Ruff lint/format, and `git diff --check` + pass locally. Astra high reviewed the budget semantics; Sol xhigh independently + reviewed retry edge cases and verified no sleep occurs for over-budget values. +- PR run + [36222118583](https://github.com/MrScripty/Pumas-Library/actions/runs/36222118583) + passed workflow/release, frontend/desktop, Linux/Windows/macOS native QA, Rust + quality, and headless checks. Native RPC E2E is skipped on pull requests, so + that run is not platform install evidence. +- Commit `07f7e9f6` was pushed to the existing PR branch. The updated PR run + [36223095054](https://github.com/MrScripty/Pumas-Library/actions/runs/36223095054) + passed all required checks. Manual native run + [36223106097](https://github.com/MrScripty/Pumas-Library/actions/runs/36223106097) + passed v2.14.0 CPU/Core RPC install and restart on Linux x86_64, Windows x64, + and macOS arm64, with CPython 3.14.7 provisioned on each target. Each run + retained 25 hashed profile artifacts, passed a fresh CPU tensor operation + (`14`), revalidated probes, passed protocol 3 sidecar trial/stop, and shut + down gracefully. Linux and Windows release preflight passed on the first + attempt. macOS honored a 913-second `Retry-After`, then found the release on + attempt two in 916.889 seconds total. +- The retained platform-specific acceptance results, runtime manifests, + resolver reports, wheel/dependency hashes, and backend logs are linked from + the plan's [Linux](reports/v2.14.0-linux-cpu-rpc-restart-acceptance/README.md), + [Windows](reports/v2.14.0-windows-cpu-rpc-restart-acceptance/README.md), and + [macOS](reports/v2.14.0-macos-cpu-rpc-restart-acceptance/README.md) reports. +- This closes the current-revision CPU/Core RPC install/restart gate on the + three shipped targets. Provider notice integration, packaged desktop install, + broader cancellation/tamper cases, CUDA/MPS execution, and v2.14.0 + image/Tuldok generation remain open. + +## 2026-09-24 — Support contract and design + +- Rechecked branch `work/torch-version-management` at `9fb367b2`; preserved the + pre-existing untracked `docs/breif/future.md`. +- Read the latest runtime inventory and existing release-management plan before + targeted source inspection. Current implementation and accepted install/ + lifecycle evidence are Linux x86_64 only; installed CPython 3.10–3.13 is the + existing managed interpreter contract. +- Confirmed current desktop release targets from + `scripts/release/artifact-plan.json`: Linux x86_64, Windows x86_64 MSVC, and + macOS arm64. No Windows ARM or Intel Mac artifact is shipped. +- Read the Coding Standards MCP policies for core, architecture, + cross-platform support, Rust cross-platform behavior, security filesystem + containment, contracts, dependencies, planning, and platform verification. + Standards snapshot: `snapshot:v1:305ccfba-eed5-46b7-bfa2-02868fe804b3` + (schema v5). Applied native-target evidence, exact artifact identity, native + path APIs, lifecycle ownership, typed failures, and no guessed compatibility + defaults. +- Official PyTorch indexes show Torch 2.14.0 CPU wheels for Windows x64 under + `+cpu`, while macOS arm64 uses the plain distribution version and + `macosx_14_0_arm64`; the mac wheel tags themselves declare the OS floor for + that release. The CUDA 13.2 index contains Windows x64 wheels for CPython + 3.10–3.15. No Windows CUDA runtime recommendation is accepted until a + Windows driver rule is proven. +- The Astra read-only planning review recommended the three shipped target + triples, native-only interpreter architecture, macOS MPS as a runtime + capability, exact distribution-version retention, and an owned cross-platform + process lifecycle. See [target research](reports/target-wheel-research.md). +- The Astra high plan review and independent Sol xhigh plan review passed after + narrowing the UI preset contract, requiring Windows Job admission before + child code can run, and specifying observable quarantine/retry ownership for + locked files. +- Root began M1 after writing the support contract. + +## 2026-09-24 — M1 implementation and repair + +- Implemented target-aware official wheel filtering for Linux x86_64, Windows + x64, and macOS arm64, including native CPython discovery, host wheel tags, + distribution-version/build identity, Windows CUDA as an explicit choice, and + macOS MPS as a post-install runtime capability. +- Added manager-owned bundled-preset/default-adapter capabilities and updated + desktop projection to consume them. The v2.9.1 Linux preset is not offered on + Windows/macOS, and those targets default to core Torch (`none`) rather than + claiming an image adapter. +- Added native path handling and managed child custody. Windows starts suspended, + assigns the child to its retained kill-on-close Job before resume, and parks a + failed-resume child in registered custody. Unix process-group ownership + remains generation-scoped. Legacy detached Torch launch/stop remains rejected + on Windows/macOS. +- Made installer/resolver child cleanup per-operation during normal work and + global only at shutdown. Interrupted publication records durable native + directory identity so cleanup can retry a partially removed owned directory + without deleting an unrelated replacement. +- Added Windows/Linux/macOS Torch QA jobs. Cross-target test compilation is an + early check only; the matrix does not substitute for native end-to-end + acceptance. +- The Astra high final architecture review reported no findings. The Sol xhigh + independent review reported no remaining high/medium lifecycle or security + findings after the target-specific test fixes below. It confirmed that native + install, sidecar, RPC, and packaged desktop evidence remains unverified. +- The independent review found three target-test assumptions, all repaired: + an assertion relying on the host being Linux is now explicitly target-patched; + a Linux PCI sysfs fixture is Linux-gated; and Windows symlink permission error + 1314 no longer prevents unrelated runtime hash assertions. +- Verification on this Linux x86_64 host: + - `cargo test --manifest-path rust/Cargo.toml -p pumas-app-manager --offline` + passed (164 tests). + - `cargo test --manifest-path rust/Cargo.toml -p pumas-library --offline` + passed (library, integration, and doc tests; 6 ignored). + - `python3 -m unittest discover -s torch-server/tests` passed (89 tests). + - Ruff check/format, Cargo fmt, `git diff --check`, and the release-gating + Node test passed. + - Windows GNU app-manager test-target compilation and Windows GNU + `pumas-library --no-default-features --tests` checking passed. These are + cross-target compile checks; Windows tests were not executed. No macOS + target compiler or runner was available. +- M1 implementation is complete in the candidate branch. M2 acceptance remains + pending: the native QA matrix has not run, and exact CPU-wheel install/identity, + RPC health/generation-owned stop, and packaged desktop smoke have not been + exercised on Windows x64 or macOS arm64. + +## 2026-09-25 — Managed CPython and install-preview repair + +- Implemented the authorized Pumas-managed CPython provider for Linux x86_64, + Windows x86_64 MSVC, and macOS arm64. It bootstraps pinned uv without host + Python, provisions a private stable CPython 3.10+ runtime, and tries the + newest candidates first when an exact official Torch wheel and the complete + selected dependency profile are available. It has no user Python selector or + upper minor allowlist. Clean-host download, license, and native-platform + acceptance remain pending. +- Traced the desktop error `Unknown API method: get_torch_release_options` to + Electron's method allowlist, which rejects the request before Rust dispatch. + Commit `6a726eac` registers the method and adds the payload regression test. + The toolbar-linked package still needs a published update; this work creates + a local candidate only. +- Core Torch (`none`) is now the default on all targets. On Linux, FLUX.2 and + the qualified v2.9.1 bundled recipe require explicit user selection. The + preview explains that Pumas provisions its own Python runtime. +- Linux verification: app-manager tests (178), app-manager Clippy, Electron + tests (12 files), Torch preview tests (14), frontend typecheck/lint, full + Python suite (98), Ruff, Rust formatting, and `git diff --check` pass. The exact + v2.14.0 remote artifact scan/install could not run because artifact hosts are + unreachable in this session; Windows/macOS native acceptance remains open. +- Built local `v0.7.0` release artifacts: + `electron/release/Pumas.Library-0.7.0.AppImage` and + `electron/release/pumas-library-electron_0.7.0_amd64.deb`. The release builder + completed without publishing. The artifact checker verified both; the + headless release smoke and package smoke each reported RPC health passed for + the standalone backend, AppImage, and deb. Inspection confirmed the packaged + Electron bundle contains `get_torch_release_options` and the managed-Python + UI copy. +- Next: use the candidate on a host with PyTorch/uv artifact access to run exact + v2.14.0 preview/install and sidecar lifecycle acceptance. Complete clean-host + provider/download/license and native Windows/macOS package acceptance before + claiming those platforms are supported. + +## 2026-09-25 — Live Torch 2.14 provider and index repair + +- Corrected the uv pin to published `0.12.18` after confirming `0.12.19` was + not an official release. The Linux archive matched its official SHA-256, and + bootstrap/cache paths now include the exact provider version and hash so an + old binary cannot silently satisfy a new pin. +- Corrected the provider source allowlist for uv's actual + `releases.astral.sh/github/python-build-standalone/...` URLs and corrected + exact-wheel validation to accept current official PyTorch direct-file URLs at + `/whl/{channel}/{filename}` while retaining strict host/channel/tag/path + validation. Added provider and official CPU/CUDA URL regression fixtures. +- Live Pumas RPC acceptance in an isolated Linux launcher root passed the + Torch 2.14.0 release scan and full Core preview. Pinned uv provisioned + CPython 3.14.7; the manager recommended `cu132`, and the retained resolver + result contained 44 artifacts for `cu132` / `python3.14` / adapter `none`. + No Torch wheels were installed; installed identity and sidecar lifecycle + remain unverified for v2.14.0. +- Rebuilt the local AppImage and deb from commit `ce9170d4`. Both pass the + artifact checker and bundled RPC health smoke; the standalone release startup + smoke also passes. Inspection confirms the packed Electron bundle includes + `get_torch_release_options` and the bundled backend includes uv `0.12.18`. + These are local artifacts only; Windows/macOS native provider and runtime + acceptance, provider license inventory, and toolbar-linked package + publication remain outstanding. + +## 2026-09-25 — Managed-Python Torch 2.14.0 install acceptance + +- In a disposable Linux x86_64 launcher root, `preview_torch_runtime` resolved + the CPU/Core `v2.14.0` tuple as `python3.14` with 25 exact artifacts. +- `install_version` consumed that retained preview, installed the official + Torch wheel and dependencies, checked the installed identity and CPU + operation, and completed successfully. `get_installed_versions` returned + `v2.14.0`, and `switch_version` explicitly selected it. +- The same preview/install/identity/selection flow passed with Python, pip, and + PyPy absent from the backend's child `PATH`; ordinary OS tools remained + available. The temporary launcher root was deleted after the RPC process + stopped. +- This validates the Linux CPU/Core install path without a host Python. It does + not establish CUDA/device execution, Torch sidecar startup/health/owned stop, + image-adapter or Tuldok behavior, or Windows/macOS acceptance. + +## 2026-09-25 — Torch 2.14.0 managed CPU/Core RPC lifecycle + +- Repeated the native Linux x86_64 run through an isolated `pumas-rpc` process + and disposable launcher root. `get_torch_release_options` found the release; + the retained CPU/Core preview resolved 25 exact artifacts for managed + CPython 3.14.7. Pinned uv 0.12.18 was verified against its published Linux + archive SHA-256 (`89eadd7c76fc063887959510d5ba0ab1264dfd5f1143b925ddb73021a40acf16`). +- The backend child had an empty `PATH` and no host Python, pip, uv, venv, or + conda selectors. The acceptance verified runtime.json provenance, the private + managed-Python depot, executable SHA-256, and the installed venv's direct + `sys._base_executable` and CPython version before accepting installation. +- Installation passed exact Torch 2.14.0 identity, CPU tensor, and sidecar + dependency probes. The runtime was explicitly selected; a managed CPU + TorchServe profile passed startup, health, and protocol 3; generation `1` was + stopped by its owned generation; and RPC shutdown and process exit succeeded. +- Retained `runtime.json`, exact `resolution.json`, `pip-resolution.json`, + `probe-results.json`, `acceptance.json`, and `rpc.log` in + [the v2.14.0 evidence directory](reports/v2.14.0-linux-cpu-rpc-acceptance/). + The temporary runtime root was deleted after those files were collected. +- Added an opt-in `torch-native-e2e` CI matrix for Ubuntu 24.04, Windows 2025, + and macOS 15, gated to manual dispatch or version-tag builds. It builds native + RPC, runs the complete install/lifecycle acceptance, and uploads per-platform + reports even on failure. The always-on Torch QA job runs the script fixtures. + This Linux run does not substitute for the pending Windows/macOS executions. +- The Sol xhigh read-only repair review found no remaining material findings in + Windows canonical containment, venv provenance, shutdown, evidence collection, + or native command paths. CUDA/device, provider licensing, packaged desktop, + and v2.14.0 Tuldok/image acceptance remain open. + +## 2026-09-25 — Local Linux desktop release build + +- Built the frontend, optimized `pumas-rpc`, and local Electron v0.7.0 Linux + packages from commit `2af87420`. Outputs are + `electron/release/Pumas.Library-0.7.0.AppImage` (SHA-256 + `e68be181a1d0ce5be44c3b44163300155614195040d777ef920d1a19bff1c2a4`) and + `electron/release/pumas-library-electron_0.7.0_amd64.deb` (SHA-256 + `2b991659431a2da599328449cb8ca608fde379350a815257110eca61404140c2`). +- The artifact checker accepted both installers. The package smoke extracted + each one, verified its RPC/frontend resources against the build inputs, and + passed bundled RPC `/health` startup for both AppImage and deb. +- This is a local candidate only. The package smoke does not install Torch + through the packaged UI; Windows/macOS builds and native runs, toolbar-link + publication, and Torch device/image generation acceptance remain pending. + +## 2026-09-25 — Automatic Python fallback and native provider test coverage + +- Extracted automatic Python candidate-attempt state into a small helper used + by the production preview path. A platform-neutral regression test verifies + newest-first selection, success on the newest compatible candidate, fallback + only after a definite `Unsupported` result, stop-on-inconclusive/provisioning + failure, explicit-version behavior, and the exhausted-candidate result. +- Added Windows and macOS native managed-provider tests for cancellation, + timeout, descendant cleanup, and closed admission. The native `torch-quality` + matrix runs the managed-provider tests on each OS. Windows/macOS also verify + the fallback test exists in Cargo's test list before running it; this guards + against a test filter silently matching zero tests. +- Linux verification after these changes: all 180 + `pumas-app-manager` library tests passed; Rust formatting and + `git diff --check` passed. Windows GNU app-manager test-target checking passed + as a cross-target compile check only. The Sol xhigh review found no material + lifecycle, path, or CI-filter issue after replacing a Unix-only absolute-path + fixture with a native temporary path. +- These tests increase native CI coverage but do not count as native Windows + MSVC or macOS execution. Native Windows/macOS install and lifecycle + acceptance, provider license materials, packaged desktop Torch installation, + and the toolbar-linked release update remain open; X1–X7 therefore remain + pending. + +## 2026-09-25 — Managed Python license collection and archive bound repair + +- Added pinned uv 0.12.18 MIT and Apache-2.0 texts to the generated 0.7.0 + release-attribution inventory. The notice identifies uv as a runtime + executable downloaded by Pumas, not a bundled application dependency. +- Added the archive-license acceptance collector for the full Python Build + Standalone asset corresponding to the selected install-only CPython record. + It verifies the official release asset identity, digest, and size before + reading `PYTHON.json`; it retains the metadata and all licenses in the + archive license directory plus declared file references with hashes. +- The retained Linux x86_64 CPython 3.14.7 full archive verified at 126,709,151 + bytes and SHA-256 + `46a9e98d2c7fd2c5b9ca67510b5a0699f5ccad5fb750957961c22c52e07b6cb0`. + Collection retained 19 license texts and `PYTHON.json` under + `reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/`. + This evidence is not yet merged into release attribution: selected Windows + and macOS archives remain uncollected. +- Rebuilt the retained manifest from the captured official release API record + rather than synthesizing its asset URL, preserving the upstream `%2B` path + encoding exactly. Added a fixture requiring percent-encoded build separators + to survive asset selection and appear unchanged in the manifest. +- Astra high reproduced the PAX gap in the previous cap: `tarfile` consumes + PAX bytes without exposing them as ordinary member payloads. Added a reader + that bounds bytes delivered from the decompressed tar stream, including + headers and PAX metadata. The PAX fixture failed before the repair and now + passes by rejecting at a 12,000-byte limit while the plain fixture remains + accepted. The CPython 3.14 zstd fixture exercises the production decompressor. + Acceptance fixtures pass on Python 3.12 and 3.14; Ruff check/format pass. +- Updated the QA workflow's acceptance-tool runtime to CPython 3.14 because + `compression.zstd` and the acceptance collector require the standard-library + zstd reader introduced in Python 3.14. This does not change the packaged + application runtime. +- Open gates remain native Windows/macOS provisioning and lifecycle acceptance, + full three-target provider attribution, and packaged desktop install + acceptance. Local release packaging does not update the public toolbar link. + +## 2026-09-25 — Rebuilt local Linux release candidate + +- Rebuilt frontend production assets and `pumas-rpc --release`, staged the new + backend, and packaged v0.7.0 AppImage and deb with the updated uv third-party + notices. No artifacts were published. +- `scripts/release/check-artifacts.mjs electron/release linux` verified both + expected installers. `scripts/release/smoke-linux-packages.py electron/release` + verified their packaged resources against the current frontend, backend, + license, and third-party notice inputs; both packaged RPC backends passed + `/health`. +- AppImage SHA-256: + `cd4cb2c0e168ce207d79693e30fd3a02f8152870c0baea2275ab0a35323b21dd` + (154,752,684 bytes). Deb SHA-256: + `0591e1950bbb2761a086c437e51680275dc598c1fc76560091e1557dfef6e6ea` + (120,406,924 bytes). The public v0.7.0 release and desktop toolbar link remain + unchanged; packaged Torch installation through the UI is still untested. +- Additional checks passed: 49 launcher tests, 12 Electron tests, 20 managed + Python acceptance fixtures under Python 3.12 and CPython 3.14, Ruff, release + attribution check and test, and the final file diff whitespace check. + +## 2026-09-25 — Windows and macOS CPython archive candidates + +- Used the bounded collector to query the official Python Build Standalone + release API and download the exact full archives for CPython 3.14.7 + `x86_64-pc-windows-msvc` and `aarch64-apple-darwin`. Both archive sizes and + SHA-256 values matched the official asset records before extraction. Their + manifests preserve the API URLs, release/asset IDs, raw `PYTHON.json`, and + hashes for all 19 license files each. +- Windows archive: 49,262,780 bytes, SHA-256 + `5363ec4aab59c24417f9877217aae95ca17f9ae6eb99c3bbfb25e4a76dcadafe`. + macOS archive: 60,724,957 bytes, SHA-256 + `185fa676e14b648bd736ce7f20f9b11e201131b3216ec5a39d4ecd8ab8a71112`. +- The Windows license files differ from the Linux/macOS files only in line + endings and match after newline normalization. These are candidate-version + captures only; Windows/macOS native installation has not + confirmed CPython 3.14.7 as the selected interpreter. They are retained for + review but not yet added to release attribution. See the + [target archive evidence index](reports/managed-python-license-collection/README.md). + +## 2026-09-25 — Linux managed Torch restart acceptance + +- Extended the native RPC acceptance to launch a fresh backend process against + the same launcher root after install, explicit selection, CPU probe, and + generation-owned sidecar stop. The second process verified the active Torch + version and managed CPU profile, then revalidated and compared ten CPython + identity fields across sessions, including provider archive digest, source + URL, catalog key, canonical executable path, and executable SHA-256. +- After comparing interpreter identity, the restarted acceptance process ran + a new Torch 2.14.0 CPU tensor operation through the persisted venv interpreter + (`sum([1, 4, 9]) == 14`). The RPC probe endpoint then revalidated its retained + install-time CPU probe report and runtime context. The process repeated the + protocol 3 sidecar trial, stopped the sidecar by its generation, and shut + down gracefully. Both backend logs and install/resolution reports are + retained in + [Linux restart acceptance evidence](reports/v2.14.0-linux-cpu-rpc-restart-acceptance/README.md). + The selected CPython full-archive hash matches the already-retained Linux + license evidence. +- On Linux x86_64 with managed CPython 3.14.7 and pinned uv 0.12.18, the full + two-session run passed; 36 acceptance fixtures, Ruff lint/format, and + `git diff --check` passed. This adds Linux restart evidence only. Native + Windows x64 and macOS arm64 installation/lifecycle acceptance remains open. +- A fresh-root retry initially exceeded the acceptance script's 180-second + HTTP wait while uv was still extracting CPython 3.14.7. Release-option + discovery provisions Python before starting its 60-second wheel scan, while + the provider permits up to 300 seconds for interpreter installation. The + acceptance request budget is now 900 seconds to cover the bounded cold-start + stages; backend timeouts and product behavior are unchanged. The full + fresh-root run then passed and replaced the retained report files above. + +## 2026-09-25 — Cross-platform acceptance follow-up + +- Fixed Windows report handling to decode captured output as UTF-8 and write + reports with LF line endings. Added the macOS cleanup regression for a + zombie-only `EPERM` result, where the extinct group may drain and release. + When `EPERM` is followed by live descendants, process custody and the + cleanup lease remain in place. +- Targeted tests and reviews passed. The latest local Linux x86_64 two-session + Torch 2.14.0 CPU acceptance remains passing, including an exact `v2.14.0` + release-list `tagName` preflight in `get_available_versions`; its refreshed + [evidence](reports/v2.14.0-linux-cpu-rpc-restart-acceptance/README.md) is + retained. Native Windows and macOS full acceptance remains pending. + +## 2026-09-25 — Native Windows acceptance and Linux CI diagnosis + +- Manual workflow run `36214227835` at `a0658131` passed native + `windows-2025` x64 two-session RPC acceptance for Torch `v2.14.0` CPU/Core. + Managed CPython 3.14.7 persisted across restart; a fresh CPU operation + returned 14, and the sidecar trial, generation-owned stop, and graceful + shutdown passed. The [Windows report](reports/v2.14.0-windows-cpu-rpc-restart-acceptance/README.md) + retains acceptance, backend, install, probe, and selected archive manifest + evidence. Windows license integration remains open; the report retains only + the manifest, without license text collection. +- The Linux E2E job in that run passed exact-tag preflight in 1.625 seconds, + then release options returned an incomplete scan before preview or install. + Its diagnostic issues were truncated, so the decisive cause was unavailable. + Diagnostic commit `e2d52939` now preserves `completeScan` and a bounded + sample of up to three issues, each capped at 300 characters and with a + 1200-character overall cap, for a rerun. The separate local Linux two-session + acceptance remains accepted. + macOS E2E acceptance and remaining all-target gates are still pending. +- In that same [manual run](https://github.com/MrScripty/Pumas-Library/actions/runs/36214227835), + macOS native QA passed, but macOS E2E did not. Release-list preflight found + `v2.14.0` after an initial `rate_limited` response reporting a 691-second + retry; release options returned, then `preview_torch_runtime` failed with + `validation_failed: The resolved wheel report failed validation.` No macOS + preview or install completed. The generic rejection does not identify its + cause. +- Bounded, allowlisted resolver failure diagnostics have been committed on the + branch and independently reviewed. They have not yet been exercised by a + manual native RPC E2E rerun; the Linux and macOS E2E failures remain open. + +## 2026-09-25 — PR native QA follow-up repairs + +- PR workflow run + [36215890738](https://github.com/MrScripty/Pumas-Library/actions/runs/36215890738) + for `298688cf` passed workflow/release contracts, frontend/desktop contracts, + headless checks, and Linux native QA. Rust quality failed on Clippy's + `manual_repeat_n` lint in the resolver-diagnostic regression, now fixed with + `std::iter::repeat_n`. macOS native QA failed in the acceptance-script timeout + cleanup with `EPERM`. Windows native QA failed in the managed-Python + candidate step at a PID-only descendant-exit assertion after cleanup. The + run did not execute the native RPC E2E legs because those jobs are skipped on + pull-request events. +- Repaired the POSIX acceptance harness to keep the exited leader unreaped with + `waitid(..., WNOWAIT)` until live members of its owned process group drain. + Zombie-only groups are not signaled. Normal and emergency cleanup signal only + the pinned group; persistent denial fails loudly and retains the unreaped + `Popen` custody object. Regression fixtures cover observer failure, + transient and persistent `EPERM`, and detached descendants; the detached + fixture now exits naturally and is awaited without signaling its PID. +- Repaired Windows lifecycle test oracles by retaining `SYNCHRONIZE` process + handles while descendants are alive and checking the exact handles are + signaled immediately after cleanup. The direct Job-membership test retains + the handle through `terminate_and_drain`. Added a macOS-only RAII test guard + that resets injected `EPERM` and drains the standalone custody slot during + unwinding. These are test changes; runtime lifecycle behavior is unchanged. +- Final local verification passed: 50 acceptance-script fixtures; Ruff lint, + format, and Python compilation; 185 `pumas-app-manager` tests; workspace + all-target/all-feature Clippy with warnings denied; Rust formatting; Windows + GNU test compilation for `pumas-app-manager` and no-default-feature + `pumas-library`; and `git diff --check`. Astra high and Sol xhigh completed + read-only repair reviews with no blocking findings. +- The repaired macOS/Windows native QA jobs still need a new PR run. The Linux + incomplete release-options scan and macOS preview-report validation failure + remain open pending a manual native RPC E2E rerun with the retained bounded + resolver diagnostics. Provider license integration, packaged desktop install, + CUDA/device use, and Torch image/Tuldok generation remain unverified; X1–X7 + remain pending. + +## 2026-09-25 — Torch PR metadata and lifecycle review repairs + +- All Torch metadata mutations now share the permanent `.torch-versions.lock`, + including active/default selection, installed-entry add/remove, public + validation, startup cleanup, and startup selection normalization. Mutations + load current metadata after acquiring the lock; detached blocking writers keep + a cloned lease until they finish, including when the async waiter is canceled. +- Active marker and selection metadata writes run in one leased worker. Public + state snapshots refresh while holding the lock; on contention they return one + coherent cached generation without blocking. Initialization ignores a + transitional marker while busy and prefers committed last-selected metadata + over the default in that fallback. The exact fs2 contention error is + normalized to `WouldBlock` on Windows while unrelated I/O errors are kept. +- Regressions cover independent-manager selection/validation, stale-manager + writes after installs/removals, startup during publication/selection, prompt + busy reads and post-release refresh, coherent version-status metadata, and + lock-error normalization. The cache/status/startup priority tests were + observed failing before their fixes and pass now. Astra high and Sol xhigh + completed read-only review with no remaining blocking findings. A marker + rollback can still fail after an underlying metadata I/O error; that rare + error path remains best-effort and is reported as a limitation. +- Final local verification: `cargo test --all-targets --locked --quiet` passed + for workspace default members (the app-manager run in that pass preceded the + final startup-priority regression; the final focused app-manager rerun passed + 199 tests). `cargo clippy --all-targets --all-features -- -D warnings`, + `cargo fmt --all -- --check`, and Windows GNU app-manager test compilation + passed. Frontend passed 713 tests, typecheck and lint; desktop-contract + conformance passed 48 tests; Electron passed 179 tests with one + platform-dependent skip; managed-Python acceptance passed 50 fixtures with + Ruff and Python compilation; release-attribution validation and + `git diff --check` passed. +- These are local branch checks. A new PR workflow run is still required. Native + Windows/macOS E2E, provider-license integration, packaged desktop Torch + installation, CUDA/device execution, and v2.14.0 Tuldok/image generation are + still open; X1–X7 remain pending. diff --git a/docs/plans/torch-cross-platform-runtime-management/issues.md b/docs/plans/torch-cross-platform-runtime-management/issues.md new file mode 100644 index 000000000..b45f87a1f --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/issues.md @@ -0,0 +1,81 @@ +# Issues: Cross-Platform Torch Runtime Management + +## XP-1 — Manager and resolver hard-code Linux wheel identity + +- **Severity:** High; blocks Windows/macOS exact resolution. +- **Evidence:** `torch-server/resolve_runtime.py:254–271` accepts only Linux + x86_64 interpreter tags; `:302–305`, `:578–580`, and `:745–749` assume a + `release+build` distribution version. macOS official CPU wheels can use the + plain upstream release version. Rust repeats the Linux identity check in + `torch_preview.rs:798–800` and resolver validation at `:949–957`. +- **Owner/boundary:** Python resolver and app-manager retained-preview boundary. +- **Disposition:** Fix in M1. Retain upstream distribution version separately + from selected release/build and compare full official wheel tags. +- **Verification:** Resolver fixture/native wheel checks, serialized resolver + manifest tests, and retained-preview validation. +- **Status:** M1 code and fixture tests complete. Native official-index scans + remain part of M2 acceptance. + +## XP-2 — Host detection and interpreter discovery are Linux-only + +- **Severity:** High; blocks exact host-aware choices. +- **Evidence:** `torch_alternatives.rs:83–121` scans Linux PCI paths; + `:150–160` encodes Linux CUDA floors; `:224–245` and `:478–495` invoke + `python3.10`–`python3.13` and require Linux x86_64. +- **Owner/boundary:** `pumas-app-manager` release-options discovery. +- **Disposition:** Fix in M1 with target-native Python discovery and + conservative evidence-backed host recommendations. Keep CPU as Windows + default until Windows driver compatibility evidence exists. +- **Verification:** Native Windows/macOS interpreter and hardware fixtures; + live official index scan on each target. +- **Status:** M1 implementation and cross-target fixtures complete. Native + Windows/macOS discovery and index scans remain part of M2 acceptance. + +## XP-3 — Runtime paths and lifecycle reject or assume Linux + +- **Severity:** Critical; blocks safe install cleanup and sidecar ownership. +- **Evidence:** Torch install/identity paths contain `venv/bin/python` in + `torch_preview.rs:684,730,1067`, `installer/torch.rs:361,697`, + `installer.rs:1636`, and `state.rs:663`; app manager resolver/installer + process groups are Linux-only (`torch_preview.rs:543–639`, + `installer/torch.rs:783–830`); persistent sidecar ownership rejects every + non-Linux target in `pumas-core/src/runtime_profiles/process_owner.rs:166–175` + and puts `process_group` under Linux-only code at `:718–756`. +- **Owner/boundary:** Native path utility, installer/resolver owners, and + `pumas-core` persistent process owner. +- **Disposition:** Fix in M1 using OS-native venv path APIs and process-tree + ownership that retains one exact process generation through cancellation, + stop, and shutdown. +- **Verification:** Native process-tree/Job lifecycle and path tests plus real + RPC start/health/stop on Windows and macOS. +- **Status:** M1 implementation and Linux regression tests complete. Native + Windows/macOS lifecycle and RPC acceptance remain part of M2. + +## XP-4 — Current model evidence does not establish Windows/macOS inference + +- **Severity:** Scope risk, not a Torch runtime-management blocker. +- **Evidence:** The existing runtime inventory and Tuldok report qualify + distinct Linux-only Torch tuples; MPS availability and successful CPU import + do not qualify the configured image adapters. +- **Owner/boundary:** Torch model adapter and Tuldok image-serving acceptance. +- **Disposition:** Explicitly defer image generation by FLUX.2, Nunchaku, or + any model on Windows/macOS. Keep the accepted exact tuples unchanged. +- **Verification:** Do not add or infer image-generation claims in M1. Any + future platform/model support requires target-specific dependency and real + image evidence. +- **Status:** Deferred as designed; no Windows/macOS adapter or image-generation + claim is added by this plan. + +## XP-5 — Preview identifiers use a Linux-only random source + +- **Severity:** High; blocks secure retained previews on Windows. +- **Evidence:** `torch_preview.rs` currently opens `/dev/urandom` to create + retained preview identifiers. That device path does not exist on Windows. +- **Owner/boundary:** Torch preview token creation in `pumas-app-manager`. +- **Disposition:** Fix in M1 using `getrandom 0.3.4`, already present in the + workspace lockfile, declared directly at the app-manager consumer. Preserve + cryptographic randomness and return a typed failure if the OS RNG fails. +- **Verification:** Token generation tests on Linux, Windows, and macOS; no + time-, process-, or hostname-derived fallback. +- **Status:** M1 implementation and Linux tests complete. Windows/macOS runtime + token-generation execution remains part of native M2 acceptance. diff --git a/docs/plans/torch-cross-platform-runtime-management/plan.md b/docs/plans/torch-cross-platform-runtime-management/plan.md new file mode 100644 index 000000000..1b17bff69 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/plan.md @@ -0,0 +1,455 @@ +# Plan: Cross-Platform Torch Runtime Management + +**Plan status:** `Active` + +**Owner:** Pumas runtime integration + +**Authorization:** The repository owner authorized Windows and macOS Torch +runtime management on 2026-09-24, retaining the existing Linux support. On +2026-09-25, the owner authorized Pumas-managed CPython provisioning and removed +the requirement for a host-installed Python interpreter or a user Python choice. + +**Current acceptance:** Manual native run +[36229508586](https://github.com/MrScripty/Pumas-Library/actions/runs/36229508586) +on runtime commit `21041697` passed the current v2.14.0 CPU/Core RPC installation +and restart path on Linux x86_64, Windows x86_64, and macOS arm64. Each target +provisioned Pumas-managed CPython 3.14.7 with pinned uv 0.12.18, installed 25 +hashed official artifacts, persisted the interpreter across restart, returned +14 from a fresh CPU tensor operation, passed the resolver probe and protocol 3 +sidecar trial/stop, shut down gracefully, and cleaned its temporary root. See +[Linux](reports/v2.14.0-linux-current-source-cpu-rpc-restart-acceptance/README.md), +[Windows](reports/v2.14.0-windows-current-source-cpu-rpc-restart-acceptance/README.md), +and [macOS](reports/v2.14.0-macos-current-source-cpu-rpc-restart-acceptance/README.md). +All active jobs in that manual workflow passed. The prior run +[36223106097](https://github.com/MrScripty/Pumas-Library/actions/runs/36223106097) +also exercised macOS's 913-second Retry-After behavior, but predates the metadata +lock follow-up. Acceptance remains limited to CPU/Core RPC installation and +restart. CUDA/device execution, Electron UI-driven installation, packaged +Windows/macOS installation, and v2.14.0 Tuldok image generation remain +unverified; existing Tuldok image evidence remains scoped to its recorded +Torch 2.10 tuple. + +Current-branch Linux v0.7.0 AppImage and deb candidates were rebuilt with the +generated CPython notices. Artifact naming and extracted resource hashes pass; +both extracted backends start and pass `/health`. The packaged Electron archive +contains the `get_torch_release_options` bridge method. AppImage SHA-256: +`1398ef0a9da1c0aab90681d3c91674ef88c6229a84984047938e7bd6eb350acd`; deb +SHA-256: `468b6f7c2af00ff8785f80e5486cd5133979e875dd351b4b9f5284ddfd195043`. +These are local build outputs: they do not exercise Electron UI-driven Torch +installation or replace the toolbar-linked public v0.7.0 assets (published +2026-09-17). The generated attribution inventory includes all three CPython +full-archive notice supersets and verifies 371 package entries, 78 hashed inputs, and 57 retained +legal texts against target-specific evidence. + +The bundled Linux backend from this candidate then passed the full Torch 2.14.0 +CPU/Core install/restart acceptance with backend `PATH` cleared. It provisioned +managed CPython 3.14.7, installed 25 hashed official artifacts, performed a CPU +operation returning 14 after restart, and passed probe plus protocol 3 sidecar +start/stop. See the [packaged Linux acceptance](reports/v2.14.0-linux-packaged-cpu-acceptance/README.md). +This exercised the packaged Linux backend; Electron UI interaction and +packaged Windows/macOS install acceptance remain unverified. + +**Current phase:** The three-target CPU/Core RPC install and two-session +sidecar lifecycle pass on current runtime source `21041697`. That run verifies +the bounded metadata-lock follow-up. The repair closes the reviewed +cross-process metadata races by guarding Torch metadata read/modify/write with +`.torch-versions.lock`, refreshing state under that lease, and retaining cloned +leases through detached writes. Startup defers validation/normalization when +the lock is busy and avoids reading a possibly transitional active marker. Torch +status reads now use one coherent cached generation. The repair also addresses +failed child-custody drain, best-effort cleanup recovery, bounded Electron Torch +RPC requests, and fixed +preset access while upstream release discovery is pending. Selection, default +selection, removal, and installation now retry brief `WouldBlock` contention +for at most 500 ms; other I/O errors propagate immediately. + +Follow-up verification passes 205 `pumas-app-manager` tests, Rust formatting, +workspace check and Clippy gates, 44 Torch resolver tests, Ruff, and +`git diff --check`. The full local workspace test did not complete cleanly: +`pumas-library` unit tests passed when rerun with four threads (1432 passed, 6 +ignored), but the separate `intent_api_tests` hit local filesystem permission +and temporary-storage errors. This does not identify a failure in the changed +Torch paths. Manual workflow +[36229508586](https://github.com/MrScripty/Pumas-Library/actions/runs/36229508586) +on `21041697` passed its workflow/release contracts, frontend/desktop contracts, +headless checks, Rust quality, all three native Torch QA jobs, and all three +native RPC E2E jobs. PR head `57e5fb7f` adds only the acceptance evidence and +documentation after that runtime-source run. Astra high and Sol xhigh completed +read-only reviews with no lock-lifecycle blockers. Earlier manual run +[36223106097](https://github.com/MrScripty/Pumas-Library/actions/runs/36223106097) +also passed the three-target RPC install/restart and exercised the macOS long +Retry-After path. Windows GNU compilation remains compile-only evidence but is +supplemented by native Windows MSVC acceptance. + +**Remaining gates:** Packaged Electron UI interaction, packaged Windows/macOS +Torch installation, and provider cancellation/tamper/retry cases remain open. +CUDA/device acceleration and v2.14.0 image/Tuldok generation are untested. The +local AppImage/deb candidates do not update the public toolbar-linked package. + +**Next slice:** Exercise the Torch discovery/install controls through the Linux +Electron UI and run packaged install acceptance on Windows and macOS; then close +provider cancellation/tamper gates. Keep Tuldok qualification limited to its +recorded exact image-generation tuple; publish a new toolbar-linked release only +after the PR is merged and a new version is tagged. + +## Objective and scope + +Extend the existing Torch release manager so users can discover a stable +upstream Torch release, let Pumas provision the newest stable CPython that +matches an exact official wheel and resolves the complete selected dependency +profile, install and inspect it, explicitly select it, and start/stop its +managed sidecar through the existing RPC and desktop flows. The host does not +need Python on `PATH`, and the desktop does not require a Python selection. + +“Any release” continues to mean an upstream stable tag for which an exact host, +stable standard-CPython wheel, and complete dependency resolution exist. It does +not promise a wheel for every release or every supported host. Source builds and +unqualified adapters remain outside this objective. + +The current accepted Linux contract remains the regression baseline in the +[upstream version-management plan](../torch-upstream-version-management/plan.md) +and its [runtime inventory](../torch-diffusion-serving/reports/upstream-version-manager-progress.md). +Native RPC acceptance now proves the v2.14.0 CPU/Core managed install and +restart path on Windows x64 and macOS arm64 as well as Linux x86_64. Broader +platform acceptance remains gated on the incomplete X2–X7 checks below, +especially packaged desktop installation. +This plan does not claim image generation or Tuldok support for every Torch +release or operating system; existing image evidence remains limited to its +recorded exact tuples. + +## Binding support contract + +| Pumas target | Rust target triple and shipped artifact | Torch runtime behavior | Explicit limits | +| --- | --- | --- | --- | +| Linux x86_64 | `x86_64-unknown-linux-gnu`; AppImage and deb | Preserve accepted exact CPU/CUDA/ROCm wheel discovery and lifecycle | Existing qualification is unchanged; no Linux ARM claim | +| Windows x86_64 | `x86_64-pc-windows-msvc`; NSIS and portable | Discover exact official CPU wheels; expose exact official CUDA wheels only when NVIDIA hardware is positively detected. CPU remains the safe default until Windows-specific driver compatibility is established. | No Windows ARM, ROCm, or XPU claim | +| macOS arm64 | `aarch64-apple-darwin`; arm64 DMG | Discover exact official native CPU wheels; inspect MPS after installation as an optional runtime capability, not a separate Torch build channel | The interpreter and wheel must be native arm64. Intel Mac and Rosetta/x86_64 Torch runtimes are unsupported. No CUDA/ROCm claim | + +The target triples and artifacts match the current release contract in +[`artifact-plan.json`](../../../scripts/release/artifact-plan.json#L58). Pumas +owns a private CPython installation depot. Candidate stable CPython minor +versions come from the exact official Torch wheel tags and the pinned Python +distribution catalog in the pinned uv release; do not maintain a Pumas upper +version allowlist or treat prerelease/free-threaded tags as standard CPython. +CPython 3.10 is Pumas' runtime minimum; there is no configured upper minor cap. +Rank candidates numerically from newest to oldest, validate each installed +interpreter's observed target and `sys_tags()`, and retain the first complete +dependency resolution. A proven missing wheel or dependency incompatibility can +advance to the next candidate. Network failure, timeout, provisioning failure, +integrity failure, or incomplete scans are inconclusive and cannot justify a +lower Python version. The user never has to install or choose Python. + +The app-manager downloads and bootstraps uv 0.12.18 for the shipped Linux x86_64 GNU, Windows +x86_64 MSVC, and macOS arm64 targets from versioned official archives. It +verifies each archive against the exact SHA-256 in the provider report before +extracting or executing it. uv's Python distribution catalog is embedded and +frozen per uv release; its exact binary pin therefore pins that catalog too. +The manager enumerates that catalog on the native host, filters to stable +standard CPython candidates, and sorts them newest-first. One managed +interpreter acts as a bootstrap for native wheel discovery; the resolver +synthesizes standard CPython tags for the catalog candidates, so discovery does +not install every Python minor. Preview provisions real candidates in bounded +newest-first order and runs complete dependency resolution under each candidate. +An exact absent wheel or definite dependency incompatibility permits trying the +next candidate. Network, provider, timeout, integrity, or incomplete-scan +outcomes stop as inconclusive. uv +provisions Python Build Standalone CPython releases; Pumas must retain the +selected distribution URL, version, target/build, pinned uv/catalog identity, +and a fingerprint of the installed interpreter. uv verifies the CPython archive +using the checksum in its pinned embedded catalog. The CPython build source must +be described accurately and not as a Python.org installer. + +The release manager retains the exact upstream wheel URL, hash, distribution +version, build identity, managed interpreter distribution identity and +fingerprint, and dependency lock. Validate +the observed installed Torch identity against that retained resolution. The +Torch distribution version is not always `release+build`: for example, the +official Torch 2.14.0 CPU index publishes Windows wheels named +`2.14.0+cpu`, while its macOS arm64 wheels are named `2.14.0` and tagged +`macosx_14_0_arm64`. Preserve the release/build identity separately from the +upstream distribution version. Do not manufacture a `+cpu` local version for +the macOS artifact. + +Exact package availability is determined from official indexes and the +provisioned interpreter's `packaging.tags.sys_tags()`, not a Pumas Torch release +allowlist or a guessed OS floor. Full preview remains required before install; +an exact wheel match alone never claims dependency compatibility. On macOS, +MPS availability is probed from the installed Torch runtime and host. MPS does +not establish model/adapter support. CUDA recommendation on Windows remains +CPU unless a Windows-specific driver rule and required evidence are added to +this contract; exact NVIDIA CUDA wheels may remain explicit advanced choices. + +Stable upstream tag discovery remains global and independent of this support +matrix; install choices are limited to exact compatible host tuples. The +bundled v2.9.1 Linux preset is Linux-only. The manager will expose an explicit +`bundledPresetAvailable` host capability, true only for Linux x86_64 when its +managed CPython 3.12 provider artifact is available; the desktop must use that +result instead of the release tag alone. Windows and macOS use the retained +dynamic preview and wheel lock. + +On every supported target, Core Torch runtime (`none`) is the default dependency +profile. Linux may offer Pumas' FLUX.2 profile as an explicit advanced choice; +Windows and macOS offer only core Torch until a platform-specific image adapter +has its own accepted plan. The desktop displays the manager-provided default +rather than guessing from the OS. This enables portable Torch install/select/ +start without suggesting FLUX.2 or Nunchaku inference has been qualified on +every release or platform. + +## Ownership and design + +- `pumas-app-manager` owns release choices, CPython candidate ranking and + provisioning, retained interpreter leases/previews, staged Torch installation, + identity, selection, and cleanup admission. Python artifacts live in an + immutable Pumas-managed depot; uv's disposable download cache is separate. +- The app-manager invokes only the exact-hash-pinned uv binary that it has + downloaded into its private bootstrap directory and verified. It clears + ambient uv configuration, forces manager-owned Python, uses private + install/cache directories, disables PATH shims and (on Windows) registry + writes, and never runs a shell installer or administrator operation. +- A selected Python distribution's source catalog identity, exact CPython + version, native target/build, download URL, uv/catalog identity, executable + fingerprint, and observed `sys_tags()` remain attached to its retained + preview and installed runtime record. uv verifies the Python archive with the + digest from its embedded catalog. + Existing installations keep their original base interpreter; managed-runtime + cleanup may not delete an interpreter referenced by a preview, install, or + installed runtime. Automatic pruning is out of scope until reference-safe + removal is implemented. +- `torch-server/resolve_runtime.py` continues to own pip dry-run resolution, + wheel-tag matching, official wheel provenance, and hash reporting. Its + protocol must carry the upstream distribution version and exact build as + separate validated facts. +- `pumas-core::platform::paths` owns OS-native venv executable paths. +- `pumas-core::runtime_profiles::process_owner` owns the persistent + generation-specific sidecar process lifecycle. Platform process primitives + belong in the existing platform process API and, if the lifecycle interface + needs its own depth, one `pumas-core/src/platform/managed_child.rs` module; + installer and resolver operations remain their manager owners. +- RPC and generated contracts remain unchanged unless the request must allow an + automatic Python choice or the response must report provisioning progress and + selected interpreter identity. Any contract change is serial and updates its + generator, Rust source, generated artifacts, preload, and consumers together. +- The desktop remains a presentation of manager-returned exact choices. It must + not infer OS support, invent builds, select a mismatched interpreter, or + interpret MPS as an image adapter. It never requires a Python selector and + reports the manager-selected interpreter after resolution. It uses manager-provided + `bundledPresetAvailable` and `defaultAdapter` capabilities rather than + enabling the Linux bundled preset merely because the selected tag is v2.9.1. + +### Composed-design review + +**Applicability:** `applicable` — the work changes target selection, dependency +provisioning, Python runtime persistence, and process-lifecycle seams across the +resolver, manager, desktop, and platform runtime owners. + +1. **Independent concerns:** upstream wheel identity and interpreter tags + (Python resolver); managed CPython artifacts and leases (interpreter owner); + host hardware facts and recommendations (manager); staged version + identity/publication (installer); native process supervision (platform + lifecycle); choice presentation (RPC/desktop). +2. **Interleavings:** release/build/distribution version; target/architecture/ + Python ABI and wheel tags; Python provider version/catalog/artifact and + retained interpreter; hardware/driver evidence; wheel URLs and hashes; + staged directory and cleanup; process generation and cancellation. These + remain explicit fields/outcomes at the manager boundaries. +3. **Caller knowledge:** RPC/desktop clients consume manager choices, retained + preview identifiers, interpreter identity, and lifecycle status. They do not + parse platform paths, wheel filenames, drivers, or process IDs to decide + support. +4. **Representative changes:** a new supported host must update target facts, + exact wheel fixtures/resolution, manager host/interpreter detection, native + lifecycle evidence, provisioned Python target, and its native CI acceptance. + A new upstream wheel tag remains local to official-tag resolution and its + tests. A new image adapter does not change this runtime-management contract. +5. **Stable interfaces:** exact artifact and host facts cross the resolver to + manager; the retained resolution crosses preview to installer; process + owners expose generation-scoped lifecycle results. OS path strings, + display text, or ambient command lookup do not act as artifact identity. +6. **Independent verification:** resolver tags can be fixture-tested; host + detection, Python provisioning, and venv paths require clean-host native + execution; process-group/job ownership, cleanup, and sidecar lifecycle also + require native target execution. Integration remains in the manager/API and + desktop composition. +7. **Independent evolution and deletion test:** Linux/macOS process-group + mechanics and Windows Job ownership may fail and evolve independently behind + one generation-lifecycle contract. The Windows child must be created + suspended (or through an equivalent atomic job-list mechanism), assigned to + a retained kill-on-close Job, and resumed only after assignment; the Job + remains held until the generation is drained. Native tests cover cancellation + at admission and prove no child escapes. Do not add a generic OS + Strategy/Factory or one-file-per-platform mirror. Any new process primitive + must remove duplicate Linux-only process-tree logic from its callers and + enforce generation ownership; otherwise delete it. +8. **Necessary complexity:** exact wheel-tag compatibility, private interpreter + provisioning, and native process-tree ownership are required complexity, + contained in the resolver, manager-owned interpreter lifecycle, and process + lifecycle. uv is selected over local archive installation because it owns + Python distribution selection, integrity checks, and platform installation; + Pumas retains policy, artifact identity, private paths, leases, and cleanup. + The target uv binary and its embedded interpreter catalog are pinned + together. Do not use ambient uv or runtime `latest` URLs. + +## Acceptance claims + +| ID | Observable criterion | Evidence required | Status | +| --- | --- | --- | --- | +| X1 | Linux behavior and existing accepted v2.9.0 install/v2.10 Tuldok evidence remain accurately scoped and pass relevant regression gates | Existing Linux manager/resolver/RPC/frontend suites; retained historical evidence references | pending | +| X2 | Each shipped target provisions a private stable standard CPython 3.10 or newer without a host Python dependency or global PATH/registry changes; artifact integrity, target identity, cache separation, cancellation, and retention are verified | Linux, Windows, and macOS v2.14.0 RPC installs provisioned CPython 3.14.7 and matched persisted interpreter identity across sessions ([Linux](reports/v2.14.0-linux-cpu-rpc-restart-acceptance/README.md), [Windows](reports/v2.14.0-windows-cpu-rpc-restart-acceptance/README.md), [macOS](reports/v2.14.0-macos-cpu-rpc-restart-acceptance/README.md)). Artifact/source hashes are retained and all three full-archive license supersets are included in generated attribution; cancellation and cache separation remain | partial | +| X3 | Candidate versions come from exact official standard-CPython wheel tags and the pinned stable provider catalog; the manager tries highest to lowest, selects the newest complete compatible resolution, and never treats network/provisioning failure as a reason to downgrade | CPython 3.14 preference when fully resolved; definite 3.14 dependency incompatibility falls to 3.13; prerelease/free-threaded/wrong-target and pre-3.10 artifact rejection; incomplete scan/provider failures remain typed inconclusive | pending | +| X4 | Windows x64 and macOS arm64 discovery returns only exact official wheels whose tags match the provisioned native CPython; CPU/MPS/CUDA choices follow this contract | Native wheel fixtures and wrong-target rejection passed; manual native RPC run `36223106097` resolved exact official CPU wheel tags on Linux, Windows, and macOS arm64. CUDA hardware execution and macOS MPS acceleration remain untested | partial | +| X5 | Preview retains the exact distribution version, release/build, official wheel URL/hash, Python provider artifact identity, interpreter fingerprint, and complete dependencies; install stages and verifies that exact identity before publication | Run `36223106097` resolved 25 hashed CPU/Core artifacts and passed v2.14.0 install on all three shipped targets; each report retains the exact Torch wheel URL/hash, dependency set, and managed interpreter identity (see X2 reports) | partial | +| X6 | Installed versions can be inspected, explicitly selected, started with health/protocol checks, and stopped by their owned generation; cancellation, timeout, RPC shutdown, and failed cleanup do not leak a resolver, installer, sidecar, interpreter provisioner, or unregistered runtime | Run `36223106097` passed second-session restart, fresh CPU operation, probe revalidation, protocol 3 sidecar trial/stop, and graceful shutdown on Linux, Windows, and macOS (see X2 reports); broader cancellation/timeout/failure cleanup remains | partial | +| X7 | The same manager choices and lifecycle are reachable through packaged desktop controls and the existing RPC API; the user never has to choose Python, and the desktop offers no unsupported adapter | Packaged Linux backend install/restart passes with backend `PATH` cleared; the generated `app.asar` includes `get_torch_release_options`. Electron UI interaction and packaged Windows/macOS installation remain unverified | partial | + +Plan acceptance is `pending` until every required row is satisfied on its +declared native environment. Cross-compilation, Linux simulation, packaging, +and unit fixtures do not substitute for the Windows/macOS runtime claims. + +## Milestones and write sets + +### M0 — Contract and bounded design + +- **Goal:** Define shipped target triples, capability limits, ownership, + end-to-end gates, and authoritative official-wheel facts. +- **Write set:** This plan, execution ledger, issues, and target research report. +- **Verification:** Coding Standards MCP review; read-only architecture plan + review; official PyTorch index evidence. +- **State:** Accepted. + +### M1 — Native resolver, manager, and process lifecycle + +- **Goal:** Implement the support contract through discovery, exact preview, + isolated install, identity, selection, sidecar startup/stop, and existing + RPC/desktop routes while preserving Linux. +- **Write sets:** `torch-server/resolve_runtime.py` and + `torch-server/tests/test_resolve_runtime.py`; + `rust/crates/pumas-app-manager/src/version_manager/torch_alternatives.rs`; + `version_manager/torch_preview.rs`, `version_manager/installer.rs`, + `version_manager/installer/torch.rs`, `version_manager/installer/torch_tests.rs`, + `version_manager/installer/torch_upstream_contract_tests.rs`, + `version_manager/state.rs`, `version_manager/mod.rs` for manager-owned + cleanup shutdown; `rust/crates/pumas-core/src/process/manager.rs` with + target-gated legacy Torch process-control tests; + `rust/crates/pumas-app-manager/Cargo.toml` and `rust/Cargo.lock` for the + already locked `getrandom 0.3.4` direct RNG dependency needed to preserve + cryptographic preview-ID generation on Windows; + `rust/crates/pumas-core/src/platform/{process.rs,paths.rs,mod.rs,managed_child.rs}` + and `runtime_profiles/process_owner.rs` with their tests. The legacy Torch + process-manager boundary and tests reject detached launch/stop on Windows and + macOS; cross-platform starts use the owned runtime-profile APIs; + `frontend/src/components/TorchInstallPreview.tsx` and its focused test, + `frontend/src/components/TorchDesktopProjection.test.tsx`, + `frontend/src/components/TorchInstalledVersionInspect.test.tsx`, + `frontend/src/components/TorchRuntimeProbePanel.test.tsx`, + `frontend/src/components/app-panels/TorchPanel.test.tsx`, + `frontend/src/types/torch-install.ts`, `electron/src/preload.ts`, and + `electron/tests/preload-rpc-contract.test.mjs` for validating and consuming + the existing runtime-options response. Root owns only + `.github/workflows/build.yml` and any new native Torch smoke script it creates, + plus plan/inventory, shared schemas and generated files if contract changes + prove necessary, final integration, and commit. The manager owns + `bundledPresetAvailable` and `defaultAdapter` in its runtime-options result; + no generated RPC contract changes are admitted unless needed to represent + another required capability. Root owns plan/inventory, shared schemas and + generated files if contract changes prove necessary, final integration, and + commit. +- **Verification:** Focused Python and Rust suites; Rust format/Clippy; native + Windows/macOS cargo and Python QA; exact release preview and lifecycle smoke. +- **Re-plan trigger:** A native target requires a contract/schema change, + process primitive outside the existing ownership boundary, or a non-CPU + runtime claim unsupported by official evidence. +- **State:** Implemented; v2.14.0 CPU/Core RPC install and restart passed on + Linux, Windows, and macOS. CUDA and MPS behavior remain outside this accepted + runtime tuple. + +### M1b — Managed stable CPython + +- **Goal:** Bootstrap a pinned uv helper without host Python, enumerate its + target-native catalog, use it to discover native candidate wheel tags without + provisioning every Python minor, then provision newest-first Python + candidates in Pumas-owned storage, retain exact provider/interpreter identity, + resolve dependencies against the + observed wheel tags, and keep the user-facing flow automatic. +- **Write sets:** App-manager Python provider/lease and Torch manager/resolver + files; Torch install UI and focused tests; Electron bridge timeout policy and + tests; uv pin and attribution files; Linux/Windows/macOS native provisioning + QA. The existing RPC string request already accepts `python: "auto"`, so this + change does not require generated contract or preload changes. Root owns + plan/inventory, native workflow composition, final review, and commit. +- **Verification:** Pinned uv artifact digest/version checks; stable catalog + selection; managed Python 3.14 with full resolution; definite-incompatibility + fallback to 3.13; inconclusive failures do not downgrade; clean host PATH, + concurrency/cancellation, immutable retention, tamper, and safe cleanup tests. +- **State:** Manager/provider/resolver/UI implementation is present; native + clean-host v2.14.0 CPU/Core provisioning and restart passed on all three + shipped targets. All three target-specific CPython notice supersets are + included and their provider pins, enum-arm target mapping, selected/full + archive identity, exact legal-file lists, and full-archive hashes pass + generation and packaging checks. Cancellation/cache/tamper cases remain open. + +### M2 — Native acceptance and inventory + +- **Goal:** Collect target-native resolver/install/lifecycle/packaged desktop + evidence for managed Python and update the existing Torch inventory without + broadening Tuldok claims. +- **Write set:** New plan evidence/report; relevant sections of + `docs/plans/torch-diffusion-serving/reports/upstream-version-manager-progress.md`; + execution ledger. Existing historical model reports remain unchanged. +- **Verification:** Every X1–X7 claim has an evidence environment, execution + mode, result, and link. Reuse read-only review for any lifecycle/security + repair. +- **State:** Active; native RPC CPU/Core acceptance is retained for all three + targets and provider-license integration is complete. Current-branch Linux + packages were rebuilt, passed resource/hash and backend-health checks, and + passed Torch CPU/Core install/restart through the packaged Linux backend. + Electron UI interaction and packaged Windows/macOS install acceptance remain + pending. + +## Constraints and re-plan triggers + +- Keep a single exact platform/interpreter/wheel authority. Do not make the + renderer or a second manually maintained table authoritative for support. +- Preserve hash-locked previews, staging/publication ordering, explicit + selection/defaulting, cleanup draining, owned generation stop, loopback + exposure, and typed inconclusive outcomes. +- Preview identifiers remain cryptographically random on every target. Use the + already locked `getrandom 0.3.4` at the app-manager boundary instead of the + Linux-only `/dev/urandom` path; RNG failure is a typed error, never a weak + fallback. +- On Windows, admit child processes to a retained Job before they execute any + code that could create descendants (suspended spawn + Job assignment + resume, + or an OS-supported equivalent). Retain the Job handle through cancellation, + process exit, descendant drain, and generation completion; do not close it + before the owner has observed cleanup. +- If a Windows staged or unregistered published runtime remains locked after + all owned processes have drained, move it to the manager-marked quarantine + when the filesystem permits. If it cannot be renamed/deleted, keep it + unregistered and unselectable, retain explicit pending-cleanup ownership, + retry during startup and the next install/cleanup, and drain active cleanup + work at shutdown. Never report a best-effort delete as completion. +- Never accept a wheel because its filename merely contains a platform word; + parse and compare the wheel's complete interpreter/ABI/platform tags to the + candidate interpreter's own tags and the target process architecture. +- Native tests must exercise paths with spaces, files held open during failed + installs, cancellation/timeout, and simultaneous old/new sidecar generations + where those behaviors differ by platform. Path evidence includes canonical + root/ancestry, symlink aliases, and Windows reparse-point cases; comparisons + use filesystem-aware path operations, not string prefixes. +- Keep FLUX.2, Nunchaku, and Tuldok image-generation claims tied to their + existing exact evidence. Any MPS image adapter, Windows image model, or new + model dependency needs its own product and hardware acceptance. +- Re-plan if Windows/macOS require changing persisted runtime identity, + dependency-lock semantics, public RPC shape, or selection ownership. + +## Linked artifacts + +- [Execution ledger](execution-ledger.md) +- [Issues and dispositions](issues.md) +- [Official target and wheel research](reports/target-wheel-research.md) +- [Managed Python provider admission](reports/managed-python-provider.md) +- Coding Standards MCP policies applied: `topic.cross-platform`, + `profile.language.rust.cross-platform`, `topic.architecture`, + `profile.language.rust.security`, `topic.security.filesystem-containment`, + `topic.contracts`, `topic.dependencies`, `workflow.planning`, and + `topic.licensing`, `workflow.verification.platforms` from snapshot + `snapshot:v1:588a50a0-e97e-444d-9c6b-a383baa4dfcf`. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/README.md b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/README.md new file mode 100644 index 000000000..354e23bdc --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/README.md @@ -0,0 +1,37 @@ +# Managed CPython full-archive license evidence + +The entries below are byte-verified Python Build Standalone full archives for +CPython 3.14.7. Each manifest records the official release and asset IDs, exact +API-provided download URL, size, SHA-256, raw `PYTHON.json`, and hashes of all +license-directory files and declared license references. + +| Target | Evidence status | Archive | License texts | +| --- | --- | --- | ---: | +| Linux x86_64 | Selected during accepted Torch 2.14.0 CPU/Core installation; [selected install-only archive identity](../v2.14.0-linux-cpu-rpc-restart-acceptance/README.md) | [Full-archive license manifest](linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive-manifest.json) | 19 | +| Windows x86_64 | Selected during accepted native Torch 2.14.0 CPU/Core install and restart; [selected install-only archive identity](../v2.14.0-windows-cpu-rpc-restart-acceptance/README.md) | [Full-archive license manifest](windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive-manifest.json) | 19 | +| macOS arm64 | Selected during accepted native Torch 2.14.0 CPU/Core install and restart; [selected install-only archive identity](../v2.14.0-macos-cpu-rpc-restart-acceptance/README.md) | [Full-archive license manifest](macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive-manifest.json) | 19 | + +The Windows license files differ from the Linux and macOS files only by line +endings; all 19 match after newline normalization. The Linux and macOS sets +currently match byte for byte. The retained full-archive manifests document +license files for the same CPython release and target as the accepted +installations; their archive hashes describe those separate full archives, not +the install-only archives selected at runtime. Selected install-only URLs, +targets, CPython identities, and uv provider identities are recorded in the +platform acceptance reports. + +Release attribution includes one CPython full-archive notice superset per +shipped target. The generator verifies all 57 raw license files and three +`PYTHON.json` files against these manifests and keeps full-archive hashes +separate from the selected install-only runtime URLs and uv archive hashes. + +The Linux evidence README describes the accepted installation that produced +its selected archive record. All per-file hashes can be checked directly +against the manifests. + +## Outstanding attribution evidence + +The inventory includes the collected files for all three targets. It does not +certify completeness of declared references: the upstream Windows archive +omits a declared zstd license file. See the +[verified evidence gap and release gate](missing-declared-license-references.md). diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/README.md b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/README.md new file mode 100644 index 000000000..abcf50170 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/README.md @@ -0,0 +1,22 @@ +# Managed CPython archive license evidence + +This is a retained evidence copy of the Python Build Standalone full archive +that corresponds to the CPython 3.14.7 Linux x86_64 distribution selected by +the accepted Torch 2.14.0 CPU/Core install. + +The collector verified the official full-archive asset's SHA-256 and byte size +before reading it. The manifest records the matching install-only distribution +URL, full archive URL, release and asset IDs, archive hash and size, tagged +source mapping, and hashes for the raw `PYTHON.json` and each extracted license +text. The collection contains 19 license texts from `python/licenses/` and any +declared file references outside that directory. + +The files document the Linux archive only. Corresponding Windows x86_64 and +macOS arm64 collections are retained beside this directory; all three are +included in the 0.7.0 attribution inventory. Collection does not establish +complete upstream license coverage: see the [missing declared license +report](../missing-declared-license-references.md) before release acceptance. + +See [`full-archive-manifest.json`](managed-python-licenses/full-archive-manifest.json) +for exact source identities and per-file hashes. The raw `PYTHON.json` and +license texts are under [`managed-python-licenses/full-archive/`](managed-python-licenses/full-archive/). diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive-manifest.json b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive-manifest.json new file mode 100644 index 000000000..8672a15e6 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive-manifest.json @@ -0,0 +1,114 @@ +{ + "archive_name": "cpython-3.14.7+20260901-x86_64-unknown-linux-gnu-pgo+lto-full.tar.zst", + "archive_sha256": "46a9e98d2c7fd2c5b9ca67510b5a0699f5ccad5fb750957961c22c52e07b6cb0", + "archive_size": 126709151, + "archive_url": "https://github.com/astral-sh/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "asset_id": 539917788, + "files": [ + { + "declared": false, + "path": "licenses/LICENSE.bdb.txt", + "sha256": "3bdff06e69991c94664f2ef5c5f8096f60b7dbec071756ea6cc26b445e06ec5b" + }, + { + "declared": false, + "path": "licenses/LICENSE.bzip2.txt", + "sha256": "1f38bbc7caacafd65169276d759c0d88c991b753b643ce35d0e45ea1971dd441" + }, + { + "declared": true, + "path": "licenses/LICENSE.cpython.txt", + "sha256": "86e61415828a8b5b06ec8d024e6f086ce155a8b85fd0c419c0ba4dc004e74fdd" + }, + { + "declared": false, + "path": "licenses/LICENSE.expat.txt", + "sha256": "122f2c27000472a201d337b9b31f7eb2b52d091b02857061a8880371612d9534" + }, + { + "declared": false, + "path": "licenses/LICENSE.libX11.txt", + "sha256": "2daec087a88e7c9b8082557cdeebad5bbb8155a4137472f0b22e269cd99d0c1e" + }, + { + "declared": false, + "path": "licenses/LICENSE.libXau.txt", + "sha256": "56abe29bb1d9806a9e04fa9f80fed2c0f18027594df3f098148d814aef6bddfa" + }, + { + "declared": false, + "path": "licenses/LICENSE.libedit.txt", + "sha256": "29cea33c32bbc9785142386377915612a2fa786482c46843383384aded2e09b1" + }, + { + "declared": false, + "path": "licenses/LICENSE.libffi.txt", + "sha256": "deaf3a42effb551a5b140fa9afefed183a27f1341c6d1bf430d106a5e6931fc0" + }, + { + "declared": false, + "path": "licenses/LICENSE.liblzma.txt", + "sha256": "9a4062de0a2c388a98cf35a35d348b62fa97c838a71c3c28ee1a2d7d0a565b02" + }, + { + "declared": false, + "path": "licenses/LICENSE.libuuid.txt", + "sha256": "122ee1f7e258f2c3c0e538a75c037684f420454bf3850ddc74ce750bbf5fe86b" + }, + { + "declared": false, + "path": "licenses/LICENSE.libxcb.txt", + "sha256": "c5ffbfeaa501071ceeb97b7de2c0d703fdaa35de01c0fb6cbac1c28453a3e9fd" + }, + { + "declared": false, + "path": "licenses/LICENSE.mpdecimal.txt", + "sha256": "669512af7219f58be03a398766d7c9da11a3b3df9d3f05cb74c5ceca25c8da3b" + }, + { + "declared": false, + "path": "licenses/LICENSE.ncurses.txt", + "sha256": "87a4c4442337b8968ef956031c406b74f9cb7149b7ba87311bdaba534816201c" + }, + { + "declared": false, + "path": "licenses/LICENSE.openssl-1.1.txt", + "sha256": "9c04cce50c4989d5601dd8b07f6ab922c40388b66ac736c9007cb1ed9d9dd560" + }, + { + "declared": false, + "path": "licenses/LICENSE.openssl-3.txt", + "sha256": "7d5450cb2d142651b8afa315b5f238efc805dad827d91ba367d8516bc9d49e7a" + }, + { + "declared": false, + "path": "licenses/LICENSE.sqlite.txt", + "sha256": "38bef3d28b24f145ea293bd3b6eb4b20396982abc8303128fb493986ea5bc719" + }, + { + "declared": false, + "path": "licenses/LICENSE.tcl.txt", + "sha256": "c0a69a2bfd757361ec7e6143973b103c90409316b49e9c88db26ad6388e79f16" + }, + { + "declared": false, + "path": "licenses/LICENSE.tix.txt", + "sha256": "3ac5cdd0bef6c43ce34c6a7ced452081d9e5a0bf94082b9f9147d23ec9e214f5" + }, + { + "declared": false, + "path": "licenses/LICENSE.zlib.txt", + "sha256": "818922b2620f12801a12bf78e399644a30990e66824abd8ca8ec24d451d6f92c" + } + ], + "mapping_authority": "https://github.com/astral-sh/python-build-standalone/blob/20260901/src/release.rs", + "python_json": { + "path": "PYTHON.json", + "sha256": "0bb1b7ad30bac3dbd00ec6f8cab3b07dbd0ab727980fa6ac4f4947eb45ab831d", + "size": 139785 + }, + "release_id": 380696527, + "scope": "selected_full_archive_license_directory_and_declared_references", + "source_url": "https://releases.astral.sh/github/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz", + "target": "x86_64-unknown-linux-gnu" +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/PYTHON.json b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/PYTHON.json new file mode 100644 index 000000000..c6338bfbc --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/PYTHON.json @@ -0,0 +1,3187 @@ +{ + "build_info": { + "core": { + "links": [ + { + "name": "pthread", + "system": true + }, + { + "name": "dl", + "system": true + }, + { + "name": "util", + "system": true + } + ], + "objs": [ + "build/Objects/abstract.o", + "build/Objects/boolobject.o", + "build/Objects/bytearrayobject.o", + "build/Objects/bytes_methods.o", + "build/Objects/bytesobject.o", + "build/Objects/call.o", + "build/Objects/capsule.o", + "build/Objects/cellobject.o", + "build/Objects/classobject.o", + "build/Objects/codeobject.o", + "build/Objects/complexobject.o", + "build/Objects/descrobject.o", + "build/Objects/dictobject.o", + "build/Objects/enumobject.o", + "build/Objects/exceptions.o", + "build/Objects/fileobject.o", + "build/Objects/floatobject.o", + "build/Objects/frameobject.o", + "build/Objects/funcobject.o", + "build/Objects/genericaliasobject.o", + "build/Objects/genobject.o", + "build/Objects/interpolationobject.o", + "build/Objects/iterobject.o", + "build/Objects/listobject.o", + "build/Objects/longobject.o", + "build/Objects/memoryobject.o", + "build/Objects/methodobject.o", + "build/Objects/moduleobject.o", + "build/Objects/namespaceobject.o", + "build/Objects/object.o", + "build/Objects/obmalloc.o", + "build/Objects/odictobject.o", + "build/Objects/picklebufobject.o", + "build/Objects/rangeobject.o", + "build/Objects/setobject.o", + "build/Objects/sliceobject.o", + "build/Objects/structseq.o", + "build/Objects/templateobject.o", + "build/Objects/tupleobject.o", + "build/Objects/typeobject.o", + "build/Objects/typevarobject.o", + "build/Objects/unicodectype.o", + "build/Objects/unicodeobject.o", + "build/Objects/unionobject.o", + "build/Objects/weakrefobject.o", + "build/Parser/action_helpers.o", + "build/Parser/lexer/buffer.o", + "build/Parser/lexer/lexer.o", + "build/Parser/lexer/state.o", + "build/Parser/myreadline.o", + "build/Parser/parser.o", + "build/Parser/peg_api.o", + "build/Parser/pegen.o", + "build/Parser/pegen_errors.o", + "build/Parser/string_parser.o", + "build/Parser/token.o", + "build/Parser/tokenizer/file_tokenizer.o", + "build/Parser/tokenizer/helpers.o", + "build/Parser/tokenizer/readline_tokenizer.o", + "build/Parser/tokenizer/string_tokenizer.o", + "build/Parser/tokenizer/utf8_tokenizer.o", + "build/Python/Python-ast.o", + "build/Python/Python-tokenize.o", + "build/Python/_contextvars.o", + "build/Python/_warnings.o", + "build/Python/asdl.o", + "build/Python/asm_trampoline.o", + "build/Python/assemble.o", + "build/Python/ast.o", + "build/Python/ast_preprocess.o", + "build/Python/ast_unparse.o", + "build/Python/bltinmodule.o", + "build/Python/bootstrap_hash.o", + "build/Python/brc.o", + "build/Python/ceval.o", + "build/Python/ceval_gil.o", + "build/Python/codecs.o", + "build/Python/codegen.o", + "build/Python/compile.o", + "build/Python/context.o", + "build/Python/critical_section.o", + "build/Python/crossinterp.o", + "build/Python/dtoa.o", + "build/Python/dynamic_annotations.o", + "build/Python/dynload_shlib.o", + "build/Python/errors.o", + "build/Python/fileutils.o", + "build/Python/flowgraph.o", + "build/Python/formatter_unicode.o", + "build/Python/frame.o", + "build/Python/frozen.o", + "build/Python/frozenmain.o", + "build/Python/future.o", + "build/Python/gc.o", + "build/Python/gc_free_threading.o", + "build/Python/gc_gil.o", + "build/Python/getargs.o", + "build/Python/getcompiler.o", + "build/Python/getcopyright.o", + "build/Python/getopt.o", + "build/Python/getplatform.o", + "build/Python/getversion.o", + "build/Python/hamt.o", + "build/Python/hashtable.o", + "build/Python/import.o", + "build/Python/importdl.o", + "build/Python/index_pool.o", + "build/Python/initconfig.o", + "build/Python/instruction_sequence.o", + "build/Python/instrumentation.o", + "build/Python/interpconfig.o", + "build/Python/intrinsics.o", + "build/Python/jit.o", + "build/Python/legacy_tracing.o", + "build/Python/lock.o", + "build/Python/marshal.o", + "build/Python/modsupport.o", + "build/Python/mysnprintf.o", + "build/Python/mystrtoul.o", + "build/Python/object_stack.o", + "build/Python/optimizer.o", + "build/Python/optimizer_analysis.o", + "build/Python/optimizer_symbols.o", + "build/Python/parking_lot.o", + "build/Python/pathconfig.o", + "build/Python/perf_jit_trampoline.o", + "build/Python/perf_trampoline.o", + "build/Python/preconfig.o", + "build/Python/pyarena.o", + "build/Python/pyctype.o", + "build/Python/pyfpe.o", + "build/Python/pyhash.o", + "build/Python/pylifecycle.o", + "build/Python/pymath.o", + "build/Python/pystate.o", + "build/Python/pystrcmp.o", + "build/Python/pystrhex.o", + "build/Python/pystrtod.o", + "build/Python/pythonrun.o", + "build/Python/pytime.o", + "build/Python/qsbr.o", + "build/Python/remote_debugging.o", + "build/Python/specialize.o", + "build/Python/stackrefs.o", + "build/Python/structmember.o", + "build/Python/suggestions.o", + "build/Python/symtable.o", + "build/Python/sysmodule.o", + "build/Python/thread.o", + "build/Python/traceback.o", + "build/Python/tracemalloc.o", + "build/Python/uniqueid.o", + "build/Modules/config.o", + "build/Modules/gcmodule.o", + "build/Modules/getbuildinfo.o", + "build/Modules/getpath.o", + "build/Modules/main.o" + ], + "shared_lib": "install/lib/libpython3.14.so.1.0", + "static_lib": "install/lib/python3.14/config-3.14-x86_64-linux-gnu/libpython3.14.a" + }, + "extensions": { + "_abc": [ + { + "in_core": false, + "init_fn": "PyInit__abc", + "links": [], + "objs": [ + "build/Modules/_abc.o" + ], + "required": false, + "variant": "default" + } + ], + "_ast": [ + { + "in_core": true, + "init_fn": "PyInit__ast", + "links": [], + "objs": [], + "required": false, + "variant": "default" + } + ], + "_asyncio": [ + { + "in_core": false, + "init_fn": "PyInit__asyncio", + "links": [], + "objs": [ + "build/Modules/_asynciomodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_bisect": [ + { + "in_core": false, + "init_fn": "PyInit__bisect", + "links": [], + "objs": [ + "build/Modules/_bisectmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_blake2": [ + { + "in_core": false, + "init_fn": "PyInit__blake2", + "links": [], + "objs": [ + "build/Modules/_hacl/Hacl_Hash_Blake2b.o", + "build/Modules/_hacl/Hacl_Hash_Blake2b_Simd256.o", + "build/Modules/_hacl/Hacl_Hash_Blake2s.o", + "build/Modules/_hacl/Hacl_Hash_Blake2s_Simd128.o", + "build/Modules/_hacl/Lib_Memzero0.o", + "build/Modules/blake2module.o" + ], + "required": false, + "variant": "default" + } + ], + "_bz2": [ + { + "in_core": false, + "init_fn": "PyInit__bz2", + "license_paths": [ + "licenses/LICENSE.bzip2.txt" + ], + "license_public_domain": false, + "licenses": [ + "bzip2-1.0.6" + ], + "links": [ + { + "name": "bz2", + "path_static": "build/lib/libbz2.a" + } + ], + "objs": [ + "build/Modules/_bz2module.o" + ], + "required": false, + "variant": "default" + } + ], + "_codecs": [ + { + "in_core": false, + "init_fn": "PyInit__codecs", + "links": [], + "objs": [ + "build/Modules/_codecsmodule.o" + ], + "required": true, + "variant": "default" + } + ], + "_codecs_cn": [ + { + "in_core": false, + "init_fn": "PyInit__codecs_cn", + "links": [], + "objs": [ + "build/Modules/cjkcodecs/_codecs_cn.o" + ], + "required": false, + "variant": "default" + } + ], + "_codecs_hk": [ + { + "in_core": false, + "init_fn": "PyInit__codecs_hk", + "links": [], + "objs": [ + "build/Modules/cjkcodecs/_codecs_hk.o" + ], + "required": false, + "variant": "default" + } + ], + "_codecs_iso2022": [ + { + "in_core": false, + "init_fn": "PyInit__codecs_iso2022", + "links": [], + "objs": [ + "build/Modules/cjkcodecs/_codecs_iso2022.o" + ], + "required": false, + "variant": "default" + } + ], + "_codecs_jp": [ + { + "in_core": false, + "init_fn": "PyInit__codecs_jp", + "links": [], + "objs": [ + "build/Modules/cjkcodecs/_codecs_jp.o" + ], + "required": false, + "variant": "default" + } + ], + "_codecs_kr": [ + { + "in_core": false, + "init_fn": "PyInit__codecs_kr", + "links": [], + "objs": [ + "build/Modules/cjkcodecs/_codecs_kr.o" + ], + "required": false, + "variant": "default" + } + ], + "_codecs_tw": [ + { + "in_core": false, + "init_fn": "PyInit__codecs_tw", + "links": [], + "objs": [ + "build/Modules/cjkcodecs/_codecs_tw.o" + ], + "required": false, + "variant": "default" + } + ], + "_collections": [ + { + "in_core": false, + "init_fn": "PyInit__collections", + "links": [], + "objs": [ + "build/Modules/_collectionsmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_contextvars": [ + { + "in_core": true, + "init_fn": "PyInit__contextvars", + "links": [], + "objs": [], + "required": false, + "variant": "default" + } + ], + "_csv": [ + { + "in_core": false, + "init_fn": "PyInit__csv", + "links": [], + "objs": [ + "build/Modules/_csv.o" + ], + "required": false, + "variant": "default" + } + ], + "_ctypes": [ + { + "in_core": false, + "init_fn": "PyInit__ctypes", + "license_paths": [ + "licenses/LICENSE.libffi.txt" + ], + "license_public_domain": false, + "licenses": [ + "MIT" + ], + "links": [ + { + "name": "dl", + "system": true + }, + { + "name": "ffi", + "path_static": "build/lib/libffi.a" + } + ], + "objs": [ + "build/Modules/_ctypes/_ctypes.o", + "build/Modules/_ctypes/callbacks.o", + "build/Modules/_ctypes/callproc.o", + "build/Modules/_ctypes/cfield.o", + "build/Modules/_ctypes/stgdict.o" + ], + "required": false, + "variant": "default" + } + ], + "_ctypes_test": [ + { + "in_core": false, + "init_fn": "PyInit__ctypes_test", + "links": [ + { + "name": "m", + "system": true + } + ], + "objs": [ + "build/Modules/_ctypes/_ctypes_test.o" + ], + "required": false, + "shared_lib": "install/lib/python3.14/lib-dynload/_ctypes_test.cpython-314-x86_64-linux-gnu.so", + "variant": "default" + } + ], + "_curses": [ + { + "in_core": false, + "init_fn": "PyInit__curses", + "license_paths": [ + "licenses/LICENSE.ncurses.txt" + ], + "license_public_domain": false, + "licenses": [ + "X11" + ], + "links": [ + { + "name": "ncursesw", + "path_static": "build/lib/libncursesw.a" + } + ], + "objs": [ + "build/Modules/_cursesmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_curses_panel": [ + { + "in_core": false, + "init_fn": "PyInit__curses_panel", + "license_paths": [ + "licenses/LICENSE.ncurses.txt" + ], + "license_public_domain": false, + "licenses": [ + "X11" + ], + "links": [ + { + "name": "ncursesw", + "path_static": "build/lib/libncursesw.a" + }, + { + "name": "panelw", + "path_static": "build/lib/libpanelw.a" + } + ], + "objs": [ + "build/Modules/_curses_panel.o" + ], + "required": false, + "variant": "default" + } + ], + "_datetime": [ + { + "in_core": false, + "init_fn": "PyInit__datetime", + "links": [ + { + "name": "m", + "system": true + } + ], + "objs": [ + "build/Modules/_datetimemodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_dbm": [ + { + "in_core": false, + "init_fn": "PyInit__dbm", + "license_paths": [ + "licenses/LICENSE.bdb.txt" + ], + "license_public_domain": false, + "licenses": [ + "Sleepycat" + ], + "links": [ + { + "name": "db", + "path_static": "build/lib/libdb.a" + } + ], + "objs": [ + "build/Modules/_dbmmodule.o" + ], + "required": false, + "shared_lib": "install/lib/python3.14/lib-dynload/_dbm.cpython-314-x86_64-linux-gnu.so", + "variant": "default" + } + ], + "_decimal": [ + { + "in_core": false, + "init_fn": "PyInit__decimal", + "license_paths": [ + "licenses/LICENSE.mpdecimal.txt" + ], + "license_public_domain": false, + "licenses": [ + "BSD-2-Clause" + ], + "links": [ + { + "name": "m", + "system": true + }, + { + "name": "mpdec", + "path_static": "build/lib/libmpdec.a" + } + ], + "objs": [ + "build/Modules/_decimal/_decimal.o" + ], + "required": false, + "variant": "default" + } + ], + "_elementtree": [ + { + "in_core": false, + "init_fn": "PyInit__elementtree", + "links": [], + "objs": [ + "build/Modules/_elementtree.o" + ], + "required": false, + "variant": "default" + } + ], + "_functools": [ + { + "in_core": false, + "init_fn": "PyInit__functools", + "links": [], + "objs": [ + "build/Modules/_functoolsmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_hashlib": [ + { + "in_core": false, + "init_fn": "PyInit__hashlib", + "license_paths": [ + "licenses/LICENSE.openssl-1.1.txt", + "licenses/LICENSE.openssl-3.txt" + ], + "license_public_domain": false, + "licenses": [ + "Apache-2.0", + "OpenSSL" + ], + "links": [ + { + "name": "crypto", + "path_static": "build/lib/libcrypto.a" + } + ], + "objs": [ + "build/Modules/_hashopenssl.o" + ], + "required": false, + "variant": "default" + } + ], + "_heapq": [ + { + "in_core": false, + "init_fn": "PyInit__heapq", + "links": [], + "objs": [ + "build/Modules/_heapqmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_hmac": [ + { + "in_core": false, + "init_fn": "PyInit__hmac", + "links": [], + "objs": [ + "build/Modules/_hacl/Hacl_HMAC.o", + "build/Modules/_hacl/Hacl_Hash_Blake2b.o", + "build/Modules/_hacl/Hacl_Hash_Blake2b_Simd256.o", + "build/Modules/_hacl/Hacl_Hash_Blake2s.o", + "build/Modules/_hacl/Hacl_Hash_Blake2s_Simd128.o", + "build/Modules/_hacl/Hacl_Hash_MD5.o", + "build/Modules/_hacl/Hacl_Hash_SHA1.o", + "build/Modules/_hacl/Hacl_Hash_SHA2.o", + "build/Modules/_hacl/Hacl_Hash_SHA3.o", + "build/Modules/_hacl/Hacl_Streaming_HMAC.o", + "build/Modules/_hacl/Lib_Memzero0.o", + "build/Modules/hmacmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_imp": [ + { + "in_core": true, + "init_fn": "PyInit__imp", + "links": [], + "objs": [], + "required": false, + "variant": "default" + } + ], + "_interpchannels": [ + { + "in_core": false, + "init_fn": "PyInit__interpchannels", + "links": [], + "objs": [ + "build/Modules/_interpchannelsmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_interpqueues": [ + { + "in_core": false, + "init_fn": "PyInit__interpqueues", + "links": [], + "objs": [ + "build/Modules/_interpqueuesmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_interpreters": [ + { + "in_core": false, + "init_fn": "PyInit__interpreters", + "links": [], + "objs": [ + "build/Modules/_interpretersmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_io": [ + { + "in_core": false, + "init_fn": "PyInit__io", + "links": [], + "objs": [ + "build/Modules/_io/_iomodule.o", + "build/Modules/_io/bufferedio.o", + "build/Modules/_io/bytesio.o", + "build/Modules/_io/fileio.o", + "build/Modules/_io/iobase.o", + "build/Modules/_io/stringio.o", + "build/Modules/_io/textio.o" + ], + "required": true, + "variant": "default" + } + ], + "_json": [ + { + "in_core": false, + "init_fn": "PyInit__json", + "links": [], + "objs": [ + "build/Modules/_json.o" + ], + "required": false, + "variant": "default" + } + ], + "_locale": [ + { + "in_core": false, + "init_fn": "PyInit__locale", + "links": [], + "objs": [ + "build/Modules/_localemodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_lsprof": [ + { + "in_core": false, + "init_fn": "PyInit__lsprof", + "links": [], + "objs": [ + "build/Modules/_lsprof.o", + "build/Modules/rotatingtree.o" + ], + "required": false, + "variant": "default" + } + ], + "_lzma": [ + { + "in_core": false, + "init_fn": "PyInit__lzma", + "license_paths": [ + "licenses/LICENSE.liblzma.txt" + ], + "license_public_domain": false, + "licenses": [ + "0BSD" + ], + "links": [ + { + "name": "lzma", + "path_static": "build/lib/liblzma.a" + }, + { + "name": "pthread", + "system": true + } + ], + "objs": [ + "build/Modules/_lzmamodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_md5": [ + { + "in_core": false, + "init_fn": "PyInit__md5", + "links": [], + "objs": [ + "build/Modules/_hacl/Hacl_Hash_MD5.o", + "build/Modules/md5module.o" + ], + "required": false, + "variant": "default" + } + ], + "_multibytecodec": [ + { + "in_core": false, + "init_fn": "PyInit__multibytecodec", + "links": [], + "objs": [ + "build/Modules/cjkcodecs/multibytecodec.o" + ], + "required": false, + "variant": "default" + } + ], + "_multiprocessing": [ + { + "in_core": false, + "init_fn": "PyInit__multiprocessing", + "links": [], + "objs": [ + "build/Modules/_multiprocessing/multiprocessing.o", + "build/Modules/_multiprocessing/semaphore.o" + ], + "required": false, + "variant": "default" + } + ], + "_opcode": [ + { + "in_core": false, + "init_fn": "PyInit__opcode", + "links": [], + "objs": [ + "build/Modules/_opcode.o" + ], + "required": false, + "variant": "default" + } + ], + "_operator": [ + { + "in_core": false, + "init_fn": "PyInit__operator", + "links": [], + "objs": [ + "build/Modules/_operator.o" + ], + "required": false, + "variant": "default" + } + ], + "_pickle": [ + { + "in_core": false, + "init_fn": "PyInit__pickle", + "links": [], + "objs": [ + "build/Modules/_pickle.o" + ], + "required": false, + "variant": "default" + } + ], + "_posixshmem": [ + { + "in_core": false, + "init_fn": "PyInit__posixshmem", + "links": [ + { + "name": "rt", + "system": true + } + ], + "objs": [ + "build/Modules/_multiprocessing/posixshmem.o" + ], + "required": false, + "variant": "default" + } + ], + "_posixsubprocess": [ + { + "in_core": false, + "init_fn": "PyInit__posixsubprocess", + "links": [], + "objs": [ + "build/Modules/_posixsubprocess.o" + ], + "required": false, + "variant": "default" + } + ], + "_queue": [ + { + "in_core": false, + "init_fn": "PyInit__queue", + "links": [], + "objs": [ + "build/Modules/_queuemodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_random": [ + { + "in_core": false, + "init_fn": "PyInit__random", + "links": [], + "objs": [ + "build/Modules/_randommodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_remote_debugging": [ + { + "in_core": false, + "init_fn": "PyInit__remote_debugging", + "links": [], + "objs": [ + "build/Modules/_remote_debugging_module.o" + ], + "required": false, + "variant": "default" + } + ], + "_sha1": [ + { + "in_core": false, + "init_fn": "PyInit__sha1", + "links": [], + "objs": [ + "build/Modules/_hacl/Hacl_Hash_SHA1.o", + "build/Modules/sha1module.o" + ], + "required": false, + "variant": "default" + } + ], + "_sha2": [ + { + "in_core": false, + "init_fn": "PyInit__sha2", + "links": [], + "objs": [ + "build/Modules/_hacl/Hacl_Hash_SHA2.o", + "build/Modules/sha2module.o" + ], + "required": false, + "variant": "default" + } + ], + "_sha3": [ + { + "in_core": false, + "init_fn": "PyInit__sha3", + "links": [], + "objs": [ + "build/Modules/_hacl/Hacl_Hash_SHA3.o", + "build/Modules/sha3module.o" + ], + "required": false, + "variant": "default" + } + ], + "_signal": [ + { + "in_core": false, + "init_fn": "PyInit__signal", + "links": [], + "objs": [ + "build/Modules/signalmodule.o" + ], + "required": true, + "variant": "default" + } + ], + "_socket": [ + { + "in_core": false, + "init_fn": "PyInit__socket", + "links": [], + "objs": [ + "build/Modules/socketmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_sqlite3": [ + { + "in_core": false, + "init_fn": "PyInit__sqlite3", + "license_paths": [ + "licenses/LICENSE.sqlite.txt", + "licenses/LICENSE.zlib-ng.txt", + "licenses/LICENSE.zlib.txt" + ], + "license_public_domain": false, + "licenses": [ + "Zlib" + ], + "links": [ + { + "name": "dl", + "system": true + }, + { + "name": "m", + "system": true + }, + { + "name": "pthread", + "system": true + }, + { + "name": "sqlite3", + "path_static": "build/lib/libsqlite3.a" + }, + { + "name": "z", + "path_static": "build/lib/libz.a" + } + ], + "objs": [ + "build/Modules/_sqlite/blob.o", + "build/Modules/_sqlite/connection.o", + "build/Modules/_sqlite/cursor.o", + "build/Modules/_sqlite/microprotocols.o", + "build/Modules/_sqlite/module.o", + "build/Modules/_sqlite/prepare_protocol.o", + "build/Modules/_sqlite/row.o", + "build/Modules/_sqlite/statement.o", + "build/Modules/_sqlite/util.o" + ], + "required": false, + "variant": "default" + } + ], + "_sre": [ + { + "in_core": false, + "init_fn": "PyInit__sre", + "links": [], + "objs": [ + "build/Modules/_sre/sre.o" + ], + "required": false, + "variant": "default" + } + ], + "_ssl": [ + { + "in_core": false, + "init_fn": "PyInit__ssl", + "license_paths": [ + "licenses/LICENSE.openssl-1.1.txt", + "licenses/LICENSE.openssl-3.txt" + ], + "license_public_domain": false, + "licenses": [ + "Apache-2.0", + "OpenSSL" + ], + "links": [ + { + "name": "crypto", + "path_static": "build/lib/libcrypto.a" + }, + { + "name": "ssl", + "path_static": "build/lib/libssl.a" + } + ], + "objs": [ + "build/Modules/_ssl.o" + ], + "required": false, + "variant": "default" + } + ], + "_stat": [ + { + "in_core": false, + "init_fn": "PyInit__stat", + "links": [], + "objs": [ + "build/Modules/_stat.o" + ], + "required": false, + "variant": "default" + } + ], + "_statistics": [ + { + "in_core": false, + "init_fn": "PyInit__statistics", + "links": [ + { + "name": "m", + "system": true + } + ], + "objs": [ + "build/Modules/_statisticsmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_string": [ + { + "in_core": true, + "init_fn": "PyInit__string", + "links": [], + "objs": [], + "required": false, + "variant": "default" + } + ], + "_struct": [ + { + "in_core": false, + "init_fn": "PyInit__struct", + "links": [], + "objs": [ + "build/Modules/_struct.o" + ], + "required": false, + "variant": "default" + } + ], + "_suggestions": [ + { + "in_core": false, + "init_fn": "PyInit__suggestions", + "links": [], + "objs": [ + "build/Modules/_suggestions.o" + ], + "required": false, + "variant": "default" + } + ], + "_symtable": [ + { + "in_core": false, + "init_fn": "PyInit__symtable", + "links": [], + "objs": [ + "build/Modules/symtablemodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_sysconfig": [ + { + "in_core": false, + "init_fn": "PyInit__sysconfig", + "links": [], + "objs": [ + "build/Modules/_sysconfig.o" + ], + "required": false, + "variant": "default" + } + ], + "_testbuffer": [ + { + "in_core": false, + "init_fn": "PyInit__testbuffer", + "links": [], + "objs": [ + "build/Modules/_testbuffer.o" + ], + "required": false, + "shared_lib": "install/lib/python3.14/lib-dynload/_testbuffer.cpython-314-x86_64-linux-gnu.so", + "variant": "default" + } + ], + "_testcapi": [ + { + "in_core": false, + "init_fn": "PyInit__testcapi", + "links": [], + "objs": [ + "build/Modules/_testcapi/abstract.o", + "build/Modules/_testcapi/buffer.o", + "build/Modules/_testcapi/bytes.o", + "build/Modules/_testcapi/code.o", + "build/Modules/_testcapi/codec.o", + "build/Modules/_testcapi/complex.o", + "build/Modules/_testcapi/config.o", + "build/Modules/_testcapi/datetime.o", + "build/Modules/_testcapi/dict.o", + "build/Modules/_testcapi/docstring.o", + "build/Modules/_testcapi/exceptions.o", + "build/Modules/_testcapi/file.o", + "build/Modules/_testcapi/float.o", + "build/Modules/_testcapi/frame.o", + "build/Modules/_testcapi/function.o", + "build/Modules/_testcapi/gc.o", + "build/Modules/_testcapi/getargs.o", + "build/Modules/_testcapi/hash.o", + "build/Modules/_testcapi/heaptype.o", + "build/Modules/_testcapi/immortal.o", + "build/Modules/_testcapi/import.o", + "build/Modules/_testcapi/list.o", + "build/Modules/_testcapi/long.o", + "build/Modules/_testcapi/mem.o", + "build/Modules/_testcapi/monitoring.o", + "build/Modules/_testcapi/numbers.o", + "build/Modules/_testcapi/object.o", + "build/Modules/_testcapi/pyatomic.o", + "build/Modules/_testcapi/run.o", + "build/Modules/_testcapi/set.o", + "build/Modules/_testcapi/structmember.o", + "build/Modules/_testcapi/time.o", + "build/Modules/_testcapi/tuple.o", + "build/Modules/_testcapi/type.o", + "build/Modules/_testcapi/unicode.o", + "build/Modules/_testcapi/vectorcall.o", + "build/Modules/_testcapi/watchers.o", + "build/Modules/_testcapi/weakref.o", + "build/Modules/_testcapimodule.o" + ], + "required": false, + "shared_lib": "install/lib/python3.14/lib-dynload/_testcapi.cpython-314-x86_64-linux-gnu.so", + "variant": "default" + } + ], + "_testimportmultiple": [ + { + "in_core": false, + "init_fn": "PyInit__testimportmultiple", + "links": [], + "objs": [ + "build/Modules/_testimportmultiple.o" + ], + "required": false, + "shared_lib": "install/lib/python3.14/lib-dynload/_testimportmultiple.cpython-314-x86_64-linux-gnu.so", + "variant": "default" + } + ], + "_testinternalcapi": [ + { + "in_core": false, + "init_fn": "PyInit__testinternalcapi", + "links": [], + "objs": [ + "build/Modules/_testinternalcapi/complex.o", + "build/Modules/_testinternalcapi/pytime.o", + "build/Modules/_testinternalcapi/set.o", + "build/Modules/_testinternalcapi/test_critical_sections.o", + "build/Modules/_testinternalcapi/test_lock.o", + "build/Modules/_testinternalcapi.o" + ], + "required": false, + "variant": "default" + } + ], + "_testlimitedcapi": [ + { + "in_core": false, + "init_fn": "PyInit__testlimitedcapi", + "links": [], + "objs": [ + "build/Modules/_testlimitedcapi/abstract.o", + "build/Modules/_testlimitedcapi/bytearray.o", + "build/Modules/_testlimitedcapi/bytes.o", + "build/Modules/_testlimitedcapi/capsule.o", + "build/Modules/_testlimitedcapi/codec.o", + "build/Modules/_testlimitedcapi/complex.o", + "build/Modules/_testlimitedcapi/dict.o", + "build/Modules/_testlimitedcapi/eval.o", + "build/Modules/_testlimitedcapi/file.o", + "build/Modules/_testlimitedcapi/float.o", + "build/Modules/_testlimitedcapi/heaptype_relative.o", + "build/Modules/_testlimitedcapi/import.o", + "build/Modules/_testlimitedcapi/list.o", + "build/Modules/_testlimitedcapi/long.o", + "build/Modules/_testlimitedcapi/object.o", + "build/Modules/_testlimitedcapi/pyos.o", + "build/Modules/_testlimitedcapi/run.o", + "build/Modules/_testlimitedcapi/set.o", + "build/Modules/_testlimitedcapi/sys.o", + "build/Modules/_testlimitedcapi/tuple.o", + "build/Modules/_testlimitedcapi/unicode.o", + "build/Modules/_testlimitedcapi/vectorcall_limited.o", + "build/Modules/_testlimitedcapi/version.o", + "build/Modules/_testlimitedcapi/weakref.o", + "build/Modules/_testlimitedcapi.o" + ], + "required": false, + "shared_lib": "install/lib/python3.14/lib-dynload/_testlimitedcapi.cpython-314-x86_64-linux-gnu.so", + "variant": "default" + } + ], + "_testmultiphase": [ + { + "in_core": false, + "init_fn": "PyInit__testmultiphase", + "links": [], + "objs": [ + "build/Modules/_testmultiphase.o" + ], + "required": false, + "shared_lib": "install/lib/python3.14/lib-dynload/_testmultiphase.cpython-314-x86_64-linux-gnu.so", + "variant": "default" + } + ], + "_testsinglephase": [ + { + "in_core": false, + "init_fn": "PyInit__testsinglephase", + "links": [], + "objs": [ + "build/Modules/_testsinglephase.o" + ], + "required": false, + "shared_lib": "install/lib/python3.14/lib-dynload/_testsinglephase.cpython-314-x86_64-linux-gnu.so", + "variant": "default" + } + ], + "_thread": [ + { + "in_core": false, + "init_fn": "PyInit__thread", + "links": [], + "objs": [ + "build/Modules/_threadmodule.o" + ], + "required": true, + "variant": "default" + } + ], + "_tkinter": [ + { + "in_core": false, + "init_fn": "PyInit__tkinter", + "license_paths": [ + "licenses/LICENSE.libX11.txt", + "licenses/LICENSE.libXau.txt", + "licenses/LICENSE.libxcb.txt", + "licenses/LICENSE.tcl.txt", + "licenses/LICENSE.zlib-ng.txt", + "licenses/LICENSE.zlib.txt" + ], + "license_public_domain": false, + "licenses": [ + "MIT", + "TCL", + "X11", + "Zlib" + ], + "links": [ + { + "name": "X11", + "path_static": "build/lib/libX11.a" + }, + { + "name": "Xau", + "path_static": "build/lib/libXau.a" + }, + { + "name": "dl", + "system": true + }, + { + "name": "m", + "system": true + }, + { + "name": "pthread", + "system": true + }, + { + "name": "tcl9.0", + "system": true + }, + { + "name": "tcl9tk9.0", + "system": true + }, + { + "name": "tclstub", + "path_static": "build/lib/libtclstub.a" + }, + { + "name": "tkstub", + "path_static": "build/lib/libtkstub.a" + }, + { + "name": "xcb", + "path_static": "build/lib/libxcb.a" + }, + { + "name": "z", + "path_static": "build/lib/libz.a" + } + ], + "objs": [ + "build/Modules/_tkinter.o", + "build/Modules/tkappinit.o" + ], + "required": false, + "shared_lib": "install/lib/python3.14/lib-dynload/_tkinter.cpython-314-x86_64-linux-gnu.so", + "variant": "default" + } + ], + "_tokenize": [ + { + "in_core": true, + "init_fn": "PyInit__tokenize", + "links": [], + "objs": [], + "required": false, + "variant": "default" + } + ], + "_tracemalloc": [ + { + "in_core": false, + "init_fn": "PyInit__tracemalloc", + "links": [], + "objs": [ + "build/Modules/_tracemalloc.o" + ], + "required": true, + "variant": "default" + } + ], + "_types": [ + { + "in_core": false, + "init_fn": "PyInit__types", + "links": [], + "objs": [ + "build/Modules/_typesmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_typing": [ + { + "in_core": false, + "init_fn": "PyInit__typing", + "links": [], + "objs": [ + "build/Modules/_typingmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_uuid": [ + { + "in_core": false, + "init_fn": "PyInit__uuid", + "license_paths": [ + "licenses/LICENSE.libuuid.txt" + ], + "license_public_domain": false, + "licenses": [ + "BSD-3-Clause" + ], + "links": [ + { + "name": "uuid", + "path_static": "build/lib/libuuid.a" + } + ], + "objs": [ + "build/Modules/_uuidmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_warnings": [ + { + "in_core": true, + "init_fn": "_PyWarnings_Init", + "links": [], + "objs": [], + "required": false, + "variant": "default" + } + ], + "_weakref": [ + { + "in_core": false, + "init_fn": "PyInit__weakref", + "links": [], + "objs": [ + "build/Modules/_weakref.o" + ], + "required": true, + "variant": "default" + } + ], + "_xxtestfuzz": [ + { + "in_core": false, + "init_fn": "PyInit__xxtestfuzz", + "links": [], + "objs": [ + "build/Modules/_xxtestfuzz/_xxtestfuzz.o", + "build/Modules/_xxtestfuzz/fuzzer.o" + ], + "required": false, + "variant": "default" + } + ], + "_zoneinfo": [ + { + "in_core": false, + "init_fn": "PyInit__zoneinfo", + "links": [], + "objs": [ + "build/Modules/_zoneinfo.o" + ], + "required": false, + "variant": "default" + } + ], + "_zstd": [ + { + "in_core": false, + "init_fn": "PyInit__zstd", + "license_paths": [ + "licenses/LICENSE.zstd.txt" + ], + "license_public_domain": false, + "licenses": [ + "BSD-3-Clause" + ], + "links": [ + { + "name": "zstd", + "path_static": "build/lib/libzstd.a" + } + ], + "objs": [ + "build/Modules/_zstd/_zstdmodule.o", + "build/Modules/_zstd/compressor.o", + "build/Modules/_zstd/decompressor.o", + "build/Modules/_zstd/zstddict.o" + ], + "required": false, + "variant": "default" + } + ], + "array": [ + { + "in_core": false, + "init_fn": "PyInit_array", + "links": [], + "objs": [ + "build/Modules/arraymodule.o" + ], + "required": false, + "variant": "default" + } + ], + "atexit": [ + { + "in_core": false, + "init_fn": "PyInit_atexit", + "links": [], + "objs": [ + "build/Modules/atexitmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "binascii": [ + { + "in_core": false, + "init_fn": "PyInit_binascii", + "license_paths": [ + "licenses/LICENSE.zlib-ng.txt", + "licenses/LICENSE.zlib.txt" + ], + "license_public_domain": false, + "licenses": [ + "Zlib" + ], + "links": [ + { + "name": "z", + "path_static": "build/lib/libz.a" + } + ], + "objs": [ + "build/Modules/binascii.o" + ], + "required": false, + "variant": "default" + } + ], + "builtins": [ + { + "in_core": true, + "init_fn": "NULL", + "links": [], + "objs": [], + "required": false, + "variant": "default" + } + ], + "cmath": [ + { + "in_core": false, + "init_fn": "PyInit_cmath", + "links": [ + { + "name": "m", + "system": true + } + ], + "objs": [ + "build/Modules/cmathmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "errno": [ + { + "in_core": false, + "init_fn": "PyInit_errno", + "links": [], + "objs": [ + "build/Modules/errnomodule.o" + ], + "required": false, + "variant": "default" + } + ], + "faulthandler": [ + { + "in_core": false, + "init_fn": "PyInit_faulthandler", + "links": [], + "objs": [ + "build/Modules/faulthandler.o" + ], + "required": true, + "variant": "default" + } + ], + "fcntl": [ + { + "in_core": false, + "init_fn": "PyInit_fcntl", + "links": [], + "objs": [ + "build/Modules/fcntlmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "gc": [ + { + "in_core": true, + "init_fn": "PyInit_gc", + "links": [], + "objs": [], + "required": false, + "variant": "default" + } + ], + "grp": [ + { + "in_core": false, + "init_fn": "PyInit_grp", + "links": [], + "objs": [ + "build/Modules/grpmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "itertools": [ + { + "in_core": false, + "init_fn": "PyInit_itertools", + "links": [], + "objs": [ + "build/Modules/itertoolsmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "marshal": [ + { + "in_core": true, + "init_fn": "PyMarshal_Init", + "links": [], + "objs": [], + "required": false, + "variant": "default" + } + ], + "math": [ + { + "in_core": false, + "init_fn": "PyInit_math", + "links": [ + { + "name": "m", + "system": true + } + ], + "objs": [ + "build/Modules/mathmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "mmap": [ + { + "in_core": false, + "init_fn": "PyInit_mmap", + "links": [], + "objs": [ + "build/Modules/mmapmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "posix": [ + { + "in_core": false, + "init_fn": "PyInit_posix", + "links": [], + "objs": [ + "build/Modules/posixmodule.o" + ], + "required": true, + "variant": "default" + } + ], + "pwd": [ + { + "in_core": false, + "init_fn": "PyInit_pwd", + "links": [], + "objs": [ + "build/Modules/pwdmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "pyexpat": [ + { + "in_core": false, + "init_fn": "PyInit_pyexpat", + "license_paths": [ + "licenses/LICENSE.expat.txt" + ], + "license_public_domain": false, + "licenses": [ + "MIT" + ], + "links": [ + { + "name": "expat", + "path_static": "build/lib/libexpat.a" + } + ], + "objs": [ + "build/Modules/pyexpat.o" + ], + "required": false, + "variant": "default" + } + ], + "readline": [ + { + "in_core": false, + "init_fn": "PyInit_readline", + "license_paths": [ + "licenses/LICENSE.libedit.txt", + "licenses/LICENSE.ncurses.txt" + ], + "license_public_domain": false, + "licenses": [ + "BSD-3-Clause", + "X11" + ], + "links": [ + { + "name": "edit", + "path_static": "build/lib/libedit.a" + }, + { + "name": "ncursesw", + "path_static": "build/lib/libncursesw.a" + } + ], + "objs": [ + "build/Modules/readline.o" + ], + "required": false, + "variant": "default" + } + ], + "resource": [ + { + "in_core": false, + "init_fn": "PyInit_resource", + "links": [], + "objs": [ + "build/Modules/resource.o" + ], + "required": false, + "variant": "default" + } + ], + "select": [ + { + "in_core": false, + "init_fn": "PyInit_select", + "links": [], + "objs": [ + "build/Modules/selectmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "sys": [ + { + "in_core": true, + "init_fn": "NULL", + "links": [], + "objs": [], + "required": false, + "variant": "default" + } + ], + "syslog": [ + { + "in_core": false, + "init_fn": "PyInit_syslog", + "links": [], + "objs": [ + "build/Modules/syslogmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "termios": [ + { + "in_core": false, + "init_fn": "PyInit_termios", + "links": [], + "objs": [ + "build/Modules/termios.o" + ], + "required": false, + "variant": "default" + } + ], + "time": [ + { + "in_core": false, + "init_fn": "PyInit_time", + "links": [], + "objs": [ + "build/Modules/timemodule.o" + ], + "required": false, + "variant": "default" + } + ], + "unicodedata": [ + { + "in_core": false, + "init_fn": "PyInit_unicodedata", + "links": [], + "objs": [ + "build/Modules/unicodedata.o" + ], + "required": false, + "variant": "default" + } + ], + "xxsubtype": [ + { + "in_core": false, + "init_fn": "PyInit_xxsubtype", + "links": [], + "objs": [ + "build/Modules/xxsubtype.o" + ], + "required": false, + "variant": "default" + } + ], + "zlib": [ + { + "in_core": false, + "init_fn": "PyInit_zlib", + "license_paths": [ + "licenses/LICENSE.zlib-ng.txt", + "licenses/LICENSE.zlib.txt" + ], + "license_public_domain": false, + "licenses": [ + "Zlib" + ], + "links": [ + { + "name": "z", + "path_static": "build/lib/libz.a" + } + ], + "objs": [ + "build/Modules/zlibmodule.o" + ], + "required": false, + "variant": "default" + } + ] + }, + "inittab_cflags": [ + "-std=c99", + "-DNDEBUG", + "-DPy_BUILD_CORE" + ], + "inittab_object": "build/Modules/config.o", + "inittab_source": "build/Modules/config.c", + "object_file_format": "llvm-bitcode:%22.1.3" + }, + "build_options": "pgo+lto", + "crt_features": [ + "glibc-dynamic", + "glibc-max-symbol-version:2.17)" + ], + "libpython_link_mode": "shared", + "license_path": "licenses/LICENSE.cpython.txt", + "licenses": [ + "Python-2.0", + "CNRI-Python" + ], + "optimizations": "pgo+lto", + "python_abi_tag": "", + "python_bytecode_magic_number": "2b0e0d0a", + "python_config_vars": { + "ABIFLAGS": "", + "ABI_THREAD": "", + "AC_APPLE_UNIVERSAL_BUILD": "0", + "AIX_BUILDDATE": "0", + "AIX_GENUINE_CPLUSPLUS": "0", + "ALIGNOF_LONG": "8", + "ALIGNOF_MAX_ALIGN_T": "16", + "ALIGNOF_SIZE_T": "8", + "ALT_SOABI": "0", + "ANDROID_API_LEVEL": "0", + "APP_STORE_COMPLIANCE_PATCH": "", + "AR": "/tools/llvm/bin/llvm-ar", + "ARFLAGS": "rcs", + "BASECFLAGS": "-fno-strict-overflow -Wsign-compare -Wunreachable-code", + "BASECPPFLAGS": "", + "BASEMODLIBS": "", + "BINDIR": "/install/bin", + "BINLIBDEST": "/install/lib/python3.14", + "BLDLIBRARY": "-L. -lpython3.14", + "BLDSHARED": "clang -pthread -shared -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--build-id=sha1 -Wl,--exclude-libs,ALL", + "BOOTSTRAP_HEADERS": "\\", + "BUILDEXE": "", + "BUILDPYTHON": "python", + "BUILD_GNU_TYPE": "x86_64-unknown-linux-gnu", + "BUILD_SCRIPTS_DIR": "build/scripts-3.14", + "BYTESTR_DEPS": "\\", + "CC": "clang -pthread", + "CCSHARED": "-fPIC", + "CFLAGS": "-fno-strict-overflow -Wsign-compare -Wunreachable-code -DNDEBUG -g -O3 -Wall -O3 -fstack-protector -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC ", + "CFLAGSFORSHARED": "-fPIC", + "CFLAGS_ALIASING": "", + "CFLAGS_CEVAL": "-finline-max-stacksize=512", + "CODECS_COMMON_HEADERS": "./Modules/cjkcodecs/multibytecodec.h ./Modules/cjkcodecs/cjkcodecs.h", + "COMPILEALL_OPTS": "-j0", + "CONFIGFILES": "configure configure.ac acconfig.h pyconfig.h.in Makefile.pre.in", + "CONFIGURE_CFLAGS": " -O3 -fstack-protector -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC ", + "CONFIGURE_CFLAGS_NODIST": "-fno-semantic-interposition -flto=thin -g -fno-pie -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -D_Py_TIER2=3 -D_Py_JIT", + "CONFIGURE_CPPFLAGS": " -O3 -fstack-protector -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC ", + "CONFIGURE_LDFLAGS": "-Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--build-id=sha1 -Wl,--exclude-libs,ALL", + "CONFIGURE_LDFLAGS_NODIST": "-fno-semantic-interposition -flto=thin -g -Wl,--emit-relocs", + "CONFIGURE_LDFLAGS_NOLTO": "-flto=thin", + "CONFIG_ARGS": "'--build=x86_64-unknown-linux-gnu' '--host=x86_64-unknown-linux-gnu' '--prefix=/install' '--with-openssl=/tools/deps' '--with-system-expat' '--with-system-libmpdec' '--without-ensurepip' '--with-readline=editline' '--with-tail-call-interp' 'MODULE_BUILDTYPE=static' '--enable-loadable-sqlite-extensions' '--enable-static-libpython-for-interpreter' '--enable-shared' '--with-mimalloc' '--enable-optimizations' '--enable-bolt' '--enable-experimental-jit=yes-off' '--with-lto' '--with-build-python=/tools/host/bin/python3.14' 'ac_cv_func_explicit_bzero=no' '--with-dbmliborder=bdb' 'build_alias=x86_64-unknown-linux-gnu' 'host_alias=x86_64-unknown-linux-gnu' 'PKG_CONFIG=pkg-config --static' 'PKG_CONFIG_PATH=/tools/deps/share/pkgconfig:/tools/deps/lib/pkgconfig' 'CC=clang' 'CFLAGS= -O3 -fstack-protector -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC ' 'LDFLAGS=-Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--build-id=sha1 -Wl,--exclude-libs,ALL' 'CPPFLAGS= -O3 -fstack-protector -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC ' 'PROFILE_TASK=-m test --pgo -j 4 --ignore test.test_bytes.BytesTest.test_from_format' 'BOLT_COMMON_FLAGS=-update-debug-sections -skip-funcs=RC4_options/1,sha256_update/.*,sha512_update/.*,PyBlake2_blake2b_compress/.*,PyBlake2_blake2s_compress/.*,update_block.*' 'BOLT_APPLY_FLAGS=-update-debug-sections -skip-funcs=RC4_options/1,sha256_update/.*,sha512_update/.*,PyBlake2_blake2b_compress/.*,PyBlake2_blake2s_compress/.*,update_block.* -reorder-blocks=ext-tsp -reorder-functions=cdsort -split-functions -split-strategy=cdsplit -icf=safe -inline-all -split-eh -reorder-functions-use-hot-size -peepholes=none -jump-tables=aggressive -inline-ap -indirect-call-promotion=all -dyno-stats -frame-opt=hot'", + "CONFINCLUDEDIR": "/install/include", + "CONFINCLUDEPY": "/install/include/python3.14", + "COREPYTHONPATH": "", + "COVERAGE_INFO": "/build/Python-3.14.7/coverage.info", + "COVERAGE_LCOV_OPTIONS": "--rc lcov_branch_coverage=1", + "COVERAGE_REPORT": "/build/Python-3.14.7/lcov-report", + "COVERAGE_REPORT_OPTIONS": "--rc lcov_branch_coverage=1 --branch-coverage --title \"CPython 3.14 LCOV report [commit $(shell )]\"", + "CPPFLAGS": "-I. -I./Include -O3 -fstack-protector -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC ", + "CXX": "clang++ -pthread", + "DESTDIRS": "/install /install/lib /install/lib/python3.14 /install/lib/python3.14/lib-dynload", + "DESTLIB": "/install/lib/python3.14", + "DESTPATH": "", + "DESTSHARED": "/install/lib/python3.14/lib-dynload", + "DFLAGS": "", + "DIRMODE": "755", + "DIST": "README.rst ChangeLog configure configure.ac acconfig.h pyconfig.h.in Makefile.pre.in Include Lib Misc Ext-dummy", + "DISTDIRS": "Include Lib Misc Ext-dummy", + "DISTFILES": "README.rst ChangeLog configure configure.ac acconfig.h pyconfig.h.in Makefile.pre.in", + "DLINCLDIR": ".", + "DLLLIBRARY": "", + "DOUBLE_IS_ARM_MIXED_ENDIAN_IEEE754": "0", + "DOUBLE_IS_BIG_ENDIAN_IEEE754": "0", + "DOUBLE_IS_LITTLE_ENDIAN_IEEE754": "1", + "DSYMUTIL": "", + "DSYMUTIL_PATH": "", + "DTRACE": "", + "DTRACE_DEPS": "\\", + "DTRACE_HEADERS": "", + "DTRACE_OBJS": "", + "DYNLOADFILE": "dynload_shlib.o", + "EMSCRIPTEN_DIR": "./Platforms/emscripten", + "ENABLE_IPV6": "1", + "ENSUREPIP": "no", + "EXE": "", + "EXEMODE": "755", + "EXENAME": "/install/bin/python3.14", + "EXPORTSFROM": "", + "EXPORTSYMS": "", + "EXTRATESTOPTS": "", + "EXTRA_CFLAGS": "", + "EXT_SUFFIX": ".cpython-314-x86_64-linux-gnu.so", + "FILEMODE": "644", + "FREEZE_MODULE": "/tools/host/bin/python3.14 ./Programs/_freeze_module.py", + "FREEZE_MODULE_BOOTSTRAP": "/tools/host/bin/python3.14 ./Programs/_freeze_module.py", + "FREEZE_MODULE_BOOTSTRAP_DEPS": "./Programs/_freeze_module.py", + "FREEZE_MODULE_DEPS": "./Programs/_freeze_module.py", + "FROZEN_FILES_IN": "\\", + "FROZEN_FILES_OUT": "\\", + "GETPGRP_HAVE_ARG": "0", + "GITBRANCH": "", + "GITTAG": "", + "GITVERSION": "", + "GNULD": "yes", + "HAVE_ACCEPT": "1", + "HAVE_ACCEPT4": "1", + "HAVE_ACOSH": "1", + "HAVE_ADDRINFO": "1", + "HAVE_ALARM": "1", + "HAVE_ALIGNED_REQUIRED": "0", + "HAVE_ALLOCA_H": "1", + "HAVE_ALTZONE": "0", + "HAVE_ASINH": "1", + "HAVE_ASM_TYPES_H": "1", + "HAVE_ATANH": "1", + "HAVE_BACKTRACE": "1", + "HAVE_BIND": "1", + "HAVE_BIND_TEXTDOMAIN_CODESET": "1", + "HAVE_BLUETOOTH_BLUETOOTH_H": "0", + "HAVE_BLUETOOTH_H": "0", + "HAVE_BROKEN_MBSTOWCS": "0", + "HAVE_BROKEN_NICE": "0", + "HAVE_BROKEN_PIPE_BUF": "0", + "HAVE_BROKEN_POLL": "0", + "HAVE_BROKEN_POSIX_SEMAPHORES": "0", + "HAVE_BROKEN_PTHREAD_SIGMASK": "0", + "HAVE_BROKEN_SEM_GETVALUE": "0", + "HAVE_BROKEN_UNSETENV": "0", + "HAVE_BUILTIN_ATOMIC": "1", + "HAVE_BZLIB_H": "1", + "HAVE_CHFLAGS": "0", + "HAVE_CHMOD": "1", + "HAVE_CHOWN": "1", + "HAVE_CHROOT": "1", + "HAVE_CLOCK": "1", + "HAVE_CLOCK_GETRES": "1", + "HAVE_CLOCK_GETTIME": "1", + "HAVE_CLOCK_NANOSLEEP": "1", + "HAVE_CLOCK_SETTIME": "1", + "HAVE_CLOCK_T": "1", + "HAVE_CLOSEFROM": "0", + "HAVE_CLOSE_RANGE": "0", + "HAVE_COMPUTED_GOTOS": "1", + "HAVE_CONFSTR": "1", + "HAVE_CONIO_H": "0", + "HAVE_CONNECT": "1", + "HAVE_COPY_FILE_RANGE": "0", + "HAVE_CTERMID": "1", + "HAVE_CTERMID_R": "0", + "HAVE_CURSES_ESCDELAY": "1", + "HAVE_CURSES_FILTER": "1", + "HAVE_CURSES_GETMOUSE": "1", + "HAVE_CURSES_H": "1", + "HAVE_CURSES_HAS_KEY": "1", + "HAVE_CURSES_IMMEDOK": "1", + "HAVE_CURSES_IS_PAD": "1", + "HAVE_CURSES_IS_TERM_RESIZED": "1", + "HAVE_CURSES_RESIZETERM": "1", + "HAVE_CURSES_RESIZE_TERM": "1", + "HAVE_CURSES_SET_ESCDELAY": "1", + "HAVE_CURSES_SET_TABSIZE": "1", + "HAVE_CURSES_SYNCOK": "1", + "HAVE_CURSES_TABSIZE": "1", + "HAVE_CURSES_TYPEAHEAD": "1", + "HAVE_CURSES_USE_ENV": "1", + "HAVE_CURSES_WCHGAT": "1", + "HAVE_DB_H": "1", + "HAVE_DECL_RTLD_DEEPBIND": "1", + "HAVE_DECL_RTLD_GLOBAL": "1", + "HAVE_DECL_RTLD_LAZY": "1", + "HAVE_DECL_RTLD_LOCAL": "1", + "HAVE_DECL_RTLD_MEMBER": "0", + "HAVE_DECL_RTLD_NODELETE": "1", + "HAVE_DECL_RTLD_NOLOAD": "1", + "HAVE_DECL_RTLD_NOW": "1", + "HAVE_DECL_TZNAME": "0", + "HAVE_DECL_UT_NAMESIZE": "1", + "HAVE_DEVICE_MACROS": "1", + "HAVE_DEV_PTC": "0", + "HAVE_DEV_PTMX": "1", + "HAVE_DIRECT_H": "0", + "HAVE_DIRENT_D_TYPE": "1", + "HAVE_DIRENT_H": "1", + "HAVE_DIRFD": "1", + "HAVE_DLADDR": "1", + "HAVE_DLADDR1": "1", + "HAVE_DLFCN_H": "1", + "HAVE_DLOPEN": "1", + "HAVE_DL_ITERATE_PHDR": "1", + "HAVE_DUP": "1", + "HAVE_DUP2": "1", + "HAVE_DUP3": "1", + "HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH": "0", + "HAVE_DYNAMIC_LOADING": "1", + "HAVE_EDITLINE_READLINE_H": "0", + "HAVE_ENDIAN_H": "1", + "HAVE_EPOLL": "1", + "HAVE_EPOLL_CREATE1": "1", + "HAVE_ERF": "1", + "HAVE_ERFC": "1", + "HAVE_ERRNO_H": "1", + "HAVE_EVENTFD": "1", + "HAVE_EXECINFO_H": "1", + "HAVE_EXECV": "1", + "HAVE_EXPLICIT_BZERO": "0", + "HAVE_EXPLICIT_MEMSET": "0", + "HAVE_EXPM1": "1", + "HAVE_FACCESSAT": "1", + "HAVE_FCHDIR": "1", + "HAVE_FCHMOD": "1", + "HAVE_FCHMODAT": "1", + "HAVE_FCHOWN": "1", + "HAVE_FCHOWNAT": "1", + "HAVE_FCNTL_H": "1", + "HAVE_FDATASYNC": "1", + "HAVE_FDOPENDIR": "1", + "HAVE_FDWALK": "0", + "HAVE_FEXECVE": "1", + "HAVE_FFI_CLOSURE_ALLOC": "1", + "HAVE_FFI_PREP_CIF_VAR": "1", + "HAVE_FFI_PREP_CLOSURE_LOC": "1", + "HAVE_FLOCK": "1", + "HAVE_FORK": "1", + "HAVE_FORK1": "0", + "HAVE_FORKPTY": "1", + "HAVE_FPATHCONF": "1", + "HAVE_FSEEK64": "0", + "HAVE_FSEEKO": "1", + "HAVE_FSTATAT": "1", + "HAVE_FSTATVFS": "1", + "HAVE_FSYNC": "1", + "HAVE_FTELL64": "0", + "HAVE_FTELLO": "1", + "HAVE_FTIME": "1", + "HAVE_FTRUNCATE": "1", + "HAVE_FUTIMENS": "1", + "HAVE_FUTIMES": "1", + "HAVE_FUTIMESAT": "1", + "HAVE_GAI_STRERROR": "1", + "HAVE_GCC_ASM_FOR_MC68881": "0", + "HAVE_GCC_ASM_FOR_X64": "1", + "HAVE_GCC_ASM_FOR_X87": "1", + "HAVE_GCC_UINT128_T": "1", + "HAVE_GDBM_DASH_NDBM_H": "0", + "HAVE_GDBM_H": "0", + "HAVE_GDBM_NDBM_H": "0", + "HAVE_GETADDRINFO": "1", + "HAVE_GETC_UNLOCKED": "1", + "HAVE_GETEGID": "1", + "HAVE_GETENTROPY": "0", + "HAVE_GETEUID": "1", + "HAVE_GETGID": "1", + "HAVE_GETGRENT": "1", + "HAVE_GETGRGID": "1", + "HAVE_GETGRGID_R": "1", + "HAVE_GETGRNAM_R": "1", + "HAVE_GETGROUPLIST": "1", + "HAVE_GETGROUPS": "1", + "HAVE_GETHOSTBYADDR": "1", + "HAVE_GETHOSTBYNAME": "1", + "HAVE_GETHOSTBYNAME_R": "1", + "HAVE_GETHOSTBYNAME_R_3_ARG": "0", + "HAVE_GETHOSTBYNAME_R_5_ARG": "0", + "HAVE_GETHOSTBYNAME_R_6_ARG": "1", + "HAVE_GETHOSTNAME": "1", + "HAVE_GETITIMER": "1", + "HAVE_GETLOADAVG": "1", + "HAVE_GETLOGIN": "1", + "HAVE_GETLOGIN_R": "1", + "HAVE_GETNAMEINFO": "1", + "HAVE_GETPAGESIZE": "1", + "HAVE_GETPEERNAME": "1", + "HAVE_GETPGID": "1", + "HAVE_GETPGRP": "1", + "HAVE_GETPID": "1", + "HAVE_GETPPID": "1", + "HAVE_GETPRIORITY": "1", + "HAVE_GETPROTOBYNAME": "1", + "HAVE_GETPWENT": "1", + "HAVE_GETPWNAM_R": "1", + "HAVE_GETPWUID": "1", + "HAVE_GETPWUID_R": "1", + "HAVE_GETRANDOM": "0", + "HAVE_GETRANDOM_SYSCALL": "1", + "HAVE_GETRESGID": "1", + "HAVE_GETRESUID": "1", + "HAVE_GETRUSAGE": "1", + "HAVE_GETSERVBYNAME": "1", + "HAVE_GETSERVBYPORT": "1", + "HAVE_GETSID": "1", + "HAVE_GETSOCKNAME": "1", + "HAVE_GETSPENT": "1", + "HAVE_GETSPNAM": "1", + "HAVE_GETUID": "1", + "HAVE_GETWD": "1", + "HAVE_GLIBC_MEMMOVE_BUG": "0", + "HAVE_GRANTPT": "1", + "HAVE_GRP_H": "1", + "HAVE_HSTRERROR": "1", + "HAVE_HTOLE64": "1", + "HAVE_IF_NAMEINDEX": "1", + "HAVE_INET_ATON": "1", + "HAVE_INET_NTOA": "1", + "HAVE_INET_PTON": "1", + "HAVE_INITGROUPS": "1", + "HAVE_INTTYPES_H": "1", + "HAVE_IO_H": "0", + "HAVE_IPA_PURE_CONST_BUG": "0", + "HAVE_KILL": "1", + "HAVE_KILLPG": "1", + "HAVE_KQUEUE": "0", + "HAVE_LANGINFO_H": "1", + "HAVE_LARGEFILE_SUPPORT": "0", + "HAVE_LCHFLAGS": "0", + "HAVE_LCHMOD": "0", + "HAVE_LCHOWN": "1", + "HAVE_LIBDB": "1", + "HAVE_LIBDL": "1", + "HAVE_LIBDLD": "0", + "HAVE_LIBIEEE": "0", + "HAVE_LIBINTL_H": "1", + "HAVE_LIBSENDFILE": "0", + "HAVE_LIBSQLITE3": "1", + "HAVE_LIBUTIL_H": "0", + "HAVE_LINK": "1", + "HAVE_LINKAT": "1", + "HAVE_LINK_H": "1", + "HAVE_LINUX_AUXVEC_H": "1", + "HAVE_LINUX_CAN_BCM_H": "1", + "HAVE_LINUX_CAN_H": "1", + "HAVE_LINUX_CAN_J1939_H": "1", + "HAVE_LINUX_CAN_RAW_FD_FRAMES": "1", + "HAVE_LINUX_CAN_RAW_H": "1", + "HAVE_LINUX_CAN_RAW_JOIN_FILTERS": "1", + "HAVE_LINUX_FS_H": "1", + "HAVE_LINUX_LIMITS_H": "1", + "HAVE_LINUX_MEMFD_H": "1", + "HAVE_LINUX_NETFILTER_IPV4_H": "1", + "HAVE_LINUX_NETLINK_H": "1", + "HAVE_LINUX_QRTR_H": "1", + "HAVE_LINUX_RANDOM_H": "1", + "HAVE_LINUX_SCHED_H": "1", + "HAVE_LINUX_SOUNDCARD_H": "1", + "HAVE_LINUX_TIPC_H": "1", + "HAVE_LINUX_VM_SOCKETS_H": "1", + "HAVE_LINUX_WAIT_H": "1", + "HAVE_LISTEN": "1", + "HAVE_LOCKF": "1", + "HAVE_LOG1P": "1", + "HAVE_LOG2": "1", + "HAVE_LOGIN_TTY": "1", + "HAVE_LONG_DOUBLE": "1", + "HAVE_LSTAT": "1", + "HAVE_LUTIMES": "1", + "HAVE_LZMA_H": "0", + "HAVE_MADVISE": "1", + "HAVE_MAKEDEV": "1", + "HAVE_MAXLOGNAME": "0", + "HAVE_MBRTOWC": "1", + "HAVE_MEMFD_CREATE": "0", + "HAVE_MEMRCHR": "1", + "HAVE_MINIX_CONFIG_H": "0", + "HAVE_MKDIRAT": "1", + "HAVE_MKFIFO": "1", + "HAVE_MKFIFOAT": "1", + "HAVE_MKNOD": "1", + "HAVE_MKNODAT": "1", + "HAVE_MKTIME": "1", + "HAVE_MMAP": "1", + "HAVE_MREMAP": "1", + "HAVE_NANOSLEEP": "1", + "HAVE_NCURSES": "0", + "HAVE_NCURSESW": "1", + "HAVE_NCURSESW_CURSES_H": "1", + "HAVE_NCURSESW_NCURSES_H": "1", + "HAVE_NCURSESW_PANEL_H": "1", + "HAVE_NCURSES_CURSES_H": "0", + "HAVE_NCURSES_H": "1", + "HAVE_NCURSES_NCURSES_H": "0", + "HAVE_NCURSES_PANEL_H": "0", + "HAVE_NDBM_H": "0", + "HAVE_NDIR_H": "0", + "HAVE_NETCAN_CAN_H": "0", + "HAVE_NETDB_H": "1", + "HAVE_NETINET_IN_H": "1", + "HAVE_NETLINK_NETLINK_H": "0", + "HAVE_NETPACKET_PACKET_H": "1", + "HAVE_NET_ETHERNET_H": "1", + "HAVE_NET_IF_H": "1", + "HAVE_NICE": "1", + "HAVE_NON_UNICODE_WCHAR_T_REPRESENTATION": "0", + "HAVE_OPENAT": "1", + "HAVE_OPENDIR": "1", + "HAVE_OPENPTY": "1", + "HAVE_PANEL": "0", + "HAVE_PANELW": "0", + "HAVE_PANEL_H": "1", + "HAVE_PATHCONF": "1", + "HAVE_PAUSE": "1", + "HAVE_PIPE": "1", + "HAVE_PIPE2": "1", + "HAVE_PLOCK": "0", + "HAVE_POLL": "1", + "HAVE_POLL_H": "1", + "HAVE_POSIX_FADVISE": "1", + "HAVE_POSIX_FALLOCATE": "1", + "HAVE_POSIX_OPENPT": "1", + "HAVE_POSIX_SPAWN": "1", + "HAVE_POSIX_SPAWNP": "1", + "HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSEFROM_NP": "0", + "HAVE_PREAD": "1", + "HAVE_PREADV": "1", + "HAVE_PREADV2": "0", + "HAVE_PRLIMIT": "1", + "HAVE_PROCESS_H": "0", + "HAVE_PROCESS_VM_READV": "1", + "HAVE_PROTOTYPES": "1", + "HAVE_PTHREAD_CONDATTR_SETCLOCK": "1", + "HAVE_PTHREAD_COND_TIMEDWAIT_RELATIVE_NP": "0", + "HAVE_PTHREAD_DESTRUCTOR": "0", + "HAVE_PTHREAD_GETATTR_NP": "1", + "HAVE_PTHREAD_GETCPUCLOCKID": "1", + "HAVE_PTHREAD_GETNAME_NP": "1", + "HAVE_PTHREAD_GET_NAME_NP": "0", + "HAVE_PTHREAD_H": "1", + "HAVE_PTHREAD_INIT": "0", + "HAVE_PTHREAD_KILL": "1", + "HAVE_PTHREAD_SETNAME_NP": "1", + "HAVE_PTHREAD_SET_NAME_NP": "0", + "HAVE_PTHREAD_SIGMASK": "1", + "HAVE_PTHREAD_STUBS": "0", + "HAVE_PTSNAME": "1", + "HAVE_PTSNAME_R": "1", + "HAVE_PTY_H": "1", + "HAVE_PWRITE": "1", + "HAVE_PWRITEV": "1", + "HAVE_PWRITEV2": "0", + "HAVE_READLINE_READLINE_H": "0", + "HAVE_READLINK": "1", + "HAVE_READLINKAT": "1", + "HAVE_READV": "1", + "HAVE_REALPATH": "1", + "HAVE_RECVFROM": "1", + "HAVE_RENAMEAT": "1", + "HAVE_RL_APPEND_HISTORY": "1", + "HAVE_RL_CATCH_SIGNAL": "1", + "HAVE_RL_COMPDISP_FUNC_T": "1", + "HAVE_RL_COMPLETION_APPEND_CHARACTER": "1", + "HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK": "1", + "HAVE_RL_COMPLETION_MATCHES": "1", + "HAVE_RL_COMPLETION_SUPPRESS_APPEND": "1", + "HAVE_RL_PRE_INPUT_HOOK": "1", + "HAVE_RL_RESIZE_TERMINAL": "1", + "HAVE_RTPSPAWN": "0", + "HAVE_SCHED_GET_PRIORITY_MAX": "1", + "HAVE_SCHED_H": "1", + "HAVE_SCHED_RR_GET_INTERVAL": "1", + "HAVE_SCHED_SETAFFINITY": "1", + "HAVE_SCHED_SETPARAM": "1", + "HAVE_SCHED_SETSCHEDULER": "1", + "HAVE_SEM_CLOCKWAIT": "0", + "HAVE_SEM_GETVALUE": "1", + "HAVE_SEM_OPEN": "1", + "HAVE_SEM_TIMEDWAIT": "1", + "HAVE_SEM_UNLINK": "1", + "HAVE_SENDFILE": "1", + "HAVE_SENDTO": "1", + "HAVE_SETEGID": "1", + "HAVE_SETEUID": "1", + "HAVE_SETGID": "1", + "HAVE_SETGROUPS": "1", + "HAVE_SETHOSTNAME": "1", + "HAVE_SETITIMER": "1", + "HAVE_SETJMP_H": "1", + "HAVE_SETLOCALE": "1", + "HAVE_SETNS": "1", + "HAVE_SETPGID": "1", + "HAVE_SETPGRP": "1", + "HAVE_SETPRIORITY": "1", + "HAVE_SETREGID": "1", + "HAVE_SETRESGID": "1", + "HAVE_SETRESUID": "1", + "HAVE_SETREUID": "1", + "HAVE_SETSID": "1", + "HAVE_SETSOCKOPT": "1", + "HAVE_SETUID": "1", + "HAVE_SETVBUF": "1", + "HAVE_SHADOW_H": "1", + "HAVE_SHM_OPEN": "1", + "HAVE_SHM_UNLINK": "1", + "HAVE_SHUTDOWN": "1", + "HAVE_SIGACTION": "1", + "HAVE_SIGALTSTACK": "1", + "HAVE_SIGFILLSET": "1", + "HAVE_SIGINFO_T_SI_BAND": "1", + "HAVE_SIGINTERRUPT": "1", + "HAVE_SIGNAL_H": "1", + "HAVE_SIGPENDING": "1", + "HAVE_SIGRELSE": "1", + "HAVE_SIGTIMEDWAIT": "1", + "HAVE_SIGWAIT": "1", + "HAVE_SIGWAITINFO": "1", + "HAVE_SNPRINTF": "1", + "HAVE_SOCKADDR_ALG": "1", + "HAVE_SOCKADDR_SA_LEN": "0", + "HAVE_SOCKADDR_STORAGE": "1", + "HAVE_SOCKET": "1", + "HAVE_SOCKETPAIR": "1", + "HAVE_SOCKLEN_T": "1", + "HAVE_SPAWN_H": "1", + "HAVE_SPLICE": "1", + "HAVE_SSIZE_T": "1", + "HAVE_STATVFS": "1", + "HAVE_STAT_TV_NSEC": "1", + "HAVE_STAT_TV_NSEC2": "0", + "HAVE_STDINT_H": "1", + "HAVE_STDIO_H": "1", + "HAVE_STDLIB_H": "1", + "HAVE_STD_ATOMIC": "1", + "HAVE_STRFTIME": "1", + "HAVE_STRINGS_H": "1", + "HAVE_STRING_H": "1", + "HAVE_STRLCPY": "0", + "HAVE_STROPTS_H": "1", + "HAVE_STRSIGNAL": "1", + "HAVE_STRUCT_PASSWD_PW_GECOS": "1", + "HAVE_STRUCT_PASSWD_PW_PASSWD": "1", + "HAVE_STRUCT_STAT_ST_BIRTHTIME": "0", + "HAVE_STRUCT_STAT_ST_BLKSIZE": "1", + "HAVE_STRUCT_STAT_ST_BLOCKS": "1", + "HAVE_STRUCT_STAT_ST_FLAGS": "0", + "HAVE_STRUCT_STAT_ST_GEN": "0", + "HAVE_STRUCT_STAT_ST_RDEV": "1", + "HAVE_STRUCT_TM_TM_ZONE": "1", + "HAVE_SYMLINK": "1", + "HAVE_SYMLINKAT": "1", + "HAVE_SYNC": "1", + "HAVE_SYSCONF": "1", + "HAVE_SYSCTLBYNAME": "0", + "HAVE_SYSEXITS_H": "1", + "HAVE_SYSLOG_H": "1", + "HAVE_SYSTEM": "1", + "HAVE_SYS_AUDIOIO_H": "0", + "HAVE_SYS_AUXV_H": "1", + "HAVE_SYS_BSDTTY_H": "0", + "HAVE_SYS_DEVPOLL_H": "0", + "HAVE_SYS_DIR_H": "0", + "HAVE_SYS_ENDIAN_H": "0", + "HAVE_SYS_EPOLL_H": "1", + "HAVE_SYS_EVENTFD_H": "1", + "HAVE_SYS_EVENT_H": "0", + "HAVE_SYS_FILE_H": "1", + "HAVE_SYS_IOCTL_H": "1", + "HAVE_SYS_KERN_CONTROL_H": "0", + "HAVE_SYS_LOADAVG_H": "0", + "HAVE_SYS_LOCK_H": "0", + "HAVE_SYS_MEMFD_H": "0", + "HAVE_SYS_MKDEV_H": "0", + "HAVE_SYS_MMAN_H": "1", + "HAVE_SYS_MODEM_H": "0", + "HAVE_SYS_NDIR_H": "0", + "HAVE_SYS_PARAM_H": "1", + "HAVE_SYS_PIDFD_H": "0", + "HAVE_SYS_POLL_H": "1", + "HAVE_SYS_RANDOM_H": "0", + "HAVE_SYS_RESOURCE_H": "1", + "HAVE_SYS_SELECT_H": "1", + "HAVE_SYS_SENDFILE_H": "1", + "HAVE_SYS_SOCKET_H": "1", + "HAVE_SYS_SOUNDCARD_H": "1", + "HAVE_SYS_STATVFS_H": "1", + "HAVE_SYS_STAT_H": "1", + "HAVE_SYS_SYSCALL_H": "1", + "HAVE_SYS_SYSCTL_H": "1", + "HAVE_SYS_SYSMACROS_H": "1", + "HAVE_SYS_SYS_DOMAIN_H": "0", + "HAVE_SYS_TERMIO_H": "0", + "HAVE_SYS_TIMERFD_H": "1", + "HAVE_SYS_TIMES_H": "1", + "HAVE_SYS_TIME_H": "1", + "HAVE_SYS_TYPES_H": "1", + "HAVE_SYS_UIO_H": "1", + "HAVE_SYS_UN_H": "1", + "HAVE_SYS_UTSNAME_H": "1", + "HAVE_SYS_WAIT_H": "1", + "HAVE_SYS_XATTR_H": "1", + "HAVE_TCGETPGRP": "1", + "HAVE_TCSETPGRP": "1", + "HAVE_TEMPNAM": "1", + "HAVE_TERMIOS_H": "1", + "HAVE_TERM_H": "1", + "HAVE_TIMEGM": "1", + "HAVE_TIMERFD_CREATE": "1", + "HAVE_TIMES": "1", + "HAVE_TMPFILE": "1", + "HAVE_TMPNAM": "1", + "HAVE_TMPNAM_R": "1", + "HAVE_TM_ZONE": "1", + "HAVE_TRUNCATE": "1", + "HAVE_TTYNAME_R": "1", + "HAVE_TZNAME": "0", + "HAVE_UMASK": "1", + "HAVE_UNAME": "1", + "HAVE_UNISTD_H": "1", + "HAVE_UNLINKAT": "1", + "HAVE_UNLOCKPT": "1", + "HAVE_UNSHARE": "1", + "HAVE_USABLE_WCHAR_T": "0", + "HAVE_UTIL_H": "0", + "HAVE_UTIMENSAT": "1", + "HAVE_UTIMES": "1", + "HAVE_UTIME_H": "1", + "HAVE_UTMP_H": "1", + "HAVE_UT_NAMESIZE": "1", + "HAVE_UUID_CREATE": "0", + "HAVE_UUID_ENC_BE": "0", + "HAVE_UUID_GENERATE_TIME_SAFE": "1", + "HAVE_UUID_GENERATE_TIME_SAFE_STABLE_MAC": "0", + "HAVE_UUID_H": "0", + "HAVE_UUID_UUID_H": "1", + "HAVE_VFORK": "1", + "HAVE_WAIT": "1", + "HAVE_WAIT3": "1", + "HAVE_WAIT4": "1", + "HAVE_WAITID": "1", + "HAVE_WAITPID": "1", + "HAVE_WCHAR_H": "1", + "HAVE_WCSCOLL": "1", + "HAVE_WCSFTIME": "1", + "HAVE_WCSXFRM": "1", + "HAVE_WMEMCMP": "1", + "HAVE_WORKING_TZSET": "1", + "HAVE_WRITEV": "1", + "HAVE_ZDICT_H": "0", + "HAVE_ZLIB_COPY": "1", + "HAVE_ZLIB_H": "0", + "HAVE_ZSTD_H": "0", + "HAVE__GETPTY": "0", + "HAVE___UINT128_T": "1", + "HOSTRUNNER": "", + "HOST_GNU_TYPE": "x86_64-unknown-linux-gnu", + "INCLDIRSTOMAKE": "/install/include /install/include /install/include/python3.14 /install/include/python3.14", + "INCLUDEDIR": "/install/include", + "INCLUDEPY": "/install/include/python3.14", + "INSTALL": "/usr/bin/install -c", + "INSTALL_DATA": "/usr/bin/install -c -m 644", + "INSTALL_MIMALLOC": "yes", + "INSTALL_PROGRAM": "/usr/bin/install -c", + "INSTALL_SCRIPT": "/usr/bin/install -c", + "INSTALL_SHARED": "/usr/bin/install -c -m 755", + "INSTSONAME": "libpython3.14.so.1.0", + "IO_H": "Modules/_io/_iomodule.h", + "IO_OBJS": "\\", + "IPHONEOS_DEPLOYMENT_TARGET": "", + "JIT_DEPS": "\\", + "LDCXXSHARED": "clang++ -pthread -shared -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--build-id=sha1 -Wl,--exclude-libs,ALL", + "LDFLAGS": "-Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--build-id=sha1 -Wl,--exclude-libs,ALL", + "LDLIBRARY": "libpython3.14.so", + "LDLIBRARYDIR": "", + "LDSHARED": "clang -pthread -shared -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--build-id=sha1 -Wl,--exclude-libs,ALL", + "LDVERSION": "3.14", + "LIBC": "", + "LIBDEST": "/install/lib/python3.14", + "LIBDIR": "/install/lib", + "LIBEXPAT_A": "Modules/expat/libexpat.a", + "LIBEXPAT_CFLAGS": "-fno-strict-overflow -Wsign-compare -Wunreachable-code -DNDEBUG -g -O3 -Wall -O3 -fstack-protector -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -fno-semantic-interposition -flto=thin -g -fno-pie -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -D_Py_TIER2=3 -D_Py_JIT -fprofile-instr-use=/build/Python-3.14.7/code.profclangd -I./Include/internal -I./Include/internal/mimalloc -I. -I./Include -O3 -fstack-protector -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -fPIC -fPIC", + "LIBEXPAT_HEADERS": "\\", + "LIBEXPAT_OBJS": "\\", + "LIBHACL_BLAKE2_HEADERS": "\\", + "LIBHACL_BLAKE2_LIB_SHARED": "\\", + "LIBHACL_BLAKE2_LIB_STATIC": "Modules/_hacl/libHacl_Hash_BLAKE2.a", + "LIBHACL_BLAKE2_OBJS": "\\", + "LIBHACL_BLAKE2_SIMD128_CFLAGS": "-msse -msse2 -msse3 -msse4.1 -msse4.2 -DHACL_CAN_COMPILE_VEC128", + "LIBHACL_BLAKE2_SIMD128_OBJS": "Modules/_hacl/Hacl_Hash_Blake2s_Simd128.o", + "LIBHACL_BLAKE2_SIMD256_CFLAGS": "-mavx2 -DHACL_CAN_COMPILE_VEC256", + "LIBHACL_BLAKE2_SIMD256_OBJS": "Modules/_hacl/Hacl_Hash_Blake2b_Simd256.o", + "LIBHACL_CFLAGS": "-I./Modules/_hacl -I./Modules/_hacl/include -D_BSD_SOURCE -D_DEFAULT_SOURCE -DLINUX_NO_EXPLICIT_BZERO -fno-strict-overflow -Wsign-compare -Wunreachable-code -DNDEBUG -g -O3 -Wall -O3 -fstack-protector -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -fno-semantic-interposition -flto=thin -g -fno-pie -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -D_Py_TIER2=3 -D_Py_JIT -fprofile-instr-use=/build/Python-3.14.7/code.profclangd -I./Include/internal -I./Include/internal/mimalloc -I. -I./Include -O3 -fstack-protector -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -fPIC -fPIC", + "LIBHACL_HEADERS": "\\", + "LIBHACL_HMAC_HEADERS": "\\", + "LIBHACL_HMAC_LIB_SHARED": "\\", + "LIBHACL_HMAC_LIB_STATIC": "Modules/_hacl/libHacl_HMAC.a", + "LIBHACL_HMAC_OBJS": "\\", + "LIBHACL_LDFLAGS": "", + "LIBHACL_MD5_HEADERS": "\\", + "LIBHACL_MD5_LIB_SHARED": "\\", + "LIBHACL_MD5_LIB_STATIC": "Modules/_hacl/libHacl_Hash_MD5.a", + "LIBHACL_MD5_OBJS": "\\", + "LIBHACL_SHA1_HEADERS": "\\", + "LIBHACL_SHA1_LIB_SHARED": "\\", + "LIBHACL_SHA1_LIB_STATIC": "Modules/_hacl/libHacl_Hash_SHA1.a", + "LIBHACL_SHA1_OBJS": "\\", + "LIBHACL_SHA2_HEADERS": "\\", + "LIBHACL_SHA2_LIB_SHARED": "\\", + "LIBHACL_SHA2_LIB_STATIC": "Modules/_hacl/libHacl_Hash_SHA2.a", + "LIBHACL_SHA2_OBJS": "\\", + "LIBHACL_SHA3_HEADERS": "\\", + "LIBHACL_SHA3_LIB_SHARED": "\\", + "LIBHACL_SHA3_LIB_STATIC": "Modules/_hacl/libHacl_Hash_SHA3.a", + "LIBHACL_SHA3_OBJS": "\\", + "LIBM": "-lm", + "LIBMPDEC_A": "Modules/_decimal/libmpdec/libmpdec.a", + "LIBMPDEC_CFLAGS": " -fno-strict-overflow -Wsign-compare -Wunreachable-code -DNDEBUG -g -O3 -Wall -O3 -fstack-protector -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -fno-semantic-interposition -flto=thin -g -fno-pie -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -D_Py_TIER2=3 -D_Py_JIT -fprofile-instr-use=/build/Python-3.14.7/code.profclangd -I./Include/internal -I./Include/internal/mimalloc -I. -I./Include -O3 -fstack-protector -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -fPIC -fPIC", + "LIBMPDEC_HEADERS": "\\", + "LIBMPDEC_OBJS": "\\", + "LIBOBJDIR": "Python/", + "LIBOBJS": "", + "LIBPC": "/install/lib/pkgconfig", + "LIBPL": "/install/lib/python3.14/config-3.14-x86_64-linux-gnu", + "LIBPYTHON": "", + "LIBRARY": "libpython3.14.a", + "LIBRARY_DEPS": "libpython3.14.a libpython3.14.so libpython3.so", + "LIBRARY_OBJS": "\\", + "LIBRARY_OBJS_OMIT_FROZEN": "\\", + "LIBS": "-lpthread -ldl -lutil", + "LIBSUBDIRS": "asyncio \\", + "LINKCC": "clang -pthread -fno-pie -no-pie", + "LINKFORSHARED": "-Xlinker -export-dynamic", + "LINK_PYTHON_DEPS": "libpython3.14.a libpython3.14.so libpython3.so", + "LINK_PYTHON_OBJS": "\\", + "LIPO_32BIT_FLAGS": "", + "LIPO_INTEL64_FLAGS": "", + "LLVM_MERGED_DATA_FILE": "$(shell pwd)/code.profclangd", + "LLVM_PROFDATA": "/tools/llvm/bin/llvm-profdata", + "LLVM_PROF_ERR": "no", + "LLVM_PROF_FILE": "LLVM_PROFILE_FILE=\"$(shell pwd)/code-%128m.profclangr\"", + "LLVM_PROF_MERGER": "/tools/llvm/bin/llvm-profdata merge -output=\"$(shell pwd)/code.profclangd\" \"$(shell pwd)\"/*.profclangr", + "LN": "ln", + "LOCALMODLIBS": "-lm -lm -lm -lmpdec -lm -lz -lbz2 -llzma -pthread -lpthread -lzstd -pthread -lz -ledit -lncursesw Modules/_hacl/libHacl_Hash_MD5.a Modules/_hacl/libHacl_Hash_SHA1.a Modules/_hacl/libHacl_Hash_SHA2.a Modules/_hacl/libHacl_Hash_SHA3.a Modules/_hacl/libHacl_Hash_BLAKE2.a Modules/_hacl/libHacl_HMAC.a -lexpat -lrt -lffi -ldl -lncursesw -lpanelw -lncursesw -lsqlite3 -lm -lz -ldl -lpthread -lssl -lcrypto -lcrypto -luuid -lm", + "MACHDEP": "linux", + "MACHDEP_OBJS": "", + "MACHDESTLIB": "/install/lib/python3.14", + "MACOSX_DEPLOYMENT_TARGET": "", + "MAJOR_IN_MKDEV": "0", + "MAJOR_IN_SYSMACROS": "1", + "MAKESETUP": "./Modules/makesetup", + "MANDIR": "/install/share/man", + "MIMALLOC_HEADERS": "\\", + "MKDIR_P": "/bin/mkdir -p", + "MODBUILT_NAMES": "_dbm _testbuffer _testcapi _testlimitedcapi _tkinter array _bisect _csv _heapq _json _lsprof _pickle _queue _random _remote_debugging _struct _interpreters _interpchannels _interpqueues _zoneinfo math cmath _statistics _decimal binascii _bz2 _lzma _zstd zlib readline _md5 _sha1 _sha2 _sha3 _blake2 _hmac pyexpat _elementtree _codecs_cn _codecs_hk _codecs_iso2022 _codecs_jp _codecs_kr _codecs_tw _multibytecodec unicodedata fcntl grp mmap _posixsubprocess resource select _socket syslog termios _posixshmem _multiprocessing _ctypes _curses _curses_panel _sqlite3 _ssl _hashlib _uuid xxsubtype _xxtestfuzz _testinternalcapi _testimportmultiple _testmultiphase _testsinglephase _ctypes_test _asyncio atexit faulthandler posix _signal _tracemalloc _suggestions _datetime _codecs _collections errno _io itertools _sre _sysconfig _thread time _types _typing _weakref _abc _functools _locale _opcode _operator _stat _symtable pwd", + "MODDISABLED_NAMES": "_gdbm _scproxy _testclinic _testclinic_limited xx xxlimited xxlimited_35", + "MODLIBS": "-lm -lm -lm -lmpdec -lm -lz -lbz2 -llzma -pthread -lpthread -lzstd -pthread -lz -ledit -lncursesw Modules/_hacl/libHacl_Hash_MD5.a Modules/_hacl/libHacl_Hash_SHA1.a Modules/_hacl/libHacl_Hash_SHA2.a Modules/_hacl/libHacl_Hash_SHA3.a Modules/_hacl/libHacl_Hash_BLAKE2.a Modules/_hacl/libHacl_HMAC.a -lexpat -lrt -lffi -ldl -lncursesw -lpanelw -lncursesw -lsqlite3 -lm -lz -ldl -lpthread -lssl -lcrypto -lcrypto -luuid -lm", + "MODOBJS": "Modules/arraymodule.o Modules/_bisectmodule.o Modules/_csv.o Modules/_heapqmodule.o Modules/_json.o Modules/_lsprof.o Modules/rotatingtree.o Modules/_pickle.o Modules/_queuemodule.o Modules/_randommodule.o Modules/_remote_debugging_module.o Modules/_struct.o Modules/_interpretersmodule.o Modules/_interpchannelsmodule.o Modules/_interpqueuesmodule.o Modules/_zoneinfo.o Modules/mathmodule.o Modules/cmathmodule.o Modules/_statisticsmodule.o Modules/_decimal/_decimal.o Modules/binascii.o Modules/_bz2module.o Modules/_lzmamodule.o Modules/_zstd/_zstdmodule.o Modules/_zstd/zstddict.o Modules/_zstd/compressor.o Modules/_zstd/decompressor.o Modules/zlibmodule.o Modules/readline.o Modules/md5module.o Modules/sha1module.o Modules/sha2module.o Modules/sha3module.o Modules/blake2module.o Modules/hmacmodule.o Modules/pyexpat.o Modules/_elementtree.o Modules/cjkcodecs/_codecs_cn.o Modules/cjkcodecs/_codecs_hk.o Modules/cjkcodecs/_codecs_iso2022.o Modules/cjkcodecs/_codecs_jp.o Modules/cjkcodecs/_codecs_kr.o Modules/cjkcodecs/_codecs_tw.o Modules/cjkcodecs/multibytecodec.o Modules/unicodedata.o Modules/fcntlmodule.o Modules/grpmodule.o Modules/mmapmodule.o Modules/_posixsubprocess.o Modules/resource.o Modules/selectmodule.o Modules/socketmodule.o Modules/syslogmodule.o Modules/termios.o Modules/_multiprocessing/posixshmem.o Modules/_multiprocessing/multiprocessing.o Modules/_multiprocessing/semaphore.o Modules/_ctypes/_ctypes.o Modules/_ctypes/callbacks.o Modules/_ctypes/callproc.o Modules/_ctypes/stgdict.o Modules/_ctypes/cfield.o Modules/_cursesmodule.o Modules/_curses_panel.o Modules/_sqlite/blob.o Modules/_sqlite/connection.o Modules/_sqlite/cursor.o Modules/_sqlite/microprotocols.o Modules/_sqlite/module.o Modules/_sqlite/prepare_protocol.o Modules/_sqlite/row.o Modules/_sqlite/statement.o Modules/_sqlite/util.o Modules/_ssl.o Modules/_hashopenssl.o Modules/_uuidmodule.o Modules/xxsubtype.o Modules/_xxtestfuzz/_xxtestfuzz.o Modules/_xxtestfuzz/fuzzer.o Modules/_testinternalcapi.o Modules/_testinternalcapi/test_lock.o Modules/_testinternalcapi/pytime.o Modules/_testinternalcapi/set.o Modules/_testinternalcapi/test_critical_sections.o Modules/_testinternalcapi/complex.o Modules/_asynciomodule.o Modules/atexitmodule.o Modules/faulthandler.o Modules/posixmodule.o Modules/signalmodule.o Modules/_tracemalloc.o Modules/_suggestions.o Modules/_datetimemodule.o Modules/_codecsmodule.o Modules/_collectionsmodule.o Modules/errnomodule.o Modules/_io/_iomodule.o Modules/_io/iobase.o Modules/_io/fileio.o Modules/_io/bytesio.o Modules/_io/bufferedio.o Modules/_io/textio.o Modules/_io/stringio.o Modules/itertoolsmodule.o Modules/_sre/sre.o Modules/_sysconfig.o Modules/_threadmodule.o Modules/timemodule.o Modules/_typesmodule.o Modules/_typingmodule.o Modules/_weakref.o Modules/_abc.o Modules/_functoolsmodule.o Modules/_localemodule.o Modules/_opcode.o Modules/_operator.o Modules/_stat.o Modules/symtablemodule.o Modules/pwdmodule.o", + "MODSHARED_NAMES": "_dbm _testbuffer _testcapi _testlimitedcapi _tkinter _testimportmultiple _testmultiphase _testsinglephase _ctypes_test", + "MODULE_ARRAY_LDFLAGS": "", + "MODULE_ARRAY_STATE": "yes", + "MODULE_ATEXIT_LDFLAGS": "", + "MODULE_BINASCII_CFLAGS": "-DUSE_ZLIB_CRC32 ", + "MODULE_BINASCII_LDFLAGS": " -lz", + "MODULE_BINASCII_STATE": "yes", + "MODULE_CMATH_DEPS": "./Modules/_math.h", + "MODULE_CMATH_LDFLAGS": "-lm", + "MODULE_CMATH_STATE": "yes", + "MODULE_DEPS_SHARED": "Modules/config.c", + "MODULE_DEPS_STATIC": "Modules/config.c", + "MODULE_ERRNO_LDFLAGS": "", + "MODULE_FAULTHANDLER_LDFLAGS": "", + "MODULE_FCNTL_LDFLAGS": "", + "MODULE_FCNTL_STATE": "yes", + "MODULE_GRP_LDFLAGS": "", + "MODULE_GRP_STATE": "yes", + "MODULE_ITERTOOLS_LDFLAGS": "", + "MODULE_LDFLAGS_SHARED": "$(if ,-L. -lpython3.14)", + "MODULE_MATH_DEPS": "./Modules/_math.h", + "MODULE_MATH_LDFLAGS": "-lm", + "MODULE_MATH_STATE": "yes", + "MODULE_MMAP_LDFLAGS": "", + "MODULE_MMAP_STATE": "yes", + "MODULE_OBJS": "\\", + "MODULE_POSIX_LDFLAGS": "", + "MODULE_PWD_LDFLAGS": "", + "MODULE_PWD_STATE": "yes", + "MODULE_PYEXPAT_CFLAGS": "", + "MODULE_PYEXPAT_DEPS": "", + "MODULE_PYEXPAT_LDFLAGS": "-lexpat", + "MODULE_PYEXPAT_STATE": "yes", + "MODULE_READLINE_CFLAGS": " /editline", + "MODULE_READLINE_LDFLAGS": " -ledit -lncursesw", + "MODULE_READLINE_STATE": "yes", + "MODULE_RESOURCE_LDFLAGS": "", + "MODULE_RESOURCE_STATE": "yes", + "MODULE_SELECT_LDFLAGS": "", + "MODULE_SELECT_STATE": "yes", + "MODULE_SYSLOG_LDFLAGS": "", + "MODULE_SYSLOG_STATE": "yes", + "MODULE_TERMIOS_LDFLAGS": "", + "MODULE_TERMIOS_STATE": "yes", + "MODULE_TIME_LDFLAGS": "", + "MODULE_TIME_STATE": "yes", + "MODULE_UNICODEDATA_DEPS": "./Modules/unicodedata_db.h ./Modules/unicodename_db.h", + "MODULE_UNICODEDATA_LDFLAGS": "", + "MODULE_UNICODEDATA_STATE": "yes", + "MODULE_XXLIMITED_35_STATE": "yes", + "MODULE_XXLIMITED_STATE": "yes", + "MODULE_XXSUBTYPE_LDFLAGS": "", + "MODULE_XXSUBTYPE_STATE": "yes", + "MODULE_ZLIB_CFLAGS": "", + "MODULE_ZLIB_LDFLAGS": " -lz", + "MODULE_ZLIB_STATE": "yes", + "MODULE__ABC_LDFLAGS": "", + "MODULE__ASYNCIO_LDFLAGS": "", + "MODULE__ASYNCIO_STATE": "yes", + "MODULE__BISECT_LDFLAGS": "", + "MODULE__BISECT_STATE": "yes", + "MODULE__BLAKE2_CFLAGS": "-I./Modules/_hacl -I./Modules/_hacl/include -D_BSD_SOURCE -D_DEFAULT_SOURCE -DLINUX_NO_EXPLICIT_BZERO -fno-strict-overflow -Wsign-compare -Wunreachable-code -DNDEBUG -g -O3 -Wall -O3 -fstack-protector -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -fno-semantic-interposition -flto=thin -g -fno-pie -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -D_Py_TIER2=3 -D_Py_JIT -fprofile-instr-use=/build/Python-3.14.7/code.profclangd -I./Include/internal -I./Include/internal/mimalloc -I. -I./Include -O3 -fstack-protector -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -fPIC -fPIC", + "MODULE__BLAKE2_DEPS": "./Modules/hashlib.h \\ Modules/_hacl/libHacl_Hash_BLAKE2.a", + "MODULE__BLAKE2_LDEPS": "Modules/_hacl/libHacl_Hash_BLAKE2.a", + "MODULE__BLAKE2_LDFLAGS": "Modules/_hacl/libHacl_Hash_BLAKE2.a", + "MODULE__BLAKE2_STATE": "yes", + "MODULE__BZ2_CFLAGS": "", + "MODULE__BZ2_LDFLAGS": "-lbz2", + "MODULE__BZ2_STATE": "yes", + "MODULE__CODECS_CN_DEPS": "./Modules/cjkcodecs/mappings_cn.h ./Modules/cjkcodecs/multibytecodec.h ./Modules/cjkcodecs/cjkcodecs.h", + "MODULE__CODECS_CN_LDFLAGS": "", + "MODULE__CODECS_CN_STATE": "yes", + "MODULE__CODECS_HK_DEPS": "./Modules/cjkcodecs/mappings_hk.h ./Modules/cjkcodecs/multibytecodec.h ./Modules/cjkcodecs/cjkcodecs.h", + "MODULE__CODECS_HK_LDFLAGS": "", + "MODULE__CODECS_HK_STATE": "yes", + "MODULE__CODECS_ISO2022_DEPS": "./Modules/cjkcodecs/mappings_jisx0213_pair.h ./Modules/cjkcodecs/alg_jisx0201.h ./Modules/cjkcodecs/emu_jisx0213_2000.h ./Modules/cjkcodecs/multibytecodec.h ./Modules/cjkcodecs/cjkcodecs.h", + "MODULE__CODECS_ISO2022_LDFLAGS": "", + "MODULE__CODECS_ISO2022_STATE": "yes", + "MODULE__CODECS_JP_DEPS": "./Modules/cjkcodecs/mappings_jisx0213_pair.h ./Modules/cjkcodecs/alg_jisx0201.h ./Modules/cjkcodecs/emu_jisx0213_2000.h ./Modules/cjkcodecs/mappings_jp.h ./Modules/cjkcodecs/multibytecodec.h ./Modules/cjkcodecs/cjkcodecs.h", + "MODULE__CODECS_JP_LDFLAGS": "", + "MODULE__CODECS_JP_STATE": "yes", + "MODULE__CODECS_KR_DEPS": "./Modules/cjkcodecs/mappings_kr.h ./Modules/cjkcodecs/multibytecodec.h ./Modules/cjkcodecs/cjkcodecs.h", + "MODULE__CODECS_KR_LDFLAGS": "", + "MODULE__CODECS_KR_STATE": "yes", + "MODULE__CODECS_LDFLAGS": "", + "MODULE__CODECS_TW_DEPS": "./Modules/cjkcodecs/mappings_tw.h ./Modules/cjkcodecs/multibytecodec.h ./Modules/cjkcodecs/cjkcodecs.h", + "MODULE__CODECS_TW_LDFLAGS": "", + "MODULE__CODECS_TW_STATE": "yes", + "MODULE__COLLECTIONS_LDFLAGS": "", + "MODULE__CSV_LDFLAGS": "", + "MODULE__CSV_STATE": "yes", + "MODULE__CTYPES_CFLAGS": "-fno-strict-overflow ", + "MODULE__CTYPES_DEPS": "./Modules/_ctypes/ctypes.h", + "MODULE__CTYPES_LDFLAGS": " -lffi -ldl", + "MODULE__CTYPES_MALLOC_CLOSURE": "", + "MODULE__CTYPES_STATE": "yes", + "MODULE__CTYPES_TEST_DEPS": "./Modules/_ctypes/_ctypes_test_generated.c.h", + "MODULE__CTYPES_TEST_LDFLAGS": "-lm", + "MODULE__CTYPES_TEST_STATE": "yes", + "MODULE__CURSES_CFLAGS": "", + "MODULE__CURSES_DEPS": "./Include/py_curses.h", + "MODULE__CURSES_LDFLAGS": "-lncursesw", + "MODULE__CURSES_PANEL_CFLAGS": "", + "MODULE__CURSES_PANEL_DEPS": "./Include/py_curses.h", + "MODULE__CURSES_PANEL_LDFLAGS": "-lpanelw -lncursesw", + "MODULE__CURSES_PANEL_STATE": "yes", + "MODULE__CURSES_STATE": "yes", + "MODULE__DATETIME_DEPS": "./Include/datetime.h", + "MODULE__DATETIME_LDFLAGS": "-lm", + "MODULE__DATETIME_STATE": "yes", + "MODULE__DBM_CFLAGS": "-DUSE_BERKDB", + "MODULE__DBM_LDFLAGS": "-ldb", + "MODULE__DBM_STATE": "yes", + "MODULE__DECIMAL_CFLAGS": "", + "MODULE__DECIMAL_DEPS": "./Modules/_decimal/docstrings.h", + "MODULE__DECIMAL_LDFLAGS": " -lmpdec -lm", + "MODULE__DECIMAL_STATE": "yes", + "MODULE__ELEMENTTREE_CFLAGS": "", + "MODULE__ELEMENTTREE_DEPS": "./Modules/pyexpat.c", + "MODULE__ELEMENTTREE_LDFLAGS": "", + "MODULE__ELEMENTTREE_STATE": "yes", + "MODULE__FUNCTOOLS_LDFLAGS": "", + "MODULE__GDBM_STATE": "disabled", + "MODULE__HASHLIB_CFLAGS": "", + "MODULE__HASHLIB_DEPS": "./Modules/hashlib.h", + "MODULE__HASHLIB_LDFLAGS": " -lcrypto", + "MODULE__HASHLIB_STATE": "yes", + "MODULE__HEAPQ_LDFLAGS": "", + "MODULE__HEAPQ_STATE": "yes", + "MODULE__HMAC_CFLAGS": "-I./Modules/_hacl -I./Modules/_hacl/include -D_BSD_SOURCE -D_DEFAULT_SOURCE -DLINUX_NO_EXPLICIT_BZERO -fno-strict-overflow -Wsign-compare -Wunreachable-code -DNDEBUG -g -O3 -Wall -O3 -fstack-protector -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -fno-semantic-interposition -flto=thin -g -fno-pie -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -D_Py_TIER2=3 -D_Py_JIT -fprofile-instr-use=/build/Python-3.14.7/code.profclangd -I./Include/internal -I./Include/internal/mimalloc -I. -I./Include -O3 -fstack-protector -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -fPIC -fPIC", + "MODULE__HMAC_DEPS": "./Modules/hashlib.h \\ Modules/_hacl/libHacl_HMAC.a", + "MODULE__HMAC_LDEPS": "Modules/_hacl/libHacl_HMAC.a", + "MODULE__HMAC_LDFLAGS": "Modules/_hacl/libHacl_HMAC.a", + "MODULE__HMAC_STATE": "yes", + "MODULE__INTERPCHANNELS_LDFLAGS": "", + "MODULE__INTERPCHANNELS_STATE": "yes", + "MODULE__INTERPQUEUES_LDFLAGS": "", + "MODULE__INTERPQUEUES_STATE": "yes", + "MODULE__INTERPRETERS_LDFLAGS": "", + "MODULE__INTERPRETERS_STATE": "yes", + "MODULE__IO_CFLAGS": "-I./Modules/_io", + "MODULE__IO_DEPS": "./Modules/_io/_iomodule.h", + "MODULE__IO_LDFLAGS": "", + "MODULE__IO_STATE": "yes", + "MODULE__JSON_LDFLAGS": "", + "MODULE__JSON_STATE": "yes", + "MODULE__LOCALE_LDFLAGS": "", + "MODULE__LSPROF_LDFLAGS": "", + "MODULE__LSPROF_STATE": "yes", + "MODULE__LZMA_CFLAGS": "", + "MODULE__LZMA_LDFLAGS": " -llzma -pthread -lpthread", + "MODULE__LZMA_STATE": "yes", + "MODULE__MD5_CFLAGS": "-I./Modules/_hacl -I./Modules/_hacl/include -D_BSD_SOURCE -D_DEFAULT_SOURCE -DLINUX_NO_EXPLICIT_BZERO -fno-strict-overflow -Wsign-compare -Wunreachable-code -DNDEBUG -g -O3 -Wall -O3 -fstack-protector -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -fno-semantic-interposition -flto=thin -g -fno-pie -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -D_Py_TIER2=3 -D_Py_JIT -fprofile-instr-use=/build/Python-3.14.7/code.profclangd -I./Include/internal -I./Include/internal/mimalloc -I. -I./Include -O3 -fstack-protector -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -fPIC -fPIC", + "MODULE__MD5_DEPS": "./Modules/hashlib.h \\ Modules/_hacl/libHacl_Hash_MD5.a", + "MODULE__MD5_LDEPS": "Modules/_hacl/libHacl_Hash_MD5.a", + "MODULE__MD5_LDFLAGS": "Modules/_hacl/libHacl_Hash_MD5.a", + "MODULE__MD5_STATE": "yes", + "MODULE__MULTIBYTECODEC_DEPS": "./Modules/cjkcodecs/multibytecodec.h", + "MODULE__MULTIBYTECODEC_LDFLAGS": "", + "MODULE__MULTIBYTECODEC_STATE": "yes", + "MODULE__MULTIPROCESSING_CFLAGS": "-I./Modules/_multiprocessing", + "MODULE__MULTIPROCESSING_LDFLAGS": "", + "MODULE__MULTIPROCESSING_STATE": "yes", + "MODULE__OPCODE_LDFLAGS": "", + "MODULE__OPERATOR_LDFLAGS": "", + "MODULE__PICKLE_LDFLAGS": "", + "MODULE__PICKLE_STATE": "yes", + "MODULE__POSIXSHMEM_CFLAGS": "-I./Modules/_multiprocessing", + "MODULE__POSIXSHMEM_LDFLAGS": "-lrt", + "MODULE__POSIXSHMEM_STATE": "yes", + "MODULE__POSIXSUBPROCESS_LDFLAGS": "", + "MODULE__POSIXSUBPROCESS_STATE": "yes", + "MODULE__QUEUE_LDFLAGS": "", + "MODULE__QUEUE_STATE": "yes", + "MODULE__RANDOM_LDFLAGS": "", + "MODULE__RANDOM_STATE": "yes", + "MODULE__REMOTE_DEBUGGING_LDFLAGS": "", + "MODULE__REMOTE_DEBUGGING_STATE": "yes", + "MODULE__SCPROXY_STATE": "n/a", + "MODULE__SHA1_CFLAGS": "-I./Modules/_hacl -I./Modules/_hacl/include -D_BSD_SOURCE -D_DEFAULT_SOURCE -DLINUX_NO_EXPLICIT_BZERO -fno-strict-overflow -Wsign-compare -Wunreachable-code -DNDEBUG -g -O3 -Wall -O3 -fstack-protector -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -fno-semantic-interposition -flto=thin -g -fno-pie -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -D_Py_TIER2=3 -D_Py_JIT -fprofile-instr-use=/build/Python-3.14.7/code.profclangd -I./Include/internal -I./Include/internal/mimalloc -I. -I./Include -O3 -fstack-protector -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -fPIC -fPIC", + "MODULE__SHA1_DEPS": "./Modules/hashlib.h \\ Modules/_hacl/libHacl_Hash_SHA1.a", + "MODULE__SHA1_LDEPS": "Modules/_hacl/libHacl_Hash_SHA1.a", + "MODULE__SHA1_LDFLAGS": "Modules/_hacl/libHacl_Hash_SHA1.a", + "MODULE__SHA1_STATE": "yes", + "MODULE__SHA2_CFLAGS": "-I./Modules/_hacl -I./Modules/_hacl/include -D_BSD_SOURCE -D_DEFAULT_SOURCE -DLINUX_NO_EXPLICIT_BZERO -fno-strict-overflow -Wsign-compare -Wunreachable-code -DNDEBUG -g -O3 -Wall -O3 -fstack-protector -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -fno-semantic-interposition -flto=thin -g -fno-pie -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -D_Py_TIER2=3 -D_Py_JIT -fprofile-instr-use=/build/Python-3.14.7/code.profclangd -I./Include/internal -I./Include/internal/mimalloc -I. -I./Include -O3 -fstack-protector -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -fPIC -fPIC", + "MODULE__SHA2_DEPS": "./Modules/hashlib.h \\ Modules/_hacl/libHacl_Hash_SHA2.a", + "MODULE__SHA2_LDEPS": "Modules/_hacl/libHacl_Hash_SHA2.a", + "MODULE__SHA2_LDFLAGS": "Modules/_hacl/libHacl_Hash_SHA2.a", + "MODULE__SHA2_STATE": "yes", + "MODULE__SHA3_CFLAGS": "-I./Modules/_hacl -I./Modules/_hacl/include -D_BSD_SOURCE -D_DEFAULT_SOURCE -DLINUX_NO_EXPLICIT_BZERO -fno-strict-overflow -Wsign-compare -Wunreachable-code -DNDEBUG -g -O3 -Wall -O3 -fstack-protector -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -fno-semantic-interposition -flto=thin -g -fno-pie -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -D_Py_TIER2=3 -D_Py_JIT -fprofile-instr-use=/build/Python-3.14.7/code.profclangd -I./Include/internal -I./Include/internal/mimalloc -I. -I./Include -O3 -fstack-protector -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -fPIC -fPIC", + "MODULE__SHA3_DEPS": "./Modules/hashlib.h \\ Modules/_hacl/libHacl_Hash_SHA3.a", + "MODULE__SHA3_LDEPS": "Modules/_hacl/libHacl_Hash_SHA3.a", + "MODULE__SHA3_LDFLAGS": "Modules/_hacl/libHacl_Hash_SHA3.a", + "MODULE__SHA3_STATE": "yes", + "MODULE__SIGNAL_LDFLAGS": "", + "MODULE__SOCKET_DEPS": "./Modules/socketmodule.h ./Modules/addrinfo.h ./Modules/getaddrinfo.c ./Modules/getnameinfo.c", + "MODULE__SOCKET_LDFLAGS": "", + "MODULE__SOCKET_STATE": "yes", + "MODULE__SQLITE3_CFLAGS": " -I./Modules/_sqlite", + "MODULE__SQLITE3_DEPS": "./Modules/_sqlite/connection.h ./Modules/_sqlite/cursor.h ./Modules/_sqlite/microprotocols.h ./Modules/_sqlite/module.h ./Modules/_sqlite/prepare_protocol.h ./Modules/_sqlite/row.h ./Modules/_sqlite/util.h", + "MODULE__SQLITE3_LDFLAGS": " -lsqlite3 -lm -lz -ldl -lpthread", + "MODULE__SQLITE3_STATE": "yes", + "MODULE__SRE_LDFLAGS": "", + "MODULE__SSL_CFLAGS": "", + "MODULE__SSL_DEPS": "./Modules/_ssl.h ./Modules/_ssl/cert.c ./Modules/_ssl/debughelpers.c ./Modules/_ssl/misc.c ./Modules/_ssl_data_111.h ./Modules/_ssl_data_300.h ./Modules/socketmodule.h", + "MODULE__SSL_LDFLAGS": " -lssl -lcrypto", + "MODULE__SSL_STATE": "yes", + "MODULE__STATISTICS_LDFLAGS": "-lm", + "MODULE__STATISTICS_STATE": "yes", + "MODULE__STAT_LDFLAGS": "", + "MODULE__STRUCT_LDFLAGS": "", + "MODULE__STRUCT_STATE": "yes", + "MODULE__SUGGESTIONS_LDFLAGS": "", + "MODULE__SYMTABLE_LDFLAGS": "", + "MODULE__SYSCONFIG_LDFLAGS": "", + "MODULE__TESTBUFFER_STATE": "yes", + "MODULE__TESTCAPI_DEPS": "./Modules/_testcapi/parts.h ./Modules/_testcapi/util.h", + "MODULE__TESTCAPI_LDFLAGS": "", + "MODULE__TESTCAPI_STATE": "yes", + "MODULE__TESTCLINIC_LIMITED_STATE": "yes", + "MODULE__TESTCLINIC_STATE": "yes", + "MODULE__TESTIMPORTMULTIPLE_STATE": "yes", + "MODULE__TESTINTERNALCAPI_DEPS": "./Modules/_testinternalcapi/parts.h", + "MODULE__TESTINTERNALCAPI_LDFLAGS": "", + "MODULE__TESTINTERNALCAPI_STATE": "yes", + "MODULE__TESTLIMITEDCAPI_DEPS": "./Modules/_testlimitedcapi/testcapi_long.h ./Modules/_testlimitedcapi/parts.h ./Modules/_testlimitedcapi/util.h", + "MODULE__TESTLIMITEDCAPI_STATE": "yes", + "MODULE__TESTMULTIPHASE_STATE": "yes", + "MODULE__TESTSINGLEPHASE_STATE": "yes", + "MODULE__THREAD_LDFLAGS": "", + "MODULE__TKINTER_CFLAGS": " -Wno-strict-prototypes -DWITH_APPINIT=1", + "MODULE__TKINTER_LDFLAGS": " -ltcl9tk9.0 -ltkstub -lX11 -lpthread -lxcb -lXau -ltcl9.0 -ltclstub -ldl -lz -lpthread -lm -lz", + "MODULE__TKINTER_STATE": "yes", + "MODULE__TRACEMALLOC_LDFLAGS": "", + "MODULE__TYPES_LDFLAGS": "", + "MODULE__TYPES_STATE": "yes", + "MODULE__TYPING_LDFLAGS": "", + "MODULE__TYPING_STATE": "yes", + "MODULE__UUID_CFLAGS": "", + "MODULE__UUID_LDFLAGS": "-luuid", + "MODULE__UUID_STATE": "yes", + "MODULE__WEAKREF_LDFLAGS": "", + "MODULE__XXTESTFUZZ_LDFLAGS": "", + "MODULE__XXTESTFUZZ_STATE": "yes", + "MODULE__ZONEINFO_LDFLAGS": "", + "MODULE__ZONEINFO_STATE": "yes", + "MODULE__ZSTD_CFLAGS": "-pthread ", + "MODULE__ZSTD_DEPS": "./Modules/_zstd/_zstdmodule.h ./Modules/_zstd/buffer.h ./Modules/_zstd/zstddict.h", + "MODULE__ZSTD_LDFLAGS": " -lzstd -pthread", + "MODULE__ZSTD_STATE": "yes", + "MULTIARCH": "x86_64-linux-gnu", + "MULTIARCH_CPPFLAGS": "-DMULTIARCH=\\\"x86_64-linux-gnu\\\"", + "MVWDELCH_IS_EXPRESSION": "1", + "NO_AS_NEEDED": "-Wl,--no-as-needed", + "OBJECT_OBJS": "\\", + "OPT": "-DNDEBUG -g -O3 -Wall", + "PACKAGE_BUGREPORT": "0", + "PACKAGE_NAME": "0", + "PACKAGE_STRING": "0", + "PACKAGE_TARNAME": "0", + "PACKAGE_URL": "0", + "PACKAGE_VERSION": "0", + "PARSER_HEADERS": "\\", + "PARSER_OBJS": "\\ \\ \\ Parser/myreadline.o", + "PEGEN_HEADERS": "\\", + "PEGEN_OBJS": "\\", + "PGO_PROF_GEN_FLAG": "-fprofile-instr-generate", + "PGO_PROF_USE_FLAG": "-fprofile-instr-use=\"$(shell pwd)/code.profclangd\"", + "PLATLIBDIR": "lib", + "POBJS": "\\", + "POSIX_SEMAPHORES_NOT_ENABLED": "0", + "PROFILE_TASK": "-m test --pgo -j 4 --ignore test.test_bytes.BytesTest.test_from_format", + "PTHREAD_KEY_T_IS_COMPATIBLE_WITH_INT": "1", + "PTHREAD_SYSTEM_SCHED_SUPPORTED": "1", + "PURIFY": "", + "PY3LIBRARY": "libpython3.so", + "PYLONG_BITS_IN_DIGIT": "0", + "PYTHON": "python", + "PYTHONFRAMEWORK": "", + "PYTHONFRAMEWORKDIR": "no-framework", + "PYTHONFRAMEWORKINSTALLDIR": "", + "PYTHONFRAMEWORKINSTALLNAMEPREFIX": "", + "PYTHONFRAMEWORKPREFIX": "", + "PYTHONPATH": "", + "PYTHON_FOR_BUILD": "_PYTHON_PROJECT_BASE=/build/Python-3.14.7 _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=./Lib _PYTHON_SYSCONFIGDATA_NAME=_sysconfigdata__linux_x86_64-linux-gnu _PYTHON_SYSCONFIGDATA_PATH=$(shell test -f pybuilddir.txt && echo /build/Python-3.14.7/`cat pybuilddir.txt`) /tools/host/bin/python3.14", + "PYTHON_FOR_BUILD_DEPS": "", + "PYTHON_FOR_FREEZE": "/tools/host/bin/python3.14", + "PYTHON_FOR_REGEN": "", + "PYTHON_HEADERS": "\\", + "PYTHON_OBJS": "\\", + "PY_BUILTIN_HASHLIB_HASHES": "\"md5,sha1,sha2,sha3,blake2\"", + "PY_BUILTIN_MODULE_CFLAGS": "-fno-strict-overflow -Wsign-compare -Wunreachable-code -DNDEBUG -g -O3 -Wall -O3 -fstack-protector -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -fno-semantic-interposition -flto=thin -g -fno-pie -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -D_Py_TIER2=3 -D_Py_JIT -fprofile-instr-use=/build/Python-3.14.7/code.profclangd -I./Include/internal -I./Include/internal/mimalloc -I. -I./Include -O3 -fstack-protector -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -fPIC -DPy_BUILD_CORE_BUILTIN", + "PY_CFLAGS": "-fno-strict-overflow -Wsign-compare -Wunreachable-code -DNDEBUG -g -O3 -Wall -O3 -fstack-protector -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC ", + "PY_CFLAGS_NODIST": "-fno-semantic-interposition -flto=thin -g -fno-pie -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -D_Py_TIER2=3 -D_Py_JIT -fprofile-instr-use=/build/Python-3.14.7/code.profclangd -I./Include/internal -I./Include/internal/mimalloc", + "PY_COERCE_C_LOCALE": "1", + "PY_CORE_CFLAGS": "-fno-strict-overflow -Wsign-compare -Wunreachable-code -DNDEBUG -g -O3 -Wall -O3 -fstack-protector -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -fno-semantic-interposition -flto=thin -g -fno-pie -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -D_Py_TIER2=3 -D_Py_JIT -fprofile-instr-use=/build/Python-3.14.7/code.profclangd -I./Include/internal -I./Include/internal/mimalloc -I. -I./Include -O3 -fstack-protector -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -fPIC -DPy_BUILD_CORE", + "PY_CORE_LDFLAGS": "-Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--build-id=sha1 -Wl,--exclude-libs,ALL -fno-semantic-interposition -flto=thin -g -Wl,--emit-relocs", + "PY_CPPFLAGS": "-I. -I./Include -O3 -fstack-protector -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC ", + "PY_ENABLE_SHARED": "1", + "PY_HAVE_PERF_TRAMPOLINE": "1", + "PY_LDFLAGS": "-Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--build-id=sha1 -Wl,--exclude-libs,ALL", + "PY_LDFLAGS_NODIST": "-fno-semantic-interposition -flto=thin -g -Wl,--emit-relocs", + "PY_LDFLAGS_NOLTO": "-Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--build-id=sha1 -Wl,--exclude-libs,ALL -flto=thin", + "PY_SQLITE_ENABLE_LOAD_EXTENSION": "1", + "PY_SQLITE_HAVE_SERIALIZE": "1", + "PY_SSL_DEFAULT_CIPHERS": "1", + "PY_SSL_DEFAULT_CIPHER_STRING": "0", + "PY_STDMODULE_CFLAGS": "-fno-strict-overflow -Wsign-compare -Wunreachable-code -DNDEBUG -g -O3 -Wall -O3 -fstack-protector -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -fno-semantic-interposition -flto=thin -g -fno-pie -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -D_Py_TIER2=3 -D_Py_JIT -fprofile-instr-use=/build/Python-3.14.7/code.profclangd -I./Include/internal -I./Include/internal/mimalloc -I. -I./Include -O3 -fstack-protector -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -fPIC", + "PY_SUPPORT_TIER": "2", + "Py_DEBUG": "0", + "Py_ENABLE_SHARED": "1", + "Py_GIL_DISABLED": "0", + "Py_HASH_ALGORITHM": "0", + "Py_REMOTE_DEBUG": "1", + "Py_RL_STARTUP_HOOK_TAKES_ARGS": "0", + "Py_STATS": "0", + "Py_SUNOS_VERSION": "0", + "Py_TAIL_CALL_INTERP": "1", + "Py_TRACE_REFS": "0", + "QUICKTESTOPTS": "-x test_subprocess test_io \\", + "READELF": "@READELF@", + "RESSRCDIR": "", + "RETSIGTYPE": "void", + "RUNSHARED": "LD_LIBRARY_PATH=/build/Python-3.14.7", + "SCRIPTDIR": "/install/lib", + "SCRIPT_IDLE": "build/scripts-3.14/idle3.14", + "SCRIPT_PYDOC": "build/scripts-3.14/pydoc3.14", + "SETPGRP_HAVE_ARG": "0", + "SHAREDMODS": "Modules/_dbm.cpython-314-x86_64-linux-gnu.so Modules/_testbuffer.cpython-314-x86_64-linux-gnu.so Modules/_testcapi.cpython-314-x86_64-linux-gnu.so Modules/_testlimitedcapi.cpython-314-x86_64-linux-gnu.so Modules/_tkinter.cpython-314-x86_64-linux-gnu.so Modules/_testimportmultiple.cpython-314-x86_64-linux-gnu.so Modules/_testmultiphase.cpython-314-x86_64-linux-gnu.so Modules/_testsinglephase.cpython-314-x86_64-linux-gnu.so Modules/_ctypes_test.cpython-314-x86_64-linux-gnu.so", + "SHELL": "/bin/sh -e", + "SHLIBS": "-lpthread -ldl -lutil", + "SHLIB_SUFFIX": ".so", + "SIGNED_RIGHT_SHIFT_ZERO_FILLS": "0", + "SITEPATH": "", + "SIZEOF_DOUBLE": "8", + "SIZEOF_FLOAT": "4", + "SIZEOF_FPOS_T": "16", + "SIZEOF_INT": "4", + "SIZEOF_LONG": "8", + "SIZEOF_LONG_DOUBLE": "16", + "SIZEOF_LONG_LONG": "8", + "SIZEOF_OFF_T": "8", + "SIZEOF_PID_T": "4", + "SIZEOF_PTHREAD_KEY_T": "4", + "SIZEOF_PTHREAD_T": "8", + "SIZEOF_SHORT": "2", + "SIZEOF_SIZE_T": "8", + "SIZEOF_TIME_T": "8", + "SIZEOF_UINTPTR_T": "8", + "SIZEOF_VOID_P": "8", + "SIZEOF_WCHAR_T": "4", + "SIZEOF__BOOL": "1", + "SOABI": "cpython-314-x86_64-linux-gnu", + "SRCDIRS": "Modules Modules/_ctypes Modules/_decimal Modules/_decimal/libmpdec Modules/_hacl Modules/_io Modules/_multiprocessing Modules/_sqlite Modules/_sre Modules/_testcapi Modules/_testinternalcapi Modules/_testlimitedcapi Modules/_xxtestfuzz Modules/_zstd Modules/cjkcodecs Modules/expat Objects Objects/mimalloc Objects/mimalloc/prim Parser Parser/tokenizer Parser/lexer Programs Python Python/frozen_modules", + "SRC_GDB_HOOKS": "./Tools/gdb/libpython.py", + "STATIC_LIBPYTHON": "1", + "STDC_HEADERS": "1", + "STRICT_SYSV_CURSES": "/* Don't use ncurses extensions */", + "STRIPFLAG": "-s", + "SUBDIRS": "", + "SUBDIRSTOO": "Include Lib Misc", + "SYSLIBS": "-lm", + "SYS_SELECT_WITH_SYS_TIME": "1", + "TESTOPTS": "", + "TESTPATH": "", + "TESTPYTHON": "LD_LIBRARY_PATH=/build/Python-3.14.7 _PYTHON_PROJECT_BASE=/build/Python-3.14.7 _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=./Lib _PYTHON_SYSCONFIGDATA_NAME=_sysconfigdata__linux_x86_64-linux-gnu _PYTHON_SYSCONFIGDATA_PATH=$(shell test -f pybuilddir.txt && echo /build/Python-3.14.7/`cat pybuilddir.txt`) /tools/host/bin/python3.14", + "TESTPYTHONOPTS": "", + "TESTRUNNER": "LD_LIBRARY_PATH=/build/Python-3.14.7 _PYTHON_PROJECT_BASE=/build/Python-3.14.7 _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=./Lib _PYTHON_SYSCONFIGDATA_NAME=_sysconfigdata__linux_x86_64-linux-gnu _PYTHON_SYSCONFIGDATA_PATH=$(shell test -f pybuilddir.txt && echo /build/Python-3.14.7/`cat pybuilddir.txt`) /tools/host/bin/python3.14 -m test", + "TESTSUBDIRS": "idlelib/idle_test \\", + "TESTTIMEOUT": "", + "TEST_MODULES": "yes", + "THREAD_STACK_SIZE": "0", + "TIMEMODULE_LIB": "0", + "TM_IN_SYS_TIME": "0", + "TOKENIZER_HEADERS": "\\", + "TOKENIZER_OBJS": "\\", + "TZPATH": "/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo", + "UNICODE_DEPS": "\\", + "UNIVERSALSDK": "", + "UPDATE_FILE": "./Tools/build/update_file.py", + "USE_COMPUTED_GOTOS": "0", + "VERSION": "3.14", + "WEBEX2": "web_example_pyrepl_jspi", + "WEBEX2_DIR": "./Platforms/emscripten/web_example_pyrepl_jspi/", + "WEBEX_DIR": "./Platforms/emscripten/web_example/", + "WHEEL_PKG_DIR": "", + "WINDOW_HAS_FLAGS": "0", + "WITH_DECIMAL_CONTEXTVAR": "1", + "WITH_DOC_STRINGS": "1", + "WITH_DTRACE": "0", + "WITH_DYLD": "0", + "WITH_EDITLINE": "1", + "WITH_LIBINTL": "0", + "WITH_MIMALLOC": "1", + "WITH_NEXT_FRAMEWORK": "0", + "WITH_PYMALLOC": "1", + "WITH_VALGRIND": "0", + "X87_DOUBLE_ROUNDING": "0", + "XMLLIBSUBDIRS": "xml xml/dom xml/etree xml/parsers xml/sax", + "ZIP_STDLIB": "python3.14.zip", + "abi_thread": "", + "abiflags": "", + "abs_builddir": "/build/Python-3.14.7", + "abs_srcdir": "/build/Python-3.14.7", + "base": "/build/out/python/install", + "datarootdir": "/install/share", + "exec_prefix": "/build/out/python/install", + "host_exec_prefix": "/install", + "host_prefix": "/install", + "implementation": "Python", + "implementation_lower": "python", + "installed_base": "/build/out/python/install", + "installed_platbase": "/build/out/python/install", + "platbase": "/build/out/python/install", + "platlibdir": "lib", + "prefix": "/build/out/python/install", + "projectbase": "/build/out/python/install/bin", + "py_version": "3.14.7", + "py_version_nodot": "314", + "py_version_nodot_plat": "", + "py_version_short": "3.14", + "srcdir": "/build/out/python/install/lib/python3.14/config-3.14-x86_64-linux-gnu", + "userbase": "/build/.local" + }, + "python_exe": "install/bin/python3.14", + "python_extension_module_loading": [ + "builtin", + "shared-library" + ], + "python_implementation_cache_tag": "cpython-314", + "python_implementation_hex_version": 51251184, + "python_implementation_name": "cpython", + "python_implementation_version": [ + "3", + "14", + "7", + "final", + "0" + ], + "python_major_minor_version": "3.14", + "python_paths": { + "data": "install", + "include": "install/include/python3.14", + "platinclude": "install/include/python3.14", + "platlib": "install/lib/python3.14/site-packages", + "platstdlib": "install/lib/python3.14", + "purelib": "install/lib/python3.14/site-packages", + "scripts": "install/bin", + "stdlib": "install/lib/python3.14" + }, + "python_paths_abstract": { + "data": "{base}", + "include": "{installed_base}/include/python{py_version_short}{abiflags}", + "platinclude": "{installed_platbase}/include/python{py_version_short}{abiflags}", + "platlib": "{platbase}/{platlibdir}/{implementation_lower}{py_version_short}{abi_thread}/site-packages", + "platstdlib": "{platbase}/{platlibdir}/{implementation_lower}{py_version_short}{abi_thread}", + "purelib": "{base}/lib/{implementation_lower}{py_version_short}{abi_thread}/site-packages", + "scripts": "{base}/bin", + "stdlib": "{installed_base}/{platlibdir}/{implementation_lower}{py_version_short}{abi_thread}" + }, + "python_platform_tag": "linux-x86_64", + "python_stdlib_platform_config": "install/lib/python3.14/config-3.14-x86_64-linux-gnu", + "python_stdlib_test_packages": [ + "bsddb.test", + "ctypes.test", + "distutils.tests", + "email.test", + "idlelib.idle_test", + "json.tests", + "lib-tk.test", + "lib2to3.tests", + "sqlite3.test", + "test", + "tkinter.test", + "unittest.test" + ], + "python_suffixes": { + "bytecode": [ + ".pyc" + ], + "debug_bytecode": [ + ".pyc" + ], + "extension": [ + ".cpython-314-x86_64-linux-gnu.so", + ".abi3.so", + ".so" + ], + "optimized_bytecode": [ + ".pyc" + ], + "source": [ + ".py" + ] + }, + "python_symbol_visibility": "global-default", + "python_tag": "cp314", + "python_version": "3.14.7", + "run_tests": "build/run_tests.py", + "target_triple": "x86_64-unknown-linux-gnu", + "tcl_library_path": "install/lib", + "tcl_library_paths": [ + "itcl4.3.8", + "thread3.0.6", + "tk9.0" + ], + "version": "8" +} \ No newline at end of file diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.bdb.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.bdb.txt new file mode 100644 index 000000000..0601b45e0 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.bdb.txt @@ -0,0 +1,126 @@ +The following is the license that applies to this copy of the Berkeley DB +software. For a license to use the Berkeley DB software under conditions +other than those described here, or to purchase support for this software, +please contact Oracle at berkeleydb-info_us@oracle.com. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +/* + * Copyright (c) 1990, 2013 Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Redistributions in any form must be accompanied by information on + * how to obtain complete source code for the DB software and any + * accompanying software that uses the DB software. The source code + * must either be included in the distribution or be available for no + * more than the cost of distribution plus a nominal fee, and must be + * freely redistributable under reasonable conditions. For an + * executable file, complete source code means the source code for all + * modules it contains. It does not include source code for modules or + * files that typically accompany the major components of the operating + * system on which the executable file runs. + * + * THIS SOFTWARE IS PROVIDED BY ORACLE ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR + * NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL ORACLE BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +/* + * Copyright (c) 1990, 1993, 1994, 1995 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +/* + * Copyright (c) 1995, 1996 + * The President and Fellows of Harvard University. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY HARVARD AND ITS CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL HARVARD OR ITS CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +/*** + * ASM: a very small and fast Java bytecode manipulation framework + * Copyright (c) 2000-2005 INRIA, France Telecom + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holders nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.bzip2.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.bzip2.txt new file mode 100644 index 000000000..a5c4cdbc3 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.bzip2.txt @@ -0,0 +1,37 @@ +This program, "bzip2", the associated library "libbzip2", and all +documentation, are copyright (C) 1996-2010 Julian R Seward. All +rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. The origin of this software must not be misrepresented; you must + not claim that you wrote the original software. If you use this + software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + +3. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + +4. The name of the author may not be used to endorse or promote + products derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Julian Seward, jseward@bzip.org +bzip2/libbzip2 version 1.0.6 of 6 September 2010 diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.cpython.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.cpython.txt new file mode 100644 index 000000000..1007a8052 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.cpython.txt @@ -0,0 +1,771 @@ +A. HISTORY OF THE SOFTWARE +========================== + +Python was created in the early 1990s by Guido van Rossum at Stichting +Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands +as a successor of a language called ABC. Guido remains Python's +principal author, although it includes many contributions from others. + +In 1995, Guido continued his work on Python at the Corporation for +National Research Initiatives (CNRI, see http://www.cnri.reston.va.us) +in Reston, Virginia where he released several versions of the +software. + +In May 2000, Guido and the Python core development team moved to +BeOpen.com to form the BeOpen PythonLabs team. In October of the same +year, the PythonLabs team moved to Digital Creations, which became +Zope Corporation. In 2001, the Python Software Foundation (PSF, see +https://www.python.org/psf/) was formed, a non-profit organization +created specifically to own Python-related Intellectual Property. +Zope Corporation was a sponsoring member of the PSF. + +All Python releases are Open Source (see http://www.opensource.org for +the Open Source Definition). Historically, most, but not all, Python +releases have also been GPL-compatible; the table below summarizes +the various releases. + + Release Derived Year Owner GPL- + from compatible? (1) + + 0.9.0 thru 1.2 1991-1995 CWI yes + 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes + 1.6 1.5.2 2000 CNRI no + 2.0 1.6 2000 BeOpen.com no + 1.6.1 1.6 2001 CNRI yes (2) + 2.1 2.0+1.6.1 2001 PSF no + 2.0.1 2.0+1.6.1 2001 PSF yes + 2.1.1 2.1+2.0.1 2001 PSF yes + 2.1.2 2.1.1 2002 PSF yes + 2.1.3 2.1.2 2002 PSF yes + 2.2 and above 2.1.1 2001-now PSF yes + +Footnotes: + +(1) GPL-compatible doesn't mean that we're distributing Python under + the GPL. All Python licenses, unlike the GPL, let you distribute + a modified version without making your changes open source. The + GPL-compatible licenses make it possible to combine Python with + other software that is released under the GPL; the others don't. + +(2) According to Richard Stallman, 1.6.1 is not GPL-compatible, + because its license has a choice of law clause. According to + CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1 + is "not incompatible" with the GPL. + +Thanks to the many outside volunteers who have worked under Guido's +direction to make these releases possible. + + +B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON +=============================================================== + +Python software and documentation are licensed under the +Python Software Foundation License Version 2. + +Starting with Python 3.8.6, examples, recipes, and other code in +the documentation are dual licensed under the PSF License Version 2 +and the Zero-Clause BSD license. + +Some software incorporated into Python is under different licenses. +The licenses are listed with code falling under that license. + + +PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 +-------------------------------------------- + +1. This LICENSE AGREEMENT is between the Python Software Foundation +("PSF"), and the Individual or Organization ("Licensee") accessing and +otherwise using this software ("Python") in source or binary form and +its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, PSF hereby +grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, +analyze, test, perform and/or display publicly, prepare derivative works, +distribute, and otherwise use Python alone or in any derivative version, +provided, however, that PSF's License Agreement and PSF's notice of copyright, +i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Python Software Foundation; +All Rights Reserved" are retained in Python alone or in any derivative version +prepared by Licensee. + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python. + +4. PSF is making Python available to Licensee on an "AS IS" +basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. Nothing in this License Agreement shall be deemed to create any +relationship of agency, partnership, or joint venture between PSF and +Licensee. This License Agreement does not grant permission to use PSF +trademarks or trade name in a trademark sense to endorse or promote +products or services of Licensee, or any third party. + +8. By copying, installing or otherwise using Python, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 +------------------------------------------- + +BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 + +1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an +office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the +Individual or Organization ("Licensee") accessing and otherwise using +this software in source or binary form and its associated +documentation ("the Software"). + +2. Subject to the terms and conditions of this BeOpen Python License +Agreement, BeOpen hereby grants Licensee a non-exclusive, +royalty-free, world-wide license to reproduce, analyze, test, perform +and/or display publicly, prepare derivative works, distribute, and +otherwise use the Software alone or in any derivative version, +provided, however, that the BeOpen Python License is retained in the +Software, alone or in any derivative version prepared by Licensee. + +3. BeOpen is making the Software available to Licensee on an "AS IS" +basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE +SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS +AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY +DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +5. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +6. This License Agreement shall be governed by and interpreted in all +respects by the law of the State of California, excluding conflict of +law provisions. Nothing in this License Agreement shall be deemed to +create any relationship of agency, partnership, or joint venture +between BeOpen and Licensee. This License Agreement does not grant +permission to use BeOpen trademarks or trade names in a trademark +sense to endorse or promote products or services of Licensee, or any +third party. As an exception, the "BeOpen Python" logos available at +http://www.pythonlabs.com/logos.html may be used according to the +permissions granted on that web page. + +7. By copying, installing or otherwise using the software, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 +--------------------------------------- + +1. This LICENSE AGREEMENT is between the Corporation for National +Research Initiatives, having an office at 1895 Preston White Drive, +Reston, VA 20191 ("CNRI"), and the Individual or Organization +("Licensee") accessing and otherwise using Python 1.6.1 software in +source or binary form and its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, CNRI +hereby grants Licensee a nonexclusive, royalty-free, world-wide +license to reproduce, analyze, test, perform and/or display publicly, +prepare derivative works, distribute, and otherwise use Python 1.6.1 +alone or in any derivative version, provided, however, that CNRI's +License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) +1995-2001 Corporation for National Research Initiatives; All Rights +Reserved" are retained in Python 1.6.1 alone or in any derivative +version prepared by Licensee. Alternately, in lieu of CNRI's License +Agreement, Licensee may substitute the following text (omitting the +quotes): "Python 1.6.1 is made available subject to the terms and +conditions in CNRI's License Agreement. This Agreement together with +Python 1.6.1 may be located on the internet using the following +unique, persistent identifier (known as a handle): 1895.22/1013. This +Agreement may also be obtained from a proxy server on the internet +using the following URL: http://hdl.handle.net/1895.22/1013". + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python 1.6.1 or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python 1.6.1. + +4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" +basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. This License Agreement shall be governed by the federal +intellectual property law of the United States, including without +limitation the federal copyright law, and, to the extent such +U.S. federal law does not apply, by the law of the Commonwealth of +Virginia, excluding Virginia's conflict of law provisions. +Notwithstanding the foregoing, with regard to derivative works based +on Python 1.6.1 that incorporate non-separable material that was +previously distributed under the GNU General Public License (GPL), the +law of the Commonwealth of Virginia shall govern this License +Agreement only as to issues arising under or with respect to +Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this +License Agreement shall be deemed to create any relationship of +agency, partnership, or joint venture between CNRI and Licensee. This +License Agreement does not grant permission to use CNRI trademarks or +trade name in a trademark sense to endorse or promote products or +services of Licensee, or any third party. + +8. By clicking on the "ACCEPT" button where indicated, or by copying, +installing or otherwise using Python 1.6.1, Licensee agrees to be +bound by the terms and conditions of this License Agreement. + + ACCEPT + + +CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 +-------------------------------------------------- + +Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, +The Netherlands. All rights reserved. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Stichting Mathematisch +Centrum or CWI not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +ZERO-CLAUSE BSD LICENSE FOR CODE IN THE PYTHON DOCUMENTATION +---------------------------------------------------------------------- + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + +Licenses and Acknowledgements for Incorporated Software +======================================================= + +This section is an incomplete, but growing list of licenses and acknowledgements +for third-party software incorporated in the Python distribution. + +Mersenne Twister +---------------- + +The :mod:`_random` module includes code based on a download from +http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/emt19937ar.html. The following are +the verbatim comments from the original code:: + + A C-program for MT19937, with initialization improved 2002/1/26. + Coded by Takuji Nishimura and Makoto Matsumoto. + + Before using, initialize the state by using init_genrand(seed) + or init_by_array(init_key, key_length). + + Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura, + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. The names of its contributors may not be used to endorse or promote + products derived from this software without specific prior written + permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + Any feedback is very welcome. + http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html + email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space) + + +Sockets +------- + +The :mod:`socket` module uses the functions, :func:`getaddrinfo`, and +:func:`getnameinfo`, which are coded in separate source files from the WIDE +Project, http://www.wide.ad.jp/. :: + + Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the project nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + + +Asynchronous socket services +---------------------------- + +The :mod:`asynchat` and :mod:`asyncore` modules contain the following notice:: + + Copyright 1996 by Sam Rushing + + All Rights Reserved + + Permission to use, copy, modify, and distribute this software and + its documentation for any purpose and without fee is hereby + granted, provided that the above copyright notice appear in all + copies and that both that copyright notice and this permission + notice appear in supporting documentation, and that the name of Sam + Rushing not be used in advertising or publicity pertaining to + distribution of the software without specific, written prior + permission. + + SAM RUSHING DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN + NO EVENT SHALL SAM RUSHING BE LIABLE FOR ANY SPECIAL, INDIRECT OR + CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS + OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +Cookie management +----------------- + +The :mod:`http.cookies` module contains the following notice:: + + Copyright 2000 by Timothy O'Malley + + All Rights Reserved + + Permission to use, copy, modify, and distribute this software + and its documentation for any purpose and without fee is hereby + granted, provided that the above copyright notice appear in all + copies and that both that copyright notice and this permission + notice appear in supporting documentation, and that the name of + Timothy O'Malley not be used in advertising or publicity + pertaining to distribution of the software without specific, written + prior permission. + + Timothy O'Malley DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS + SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS, IN NO EVENT SHALL Timothy O'Malley BE LIABLE FOR + ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + + +Execution tracing +----------------- + +The :mod:`trace` module contains the following notice:: + + portions copyright 2001, Autonomous Zones Industries, Inc., all rights... + err... reserved and offered to the public under the terms of the + Python 2.2 license. + Author: Zooko O'Whielacronx + http://zooko.com/ + mailto:zooko@zooko.com + + Copyright 2000, Mojam Media, Inc., all rights reserved. + Author: Skip Montanaro + + Copyright 1999, Bioreason, Inc., all rights reserved. + Author: Andrew Dalke + + Copyright 1995-1997, Automatrix, Inc., all rights reserved. + Author: Skip Montanaro + + Copyright 1991-1995, Stichting Mathematisch Centrum, all rights reserved. + + + Permission to use, copy, modify, and distribute this Python software and + its associated documentation for any purpose without fee is hereby + granted, provided that the above copyright notice appears in all copies, + and that both that copyright notice and this permission notice appear in + supporting documentation, and that the name of neither Automatrix, + Bioreason or Mojam Media be used in advertising or publicity pertaining to + distribution of the software without specific, written prior permission. + + +UUencode and UUdecode functions +------------------------------- + +The :mod:`uu` module contains the following notice:: + + Copyright 1994 by Lance Ellinghouse + Cathedral City, California Republic, United States of America. + All Rights Reserved + Permission to use, copy, modify, and distribute this software and its + documentation for any purpose and without fee is hereby granted, + provided that the above copyright notice appear in all copies and that + both that copyright notice and this permission notice appear in + supporting documentation, and that the name of Lance Ellinghouse + not be used in advertising or publicity pertaining to distribution + of the software without specific, written prior permission. + LANCE ELLINGHOUSE DISCLAIMS ALL WARRANTIES WITH REGARD TO + THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS, IN NO EVENT SHALL LANCE ELLINGHOUSE CENTRUM BE LIABLE + FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT + OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + Modified by Jack Jansen, CWI, July 1995: + - Use binascii module to do the actual line-by-line conversion + between ascii and binary. This results in a 1000-fold speedup. The C + version is still 5 times faster, though. + - Arguments more compliant with Python standard + + +XML Remote Procedure Calls +-------------------------- + +The :mod:`xmlrpc.client` module contains the following notice:: + + The XML-RPC client interface is + + Copyright (c) 1999-2002 by Secret Labs AB + Copyright (c) 1999-2002 by Fredrik Lundh + + By obtaining, using, and/or copying this software and/or its + associated documentation, you agree that you have read, understood, + and will comply with the following terms and conditions: + + Permission to use, copy, modify, and distribute this software and + its associated documentation for any purpose and without fee is + hereby granted, provided that the above copyright notice appears in + all copies, and that both that copyright notice and this permission + notice appear in supporting documentation, and that the name of + Secret Labs AB or the author not be used in advertising or publicity + pertaining to distribution of the software without specific, written + prior permission. + + SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANT- + ABILITY AND FITNESS. IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR + BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY + DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + OF THIS SOFTWARE. + + +test_epoll +---------- + +The :mod:`test_epoll` module contains the following notice:: + + Copyright (c) 2001-2006 Twisted Matrix Laboratories. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Select kqueue +------------- + +The :mod:`select` module contains the following notice for the kqueue +interface:: + + Copyright (c) 2000 Doug White, 2006 James Knight, 2007 Christian Heimes + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + + +SipHash24 +--------- + +The file :file:`Python/pyhash.c` contains Marek Majkowski' implementation of +Dan Bernstein's SipHash24 algorithm. It contains the following note:: + + + Copyright (c) 2013 Marek Majkowski + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + + Original location: + https://github.com/majek/csiphash/ + + Solution inspired by code from: + Samuel Neves (supercop/crypto_auth/siphash24/little) + djb (supercop/crypto_auth/siphash24/little2) + Jean-Philippe Aumasson (https://131002.net/siphash/siphash24.c) + + +strtod and dtoa +--------------- + +The file :file:`Python/dtoa.c`, which supplies C functions dtoa and +strtod for conversion of C doubles to and from strings, is derived +from the file of the same name by David M. Gay, currently available +from http://www.netlib.org/fp/. The original file, as retrieved on +March 16, 2009, contains the following copyright and licensing +notice:: + + /**************************************************************** + * + * The author of this software is David M. Gay. + * + * Copyright (c) 1991, 2000, 2001 by Lucent Technologies. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose without fee is hereby granted, provided that this entire notice + * is included in all copies of any software which is or includes a copy + * or modification of this software and in all copies of the supporting + * documentation for such software. + * + * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED + * WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR LUCENT MAKES ANY + * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY + * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. + * + ***************************************************************/ + +expat +----- + +The :mod:`pyexpat` extension is built using an included copy of the expat +sources unless the build is configured ``--with-system-expat``:: + + Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd + and Clark Cooper + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +cfuhash +------- + +The implementation of the hash table used by the :mod:`tracemalloc` is based +on the cfuhash project:: + + Copyright (c) 2005 Don Owens + All rights reserved. + + This code is released under the BSD license: + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + * Neither the name of the author nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + OF THE POSSIBILITY OF SUCH DAMAGE. + + +libmpdec +-------- + +The :mod:`_decimal` module is built using an included copy of the libmpdec +library unless the build is configured ``--with-system-libmpdec``:: + + Copyright (c) 2008-2020 Stefan Krah. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + +W3C C14N test suite +------------------- + +The C14N 2.0 test suite in the :mod:`test` package +(``Lib/test/xmltestdata/c14n-20/``) was retrieved from the W3C website at +https://www.w3.org/TR/xml-c14n2-testcases/ and is distributed under the +3-clause BSD license:: + + Copyright (c) 2013 W3C(R) (MIT, ERCIM, Keio, Beihang), + All Rights Reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + * Redistributions of works must retain the original copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the original copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the W3C nor the names of its contributors may be + used to endorse or promote products derived from this work without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.expat.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.expat.txt new file mode 100644 index 000000000..ce9e59392 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.expat.txt @@ -0,0 +1,21 @@ +Copyright (c) 1998-2000 Thai Open Source Software Center Ltd and Clark Cooper +Copyright (c) 2001-2022 Expat maintainers + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libX11.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libX11.txt new file mode 100644 index 000000000..b065516e4 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libX11.txt @@ -0,0 +1,942 @@ +The following is the 'standard copyright' agreed upon by most contributors, +and is currently the canonical license preferred by the X.Org Foundation. +This is a slight variant of the common MIT license form published by the +Open Source Initiative at http://www.opensource.org/licenses/mit-license.php + +Copyright holders of new code should use this license statement where +possible, and insert their name to this list. Please sort by surname +for people, and by the full name for other entities (e.g. Juliusz +Chroboczek sorts before Intel Corporation sorts before Daniel Stone). + +See each individual source file or directory for the license that applies +to that file. + +Copyright (C) 2003-2006,2008 Jamey Sharp, Josh Triplett +Copyright © 2009 Red Hat, Inc. +Copyright 1990-1992,1999,2000,2004,2009,2010 Oracle and/or its affiliates. +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next +paragraph) shall be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + + ---------------------------------------------------------------------- + +The following licenses are 'legacy' - usually MIT/X11 licenses with the name +of the copyright holder(s) in the license statement: + +Copyright 1984-1994, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from The Open Group. + +X Window System is a trademark of The Open Group. + + ---------------------------------------- + +Copyright 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium +Copyright 2000 The XFree86 Project, Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the X Consortium shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization +from the X Consortium. + +Copyright 1985, 1986, 1987, 1988, 1989, 1990, 1991 by +Digital Equipment Corporation + +Portions Copyright 1990, 1991 by Tektronix, Inc. + +Permission to use, copy, modify and distribute this documentation for +any purpose and without fee is hereby granted, provided that the above +copyright notice appears in all copies and that both that copyright notice +and this permission notice appear in all copies, and that the names of +Digital and Tektronix not be used in in advertising or publicity pertaining +to this documentation without specific, written prior permission. +Digital and Tektronix makes no representations about the suitability +of this documentation for any purpose. +It is provided ``as is'' without express or implied warranty. + + ---------------------------------------- + +Copyright (c) 1999-2000 Free Software Foundation, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +FREE SOFTWARE FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the Free Software Foundation +shall not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization from the +Free Software Foundation. + + ---------------------------------------- + +Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. + All Rights Reserved + +This file is a component of an X Window System-specific implementation +of Xcms based on the TekColor Color Management System. TekColor is a +trademark of Tektronix, Inc. The term "TekHVC" designates a particular +color space that is the subject of U.S. Patent No. 4,985,853 (equivalent +foreign patents pending). Permission is hereby granted to use, copy, +modify, sell, and otherwise distribute this software and its +documentation for any purpose and without fee, provided that: + +1. This copyright, permission, and disclaimer notice is reproduced in + all copies of this software and any modification thereof and in + supporting documentation; +2. Any color-handling application which displays TekHVC color + cooordinates identifies these as TekHVC color coordinates in any + interface that displays these coordinates and in any associated + documentation; +3. The term "TekHVC" is always used, and is only used, in association + with the mathematical derivations of the TekHVC Color Space, + including those provided in this file and any equivalent pathways and + mathematical derivations, regardless of digital (e.g., floating point + or integer) representation. + +Tektronix makes no representation about the suitability of this software +for any purpose. It is provided "as is" and with all faults. + +TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, +INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF +CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +(c) Copyright 1995 FUJITSU LIMITED +This is source code modified by FUJITSU LIMITED under the Joint +Development Agreement for the CDE/Motif PST. + + ---------------------------------------- + +Copyright 1992 by Oki Technosystems Laboratory, Inc. +Copyright 1992 by Fuji Xerox Co., Ltd. + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of Oki Technosystems +Laboratory and Fuji Xerox not be used in advertising or publicity +pertaining to distribution of the software without specific, written +prior permission. +Oki Technosystems Laboratory and Fuji Xerox make no representations +about the suitability of this software for any purpose. It is provided +"as is" without express or implied warranty. + +OKI TECHNOSYSTEMS LABORATORY AND FUJI XEROX DISCLAIM ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL OKI TECHNOSYSTEMS +LABORATORY AND FUJI XEROX BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE +OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1990, 1991, 1992, 1993, 1994 by FUJITSU LIMITED + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of FUJITSU LIMITED +not be used in advertising or publicity pertaining to distribution +of the software without specific, written prior permission. +FUJITSU LIMITED makes no representations about the suitability of +this software for any purpose. +It is provided "as is" without express or implied warranty. + +FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + + +Copyright (c) 1995 David E. Wexelblat. All rights reserved + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL DAVID E. WEXELBLAT BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of David E. Wexelblat shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization +from David E. Wexelblat. + + ---------------------------------------- + +Copyright 1990, 1991 by OMRON Corporation + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name OMRON not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. OMRON makes no representations +about the suitability of this software for any purpose. It is provided +"as is" without express or implied warranty. + +OMRON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL OMRON BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTUOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1985, 1986, 1987, 1988, 1989, 1990, 1991 by +Digital Equipment Corporation + +Portions Copyright 1990, 1991 by Tektronix, Inc + +Rewritten for X.org by Chris Lee + +Permission to use, copy, modify, distribute, and sell this documentation +for any purpose and without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. +Chris Lee makes no representations about the suitability for any purpose +of the information in this document. It is provided \`\`as-is'' without +express or implied warranty. + + ---------------------------------------- + +Copyright 1993 by Digital Equipment Corporation, Maynard, Massachusetts, +Copyright 1994 by FUJITSU LIMITED +Copyright 1994 by Sony Corporation + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the names of Digital, FUJITSU +LIMITED and Sony Corporation not be used in advertising or publicity +pertaining to distribution of the software without specific, written +prior permission. + +DIGITAL, FUJITSU LIMITED AND SONY CORPORATION DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL, FUJITSU LIMITED +AND SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + + +Copyright 1991 by the Open Software Foundation + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of Open Software Foundation +not be used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. Open Software +Foundation makes no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +OPEN SOFTWARE FOUNDATION DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL OPEN SOFTWARE FOUNDATIONN BE +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1990, 1991, 1992,1993, 1994 by FUJITSU LIMITED +Copyright 1993, 1994 by Sony Corporation + +Permission to use, copy, modify, distribute, and sell this software and +its documentation for any purpose is hereby granted without fee, provided +that the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of FUJITSU LIMITED and Sony Corporation +not be used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. FUJITSU LIMITED and +Sony Corporation makes no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +FUJITSU LIMITED AND SONY CORPORATION DISCLAIMS ALL WARRANTIES WITH REGARD +TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL FUJITSU LIMITED OR SONY CORPORATION BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE +USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright (c) 1993, 1995 by Silicon Graphics Computer Systems, Inc. + +Permission to use, copy, modify, and distribute this +software and its documentation for any purpose and without +fee is hereby granted, provided that the above copyright +notice appear in all copies and that both that copyright +notice and this permission notice appear in supporting +documentation, and that the name of Silicon Graphics not be +used in advertising or publicity pertaining to distribution +of the software without specific prior written permission. +Silicon Graphics makes no representation about the suitability +of this software for any purpose. It is provided "as is" +without any express or implied warranty. + +SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS +SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON +GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH +THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1991, 1992, 1993, 1994 by FUJITSU LIMITED +Copyright 1993 by Digital Equipment Corporation + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of FUJITSU LIMITED and +Digital Equipment Corporation not be used in advertising or publicity +pertaining to distribution of the software without specific, written +prior permission. FUJITSU LIMITED and Digital Equipment Corporation +makes no representations about the suitability of this software for +any purpose. It is provided "as is" without express or implied +warranty. + +FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION DISCLAIM ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION BE LIABLE FOR +ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1992, 1993 by FUJITSU LIMITED +Copyright 1993 by Fujitsu Open Systems Solutions, Inc. +Copyright 1994 by Sony Corporation + +Permission to use, copy, modify, distribute and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of FUJITSU LIMITED, +Fujitsu Open Systems Solutions, Inc. and Sony Corporation not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. +FUJITSU LIMITED, Fujitsu Open Systems Solutions, Inc. and +Sony Corporation make no representations about the suitability of +this software for any purpose. It is provided "as is" without +express or implied warranty. + +FUJITSU LIMITED, FUJITSU OPEN SYSTEMS SOLUTIONS, INC. AND SONY +CORPORATION DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, +IN NO EVENT SHALL FUJITSU OPEN SYSTEMS SOLUTIONS, INC., FUJITSU LIMITED +AND SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE +OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1987, 1988, 1990, 1993 by Digital Equipment Corporation, +Maynard, Massachusetts, + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Digital not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + + ---------------------------------------- + +Copyright 1993 by SunSoft, Inc. +Copyright 1999-2000 by Bruno Haible + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the names of SunSoft, Inc. and +Bruno Haible not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. SunSoft, Inc. and Bruno Haible make no representations +about the suitability of this software for any purpose. It is +provided "as is" without express or implied warranty. + +SunSoft Inc. AND Bruno Haible DISCLAIM ALL WARRANTIES WITH REGARD +TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS, IN NO EVENT SHALL SunSoft, Inc. OR Bruno Haible BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1991 by the Open Software Foundation +Copyright 1993 by the TOSHIBA Corp. + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the names of Open Software Foundation and TOSHIBA +not be used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. Open Software +Foundation and TOSHIBA make no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +OPEN SOFTWARE FOUNDATION AND TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL OPEN SOFTWARE FOUNDATIONN OR TOSHIBA BE +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1988 by Wyse Technology, Inc., San Jose, Ca., + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name Wyse not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +WYSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + + ---------------------------------------- + + +Copyright 1991 by the Open Software Foundation +Copyright 1993, 1994 by the Sony Corporation + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the names of Open Software Foundation and +Sony Corporation not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior permission. +Open Software Foundation and Sony Corporation make no +representations about the suitability of this software for any purpose. +It is provided "as is" without express or implied warranty. + +OPEN SOFTWARE FOUNDATION AND SONY CORPORATION DISCLAIM ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL OPEN +SOFTWARE FOUNDATIONN OR SONY CORPORATION BE LIABLE FOR ANY SPECIAL, +INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1992, 1993 by FUJITSU LIMITED +Copyright 1993 by Fujitsu Open Systems Solutions, Inc. + +Permission to use, copy, modify, distribute and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of FUJITSU LIMITED and +Fujitsu Open Systems Solutions, Inc. not be used in advertising or +publicity pertaining to distribution of the software without specific, +written prior permission. +FUJITSU LIMITED and Fujitsu Open Systems Solutions, Inc. makes no +representations about the suitability of this software for any purpose. +It is provided "as is" without express or implied warranty. + +FUJITSU LIMITED AND FUJITSU OPEN SYSTEMS SOLUTIONS, INC. DISCLAIMS ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU OPEN SYSTEMS +SOLUTIONS, INC. AND FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT +OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE +OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1993, 1994 by Sony Corporation + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of Sony Corporation +not be used in advertising or publicity pertaining to distribution +of the software without specific, written prior permission. +Sony Corporation makes no representations about the suitability of +this software for any purpose. It is provided "as is" without +express or implied warranty. + +SONY CORPORATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1986, 1998 The Open Group +Copyright (c) 2000 The XFree86 Project, Inc. + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +X CONSORTIUM OR THE XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +Except as contained in this notice, the name of the X Consortium or of the +XFree86 Project shall not be used in advertising or otherwise to promote the +sale, use or other dealings in this Software without prior written +authorization from the X Consortium and the XFree86 Project. + + ---------------------------------------- + +Copyright 1990, 1991 by OMRON Corporation, NTT Software Corporation, + and Nippon Telegraph and Telephone Corporation +Copyright 1991 by the Open Software Foundation +Copyright 1993 by the FUJITSU LIMITED + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the names of OMRON, NTT Software, NTT, and +Open Software Foundation not be used in advertising or publicity +pertaining to distribution of the software without specific, +written prior permission. OMRON, NTT Software, NTT, and Open Software +Foundation make no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +OMRON, NTT SOFTWARE, NTT, AND OPEN SOFTWARE FOUNDATION +DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT +SHALL OMRON, NTT SOFTWARE, NTT, OR OPEN SOFTWARE FOUNDATION BE +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1988 by Wyse Technology, Inc., San Jose, Ca, +Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts, + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name Digital not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL AND WYSE DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL DIGITAL OR WYSE BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + + +Copyright 1991, 1992 by Fuji Xerox Co., Ltd. +Copyright 1992, 1993, 1994 by FUJITSU LIMITED + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of Fuji Xerox, +FUJITSU LIMITED not be used in advertising or publicity pertaining +to distribution of the software without specific, written prior +permission. Fuji Xerox, FUJITSU LIMITED make no representations +about the suitability of this software for any purpose. +It is provided "as is" without express or implied warranty. + +FUJI XEROX, FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJI XEROX, +FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA +OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 2006 Josh Triplett + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + + ---------------------------------------- + +(c) Copyright 1996 by Sebastien Marineau and Holger Veit + + + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +HOLGER VEIT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +Except as contained in this notice, the name of Sebastien Marineau or Holger Veit +shall not be used in advertising or otherwise to promote the sale, use or other +dealings in this Software without prior written authorization from Holger Veit or +Sebastien Marineau. + + ---------------------------------------- + +Copyright 1990, 1991 by OMRON Corporation, NTT Software Corporation, + and Nippon Telegraph and Telephone Corporation +Copyright 1991 by the Open Software Foundation +Copyright 1993 by the TOSHIBA Corp. +Copyright 1993, 1994 by Sony Corporation +Copyright 1993, 1994 by the FUJITSU LIMITED + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the names of OMRON, NTT Software, NTT, Open +Software Foundation, and Sony Corporation not be used in advertising +or publicity pertaining to distribution of the software without specific, +written prior permission. OMRON, NTT Software, NTT, Open Software +Foundation, and Sony Corporation make no representations about the +suitability of this software for any purpose. It is provided "as is" +without express or implied warranty. + +OMRON, NTT SOFTWARE, NTT, OPEN SOFTWARE FOUNDATION, AND SONY +CORPORATION DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT +SHALL OMRON, NTT SOFTWARE, NTT, OPEN SOFTWARE FOUNDATION, OR SONY +CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 2000 by Bruno Haible + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of Bruno Haible not +be used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. Bruno Haible +makes no representations about the suitability of this software for +any purpose. It is provided "as is" without express or implied +warranty. + +Bruno Haible DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN +NO EVENT SHALL Bruno Haible BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE +OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright © 2003 Keith Packard + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of Keith Packard not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. Keith Packard makes no +representations about the suitability of this software for any purpose. It +is provided "as is" without express or implied warranty. + +KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright (c) 2007-2009, Troy D. Hanson +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + ---------------------------------------- + +Copyright 1992, 1993 by TOSHIBA Corp. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, provided +that the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of TOSHIBA not be used in advertising +or publicity pertaining to distribution of the software without specific, +written prior permission. TOSHIBA make no representations about the +suitability of this software for any purpose. It is provided "as is" +without express or implied warranty. + +TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + + + ---------------------------------------- + +Copyright IBM Corporation 1993 + +All Rights Reserved + +License to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of IBM not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS, AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS, IN NO EVENT SHALL +IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + + ---------------------------------------- + +Copyright 1990, 1991 by OMRON Corporation, NTT Software Corporation, + and Nippon Telegraph and Telephone Corporation + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the names of OMRON, NTT Software, and NTT +not be used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. OMRON, NTT Software, +and NTT make no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +OMRON, NTT SOFTWARE, AND NTT, DISCLAIM ALL WARRANTIES WITH REGARD +TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS, IN NO EVENT SHALL OMRON, NTT SOFTWARE, OR NTT, BE +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libXau.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libXau.txt new file mode 100644 index 000000000..64492ad80 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libXau.txt @@ -0,0 +1,21 @@ +Copyright 1988, 1993, 1994, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from The Open Group. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libedit.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libedit.txt new file mode 100644 index 000000000..52c8707dc --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libedit.txt @@ -0,0 +1,29 @@ +Copyright (c) 1992, 1993 + The Regents of the University of California. All rights reserved. + +This code is derived from software contributed to Berkeley by +Christos Zoulas of Cornell University. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libffi.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libffi.txt new file mode 100644 index 000000000..acb2f7a07 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libffi.txt @@ -0,0 +1,21 @@ +libffi - Copyright (c) 1996-2019 Anthony Green, Red Hat, Inc and others. +See source files for details. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +``Software''), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.liblzma.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.liblzma.txt new file mode 100644 index 000000000..2d7885199 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.liblzma.txt @@ -0,0 +1,13 @@ +Copyright (C) The XZ Utils authors and contributors + +Permission to use, copy, modify, and/or distribute this +software for any purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL +THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libuuid.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libuuid.txt new file mode 100644 index 000000000..ec87a77f1 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libuuid.txt @@ -0,0 +1,27 @@ +Copyright (C) 1996, 1997 Theodore Ts'o. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, and the entire permission notice in its entirety, + including the disclaimer of warranties. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote + products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF +WHICH ARE HEREBY DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libxcb.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libxcb.txt new file mode 100644 index 000000000..54bfbe5b0 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libxcb.txt @@ -0,0 +1,30 @@ +Copyright (C) 2001-2006 Bart Massey, Jamey Sharp, and Josh Triplett. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, +sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall +be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the names of the authors +or their institutions shall not be used in advertising or +otherwise to promote the sale, use or other dealings in this +Software without prior written authorization from the +authors. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.mpdecimal.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.mpdecimal.txt new file mode 100644 index 000000000..c7688a928 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.mpdecimal.txt @@ -0,0 +1,24 @@ +Copyright (c) 2008-2020 Stefan Krah. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.ncurses.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.ncurses.txt new file mode 100644 index 000000000..3a2297536 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.ncurses.txt @@ -0,0 +1,29 @@ +Copyright 2018-2020,2021 Thomas E. Dickey +Copyright 1998-2017,2018 Free Software Foundation, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, distribute with modifications, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR +THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name(s) of the above copyright +holders shall not be used in advertising or otherwise to promote the +sale, use or other dealings in this Software without prior written +authorization. + +-- vile:txtmode fc=72 +-- $Id: COPYING,v 1.10 2021/01/01 09:54:30 tom Exp $ diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.openssl-1.1.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.openssl-1.1.txt new file mode 100644 index 000000000..5b5ccdc96 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.openssl-1.1.txt @@ -0,0 +1,124 @@ + + LICENSE ISSUES + ============== + + The OpenSSL toolkit stays under a double license, i.e. both the conditions of + the OpenSSL License and the original SSLeay license apply to the toolkit. + See below for the actual license texts. + + OpenSSL License + --------------- + +/* ==================================================================== + * Copyright (c) 1998-2019 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + + Original SSLeay License + ----------------------- + +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.openssl-3.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.openssl-3.txt new file mode 100644 index 000000000..49cc83d2e --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.openssl-3.txt @@ -0,0 +1,177 @@ + + Apache License + Version 2.0, January 2004 + https://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.sqlite.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.sqlite.txt new file mode 100644 index 000000000..68b36ebd1 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.sqlite.txt @@ -0,0 +1,23 @@ +All of the code and documentation in SQLite has been dedicated to the public +domain by the authors. All code authors, and representatives of the companies +they work for, have signed affidavits dedicating their contributions to the +public domain and originals of those signed affidavits are stored in a firesafe +at the main offices of Hwaci. Anyone is free to copy, modify, publish, use, +compile, sell, or distribute the original SQLite code, either in source code form +or as a compiled binary, for any purpose, commercial or non-commercial, and by +any means. + +The previous paragraph applies to the deliverable code and documentation in +SQLite - those parts of the SQLite library that you actually bundle and ship +with a larger application. Some scripts used as part of the build process (for +example the "configure" scripts generated by autoconf) might fall under other +open-source licenses. Nothing from these build scripts ever reaches the final +deliverable SQLite library, however, and so the licenses associated with those +scripts should not be a factor in assessing your rights to copy and use the +SQLite library. + +All of the deliverable code in SQLite has been written from scratch. No code has +been taken from other projects or from the open internet. Every line of code can +be traced back to its original author, and all of those authors have public +domain dedications on file. So the SQLite code base is clean and is +uncontaminated with licensed code from other projects. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.tcl.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.tcl.txt new file mode 100644 index 000000000..d8049cd9e --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.tcl.txt @@ -0,0 +1,40 @@ +This software is copyrighted by the Regents of the University of +California, Sun Microsystems, Inc., Scriptics Corporation, ActiveState +Corporation and other parties. The following terms apply to all files +associated with the software unless explicitly disclaimed in +individual files. + +The authors hereby grant permission to use, copy, modify, distribute, +and license this software and its documentation for any purpose, provided +that existing copyright notices are retained in all copies and that this +notice is included verbatim in any distributions. No written agreement, +license, or royalty fee is required for any of the authorized uses. +Modifications to this software may be copyrighted by their authors +and need not follow the licensing terms described here, provided that +the new terms are clearly indicated on the first page of each file where +they apply. + +IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +MODIFICATIONS. + +GOVERNMENT USE: If you are acquiring this software on behalf of the +U.S. government, the Government shall have only "Restricted Rights" +in the software and related documentation as defined in the Federal +Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you +are acquiring the software on behalf of the Department of Defense, the +software shall be classified as "Commercial Computer Software" and the +Government shall have only "Restricted Rights" as defined in Clause +252.227-7014 (b) (3) of DFARs. Notwithstanding the foregoing, the +authors grant the U.S. Government and others acting in its behalf +permission to use and distribute the software in accordance with the +terms specified in this license. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.tix.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.tix.txt new file mode 100644 index 000000000..5323a3fc3 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.tix.txt @@ -0,0 +1,54 @@ +Copyright (c) 1993-1999 Ioi Kim Lam. +Copyright (c) 2000-2001 Tix Project Group. +Copyright (c) 2004 ActiveState + +This software is copyrighted by the above entities +and other parties. The following terms apply to all files associated +with the software unless explicitly disclaimed in individual files. + +The authors hereby grant permission to use, copy, modify, distribute, +and license this software and its documentation for any purpose, provided +that existing copyright notices are retained in all copies and that this +notice is included verbatim in any distributions. No written agreement, +license, or royalty fee is required for any of the authorized uses. +Modifications to this software may be copyrighted by their authors +and need not follow the licensing terms described here, provided that +the new terms are clearly indicated on the first page of each file where +they apply. + +IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +MODIFICATIONS. + +GOVERNMENT USE: If you are acquiring this software on behalf of the +U.S. government, the Government shall have only "Restricted Rights" +in the software and related documentation as defined in the Federal +Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you +are acquiring the software on behalf of the Department of Defense, the +software shall be classified as "Commercial Computer Software" and the +Government shall have only "Restricted Rights" as defined in Clause +252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the +authors grant the U.S. Government and others acting in its behalf +permission to use and distribute the software in accordance with the +terms specified in this license. + +---------------------------------------------------------------------- + +Parts of this software are based on the Tcl/Tk software copyrighted by +the Regents of the University of California, Sun Microsystems, Inc., +and other parties. The original license terms of the Tcl/Tk software +distribution is included in the file docs/license.tcltk. + +Parts of this software are based on the HTML Library software +copyrighted by Sun Microsystems, Inc. The original license terms of +the HTML Library software distribution is included in the file +docs/license.html_lib. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.zlib.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.zlib.txt new file mode 100644 index 000000000..5eb28a147 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.zlib.txt @@ -0,0 +1,21 @@ + + Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive-manifest.json b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive-manifest.json new file mode 100644 index 000000000..d9a95f622 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive-manifest.json @@ -0,0 +1,114 @@ +{ + "archive_name": "cpython-3.14.7+20260901-aarch64-apple-darwin-pgo+lto-full.tar.zst", + "archive_sha256": "185fa676e14b648bd736ce7f20f9b11e201131b3216ec5a39d4ecd8ab8a71112", + "archive_size": 60724957, + "archive_url": "https://github.com/astral-sh/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "asset_id": 539917285, + "files": [ + { + "declared": false, + "path": "licenses/LICENSE.bdb.txt", + "sha256": "3bdff06e69991c94664f2ef5c5f8096f60b7dbec071756ea6cc26b445e06ec5b" + }, + { + "declared": false, + "path": "licenses/LICENSE.bzip2.txt", + "sha256": "1f38bbc7caacafd65169276d759c0d88c991b753b643ce35d0e45ea1971dd441" + }, + { + "declared": true, + "path": "licenses/LICENSE.cpython.txt", + "sha256": "86e61415828a8b5b06ec8d024e6f086ce155a8b85fd0c419c0ba4dc004e74fdd" + }, + { + "declared": false, + "path": "licenses/LICENSE.expat.txt", + "sha256": "122f2c27000472a201d337b9b31f7eb2b52d091b02857061a8880371612d9534" + }, + { + "declared": false, + "path": "licenses/LICENSE.libX11.txt", + "sha256": "2daec087a88e7c9b8082557cdeebad5bbb8155a4137472f0b22e269cd99d0c1e" + }, + { + "declared": false, + "path": "licenses/LICENSE.libXau.txt", + "sha256": "56abe29bb1d9806a9e04fa9f80fed2c0f18027594df3f098148d814aef6bddfa" + }, + { + "declared": false, + "path": "licenses/LICENSE.libedit.txt", + "sha256": "29cea33c32bbc9785142386377915612a2fa786482c46843383384aded2e09b1" + }, + { + "declared": false, + "path": "licenses/LICENSE.libffi.txt", + "sha256": "deaf3a42effb551a5b140fa9afefed183a27f1341c6d1bf430d106a5e6931fc0" + }, + { + "declared": false, + "path": "licenses/LICENSE.liblzma.txt", + "sha256": "9a4062de0a2c388a98cf35a35d348b62fa97c838a71c3c28ee1a2d7d0a565b02" + }, + { + "declared": false, + "path": "licenses/LICENSE.libuuid.txt", + "sha256": "122ee1f7e258f2c3c0e538a75c037684f420454bf3850ddc74ce750bbf5fe86b" + }, + { + "declared": false, + "path": "licenses/LICENSE.libxcb.txt", + "sha256": "c5ffbfeaa501071ceeb97b7de2c0d703fdaa35de01c0fb6cbac1c28453a3e9fd" + }, + { + "declared": false, + "path": "licenses/LICENSE.mpdecimal.txt", + "sha256": "669512af7219f58be03a398766d7c9da11a3b3df9d3f05cb74c5ceca25c8da3b" + }, + { + "declared": false, + "path": "licenses/LICENSE.ncurses.txt", + "sha256": "87a4c4442337b8968ef956031c406b74f9cb7149b7ba87311bdaba534816201c" + }, + { + "declared": false, + "path": "licenses/LICENSE.openssl-1.1.txt", + "sha256": "9c04cce50c4989d5601dd8b07f6ab922c40388b66ac736c9007cb1ed9d9dd560" + }, + { + "declared": false, + "path": "licenses/LICENSE.openssl-3.txt", + "sha256": "7d5450cb2d142651b8afa315b5f238efc805dad827d91ba367d8516bc9d49e7a" + }, + { + "declared": false, + "path": "licenses/LICENSE.sqlite.txt", + "sha256": "38bef3d28b24f145ea293bd3b6eb4b20396982abc8303128fb493986ea5bc719" + }, + { + "declared": false, + "path": "licenses/LICENSE.tcl.txt", + "sha256": "c0a69a2bfd757361ec7e6143973b103c90409316b49e9c88db26ad6388e79f16" + }, + { + "declared": false, + "path": "licenses/LICENSE.tix.txt", + "sha256": "3ac5cdd0bef6c43ce34c6a7ced452081d9e5a0bf94082b9f9147d23ec9e214f5" + }, + { + "declared": false, + "path": "licenses/LICENSE.zlib.txt", + "sha256": "818922b2620f12801a12bf78e399644a30990e66824abd8ca8ec24d451d6f92c" + } + ], + "mapping_authority": "https://github.com/astral-sh/python-build-standalone/blob/20260901/src/release.rs", + "python_json": { + "path": "PYTHON.json", + "sha256": "469cdc82612064f19338a524bc8eedbce8f6f411e0080c4dc1a5ccf30c538a71", + "size": 136728 + }, + "release_id": 380696527, + "scope": "selected_full_archive_license_directory_and_declared_references", + "source_url": "https://releases.astral.sh/github/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-aarch64-apple-darwin-install_only_stripped.tar.gz", + "target": "aarch64-apple-darwin" +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/PYTHON.json b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/PYTHON.json new file mode 100644 index 000000000..f25399bfb --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/PYTHON.json @@ -0,0 +1,3123 @@ +{ + "apple_sdk_canonical_name": "macosx15.0", + "apple_sdk_deployment_target": "11.0", + "apple_sdk_platform": "macosx", + "apple_sdk_version": "15.0", + "build_info": { + "core": { + "links": [ + { + "name": "dl", + "system": true + }, + { + "framework": true, + "name": "CoreFoundation" + } + ], + "objs": [ + "build/Objects/abstract.o", + "build/Objects/boolobject.o", + "build/Objects/bytearrayobject.o", + "build/Objects/bytes_methods.o", + "build/Objects/bytesobject.o", + "build/Objects/call.o", + "build/Objects/capsule.o", + "build/Objects/cellobject.o", + "build/Objects/classobject.o", + "build/Objects/codeobject.o", + "build/Objects/complexobject.o", + "build/Objects/descrobject.o", + "build/Objects/dictobject.o", + "build/Objects/enumobject.o", + "build/Objects/exceptions.o", + "build/Objects/fileobject.o", + "build/Objects/floatobject.o", + "build/Objects/frameobject.o", + "build/Objects/funcobject.o", + "build/Objects/genericaliasobject.o", + "build/Objects/genobject.o", + "build/Objects/interpolationobject.o", + "build/Objects/iterobject.o", + "build/Objects/listobject.o", + "build/Objects/longobject.o", + "build/Objects/memoryobject.o", + "build/Objects/methodobject.o", + "build/Objects/moduleobject.o", + "build/Objects/namespaceobject.o", + "build/Objects/object.o", + "build/Objects/obmalloc.o", + "build/Objects/odictobject.o", + "build/Objects/picklebufobject.o", + "build/Objects/rangeobject.o", + "build/Objects/setobject.o", + "build/Objects/sliceobject.o", + "build/Objects/structseq.o", + "build/Objects/templateobject.o", + "build/Objects/tupleobject.o", + "build/Objects/typeobject.o", + "build/Objects/typevarobject.o", + "build/Objects/unicodectype.o", + "build/Objects/unicodeobject.o", + "build/Objects/unionobject.o", + "build/Objects/weakrefobject.o", + "build/Parser/action_helpers.o", + "build/Parser/lexer/buffer.o", + "build/Parser/lexer/lexer.o", + "build/Parser/lexer/state.o", + "build/Parser/myreadline.o", + "build/Parser/parser.o", + "build/Parser/peg_api.o", + "build/Parser/pegen.o", + "build/Parser/pegen_errors.o", + "build/Parser/string_parser.o", + "build/Parser/token.o", + "build/Parser/tokenizer/file_tokenizer.o", + "build/Parser/tokenizer/helpers.o", + "build/Parser/tokenizer/readline_tokenizer.o", + "build/Parser/tokenizer/string_tokenizer.o", + "build/Parser/tokenizer/utf8_tokenizer.o", + "build/Python/Python-ast.o", + "build/Python/Python-tokenize.o", + "build/Python/_contextvars.o", + "build/Python/_warnings.o", + "build/Python/asdl.o", + "build/Python/assemble.o", + "build/Python/ast.o", + "build/Python/ast_preprocess.o", + "build/Python/ast_unparse.o", + "build/Python/bltinmodule.o", + "build/Python/bootstrap_hash.o", + "build/Python/brc.o", + "build/Python/ceval.o", + "build/Python/ceval_gil.o", + "build/Python/codecs.o", + "build/Python/codegen.o", + "build/Python/compile.o", + "build/Python/context.o", + "build/Python/critical_section.o", + "build/Python/crossinterp.o", + "build/Python/dtoa.o", + "build/Python/dynamic_annotations.o", + "build/Python/dynload_shlib.o", + "build/Python/errors.o", + "build/Python/fileutils.o", + "build/Python/flowgraph.o", + "build/Python/formatter_unicode.o", + "build/Python/frame.o", + "build/Python/frozen.o", + "build/Python/frozenmain.o", + "build/Python/future.o", + "build/Python/gc.o", + "build/Python/gc_free_threading.o", + "build/Python/gc_gil.o", + "build/Python/getargs.o", + "build/Python/getcompiler.o", + "build/Python/getcopyright.o", + "build/Python/getopt.o", + "build/Python/getplatform.o", + "build/Python/getversion.o", + "build/Python/hamt.o", + "build/Python/hashtable.o", + "build/Python/import.o", + "build/Python/importdl.o", + "build/Python/index_pool.o", + "build/Python/initconfig.o", + "build/Python/instruction_sequence.o", + "build/Python/instrumentation.o", + "build/Python/interpconfig.o", + "build/Python/intrinsics.o", + "build/Python/jit.o", + "build/Python/legacy_tracing.o", + "build/Python/lock.o", + "build/Python/marshal.o", + "build/Python/modsupport.o", + "build/Python/mysnprintf.o", + "build/Python/mystrtoul.o", + "build/Python/object_stack.o", + "build/Python/optimizer.o", + "build/Python/optimizer_analysis.o", + "build/Python/optimizer_symbols.o", + "build/Python/parking_lot.o", + "build/Python/pathconfig.o", + "build/Python/perf_jit_trampoline.o", + "build/Python/perf_trampoline.o", + "build/Python/preconfig.o", + "build/Python/pyarena.o", + "build/Python/pyctype.o", + "build/Python/pyfpe.o", + "build/Python/pyhash.o", + "build/Python/pylifecycle.o", + "build/Python/pymath.o", + "build/Python/pystate.o", + "build/Python/pystrcmp.o", + "build/Python/pystrhex.o", + "build/Python/pystrtod.o", + "build/Python/pythonrun.o", + "build/Python/pytime.o", + "build/Python/qsbr.o", + "build/Python/remote_debugging.o", + "build/Python/specialize.o", + "build/Python/stackrefs.o", + "build/Python/structmember.o", + "build/Python/suggestions.o", + "build/Python/symtable.o", + "build/Python/sysmodule.o", + "build/Python/thread.o", + "build/Python/traceback.o", + "build/Python/tracemalloc.o", + "build/Python/uniqueid.o", + "build/Modules/config.o", + "build/Modules/gcmodule.o", + "build/Modules/getbuildinfo.o", + "build/Modules/getpath.o", + "build/Modules/main.o" + ], + "shared_lib": "install/lib/libpython3.14.dylib", + "static_lib": "install/lib/python3.14/config-3.14-darwin/libpython3.14.a" + }, + "extensions": { + "_abc": [ + { + "in_core": false, + "init_fn": "PyInit__abc", + "links": [], + "objs": [ + "build/Modules/_abc.o" + ], + "required": false, + "variant": "default" + } + ], + "_ast": [ + { + "in_core": true, + "init_fn": "PyInit__ast", + "links": [], + "objs": [], + "required": false, + "variant": "default" + } + ], + "_asyncio": [ + { + "in_core": false, + "init_fn": "PyInit__asyncio", + "links": [], + "objs": [ + "build/Modules/_asynciomodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_bisect": [ + { + "in_core": false, + "init_fn": "PyInit__bisect", + "links": [], + "objs": [ + "build/Modules/_bisectmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_blake2": [ + { + "in_core": false, + "init_fn": "PyInit__blake2", + "links": [], + "objs": [ + "build/Modules/_hacl/Hacl_Hash_Blake2b.o", + "build/Modules/_hacl/Hacl_Hash_Blake2s.o", + "build/Modules/_hacl/Lib_Memzero0.o", + "build/Modules/blake2module.o" + ], + "required": false, + "variant": "default" + } + ], + "_bz2": [ + { + "in_core": false, + "init_fn": "PyInit__bz2", + "license_paths": [ + "licenses/LICENSE.bzip2.txt" + ], + "license_public_domain": false, + "licenses": [ + "bzip2-1.0.6" + ], + "links": [ + { + "name": "bz2", + "path_static": "build/lib/libbz2.a" + } + ], + "objs": [ + "build/Modules/_bz2module.o" + ], + "required": false, + "variant": "default" + } + ], + "_codecs": [ + { + "in_core": false, + "init_fn": "PyInit__codecs", + "links": [], + "objs": [ + "build/Modules/_codecsmodule.o" + ], + "required": true, + "variant": "default" + } + ], + "_codecs_cn": [ + { + "in_core": false, + "init_fn": "PyInit__codecs_cn", + "links": [], + "objs": [ + "build/Modules/cjkcodecs/_codecs_cn.o" + ], + "required": false, + "variant": "default" + } + ], + "_codecs_hk": [ + { + "in_core": false, + "init_fn": "PyInit__codecs_hk", + "links": [], + "objs": [ + "build/Modules/cjkcodecs/_codecs_hk.o" + ], + "required": false, + "variant": "default" + } + ], + "_codecs_iso2022": [ + { + "in_core": false, + "init_fn": "PyInit__codecs_iso2022", + "links": [], + "objs": [ + "build/Modules/cjkcodecs/_codecs_iso2022.o" + ], + "required": false, + "variant": "default" + } + ], + "_codecs_jp": [ + { + "in_core": false, + "init_fn": "PyInit__codecs_jp", + "links": [], + "objs": [ + "build/Modules/cjkcodecs/_codecs_jp.o" + ], + "required": false, + "variant": "default" + } + ], + "_codecs_kr": [ + { + "in_core": false, + "init_fn": "PyInit__codecs_kr", + "links": [], + "objs": [ + "build/Modules/cjkcodecs/_codecs_kr.o" + ], + "required": false, + "variant": "default" + } + ], + "_codecs_tw": [ + { + "in_core": false, + "init_fn": "PyInit__codecs_tw", + "links": [], + "objs": [ + "build/Modules/cjkcodecs/_codecs_tw.o" + ], + "required": false, + "variant": "default" + } + ], + "_collections": [ + { + "in_core": false, + "init_fn": "PyInit__collections", + "links": [], + "objs": [ + "build/Modules/_collectionsmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_contextvars": [ + { + "in_core": true, + "init_fn": "PyInit__contextvars", + "links": [], + "objs": [], + "required": false, + "variant": "default" + } + ], + "_csv": [ + { + "in_core": false, + "init_fn": "PyInit__csv", + "links": [], + "objs": [ + "build/Modules/_csv.o" + ], + "required": false, + "variant": "default" + } + ], + "_ctypes": [ + { + "in_core": false, + "init_fn": "PyInit__ctypes", + "license_paths": [ + "licenses/LICENSE.libffi.txt" + ], + "license_public_domain": false, + "licenses": [ + "MIT" + ], + "links": [ + { + "name": "dl", + "system": true + }, + { + "name": "ffi", + "path_static": "build/lib/libffi.a" + } + ], + "objs": [ + "build/Modules/_ctypes/_ctypes.o", + "build/Modules/_ctypes/callbacks.o", + "build/Modules/_ctypes/callproc.o", + "build/Modules/_ctypes/cfield.o", + "build/Modules/_ctypes/malloc_closure.o", + "build/Modules/_ctypes/stgdict.o" + ], + "required": false, + "variant": "default" + } + ], + "_ctypes_test": [ + { + "in_core": false, + "init_fn": "PyInit__ctypes_test", + "links": [], + "objs": [ + "build/Modules/_ctypes/_ctypes_test.o" + ], + "required": false, + "shared_lib": "install/lib/python3.14/lib-dynload/_ctypes_test.cpython-314-darwin.so", + "variant": "default" + } + ], + "_curses": [ + { + "in_core": false, + "init_fn": "PyInit__curses", + "license_paths": [ + "licenses/LICENSE.ncurses.txt" + ], + "license_public_domain": false, + "licenses": [ + "X11" + ], + "links": [ + { + "name": "ncurses", + "system": true + } + ], + "objs": [ + "build/Modules/_cursesmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_curses_panel": [ + { + "in_core": false, + "init_fn": "PyInit__curses_panel", + "license_paths": [ + "licenses/LICENSE.ncurses.txt" + ], + "license_public_domain": false, + "licenses": [ + "X11" + ], + "links": [ + { + "name": "ncurses", + "system": true + }, + { + "name": "panel", + "system": true + } + ], + "objs": [ + "build/Modules/_curses_panel.o" + ], + "required": false, + "variant": "default" + } + ], + "_datetime": [ + { + "in_core": false, + "init_fn": "PyInit__datetime", + "links": [], + "objs": [ + "build/Modules/_datetimemodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_dbm": [ + { + "in_core": false, + "init_fn": "PyInit__dbm", + "links": [], + "objs": [ + "build/Modules/_dbmmodule.o" + ], + "required": false, + "shared_lib": "install/lib/python3.14/lib-dynload/_dbm.cpython-314-darwin.so", + "variant": "default" + } + ], + "_decimal": [ + { + "in_core": false, + "init_fn": "PyInit__decimal", + "license_paths": [ + "licenses/LICENSE.mpdecimal.txt" + ], + "license_public_domain": false, + "licenses": [ + "BSD-2-Clause" + ], + "links": [ + { + "name": "m", + "system": true + }, + { + "name": "mpdec", + "path_static": "build/lib/libmpdec.a" + } + ], + "objs": [ + "build/Modules/_decimal/_decimal.o" + ], + "required": false, + "variant": "default" + } + ], + "_elementtree": [ + { + "in_core": false, + "init_fn": "PyInit__elementtree", + "links": [], + "objs": [ + "build/Modules/_elementtree.o" + ], + "required": false, + "variant": "default" + } + ], + "_functools": [ + { + "in_core": false, + "init_fn": "PyInit__functools", + "links": [], + "objs": [ + "build/Modules/_functoolsmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_hashlib": [ + { + "in_core": false, + "init_fn": "PyInit__hashlib", + "license_paths": [ + "licenses/LICENSE.openssl-1.1.txt", + "licenses/LICENSE.openssl-3.txt" + ], + "license_public_domain": false, + "licenses": [ + "Apache-2.0", + "OpenSSL" + ], + "links": [ + { + "name": "crypto", + "path_static": "build/lib/libcrypto.a" + } + ], + "objs": [ + "build/Modules/_hashopenssl.o" + ], + "required": false, + "variant": "default" + } + ], + "_heapq": [ + { + "in_core": false, + "init_fn": "PyInit__heapq", + "links": [], + "objs": [ + "build/Modules/_heapqmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_hmac": [ + { + "in_core": false, + "init_fn": "PyInit__hmac", + "links": [], + "objs": [ + "build/Modules/_hacl/Hacl_HMAC.o", + "build/Modules/_hacl/Hacl_Hash_Blake2b.o", + "build/Modules/_hacl/Hacl_Hash_Blake2s.o", + "build/Modules/_hacl/Hacl_Hash_MD5.o", + "build/Modules/_hacl/Hacl_Hash_SHA1.o", + "build/Modules/_hacl/Hacl_Hash_SHA2.o", + "build/Modules/_hacl/Hacl_Hash_SHA3.o", + "build/Modules/_hacl/Hacl_Streaming_HMAC.o", + "build/Modules/_hacl/Lib_Memzero0.o", + "build/Modules/hmacmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_imp": [ + { + "in_core": true, + "init_fn": "PyInit__imp", + "links": [], + "objs": [], + "required": false, + "variant": "default" + } + ], + "_interpchannels": [ + { + "in_core": false, + "init_fn": "PyInit__interpchannels", + "links": [], + "objs": [ + "build/Modules/_interpchannelsmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_interpqueues": [ + { + "in_core": false, + "init_fn": "PyInit__interpqueues", + "links": [], + "objs": [ + "build/Modules/_interpqueuesmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_interpreters": [ + { + "in_core": false, + "init_fn": "PyInit__interpreters", + "links": [], + "objs": [ + "build/Modules/_interpretersmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_io": [ + { + "in_core": false, + "init_fn": "PyInit__io", + "links": [], + "objs": [ + "build/Modules/_io/_iomodule.o", + "build/Modules/_io/bufferedio.o", + "build/Modules/_io/bytesio.o", + "build/Modules/_io/fileio.o", + "build/Modules/_io/iobase.o", + "build/Modules/_io/stringio.o", + "build/Modules/_io/textio.o" + ], + "required": true, + "variant": "default" + } + ], + "_json": [ + { + "in_core": false, + "init_fn": "PyInit__json", + "links": [], + "objs": [ + "build/Modules/_json.o" + ], + "required": false, + "variant": "default" + } + ], + "_locale": [ + { + "in_core": false, + "init_fn": "PyInit__locale", + "links": [], + "objs": [ + "build/Modules/_localemodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_lsprof": [ + { + "in_core": false, + "init_fn": "PyInit__lsprof", + "links": [], + "objs": [ + "build/Modules/_lsprof.o", + "build/Modules/rotatingtree.o" + ], + "required": false, + "variant": "default" + } + ], + "_lzma": [ + { + "in_core": false, + "init_fn": "PyInit__lzma", + "license_paths": [ + "licenses/LICENSE.liblzma.txt" + ], + "license_public_domain": false, + "licenses": [ + "0BSD" + ], + "links": [ + { + "name": "lzma", + "path_static": "build/lib/liblzma.a" + }, + { + "name": "pthread", + "system": true + } + ], + "objs": [ + "build/Modules/_lzmamodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_md5": [ + { + "in_core": false, + "init_fn": "PyInit__md5", + "links": [], + "objs": [ + "build/Modules/_hacl/Hacl_Hash_MD5.o", + "build/Modules/md5module.o" + ], + "required": false, + "variant": "default" + } + ], + "_multibytecodec": [ + { + "in_core": false, + "init_fn": "PyInit__multibytecodec", + "links": [], + "objs": [ + "build/Modules/cjkcodecs/multibytecodec.o" + ], + "required": false, + "variant": "default" + } + ], + "_multiprocessing": [ + { + "in_core": false, + "init_fn": "PyInit__multiprocessing", + "links": [], + "objs": [ + "build/Modules/_multiprocessing/multiprocessing.o", + "build/Modules/_multiprocessing/semaphore.o" + ], + "required": false, + "variant": "default" + } + ], + "_opcode": [ + { + "in_core": false, + "init_fn": "PyInit__opcode", + "links": [], + "objs": [ + "build/Modules/_opcode.o" + ], + "required": false, + "variant": "default" + } + ], + "_operator": [ + { + "in_core": false, + "init_fn": "PyInit__operator", + "links": [], + "objs": [ + "build/Modules/_operator.o" + ], + "required": false, + "variant": "default" + } + ], + "_pickle": [ + { + "in_core": false, + "init_fn": "PyInit__pickle", + "links": [], + "objs": [ + "build/Modules/_pickle.o" + ], + "required": false, + "variant": "default" + } + ], + "_posixshmem": [ + { + "in_core": false, + "init_fn": "PyInit__posixshmem", + "links": [], + "objs": [ + "build/Modules/_multiprocessing/posixshmem.o" + ], + "required": false, + "variant": "default" + } + ], + "_posixsubprocess": [ + { + "in_core": false, + "init_fn": "PyInit__posixsubprocess", + "links": [], + "objs": [ + "build/Modules/_posixsubprocess.o" + ], + "required": false, + "variant": "default" + } + ], + "_queue": [ + { + "in_core": false, + "init_fn": "PyInit__queue", + "links": [], + "objs": [ + "build/Modules/_queuemodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_random": [ + { + "in_core": false, + "init_fn": "PyInit__random", + "links": [], + "objs": [ + "build/Modules/_randommodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_remote_debugging": [ + { + "in_core": false, + "init_fn": "PyInit__remote_debugging", + "links": [], + "objs": [ + "build/Modules/_remote_debugging_module.o" + ], + "required": false, + "variant": "default" + } + ], + "_scproxy": [ + { + "in_core": false, + "init_fn": "PyInit__scproxy", + "links": [ + { + "framework": true, + "name": "CoreFoundation" + }, + { + "framework": true, + "name": "SystemConfiguration" + } + ], + "objs": [ + "build/Modules/_scproxy.o" + ], + "required": false, + "variant": "default" + } + ], + "_sha1": [ + { + "in_core": false, + "init_fn": "PyInit__sha1", + "links": [], + "objs": [ + "build/Modules/_hacl/Hacl_Hash_SHA1.o", + "build/Modules/sha1module.o" + ], + "required": false, + "variant": "default" + } + ], + "_sha2": [ + { + "in_core": false, + "init_fn": "PyInit__sha2", + "links": [], + "objs": [ + "build/Modules/_hacl/Hacl_Hash_SHA2.o", + "build/Modules/sha2module.o" + ], + "required": false, + "variant": "default" + } + ], + "_sha3": [ + { + "in_core": false, + "init_fn": "PyInit__sha3", + "links": [], + "objs": [ + "build/Modules/_hacl/Hacl_Hash_SHA3.o", + "build/Modules/sha3module.o" + ], + "required": false, + "variant": "default" + } + ], + "_signal": [ + { + "in_core": false, + "init_fn": "PyInit__signal", + "links": [], + "objs": [ + "build/Modules/signalmodule.o" + ], + "required": true, + "variant": "default" + } + ], + "_socket": [ + { + "in_core": false, + "init_fn": "PyInit__socket", + "links": [], + "objs": [ + "build/Modules/socketmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_sqlite3": [ + { + "in_core": false, + "init_fn": "PyInit__sqlite3", + "license_paths": [ + "licenses/LICENSE.sqlite.txt", + "licenses/LICENSE.zlib-ng.txt", + "licenses/LICENSE.zlib.txt" + ], + "license_public_domain": false, + "licenses": [ + "Zlib" + ], + "links": [ + { + "name": "sqlite3", + "path_static": "build/lib/libsqlite3.a" + }, + { + "name": "z", + "system": true + } + ], + "objs": [ + "build/Modules/_sqlite/blob.o", + "build/Modules/_sqlite/connection.o", + "build/Modules/_sqlite/cursor.o", + "build/Modules/_sqlite/microprotocols.o", + "build/Modules/_sqlite/module.o", + "build/Modules/_sqlite/prepare_protocol.o", + "build/Modules/_sqlite/row.o", + "build/Modules/_sqlite/statement.o", + "build/Modules/_sqlite/util.o" + ], + "required": false, + "variant": "default" + } + ], + "_sre": [ + { + "in_core": false, + "init_fn": "PyInit__sre", + "links": [], + "objs": [ + "build/Modules/_sre/sre.o" + ], + "required": false, + "variant": "default" + } + ], + "_ssl": [ + { + "in_core": false, + "init_fn": "PyInit__ssl", + "license_paths": [ + "licenses/LICENSE.openssl-1.1.txt", + "licenses/LICENSE.openssl-3.txt" + ], + "license_public_domain": false, + "licenses": [ + "Apache-2.0", + "OpenSSL" + ], + "links": [ + { + "name": "crypto", + "path_static": "build/lib/libcrypto.a" + }, + { + "name": "ssl", + "path_static": "build/lib/libssl.a" + } + ], + "objs": [ + "build/Modules/_ssl.o" + ], + "required": false, + "variant": "default" + } + ], + "_stat": [ + { + "in_core": false, + "init_fn": "PyInit__stat", + "links": [], + "objs": [ + "build/Modules/_stat.o" + ], + "required": false, + "variant": "default" + } + ], + "_statistics": [ + { + "in_core": false, + "init_fn": "PyInit__statistics", + "links": [], + "objs": [ + "build/Modules/_statisticsmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_string": [ + { + "in_core": true, + "init_fn": "PyInit__string", + "links": [], + "objs": [], + "required": false, + "variant": "default" + } + ], + "_struct": [ + { + "in_core": false, + "init_fn": "PyInit__struct", + "links": [], + "objs": [ + "build/Modules/_struct.o" + ], + "required": false, + "variant": "default" + } + ], + "_suggestions": [ + { + "in_core": false, + "init_fn": "PyInit__suggestions", + "links": [], + "objs": [ + "build/Modules/_suggestions.o" + ], + "required": false, + "variant": "default" + } + ], + "_symtable": [ + { + "in_core": false, + "init_fn": "PyInit__symtable", + "links": [], + "objs": [ + "build/Modules/symtablemodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_sysconfig": [ + { + "in_core": false, + "init_fn": "PyInit__sysconfig", + "links": [], + "objs": [ + "build/Modules/_sysconfig.o" + ], + "required": false, + "variant": "default" + } + ], + "_testbuffer": [ + { + "in_core": false, + "init_fn": "PyInit__testbuffer", + "links": [], + "objs": [ + "build/Modules/_testbuffer.o" + ], + "required": false, + "shared_lib": "install/lib/python3.14/lib-dynload/_testbuffer.cpython-314-darwin.so", + "variant": "default" + } + ], + "_testcapi": [ + { + "in_core": false, + "init_fn": "PyInit__testcapi", + "links": [], + "objs": [ + "build/Modules/_testcapi/abstract.o", + "build/Modules/_testcapi/buffer.o", + "build/Modules/_testcapi/bytes.o", + "build/Modules/_testcapi/code.o", + "build/Modules/_testcapi/codec.o", + "build/Modules/_testcapi/complex.o", + "build/Modules/_testcapi/config.o", + "build/Modules/_testcapi/datetime.o", + "build/Modules/_testcapi/dict.o", + "build/Modules/_testcapi/docstring.o", + "build/Modules/_testcapi/exceptions.o", + "build/Modules/_testcapi/file.o", + "build/Modules/_testcapi/float.o", + "build/Modules/_testcapi/frame.o", + "build/Modules/_testcapi/function.o", + "build/Modules/_testcapi/gc.o", + "build/Modules/_testcapi/getargs.o", + "build/Modules/_testcapi/hash.o", + "build/Modules/_testcapi/heaptype.o", + "build/Modules/_testcapi/immortal.o", + "build/Modules/_testcapi/import.o", + "build/Modules/_testcapi/list.o", + "build/Modules/_testcapi/long.o", + "build/Modules/_testcapi/mem.o", + "build/Modules/_testcapi/monitoring.o", + "build/Modules/_testcapi/numbers.o", + "build/Modules/_testcapi/object.o", + "build/Modules/_testcapi/pyatomic.o", + "build/Modules/_testcapi/run.o", + "build/Modules/_testcapi/set.o", + "build/Modules/_testcapi/structmember.o", + "build/Modules/_testcapi/time.o", + "build/Modules/_testcapi/tuple.o", + "build/Modules/_testcapi/type.o", + "build/Modules/_testcapi/unicode.o", + "build/Modules/_testcapi/vectorcall.o", + "build/Modules/_testcapi/watchers.o", + "build/Modules/_testcapi/weakref.o", + "build/Modules/_testcapimodule.o" + ], + "required": false, + "shared_lib": "install/lib/python3.14/lib-dynload/_testcapi.cpython-314-darwin.so", + "variant": "default" + } + ], + "_testimportmultiple": [ + { + "in_core": false, + "init_fn": "PyInit__testimportmultiple", + "links": [], + "objs": [ + "build/Modules/_testimportmultiple.o" + ], + "required": false, + "shared_lib": "install/lib/python3.14/lib-dynload/_testimportmultiple.cpython-314-darwin.so", + "variant": "default" + } + ], + "_testinternalcapi": [ + { + "in_core": false, + "init_fn": "PyInit__testinternalcapi", + "links": [], + "objs": [ + "build/Modules/_testinternalcapi/complex.o", + "build/Modules/_testinternalcapi/pytime.o", + "build/Modules/_testinternalcapi/set.o", + "build/Modules/_testinternalcapi/test_critical_sections.o", + "build/Modules/_testinternalcapi/test_lock.o", + "build/Modules/_testinternalcapi.o" + ], + "required": false, + "variant": "default" + } + ], + "_testlimitedcapi": [ + { + "in_core": false, + "init_fn": "PyInit__testlimitedcapi", + "links": [], + "objs": [ + "build/Modules/_testlimitedcapi/abstract.o", + "build/Modules/_testlimitedcapi/bytearray.o", + "build/Modules/_testlimitedcapi/bytes.o", + "build/Modules/_testlimitedcapi/capsule.o", + "build/Modules/_testlimitedcapi/codec.o", + "build/Modules/_testlimitedcapi/complex.o", + "build/Modules/_testlimitedcapi/dict.o", + "build/Modules/_testlimitedcapi/eval.o", + "build/Modules/_testlimitedcapi/file.o", + "build/Modules/_testlimitedcapi/float.o", + "build/Modules/_testlimitedcapi/heaptype_relative.o", + "build/Modules/_testlimitedcapi/import.o", + "build/Modules/_testlimitedcapi/list.o", + "build/Modules/_testlimitedcapi/long.o", + "build/Modules/_testlimitedcapi/object.o", + "build/Modules/_testlimitedcapi/pyos.o", + "build/Modules/_testlimitedcapi/run.o", + "build/Modules/_testlimitedcapi/set.o", + "build/Modules/_testlimitedcapi/sys.o", + "build/Modules/_testlimitedcapi/tuple.o", + "build/Modules/_testlimitedcapi/unicode.o", + "build/Modules/_testlimitedcapi/vectorcall_limited.o", + "build/Modules/_testlimitedcapi/version.o", + "build/Modules/_testlimitedcapi/weakref.o", + "build/Modules/_testlimitedcapi.o" + ], + "required": false, + "shared_lib": "install/lib/python3.14/lib-dynload/_testlimitedcapi.cpython-314-darwin.so", + "variant": "default" + } + ], + "_testmultiphase": [ + { + "in_core": false, + "init_fn": "PyInit__testmultiphase", + "links": [], + "objs": [ + "build/Modules/_testmultiphase.o" + ], + "required": false, + "shared_lib": "install/lib/python3.14/lib-dynload/_testmultiphase.cpython-314-darwin.so", + "variant": "default" + } + ], + "_testsinglephase": [ + { + "in_core": false, + "init_fn": "PyInit__testsinglephase", + "links": [], + "objs": [ + "build/Modules/_testsinglephase.o" + ], + "required": false, + "shared_lib": "install/lib/python3.14/lib-dynload/_testsinglephase.cpython-314-darwin.so", + "variant": "default" + } + ], + "_thread": [ + { + "in_core": false, + "init_fn": "PyInit__thread", + "links": [], + "objs": [ + "build/Modules/_threadmodule.o" + ], + "required": true, + "variant": "default" + } + ], + "_tkinter": [ + { + "in_core": false, + "init_fn": "PyInit__tkinter", + "license_paths": [ + "licenses/LICENSE.tcl.txt", + "licenses/LICENSE.zlib-ng.txt", + "licenses/LICENSE.zlib.txt" + ], + "license_public_domain": false, + "licenses": [ + "TCL", + "Zlib" + ], + "links": [ + { + "framework": true, + "name": "CoreFoundation" + }, + { + "name": "pthread", + "system": true + }, + { + "name": "tcl9.0", + "system": true + }, + { + "name": "tcl9tk9.0", + "system": true + }, + { + "name": "tclstub", + "path_static": "build/lib/libtclstub.a" + }, + { + "name": "tkstub", + "path_static": "build/lib/libtkstub.a" + }, + { + "name": "z", + "system": true + } + ], + "objs": [ + "build/Modules/_tkinter.o", + "build/Modules/tkappinit.o" + ], + "required": false, + "shared_lib": "install/lib/python3.14/lib-dynload/_tkinter.cpython-314-darwin.so", + "variant": "default" + } + ], + "_tokenize": [ + { + "in_core": true, + "init_fn": "PyInit__tokenize", + "links": [], + "objs": [], + "required": false, + "variant": "default" + } + ], + "_tracemalloc": [ + { + "in_core": false, + "init_fn": "PyInit__tracemalloc", + "links": [], + "objs": [ + "build/Modules/_tracemalloc.o" + ], + "required": true, + "variant": "default" + } + ], + "_types": [ + { + "in_core": false, + "init_fn": "PyInit__types", + "links": [], + "objs": [ + "build/Modules/_typesmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_typing": [ + { + "in_core": false, + "init_fn": "PyInit__typing", + "links": [], + "objs": [ + "build/Modules/_typingmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_uuid": [ + { + "in_core": false, + "init_fn": "PyInit__uuid", + "license_paths": [ + "licenses/LICENSE.libuuid.txt" + ], + "license_public_domain": false, + "licenses": [ + "BSD-3-Clause" + ], + "links": [ + { + "name": "uuid", + "path_static": "build/lib/libuuid.a" + } + ], + "objs": [ + "build/Modules/_uuidmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "_warnings": [ + { + "in_core": true, + "init_fn": "_PyWarnings_Init", + "links": [], + "objs": [], + "required": false, + "variant": "default" + } + ], + "_weakref": [ + { + "in_core": false, + "init_fn": "PyInit__weakref", + "links": [], + "objs": [ + "build/Modules/_weakref.o" + ], + "required": true, + "variant": "default" + } + ], + "_xxtestfuzz": [ + { + "in_core": false, + "init_fn": "PyInit__xxtestfuzz", + "links": [], + "objs": [ + "build/Modules/_xxtestfuzz/_xxtestfuzz.o", + "build/Modules/_xxtestfuzz/fuzzer.o" + ], + "required": false, + "variant": "default" + } + ], + "_zoneinfo": [ + { + "in_core": false, + "init_fn": "PyInit__zoneinfo", + "links": [], + "objs": [ + "build/Modules/_zoneinfo.o" + ], + "required": false, + "variant": "default" + } + ], + "_zstd": [ + { + "in_core": false, + "init_fn": "PyInit__zstd", + "license_paths": [ + "licenses/LICENSE.zstd.txt" + ], + "license_public_domain": false, + "licenses": [ + "BSD-3-Clause" + ], + "links": [ + { + "name": "zstd", + "path_static": "build/lib/libzstd.a" + } + ], + "objs": [ + "build/Modules/_zstd/_zstdmodule.o", + "build/Modules/_zstd/compressor.o", + "build/Modules/_zstd/decompressor.o", + "build/Modules/_zstd/zstddict.o" + ], + "required": false, + "variant": "default" + } + ], + "array": [ + { + "in_core": false, + "init_fn": "PyInit_array", + "links": [], + "objs": [ + "build/Modules/arraymodule.o" + ], + "required": false, + "variant": "default" + } + ], + "atexit": [ + { + "in_core": false, + "init_fn": "PyInit_atexit", + "links": [], + "objs": [ + "build/Modules/atexitmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "binascii": [ + { + "in_core": false, + "init_fn": "PyInit_binascii", + "license_paths": [ + "licenses/LICENSE.zlib-ng.txt", + "licenses/LICENSE.zlib.txt" + ], + "license_public_domain": false, + "licenses": [ + "Zlib" + ], + "links": [ + { + "name": "z", + "system": true + } + ], + "objs": [ + "build/Modules/binascii.o" + ], + "required": false, + "variant": "default" + } + ], + "builtins": [ + { + "in_core": true, + "init_fn": "NULL", + "links": [], + "objs": [], + "required": false, + "variant": "default" + } + ], + "cmath": [ + { + "in_core": false, + "init_fn": "PyInit_cmath", + "links": [], + "objs": [ + "build/Modules/cmathmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "errno": [ + { + "in_core": false, + "init_fn": "PyInit_errno", + "links": [], + "objs": [ + "build/Modules/errnomodule.o" + ], + "required": false, + "variant": "default" + } + ], + "faulthandler": [ + { + "in_core": false, + "init_fn": "PyInit_faulthandler", + "links": [], + "objs": [ + "build/Modules/faulthandler.o" + ], + "required": true, + "variant": "default" + } + ], + "fcntl": [ + { + "in_core": false, + "init_fn": "PyInit_fcntl", + "links": [], + "objs": [ + "build/Modules/fcntlmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "gc": [ + { + "in_core": true, + "init_fn": "PyInit_gc", + "links": [], + "objs": [], + "required": false, + "variant": "default" + } + ], + "grp": [ + { + "in_core": false, + "init_fn": "PyInit_grp", + "links": [], + "objs": [ + "build/Modules/grpmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "itertools": [ + { + "in_core": false, + "init_fn": "PyInit_itertools", + "links": [], + "objs": [ + "build/Modules/itertoolsmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "marshal": [ + { + "in_core": true, + "init_fn": "PyMarshal_Init", + "links": [], + "objs": [], + "required": false, + "variant": "default" + } + ], + "math": [ + { + "in_core": false, + "init_fn": "PyInit_math", + "links": [], + "objs": [ + "build/Modules/mathmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "mmap": [ + { + "in_core": false, + "init_fn": "PyInit_mmap", + "links": [], + "objs": [ + "build/Modules/mmapmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "posix": [ + { + "in_core": false, + "init_fn": "PyInit_posix", + "links": [], + "objs": [ + "build/Modules/posixmodule.o" + ], + "required": true, + "variant": "default" + } + ], + "pwd": [ + { + "in_core": false, + "init_fn": "PyInit_pwd", + "links": [], + "objs": [ + "build/Modules/pwdmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "pyexpat": [ + { + "in_core": false, + "init_fn": "PyInit_pyexpat", + "license_paths": [ + "licenses/LICENSE.expat.txt" + ], + "license_public_domain": false, + "licenses": [ + "MIT" + ], + "links": [ + { + "name": "expat", + "path_static": "build/lib/libexpat.a" + } + ], + "objs": [ + "build/Modules/pyexpat.o" + ], + "required": false, + "variant": "default" + } + ], + "readline": [ + { + "in_core": false, + "init_fn": "PyInit_readline", + "license_paths": [ + "licenses/LICENSE.libedit.txt" + ], + "license_public_domain": false, + "licenses": [ + "BSD-3-Clause" + ], + "links": [ + { + "name": "edit", + "system": true + } + ], + "objs": [ + "build/Modules/readline.o" + ], + "required": false, + "variant": "default" + } + ], + "resource": [ + { + "in_core": false, + "init_fn": "PyInit_resource", + "links": [], + "objs": [ + "build/Modules/resource.o" + ], + "required": false, + "variant": "default" + } + ], + "select": [ + { + "in_core": false, + "init_fn": "PyInit_select", + "links": [], + "objs": [ + "build/Modules/selectmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "sys": [ + { + "in_core": true, + "init_fn": "NULL", + "links": [], + "objs": [], + "required": false, + "variant": "default" + } + ], + "syslog": [ + { + "in_core": false, + "init_fn": "PyInit_syslog", + "links": [], + "objs": [ + "build/Modules/syslogmodule.o" + ], + "required": false, + "variant": "default" + } + ], + "termios": [ + { + "in_core": false, + "init_fn": "PyInit_termios", + "links": [], + "objs": [ + "build/Modules/termios.o" + ], + "required": false, + "variant": "default" + } + ], + "time": [ + { + "in_core": false, + "init_fn": "PyInit_time", + "links": [], + "objs": [ + "build/Modules/timemodule.o" + ], + "required": false, + "variant": "default" + } + ], + "unicodedata": [ + { + "in_core": false, + "init_fn": "PyInit_unicodedata", + "links": [], + "objs": [ + "build/Modules/unicodedata.o" + ], + "required": false, + "variant": "default" + } + ], + "xxsubtype": [ + { + "in_core": false, + "init_fn": "PyInit_xxsubtype", + "links": [], + "objs": [ + "build/Modules/xxsubtype.o" + ], + "required": false, + "variant": "default" + } + ], + "zlib": [ + { + "in_core": false, + "init_fn": "PyInit_zlib", + "license_paths": [ + "licenses/LICENSE.zlib-ng.txt", + "licenses/LICENSE.zlib.txt" + ], + "license_public_domain": false, + "licenses": [ + "Zlib" + ], + "links": [ + { + "name": "z", + "system": true + } + ], + "objs": [ + "build/Modules/zlibmodule.o" + ], + "required": false, + "variant": "default" + } + ] + }, + "inittab_cflags": [ + "-std=c99", + "-DNDEBUG", + "-DPy_BUILD_CORE" + ], + "inittab_object": "build/Modules/config.o", + "inittab_source": "build/Modules/config.c", + "object_file_format": "llvm-bitcode:22.1.3+20260410" + }, + "build_options": "pgo+lto", + "crt_features": [ + "libSystem" + ], + "libpython_link_mode": "shared", + "license_path": "licenses/LICENSE.cpython.txt", + "licenses": [ + "Python-2.0", + "CNRI-Python" + ], + "optimizations": "pgo+lto", + "python_abi_tag": "", + "python_bytecode_magic_number": "2b0e0d0a", + "python_config_vars": { + "ABIFLAGS": "", + "ABI_THREAD": "", + "AC_APPLE_UNIVERSAL_BUILD": "0", + "AIX_BUILDDATE": "0", + "AIX_GENUINE_CPLUSPLUS": "0", + "ALIGNOF_LONG": "8", + "ALIGNOF_MAX_ALIGN_T": "8", + "ALIGNOF_SIZE_T": "8", + "ALT_SOABI": "0", + "ANDROID_API_LEVEL": "0", + "APP_STORE_COMPLIANCE_PATCH": "", + "AR": "/tmp/tmp65dmjnoa/tools/llvm/bin/llvm-ar", + "ARFLAGS": "rcs", + "BASECFLAGS": "-fno-strict-overflow -Wsign-compare -Wunreachable-code", + "BASECPPFLAGS": "", + "BASEMODLIBS": "", + "BINDIR": "/install/bin", + "BINLIBDEST": "/install/lib/python3.14", + "BLDLIBRARY": "-L. -lpython3.14", + "BLDSHARED": "clang -bundle -undefined dynamic_lookup -arch arm64 -mmacosx-version-min=11.0 -Wl,-headerpad,40", + "BOOTSTRAP_HEADERS": "\\", + "BUILDEXE": ".exe", + "BUILDPYTHON": "python.exe", + "BUILD_GNU_TYPE": "aarch64-apple-darwin", + "BUILD_SCRIPTS_DIR": "build/scripts-3.14", + "BYTESTR_DEPS": "\\", + "CC": "clang", + "CCSHARED": "", + "CFLAGS": "-fno-strict-overflow -Wsign-compare -Wunreachable-code -DNDEBUG -g -O3 -Wall -O3 -arch arm64 -mmacosx-version-min=11.0 -Wno-nullability-completeness -Wno-expansion-to-defined -Wno-undef-prefix -fPIC ", + "CFLAGSFORSHARED": "", + "CFLAGS_ALIASING": "", + "CFLAGS_CEVAL": "-finline-max-stacksize=512", + "CODECS_COMMON_HEADERS": "./Modules/cjkcodecs/multibytecodec.h ./Modules/cjkcodecs/cjkcodecs.h", + "COMPILEALL_OPTS": "-j0", + "CONFIGFILES": "configure configure.ac acconfig.h pyconfig.h.in Makefile.pre.in", + "CONFIGURE_CFLAGS": "-O3 -arch arm64 -mmacosx-version-min=11.0 -Wno-nullability-completeness -Wno-expansion-to-defined -Wno-undef-prefix -fPIC -Werror=unguarded-availability-new", + "CONFIGURE_CFLAGS_NODIST": "-flto=thin -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -Werror=unguarded-availability -D_Py_TIER2=3 -D_Py_JIT", + "CONFIGURE_CPPFLAGS": "-O3 -arch arm64 -mmacosx-version-min=11.0 -Wno-nullability-completeness -Wno-expansion-to-defined -Wno-undef-prefix -fPIC -Werror=unguarded-availability-new", + "CONFIGURE_LDFLAGS": "-arch arm64 -mmacosx-version-min=11.0 -Wl,-headerpad,40", + "CONFIGURE_LDFLAGS_NODIST": "-flto=thin -Wl,-export_dynamic -Wl,-object_path_lto,\"$@\".lto -g", + "CONFIGURE_LDFLAGS_NOLTO": "-flto=thin", + "CONFIG_ARGS": "'--build=aarch64-apple-darwin' '--host=aarch64-apple-darwin' '--prefix=/install' '--with-openssl=/tmp/tmp65dmjnoa/tools/deps' '--with-system-expat' '--with-system-libmpdec' '--without-ensurepip' '--with-tail-call-interp' 'MODULE_BUILDTYPE=static' '--enable-loadable-sqlite-extensions' '--enable-static-libpython-for-interpreter' '--enable-shared' '--with-mimalloc' '--enable-optimizations' '--enable-experimental-jit=yes-off' '--with-lto' '--with-build-python=/tmp/tmp65dmjnoa/tools/host/bin/python3.14' 'ac_cv_lib_intl_textdomain=no' 'ac_cv_func_ptsname_r=no' 'ac_cv_func_explicit_bzero=no' '--with-dbmliborder=ndbm' 'build_alias=aarch64-apple-darwin' 'host_alias=aarch64-apple-darwin' 'PKG_CONFIG=pkg-config --static --define-prefix' 'PKG_CONFIG_PATH=/tmp/tmp65dmjnoa/tools/deps/share/pkgconfig:/tmp/tmp65dmjnoa/tools/deps/lib/pkgconfig' 'CC=clang' 'CFLAGS=-O3 -arch arm64 -mmacosx-version-min=11.0 -Wno-nullability-completeness -Wno-expansion-to-defined -Wno-undef-prefix -fPIC -Werror=unguarded-availability-new' 'LDFLAGS=-arch arm64 -mmacosx-version-min=11.0 -Wl,-headerpad,40' 'CPPFLAGS=-O3 -arch arm64 -mmacosx-version-min=11.0 -Wno-nullability-completeness -Wno-expansion-to-defined -Wno-undef-prefix -fPIC -Werror=unguarded-availability-new' 'PROFILE_TASK=-m test --pgo -j 12' 'BOLT_COMMON_FLAGS=' 'BOLT_APPLY_FLAGS='", + "CONFINCLUDEDIR": "/install/include", + "CONFINCLUDEPY": "/install/include/python3.14", + "COREPYTHONPATH": "", + "COVERAGE_INFO": "/private/tmp/tmp65dmjnoa/Python-3.14.7/coverage.info", + "COVERAGE_LCOV_OPTIONS": "--rc lcov_branch_coverage=1", + "COVERAGE_REPORT": "/private/tmp/tmp65dmjnoa/Python-3.14.7/lcov-report", + "COVERAGE_REPORT_OPTIONS": "--rc lcov_branch_coverage=1 --branch-coverage --title \"CPython 3.14 LCOV report [commit $(shell )]\"", + "CPPFLAGS": "-I. -I./Include -O3 -arch arm64 -mmacosx-version-min=11.0 -Wno-nullability-completeness -Wno-expansion-to-defined -Wno-undef-prefix -fPIC ", + "CXX": "clang++", + "DESTDIRS": "/install /install/lib /install/lib/python3.14 /install/lib/python3.14/lib-dynload", + "DESTLIB": "/install/lib/python3.14", + "DESTPATH": "", + "DESTSHARED": "/install/lib/python3.14/lib-dynload", + "DFLAGS": "", + "DIRMODE": "755", + "DIST": "README.rst ChangeLog configure configure.ac acconfig.h pyconfig.h.in Makefile.pre.in Include Lib Misc Ext-dummy", + "DISTDIRS": "Include Lib Misc Ext-dummy", + "DISTFILES": "README.rst ChangeLog configure configure.ac acconfig.h pyconfig.h.in Makefile.pre.in", + "DLINCLDIR": ".", + "DLLLIBRARY": "", + "DOUBLE_IS_ARM_MIXED_ENDIAN_IEEE754": "0", + "DOUBLE_IS_BIG_ENDIAN_IEEE754": "0", + "DOUBLE_IS_LITTLE_ENDIAN_IEEE754": "1", + "DSYMUTIL": "", + "DSYMUTIL_PATH": "", + "DTRACE": "", + "DTRACE_DEPS": "\\", + "DTRACE_HEADERS": "", + "DTRACE_OBJS": "", + "DYNLOADFILE": "dynload_shlib.o", + "EMSCRIPTEN_DIR": "./Platforms/emscripten", + "ENABLE_IPV6": "1", + "ENSUREPIP": "no", + "EXE": "", + "EXEMODE": "755", + "EXENAME": "/install/bin/python3.14", + "EXPORTSFROM": "", + "EXPORTSYMS": "", + "EXTRATESTOPTS": "", + "EXTRA_CFLAGS": "", + "EXT_SUFFIX": ".cpython-314-darwin.so", + "FILEMODE": "644", + "FREEZE_MODULE": "/tmp/tmp65dmjnoa/tools/host/bin/python3.14 ./Programs/_freeze_module.py", + "FREEZE_MODULE_BOOTSTRAP": "/tmp/tmp65dmjnoa/tools/host/bin/python3.14 ./Programs/_freeze_module.py", + "FREEZE_MODULE_BOOTSTRAP_DEPS": "./Programs/_freeze_module.py", + "FREEZE_MODULE_DEPS": "./Programs/_freeze_module.py", + "FROZEN_FILES_IN": "\\", + "FROZEN_FILES_OUT": "\\", + "GETPGRP_HAVE_ARG": "0", + "GITBRANCH": "", + "GITTAG": "", + "GITVERSION": "", + "GNULD": "no", + "HAVE_ACCEPT": "1", + "HAVE_ACCEPT4": "0", + "HAVE_ACOSH": "1", + "HAVE_ADDRINFO": "1", + "HAVE_ALARM": "1", + "HAVE_ALIGNED_REQUIRED": "0", + "HAVE_ALLOCA_H": "1", + "HAVE_ALTZONE": "0", + "HAVE_ASINH": "1", + "HAVE_ASM_TYPES_H": "0", + "HAVE_ATANH": "1", + "HAVE_BACKTRACE": "1", + "HAVE_BIND": "1", + "HAVE_BIND_TEXTDOMAIN_CODESET": "0", + "HAVE_BLUETOOTH_BLUETOOTH_H": "0", + "HAVE_BLUETOOTH_H": "0", + "HAVE_BROKEN_MBSTOWCS": "0", + "HAVE_BROKEN_NICE": "0", + "HAVE_BROKEN_PIPE_BUF": "0", + "HAVE_BROKEN_POLL": "0", + "HAVE_BROKEN_POSIX_SEMAPHORES": "0", + "HAVE_BROKEN_PTHREAD_SIGMASK": "0", + "HAVE_BROKEN_SEM_GETVALUE": "1", + "HAVE_BROKEN_UNSETENV": "0", + "HAVE_BUILTIN_ATOMIC": "1", + "HAVE_BZLIB_H": "1", + "HAVE_CHFLAGS": "1", + "HAVE_CHMOD": "1", + "HAVE_CHOWN": "1", + "HAVE_CHROOT": "1", + "HAVE_CLOCK": "1", + "HAVE_CLOCK_GETRES": "1", + "HAVE_CLOCK_GETTIME": "1", + "HAVE_CLOCK_NANOSLEEP": "0", + "HAVE_CLOCK_SETTIME": "1", + "HAVE_CLOCK_T": "1", + "HAVE_CLOSEFROM": "0", + "HAVE_CLOSE_RANGE": "0", + "HAVE_COMPUTED_GOTOS": "1", + "HAVE_CONFSTR": "1", + "HAVE_CONIO_H": "0", + "HAVE_CONNECT": "1", + "HAVE_COPY_FILE_RANGE": "0", + "HAVE_CTERMID": "1", + "HAVE_CTERMID_R": "1", + "HAVE_CURSES_ESCDELAY": "1", + "HAVE_CURSES_FILTER": "1", + "HAVE_CURSES_GETMOUSE": "1", + "HAVE_CURSES_H": "1", + "HAVE_CURSES_HAS_KEY": "1", + "HAVE_CURSES_IMMEDOK": "1", + "HAVE_CURSES_IS_PAD": "1", + "HAVE_CURSES_IS_TERM_RESIZED": "1", + "HAVE_CURSES_RESIZETERM": "1", + "HAVE_CURSES_RESIZE_TERM": "1", + "HAVE_CURSES_SET_ESCDELAY": "1", + "HAVE_CURSES_SET_TABSIZE": "1", + "HAVE_CURSES_SYNCOK": "1", + "HAVE_CURSES_TABSIZE": "1", + "HAVE_CURSES_TYPEAHEAD": "1", + "HAVE_CURSES_USE_ENV": "1", + "HAVE_CURSES_WCHGAT": "1", + "HAVE_DB_H": "1", + "HAVE_DECL_RTLD_DEEPBIND": "0", + "HAVE_DECL_RTLD_GLOBAL": "1", + "HAVE_DECL_RTLD_LAZY": "1", + "HAVE_DECL_RTLD_LOCAL": "1", + "HAVE_DECL_RTLD_MEMBER": "0", + "HAVE_DECL_RTLD_NODELETE": "1", + "HAVE_DECL_RTLD_NOLOAD": "1", + "HAVE_DECL_RTLD_NOW": "1", + "HAVE_DECL_TZNAME": "0", + "HAVE_DECL_UT_NAMESIZE": "1", + "HAVE_DEVICE_MACROS": "1", + "HAVE_DEV_PTC": "0", + "HAVE_DEV_PTMX": "1", + "HAVE_DIRECT_H": "0", + "HAVE_DIRENT_D_TYPE": "1", + "HAVE_DIRENT_H": "1", + "HAVE_DIRFD": "1", + "HAVE_DLADDR": "1", + "HAVE_DLADDR1": "0", + "HAVE_DLFCN_H": "1", + "HAVE_DLOPEN": "1", + "HAVE_DL_ITERATE_PHDR": "0", + "HAVE_DUP": "1", + "HAVE_DUP2": "1", + "HAVE_DUP3": "0", + "HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH": "1", + "HAVE_DYNAMIC_LOADING": "1", + "HAVE_EDITLINE_READLINE_H": "0", + "HAVE_ENDIAN_H": "0", + "HAVE_EPOLL": "0", + "HAVE_EPOLL_CREATE1": "0", + "HAVE_ERF": "1", + "HAVE_ERFC": "1", + "HAVE_ERRNO_H": "1", + "HAVE_EVENTFD": "0", + "HAVE_EXECINFO_H": "1", + "HAVE_EXECV": "1", + "HAVE_EXPLICIT_BZERO": "0", + "HAVE_EXPLICIT_MEMSET": "0", + "HAVE_EXPM1": "1", + "HAVE_FACCESSAT": "1", + "HAVE_FCHDIR": "1", + "HAVE_FCHMOD": "1", + "HAVE_FCHMODAT": "1", + "HAVE_FCHOWN": "1", + "HAVE_FCHOWNAT": "1", + "HAVE_FCNTL_H": "1", + "HAVE_FDATASYNC": "0", + "HAVE_FDOPENDIR": "1", + "HAVE_FDWALK": "0", + "HAVE_FEXECVE": "0", + "HAVE_FFI_CLOSURE_ALLOC": "1", + "HAVE_FFI_PREP_CIF_VAR": "1", + "HAVE_FFI_PREP_CLOSURE_LOC": "1", + "HAVE_FLOCK": "1", + "HAVE_FORK": "1", + "HAVE_FORK1": "0", + "HAVE_FORKPTY": "1", + "HAVE_FPATHCONF": "1", + "HAVE_FSEEK64": "0", + "HAVE_FSEEKO": "1", + "HAVE_FSTATAT": "1", + "HAVE_FSTATVFS": "1", + "HAVE_FSYNC": "1", + "HAVE_FTELL64": "0", + "HAVE_FTELLO": "1", + "HAVE_FTIME": "1", + "HAVE_FTRUNCATE": "1", + "HAVE_FUTIMENS": "1", + "HAVE_FUTIMES": "1", + "HAVE_FUTIMESAT": "0", + "HAVE_GAI_STRERROR": "1", + "HAVE_GCC_ASM_FOR_MC68881": "0", + "HAVE_GCC_ASM_FOR_X64": "0", + "HAVE_GCC_ASM_FOR_X87": "0", + "HAVE_GCC_UINT128_T": "1", + "HAVE_GDBM_DASH_NDBM_H": "0", + "HAVE_GDBM_H": "0", + "HAVE_GDBM_NDBM_H": "0", + "HAVE_GETADDRINFO": "1", + "HAVE_GETC_UNLOCKED": "1", + "HAVE_GETEGID": "1", + "HAVE_GETENTROPY": "1", + "HAVE_GETEUID": "1", + "HAVE_GETGID": "1", + "HAVE_GETGRENT": "1", + "HAVE_GETGRGID": "1", + "HAVE_GETGRGID_R": "1", + "HAVE_GETGRNAM_R": "1", + "HAVE_GETGROUPLIST": "1", + "HAVE_GETGROUPS": "1", + "HAVE_GETHOSTBYADDR": "1", + "HAVE_GETHOSTBYNAME": "1", + "HAVE_GETHOSTBYNAME_R": "0", + "HAVE_GETHOSTBYNAME_R_3_ARG": "0", + "HAVE_GETHOSTBYNAME_R_5_ARG": "0", + "HAVE_GETHOSTBYNAME_R_6_ARG": "0", + "HAVE_GETHOSTNAME": "1", + "HAVE_GETITIMER": "1", + "HAVE_GETLOADAVG": "1", + "HAVE_GETLOGIN": "1", + "HAVE_GETLOGIN_R": "1", + "HAVE_GETNAMEINFO": "1", + "HAVE_GETPAGESIZE": "1", + "HAVE_GETPEERNAME": "1", + "HAVE_GETPGID": "1", + "HAVE_GETPGRP": "1", + "HAVE_GETPID": "1", + "HAVE_GETPPID": "1", + "HAVE_GETPRIORITY": "1", + "HAVE_GETPROTOBYNAME": "1", + "HAVE_GETPWENT": "1", + "HAVE_GETPWNAM_R": "1", + "HAVE_GETPWUID": "1", + "HAVE_GETPWUID_R": "1", + "HAVE_GETRANDOM": "0", + "HAVE_GETRANDOM_SYSCALL": "0", + "HAVE_GETRESGID": "0", + "HAVE_GETRESUID": "0", + "HAVE_GETRUSAGE": "1", + "HAVE_GETSERVBYNAME": "1", + "HAVE_GETSERVBYPORT": "1", + "HAVE_GETSID": "1", + "HAVE_GETSOCKNAME": "1", + "HAVE_GETSPENT": "0", + "HAVE_GETSPNAM": "0", + "HAVE_GETUID": "1", + "HAVE_GETWD": "1", + "HAVE_GLIBC_MEMMOVE_BUG": "0", + "HAVE_GRANTPT": "1", + "HAVE_GRP_H": "1", + "HAVE_HSTRERROR": "1", + "HAVE_HTOLE64": "0", + "HAVE_IF_NAMEINDEX": "1", + "HAVE_INET_ATON": "1", + "HAVE_INET_NTOA": "1", + "HAVE_INET_PTON": "1", + "HAVE_INITGROUPS": "1", + "HAVE_INTTYPES_H": "1", + "HAVE_IO_H": "0", + "HAVE_IPA_PURE_CONST_BUG": "0", + "HAVE_KILL": "1", + "HAVE_KILLPG": "1", + "HAVE_KQUEUE": "1", + "HAVE_LANGINFO_H": "1", + "HAVE_LARGEFILE_SUPPORT": "0", + "HAVE_LCHFLAGS": "1", + "HAVE_LCHMOD": "1", + "HAVE_LCHOWN": "1", + "HAVE_LIBDB": "0", + "HAVE_LIBDL": "1", + "HAVE_LIBDLD": "0", + "HAVE_LIBIEEE": "0", + "HAVE_LIBINTL_H": "0", + "HAVE_LIBSENDFILE": "0", + "HAVE_LIBSQLITE3": "1", + "HAVE_LIBUTIL_H": "0", + "HAVE_LINK": "1", + "HAVE_LINKAT": "1", + "HAVE_LINK_H": "0", + "HAVE_LINUX_AUXVEC_H": "0", + "HAVE_LINUX_CAN_BCM_H": "0", + "HAVE_LINUX_CAN_H": "0", + "HAVE_LINUX_CAN_J1939_H": "0", + "HAVE_LINUX_CAN_RAW_FD_FRAMES": "0", + "HAVE_LINUX_CAN_RAW_H": "0", + "HAVE_LINUX_CAN_RAW_JOIN_FILTERS": "0", + "HAVE_LINUX_FS_H": "0", + "HAVE_LINUX_LIMITS_H": "0", + "HAVE_LINUX_MEMFD_H": "0", + "HAVE_LINUX_NETFILTER_IPV4_H": "0", + "HAVE_LINUX_NETLINK_H": "0", + "HAVE_LINUX_QRTR_H": "0", + "HAVE_LINUX_RANDOM_H": "0", + "HAVE_LINUX_SCHED_H": "0", + "HAVE_LINUX_SOUNDCARD_H": "0", + "HAVE_LINUX_TIPC_H": "0", + "HAVE_LINUX_VM_SOCKETS_H": "0", + "HAVE_LINUX_WAIT_H": "0", + "HAVE_LISTEN": "1", + "HAVE_LOCKF": "1", + "HAVE_LOG1P": "1", + "HAVE_LOG2": "1", + "HAVE_LOGIN_TTY": "1", + "HAVE_LONG_DOUBLE": "1", + "HAVE_LSTAT": "1", + "HAVE_LUTIMES": "1", + "HAVE_LZMA_H": "0", + "HAVE_MADVISE": "1", + "HAVE_MAKEDEV": "1", + "HAVE_MAXLOGNAME": "1", + "HAVE_MBRTOWC": "1", + "HAVE_MEMFD_CREATE": "0", + "HAVE_MEMRCHR": "0", + "HAVE_MINIX_CONFIG_H": "0", + "HAVE_MKDIRAT": "1", + "HAVE_MKFIFO": "1", + "HAVE_MKFIFOAT": "1", + "HAVE_MKNOD": "1", + "HAVE_MKNODAT": "1", + "HAVE_MKTIME": "1", + "HAVE_MMAP": "1", + "HAVE_MREMAP": "0", + "HAVE_NANOSLEEP": "1", + "HAVE_NCURSES": "0", + "HAVE_NCURSESW": "1", + "HAVE_NCURSESW_CURSES_H": "0", + "HAVE_NCURSESW_NCURSES_H": "0", + "HAVE_NCURSESW_PANEL_H": "0", + "HAVE_NCURSES_CURSES_H": "0", + "HAVE_NCURSES_H": "1", + "HAVE_NCURSES_NCURSES_H": "0", + "HAVE_NCURSES_PANEL_H": "0", + "HAVE_NDBM_H": "1", + "HAVE_NDIR_H": "0", + "HAVE_NETCAN_CAN_H": "0", + "HAVE_NETDB_H": "1", + "HAVE_NETINET_IN_H": "1", + "HAVE_NETLINK_NETLINK_H": "0", + "HAVE_NETPACKET_PACKET_H": "0", + "HAVE_NET_ETHERNET_H": "1", + "HAVE_NET_IF_H": "1", + "HAVE_NICE": "1", + "HAVE_NON_UNICODE_WCHAR_T_REPRESENTATION": "0", + "HAVE_OPENAT": "1", + "HAVE_OPENDIR": "1", + "HAVE_OPENPTY": "1", + "HAVE_PANEL": "0", + "HAVE_PANELW": "0", + "HAVE_PANEL_H": "1", + "HAVE_PATHCONF": "1", + "HAVE_PAUSE": "1", + "HAVE_PIPE": "1", + "HAVE_PIPE2": "0", + "HAVE_PLOCK": "0", + "HAVE_POLL": "1", + "HAVE_POLL_H": "1", + "HAVE_POSIX_FADVISE": "0", + "HAVE_POSIX_FALLOCATE": "0", + "HAVE_POSIX_OPENPT": "1", + "HAVE_POSIX_SPAWN": "1", + "HAVE_POSIX_SPAWNP": "1", + "HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSEFROM_NP": "0", + "HAVE_PREAD": "1", + "HAVE_PREADV": "1", + "HAVE_PREADV2": "0", + "HAVE_PRLIMIT": "0", + "HAVE_PROCESS_H": "0", + "HAVE_PROCESS_VM_READV": "0", + "HAVE_PROTOTYPES": "1", + "HAVE_PTHREAD_CONDATTR_SETCLOCK": "0", + "HAVE_PTHREAD_COND_TIMEDWAIT_RELATIVE_NP": "1", + "HAVE_PTHREAD_DESTRUCTOR": "0", + "HAVE_PTHREAD_GETATTR_NP": "0", + "HAVE_PTHREAD_GETCPUCLOCKID": "0", + "HAVE_PTHREAD_GETNAME_NP": "1", + "HAVE_PTHREAD_GET_NAME_NP": "0", + "HAVE_PTHREAD_H": "1", + "HAVE_PTHREAD_INIT": "0", + "HAVE_PTHREAD_KILL": "1", + "HAVE_PTHREAD_SETNAME_NP": "1", + "HAVE_PTHREAD_SET_NAME_NP": "0", + "HAVE_PTHREAD_SIGMASK": "1", + "HAVE_PTHREAD_STUBS": "0", + "HAVE_PTSNAME": "1", + "HAVE_PTSNAME_R": "0", + "HAVE_PTY_H": "0", + "HAVE_PWRITE": "1", + "HAVE_PWRITEV": "1", + "HAVE_PWRITEV2": "0", + "HAVE_READLINE_READLINE_H": "1", + "HAVE_READLINK": "1", + "HAVE_READLINKAT": "1", + "HAVE_READV": "1", + "HAVE_REALPATH": "1", + "HAVE_RECVFROM": "1", + "HAVE_RENAMEAT": "1", + "HAVE_RL_APPEND_HISTORY": "0", + "HAVE_RL_CATCH_SIGNAL": "0", + "HAVE_RL_COMPDISP_FUNC_T": "0", + "HAVE_RL_COMPLETION_APPEND_CHARACTER": "1", + "HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK": "1", + "HAVE_RL_COMPLETION_MATCHES": "1", + "HAVE_RL_COMPLETION_SUPPRESS_APPEND": "0", + "HAVE_RL_PRE_INPUT_HOOK": "1", + "HAVE_RL_RESIZE_TERMINAL": "0", + "HAVE_RTPSPAWN": "0", + "HAVE_SCHED_GET_PRIORITY_MAX": "1", + "HAVE_SCHED_H": "1", + "HAVE_SCHED_RR_GET_INTERVAL": "0", + "HAVE_SCHED_SETAFFINITY": "0", + "HAVE_SCHED_SETPARAM": "0", + "HAVE_SCHED_SETSCHEDULER": "0", + "HAVE_SEM_CLOCKWAIT": "0", + "HAVE_SEM_GETVALUE": "1", + "HAVE_SEM_OPEN": "1", + "HAVE_SEM_TIMEDWAIT": "0", + "HAVE_SEM_UNLINK": "1", + "HAVE_SENDFILE": "1", + "HAVE_SENDTO": "1", + "HAVE_SETEGID": "1", + "HAVE_SETEUID": "1", + "HAVE_SETGID": "1", + "HAVE_SETGROUPS": "1", + "HAVE_SETHOSTNAME": "1", + "HAVE_SETITIMER": "1", + "HAVE_SETJMP_H": "1", + "HAVE_SETLOCALE": "1", + "HAVE_SETNS": "0", + "HAVE_SETPGID": "1", + "HAVE_SETPGRP": "1", + "HAVE_SETPRIORITY": "1", + "HAVE_SETREGID": "1", + "HAVE_SETRESGID": "0", + "HAVE_SETRESUID": "0", + "HAVE_SETREUID": "1", + "HAVE_SETSID": "1", + "HAVE_SETSOCKOPT": "1", + "HAVE_SETUID": "1", + "HAVE_SETVBUF": "1", + "HAVE_SHADOW_H": "0", + "HAVE_SHM_OPEN": "1", + "HAVE_SHM_UNLINK": "1", + "HAVE_SHUTDOWN": "1", + "HAVE_SIGACTION": "1", + "HAVE_SIGALTSTACK": "1", + "HAVE_SIGFILLSET": "1", + "HAVE_SIGINFO_T_SI_BAND": "1", + "HAVE_SIGINTERRUPT": "1", + "HAVE_SIGNAL_H": "1", + "HAVE_SIGPENDING": "1", + "HAVE_SIGRELSE": "1", + "HAVE_SIGTIMEDWAIT": "0", + "HAVE_SIGWAIT": "1", + "HAVE_SIGWAITINFO": "0", + "HAVE_SNPRINTF": "1", + "HAVE_SOCKADDR_ALG": "0", + "HAVE_SOCKADDR_SA_LEN": "1", + "HAVE_SOCKADDR_STORAGE": "1", + "HAVE_SOCKET": "1", + "HAVE_SOCKETPAIR": "1", + "HAVE_SOCKLEN_T": "1", + "HAVE_SPAWN_H": "1", + "HAVE_SPLICE": "0", + "HAVE_SSIZE_T": "1", + "HAVE_STATVFS": "1", + "HAVE_STAT_TV_NSEC": "0", + "HAVE_STAT_TV_NSEC2": "1", + "HAVE_STDINT_H": "1", + "HAVE_STDIO_H": "1", + "HAVE_STDLIB_H": "1", + "HAVE_STD_ATOMIC": "1", + "HAVE_STRFTIME": "1", + "HAVE_STRINGS_H": "1", + "HAVE_STRING_H": "1", + "HAVE_STRLCPY": "1", + "HAVE_STROPTS_H": "0", + "HAVE_STRSIGNAL": "1", + "HAVE_STRUCT_PASSWD_PW_GECOS": "1", + "HAVE_STRUCT_PASSWD_PW_PASSWD": "1", + "HAVE_STRUCT_STAT_ST_BIRTHTIME": "1", + "HAVE_STRUCT_STAT_ST_BLKSIZE": "1", + "HAVE_STRUCT_STAT_ST_BLOCKS": "1", + "HAVE_STRUCT_STAT_ST_FLAGS": "1", + "HAVE_STRUCT_STAT_ST_GEN": "1", + "HAVE_STRUCT_STAT_ST_RDEV": "1", + "HAVE_STRUCT_TM_TM_ZONE": "1", + "HAVE_SYMLINK": "1", + "HAVE_SYMLINKAT": "1", + "HAVE_SYNC": "1", + "HAVE_SYSCONF": "1", + "HAVE_SYSCTLBYNAME": "1", + "HAVE_SYSEXITS_H": "1", + "HAVE_SYSLOG_H": "1", + "HAVE_SYSTEM": "1", + "HAVE_SYS_AUDIOIO_H": "0", + "HAVE_SYS_AUXV_H": "0", + "HAVE_SYS_BSDTTY_H": "0", + "HAVE_SYS_DEVPOLL_H": "0", + "HAVE_SYS_DIR_H": "0", + "HAVE_SYS_ENDIAN_H": "0", + "HAVE_SYS_EPOLL_H": "0", + "HAVE_SYS_EVENTFD_H": "0", + "HAVE_SYS_EVENT_H": "1", + "HAVE_SYS_FILE_H": "1", + "HAVE_SYS_IOCTL_H": "1", + "HAVE_SYS_KERN_CONTROL_H": "1", + "HAVE_SYS_LOADAVG_H": "0", + "HAVE_SYS_LOCK_H": "1", + "HAVE_SYS_MEMFD_H": "0", + "HAVE_SYS_MKDEV_H": "0", + "HAVE_SYS_MMAN_H": "1", + "HAVE_SYS_MODEM_H": "0", + "HAVE_SYS_NDIR_H": "0", + "HAVE_SYS_PARAM_H": "1", + "HAVE_SYS_PIDFD_H": "0", + "HAVE_SYS_POLL_H": "1", + "HAVE_SYS_RANDOM_H": "1", + "HAVE_SYS_RESOURCE_H": "1", + "HAVE_SYS_SELECT_H": "1", + "HAVE_SYS_SENDFILE_H": "0", + "HAVE_SYS_SOCKET_H": "1", + "HAVE_SYS_SOUNDCARD_H": "0", + "HAVE_SYS_STATVFS_H": "1", + "HAVE_SYS_STAT_H": "1", + "HAVE_SYS_SYSCALL_H": "1", + "HAVE_SYS_SYSCTL_H": "1", + "HAVE_SYS_SYSMACROS_H": "0", + "HAVE_SYS_SYS_DOMAIN_H": "1", + "HAVE_SYS_TERMIO_H": "0", + "HAVE_SYS_TIMERFD_H": "0", + "HAVE_SYS_TIMES_H": "1", + "HAVE_SYS_TIME_H": "1", + "HAVE_SYS_TYPES_H": "1", + "HAVE_SYS_UIO_H": "1", + "HAVE_SYS_UN_H": "1", + "HAVE_SYS_UTSNAME_H": "1", + "HAVE_SYS_WAIT_H": "1", + "HAVE_SYS_XATTR_H": "1", + "HAVE_TCGETPGRP": "1", + "HAVE_TCSETPGRP": "1", + "HAVE_TEMPNAM": "1", + "HAVE_TERMIOS_H": "1", + "HAVE_TERM_H": "1", + "HAVE_TIMEGM": "1", + "HAVE_TIMERFD_CREATE": "0", + "HAVE_TIMES": "1", + "HAVE_TMPFILE": "1", + "HAVE_TMPNAM": "1", + "HAVE_TMPNAM_R": "0", + "HAVE_TM_ZONE": "1", + "HAVE_TRUNCATE": "1", + "HAVE_TTYNAME_R": "1", + "HAVE_TZNAME": "0", + "HAVE_UMASK": "1", + "HAVE_UNAME": "1", + "HAVE_UNISTD_H": "1", + "HAVE_UNLINKAT": "1", + "HAVE_UNLOCKPT": "1", + "HAVE_UNSHARE": "0", + "HAVE_USABLE_WCHAR_T": "0", + "HAVE_UTIL_H": "1", + "HAVE_UTIMENSAT": "1", + "HAVE_UTIMES": "1", + "HAVE_UTIME_H": "1", + "HAVE_UTMP_H": "1", + "HAVE_UT_NAMESIZE": "1", + "HAVE_UUID_CREATE": "0", + "HAVE_UUID_ENC_BE": "0", + "HAVE_UUID_GENERATE_TIME_SAFE": "1", + "HAVE_UUID_GENERATE_TIME_SAFE_STABLE_MAC": "0", + "HAVE_UUID_H": "1", + "HAVE_UUID_UUID_H": "1", + "HAVE_VFORK": "1", + "HAVE_WAIT": "1", + "HAVE_WAIT3": "1", + "HAVE_WAIT4": "1", + "HAVE_WAITID": "1", + "HAVE_WAITPID": "1", + "HAVE_WCHAR_H": "1", + "HAVE_WCSCOLL": "1", + "HAVE_WCSFTIME": "1", + "HAVE_WCSXFRM": "1", + "HAVE_WMEMCMP": "1", + "HAVE_WORKING_TZSET": "1", + "HAVE_WRITEV": "1", + "HAVE_ZDICT_H": "0", + "HAVE_ZLIB_COPY": "1", + "HAVE_ZLIB_H": "1", + "HAVE_ZSTD_H": "0", + "HAVE__GETPTY": "0", + "HAVE___UINT128_T": "1", + "HOSTRUNNER": "", + "HOST_GNU_TYPE": "aarch64-apple-darwin", + "INCLDIRSTOMAKE": "/install/include /install/include /install/include/python3.14 /install/include/python3.14", + "INCLUDEDIR": "/install/include", + "INCLUDEPY": "/install/include/python3.14", + "INSTALL": "/usr/bin/install -c", + "INSTALL_DATA": "/usr/bin/install -c -m 644", + "INSTALL_MIMALLOC": "yes", + "INSTALL_PROGRAM": "/usr/bin/install -c", + "INSTALL_SCRIPT": "/usr/bin/install -c", + "INSTALL_SHARED": "/usr/bin/install -c -m 755", + "INSTSONAME": "libpython3.14.dylib", + "IO_H": "Modules/_io/_iomodule.h", + "IO_OBJS": "\\", + "IPHONEOS_DEPLOYMENT_TARGET": "", + "JIT_DEPS": "\\", + "LDCXXSHARED": "clang++ -bundle -undefined dynamic_lookup -arch arm64 -mmacosx-version-min=11.0 -Wl,-headerpad,40", + "LDFLAGS": "-arch arm64 -mmacosx-version-min=11.0 -Wl,-headerpad,40", + "LDLIBRARY": "libpython3.14.dylib", + "LDLIBRARYDIR": "", + "LDSHARED": "clang -bundle -undefined dynamic_lookup -arch arm64 -mmacosx-version-min=11.0 -Wl,-headerpad,40", + "LDVERSION": "3.14", + "LIBC": "", + "LIBDEST": "/install/lib/python3.14", + "LIBDIR": "/install/lib", + "LIBEXPAT_A": "Modules/expat/libexpat.a", + "LIBEXPAT_CFLAGS": "-fno-strict-overflow -Wsign-compare -Wunreachable-code -DNDEBUG -g -O3 -Wall -O3 -arch arm64 -mmacosx-version-min=11.0 -Wno-nullability-completeness -Wno-expansion-to-defined -Wno-undef-prefix -fPIC -Werror=unguarded-availability-new -flto=thin -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -Werror=unguarded-availability -D_Py_TIER2=3 -D_Py_JIT -fprofile-instr-use=/private/tmp/tmp65dmjnoa/Python-3.14.7/code.profclangd -I./Include/internal -I./Include/internal/mimalloc -I. -I./Include -O3 -arch arm64 -mmacosx-version-min=11.0 -Wno-nullability-completeness -Wno-expansion-to-defined -Wno-undef-prefix -fPIC -Werror=unguarded-availability-new", + "LIBEXPAT_HEADERS": "\\", + "LIBEXPAT_OBJS": "\\", + "LIBHACL_BLAKE2_HEADERS": "\\", + "LIBHACL_BLAKE2_LIB_SHARED": "\\", + "LIBHACL_BLAKE2_LIB_STATIC": "Modules/_hacl/libHacl_Hash_BLAKE2.a", + "LIBHACL_BLAKE2_OBJS": "\\", + "LIBHACL_BLAKE2_SIMD128_CFLAGS": "-DHACL_CAN_COMPILE_VEC128", + "LIBHACL_BLAKE2_SIMD128_OBJS": "", + "LIBHACL_BLAKE2_SIMD256_CFLAGS": "-DHACL_CAN_COMPILE_VEC256", + "LIBHACL_BLAKE2_SIMD256_OBJS": "", + "LIBHACL_CFLAGS": "-I./Modules/_hacl -I./Modules/_hacl/include -D_BSD_SOURCE -D_DEFAULT_SOURCE -fno-strict-overflow -Wsign-compare -Wunreachable-code -DNDEBUG -g -O3 -Wall -O3 -arch arm64 -mmacosx-version-min=11.0 -Wno-nullability-completeness -Wno-expansion-to-defined -Wno-undef-prefix -fPIC -Werror=unguarded-availability-new -flto=thin -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -Werror=unguarded-availability -D_Py_TIER2=3 -D_Py_JIT -fprofile-instr-use=/private/tmp/tmp65dmjnoa/Python-3.14.7/code.profclangd -I./Include/internal -I./Include/internal/mimalloc -I. -I./Include -O3 -arch arm64 -mmacosx-version-min=11.0 -Wno-nullability-completeness -Wno-expansion-to-defined -Wno-undef-prefix -fPIC -Werror=unguarded-availability-new", + "LIBHACL_HEADERS": "\\", + "LIBHACL_HMAC_HEADERS": "\\", + "LIBHACL_HMAC_LIB_SHARED": "\\", + "LIBHACL_HMAC_LIB_STATIC": "Modules/_hacl/libHacl_HMAC.a", + "LIBHACL_HMAC_OBJS": "\\", + "LIBHACL_LDFLAGS": "", + "LIBHACL_MD5_HEADERS": "\\", + "LIBHACL_MD5_LIB_SHARED": "\\", + "LIBHACL_MD5_LIB_STATIC": "Modules/_hacl/libHacl_Hash_MD5.a", + "LIBHACL_MD5_OBJS": "\\", + "LIBHACL_SHA1_HEADERS": "\\", + "LIBHACL_SHA1_LIB_SHARED": "\\", + "LIBHACL_SHA1_LIB_STATIC": "Modules/_hacl/libHacl_Hash_SHA1.a", + "LIBHACL_SHA1_OBJS": "\\", + "LIBHACL_SHA2_HEADERS": "\\", + "LIBHACL_SHA2_LIB_SHARED": "\\", + "LIBHACL_SHA2_LIB_STATIC": "Modules/_hacl/libHacl_Hash_SHA2.a", + "LIBHACL_SHA2_OBJS": "\\", + "LIBHACL_SHA3_HEADERS": "\\", + "LIBHACL_SHA3_LIB_SHARED": "\\", + "LIBHACL_SHA3_LIB_STATIC": "Modules/_hacl/libHacl_Hash_SHA3.a", + "LIBHACL_SHA3_OBJS": "\\", + "LIBM": "", + "LIBMPDEC_A": "Modules/_decimal/libmpdec/libmpdec.a", + "LIBMPDEC_CFLAGS": " -fno-strict-overflow -Wsign-compare -Wunreachable-code -DNDEBUG -g -O3 -Wall -O3 -arch arm64 -mmacosx-version-min=11.0 -Wno-nullability-completeness -Wno-expansion-to-defined -Wno-undef-prefix -fPIC -Werror=unguarded-availability-new -flto=thin -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -Werror=unguarded-availability -D_Py_TIER2=3 -D_Py_JIT -fprofile-instr-use=/private/tmp/tmp65dmjnoa/Python-3.14.7/code.profclangd -I./Include/internal -I./Include/internal/mimalloc -I. -I./Include -O3 -arch arm64 -mmacosx-version-min=11.0 -Wno-nullability-completeness -Wno-expansion-to-defined -Wno-undef-prefix -fPIC -Werror=unguarded-availability-new", + "LIBMPDEC_HEADERS": "\\", + "LIBMPDEC_OBJS": "\\", + "LIBOBJDIR": "Python/", + "LIBOBJS": "", + "LIBPC": "/install/lib/pkgconfig", + "LIBPL": "/install/lib/python3.14/config-3.14-darwin", + "LIBPYTHON": "", + "LIBRARY": "libpython3.14.a", + "LIBRARY_DEPS": "libpython3.14.a libpython3.14.dylib", + "LIBRARY_OBJS": "\\", + "LIBRARY_OBJS_OMIT_FROZEN": "\\", + "LIBS": "-ldl -framework CoreFoundation", + "LIBSUBDIRS": "asyncio \\", + "LINKCC": "clang", + "LINKFORSHARED": "-Wl,-stack_size,1000000 -framework CoreFoundation", + "LINK_PYTHON_DEPS": "libpython3.14.a libpython3.14.dylib", + "LINK_PYTHON_OBJS": "\\", + "LIPO_32BIT_FLAGS": "", + "LIPO_INTEL64_FLAGS": "", + "LLVM_MERGED_DATA_FILE": "$(shell pwd)/code.profclangd", + "LLVM_PROFDATA": "/tmp/tmp65dmjnoa/tools/llvm/bin/llvm-profdata", + "LLVM_PROF_ERR": "no", + "LLVM_PROF_FILE": "LLVM_PROFILE_FILE=\"$(shell pwd)/code-%128m.profclangr\"", + "LLVM_PROF_MERGER": "/tmp/tmp65dmjnoa/tools/llvm/bin/llvm-profdata merge -output=\"$(shell pwd)/code.profclangd\" \"$(shell pwd)\"/*.profclangr", + "LN": "ln", + "LOCALMODLIBS": " -lmpdec -lm -lz -lbz2 -llzma -pthread -lpthread -lzstd -pthread -lz -lreadline Modules/_hacl/libHacl_Hash_MD5.a Modules/_hacl/libHacl_Hash_SHA1.a Modules/_hacl/libHacl_Hash_SHA2.a Modules/_hacl/libHacl_Hash_SHA3.a Modules/_hacl/libHacl_Hash_BLAKE2.a Modules/_hacl/libHacl_HMAC.a -lexpat -lffi -ldl -lncurses -lpanel -lncurses -lsqlite3 -lz -lssl -lcrypto -lcrypto -luuid -framework SystemConfiguration -framework CoreFoundation", + "MACHDEP": "darwin", + "MACHDEP_OBJS": "", + "MACHDESTLIB": "/install/lib/python3.14", + "MACOSX_DEPLOYMENT_TARGET": "11.0", + "MAJOR_IN_MKDEV": "0", + "MAJOR_IN_SYSMACROS": "0", + "MAKESETUP": "./Modules/makesetup", + "MANDIR": "/install/share/man", + "MIMALLOC_HEADERS": "\\", + "MKDIR_P": "mkdir -p", + "MODBUILT_NAMES": "_dbm _testbuffer _testcapi _testlimitedcapi _tkinter array _bisect _csv _heapq _json _lsprof _pickle _queue _random _remote_debugging _struct _interpreters _interpchannels _interpqueues _zoneinfo math cmath _statistics _decimal binascii _bz2 _lzma _zstd zlib readline _md5 _sha1 _sha2 _sha3 _blake2 _hmac pyexpat _elementtree _codecs_cn _codecs_hk _codecs_iso2022 _codecs_jp _codecs_kr _codecs_tw _multibytecodec unicodedata fcntl grp mmap _posixsubprocess resource select _socket syslog termios _posixshmem _multiprocessing _ctypes _curses _curses_panel _sqlite3 _ssl _hashlib _uuid _scproxy xxsubtype _xxtestfuzz _testinternalcapi _testimportmultiple _testmultiphase _testsinglephase _ctypes_test _asyncio atexit faulthandler posix _signal _tracemalloc _suggestions _datetime _codecs _collections errno _io itertools _sre _sysconfig _thread time _types _typing _weakref _abc _functools _locale _opcode _operator _stat _symtable pwd", + "MODDISABLED_NAMES": "_gdbm _testclinic _testclinic_limited xx xxlimited xxlimited_35", + "MODLIBS": " -lmpdec -lm -lz -lbz2 -llzma -pthread -lpthread -lzstd -pthread -lz -lreadline Modules/_hacl/libHacl_Hash_MD5.a Modules/_hacl/libHacl_Hash_SHA1.a Modules/_hacl/libHacl_Hash_SHA2.a Modules/_hacl/libHacl_Hash_SHA3.a Modules/_hacl/libHacl_Hash_BLAKE2.a Modules/_hacl/libHacl_HMAC.a -lexpat -lffi -ldl -lncurses -lpanel -lncurses -lsqlite3 -lz -lssl -lcrypto -lcrypto -luuid -framework SystemConfiguration -framework CoreFoundation", + "MODOBJS": "Modules/arraymodule.o Modules/_bisectmodule.o Modules/_csv.o Modules/_heapqmodule.o Modules/_json.o Modules/_lsprof.o Modules/rotatingtree.o Modules/_pickle.o Modules/_queuemodule.o Modules/_randommodule.o Modules/_remote_debugging_module.o Modules/_struct.o Modules/_interpretersmodule.o Modules/_interpchannelsmodule.o Modules/_interpqueuesmodule.o Modules/_zoneinfo.o Modules/mathmodule.o Modules/cmathmodule.o Modules/_statisticsmodule.o Modules/_decimal/_decimal.o Modules/binascii.o Modules/_bz2module.o Modules/_lzmamodule.o Modules/_zstd/_zstdmodule.o Modules/_zstd/zstddict.o Modules/_zstd/compressor.o Modules/_zstd/decompressor.o Modules/zlibmodule.o Modules/readline.o Modules/md5module.o Modules/sha1module.o Modules/sha2module.o Modules/sha3module.o Modules/blake2module.o Modules/hmacmodule.o Modules/pyexpat.o Modules/_elementtree.o Modules/cjkcodecs/_codecs_cn.o Modules/cjkcodecs/_codecs_hk.o Modules/cjkcodecs/_codecs_iso2022.o Modules/cjkcodecs/_codecs_jp.o Modules/cjkcodecs/_codecs_kr.o Modules/cjkcodecs/_codecs_tw.o Modules/cjkcodecs/multibytecodec.o Modules/unicodedata.o Modules/fcntlmodule.o Modules/grpmodule.o Modules/mmapmodule.o Modules/_posixsubprocess.o Modules/resource.o Modules/selectmodule.o Modules/socketmodule.o Modules/syslogmodule.o Modules/termios.o Modules/_multiprocessing/posixshmem.o Modules/_multiprocessing/multiprocessing.o Modules/_multiprocessing/semaphore.o Modules/_ctypes/_ctypes.o Modules/_ctypes/callbacks.o Modules/_ctypes/callproc.o Modules/_ctypes/stgdict.o Modules/_ctypes/cfield.o Modules/_ctypes/malloc_closure.o Modules/_cursesmodule.o Modules/_curses_panel.o Modules/_sqlite/blob.o Modules/_sqlite/connection.o Modules/_sqlite/cursor.o Modules/_sqlite/microprotocols.o Modules/_sqlite/module.o Modules/_sqlite/prepare_protocol.o Modules/_sqlite/row.o Modules/_sqlite/statement.o Modules/_sqlite/util.o Modules/_ssl.o Modules/_hashopenssl.o Modules/_uuidmodule.o Modules/_scproxy.o Modules/xxsubtype.o Modules/_xxtestfuzz/_xxtestfuzz.o Modules/_xxtestfuzz/fuzzer.o Modules/_testinternalcapi.o Modules/_testinternalcapi/test_lock.o Modules/_testinternalcapi/pytime.o Modules/_testinternalcapi/set.o Modules/_testinternalcapi/test_critical_sections.o Modules/_testinternalcapi/complex.o Modules/_asynciomodule.o Modules/atexitmodule.o Modules/faulthandler.o Modules/posixmodule.o Modules/signalmodule.o Modules/_tracemalloc.o Modules/_suggestions.o Modules/_datetimemodule.o Modules/_codecsmodule.o Modules/_collectionsmodule.o Modules/errnomodule.o Modules/_io/_iomodule.o Modules/_io/iobase.o Modules/_io/fileio.o Modules/_io/bytesio.o Modules/_io/bufferedio.o Modules/_io/textio.o Modules/_io/stringio.o Modules/itertoolsmodule.o Modules/_sre/sre.o Modules/_sysconfig.o Modules/_threadmodule.o Modules/timemodule.o Modules/_typesmodule.o Modules/_typingmodule.o Modules/_weakref.o Modules/_abc.o Modules/_functoolsmodule.o Modules/_localemodule.o Modules/_opcode.o Modules/_operator.o Modules/_stat.o Modules/symtablemodule.o Modules/pwdmodule.o", + "MODSHARED_NAMES": "_dbm _testbuffer _testcapi _testlimitedcapi _tkinter _testimportmultiple _testmultiphase _testsinglephase _ctypes_test", + "MODULE_ARRAY_LDFLAGS": "", + "MODULE_ARRAY_STATE": "yes", + "MODULE_ATEXIT_LDFLAGS": "", + "MODULE_BINASCII_CFLAGS": "-DUSE_ZLIB_CRC32", + "MODULE_BINASCII_LDFLAGS": "-lz", + "MODULE_BINASCII_STATE": "yes", + "MODULE_CMATH_DEPS": "./Modules/_math.h", + "MODULE_CMATH_LDFLAGS": "", + "MODULE_CMATH_STATE": "yes", + "MODULE_DEPS_SHARED": "Modules/config.c", + "MODULE_DEPS_STATIC": "Modules/config.c", + "MODULE_ERRNO_LDFLAGS": "", + "MODULE_FAULTHANDLER_LDFLAGS": "", + "MODULE_FCNTL_LDFLAGS": "", + "MODULE_FCNTL_STATE": "yes", + "MODULE_GRP_LDFLAGS": "", + "MODULE_GRP_STATE": "yes", + "MODULE_ITERTOOLS_LDFLAGS": "", + "MODULE_LDFLAGS_SHARED": "$(if ,-L. -lpython3.14)", + "MODULE_MATH_DEPS": "./Modules/_math.h", + "MODULE_MATH_LDFLAGS": "", + "MODULE_MATH_STATE": "yes", + "MODULE_MMAP_LDFLAGS": "", + "MODULE_MMAP_STATE": "yes", + "MODULE_OBJS": "\\", + "MODULE_POSIX_LDFLAGS": "", + "MODULE_PWD_LDFLAGS": "", + "MODULE_PWD_STATE": "yes", + "MODULE_PYEXPAT_CFLAGS": "", + "MODULE_PYEXPAT_DEPS": "", + "MODULE_PYEXPAT_LDFLAGS": "-lexpat", + "MODULE_PYEXPAT_STATE": "yes", + "MODULE_READLINE_CFLAGS": "", + "MODULE_READLINE_LDFLAGS": "-lreadline", + "MODULE_READLINE_STATE": "yes", + "MODULE_RESOURCE_LDFLAGS": "", + "MODULE_RESOURCE_STATE": "yes", + "MODULE_SELECT_LDFLAGS": "", + "MODULE_SELECT_STATE": "yes", + "MODULE_SYSLOG_LDFLAGS": "", + "MODULE_SYSLOG_STATE": "yes", + "MODULE_TERMIOS_LDFLAGS": "", + "MODULE_TERMIOS_STATE": "yes", + "MODULE_TIME_LDFLAGS": "", + "MODULE_TIME_STATE": "yes", + "MODULE_UNICODEDATA_DEPS": "./Modules/unicodedata_db.h ./Modules/unicodename_db.h", + "MODULE_UNICODEDATA_LDFLAGS": "", + "MODULE_UNICODEDATA_STATE": "yes", + "MODULE_XXLIMITED_35_STATE": "yes", + "MODULE_XXLIMITED_STATE": "yes", + "MODULE_XXSUBTYPE_LDFLAGS": "", + "MODULE_XXSUBTYPE_STATE": "yes", + "MODULE_ZLIB_CFLAGS": "", + "MODULE_ZLIB_LDFLAGS": "-lz", + "MODULE_ZLIB_STATE": "yes", + "MODULE__ABC_LDFLAGS": "", + "MODULE__ASYNCIO_LDFLAGS": "", + "MODULE__ASYNCIO_STATE": "yes", + "MODULE__BISECT_LDFLAGS": "", + "MODULE__BISECT_STATE": "yes", + "MODULE__BLAKE2_CFLAGS": "-I./Modules/_hacl -I./Modules/_hacl/include -D_BSD_SOURCE -D_DEFAULT_SOURCE -fno-strict-overflow -Wsign-compare -Wunreachable-code -DNDEBUG -g -O3 -Wall -O3 -arch arm64 -mmacosx-version-min=11.0 -Wno-nullability-completeness -Wno-expansion-to-defined -Wno-undef-prefix -fPIC -Werror=unguarded-availability-new -flto=thin -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -Werror=unguarded-availability -D_Py_TIER2=3 -D_Py_JIT -fprofile-instr-use=/private/tmp/tmp65dmjnoa/Python-3.14.7/code.profclangd -I./Include/internal -I./Include/internal/mimalloc -I. -I./Include -O3 -arch arm64 -mmacosx-version-min=11.0 -Wno-nullability-completeness -Wno-expansion-to-defined -Wno-undef-prefix -fPIC -Werror=unguarded-availability-new", + "MODULE__BLAKE2_DEPS": "./Modules/hashlib.h \\ Modules/_hacl/libHacl_Hash_BLAKE2.a", + "MODULE__BLAKE2_LDEPS": "Modules/_hacl/libHacl_Hash_BLAKE2.a", + "MODULE__BLAKE2_LDFLAGS": "Modules/_hacl/libHacl_Hash_BLAKE2.a", + "MODULE__BLAKE2_STATE": "yes", + "MODULE__BZ2_CFLAGS": "", + "MODULE__BZ2_LDFLAGS": "-lbz2", + "MODULE__BZ2_STATE": "yes", + "MODULE__CODECS_CN_DEPS": "./Modules/cjkcodecs/mappings_cn.h ./Modules/cjkcodecs/multibytecodec.h ./Modules/cjkcodecs/cjkcodecs.h", + "MODULE__CODECS_CN_LDFLAGS": "", + "MODULE__CODECS_CN_STATE": "yes", + "MODULE__CODECS_HK_DEPS": "./Modules/cjkcodecs/mappings_hk.h ./Modules/cjkcodecs/multibytecodec.h ./Modules/cjkcodecs/cjkcodecs.h", + "MODULE__CODECS_HK_LDFLAGS": "", + "MODULE__CODECS_HK_STATE": "yes", + "MODULE__CODECS_ISO2022_DEPS": "./Modules/cjkcodecs/mappings_jisx0213_pair.h ./Modules/cjkcodecs/alg_jisx0201.h ./Modules/cjkcodecs/emu_jisx0213_2000.h ./Modules/cjkcodecs/multibytecodec.h ./Modules/cjkcodecs/cjkcodecs.h", + "MODULE__CODECS_ISO2022_LDFLAGS": "", + "MODULE__CODECS_ISO2022_STATE": "yes", + "MODULE__CODECS_JP_DEPS": "./Modules/cjkcodecs/mappings_jisx0213_pair.h ./Modules/cjkcodecs/alg_jisx0201.h ./Modules/cjkcodecs/emu_jisx0213_2000.h ./Modules/cjkcodecs/mappings_jp.h ./Modules/cjkcodecs/multibytecodec.h ./Modules/cjkcodecs/cjkcodecs.h", + "MODULE__CODECS_JP_LDFLAGS": "", + "MODULE__CODECS_JP_STATE": "yes", + "MODULE__CODECS_KR_DEPS": "./Modules/cjkcodecs/mappings_kr.h ./Modules/cjkcodecs/multibytecodec.h ./Modules/cjkcodecs/cjkcodecs.h", + "MODULE__CODECS_KR_LDFLAGS": "", + "MODULE__CODECS_KR_STATE": "yes", + "MODULE__CODECS_LDFLAGS": "", + "MODULE__CODECS_TW_DEPS": "./Modules/cjkcodecs/mappings_tw.h ./Modules/cjkcodecs/multibytecodec.h ./Modules/cjkcodecs/cjkcodecs.h", + "MODULE__CODECS_TW_LDFLAGS": "", + "MODULE__CODECS_TW_STATE": "yes", + "MODULE__COLLECTIONS_LDFLAGS": "", + "MODULE__CSV_LDFLAGS": "", + "MODULE__CSV_STATE": "yes", + "MODULE__CTYPES_CFLAGS": "-fno-strict-overflow -DUSING_MALLOC_CLOSURE_DOT_C=1", + "MODULE__CTYPES_DEPS": "./Modules/_ctypes/ctypes.h", + "MODULE__CTYPES_LDFLAGS": " -lffi -ldl", + "MODULE__CTYPES_MALLOC_CLOSURE": "_ctypes/malloc_closure.c", + "MODULE__CTYPES_STATE": "yes", + "MODULE__CTYPES_TEST_DEPS": "./Modules/_ctypes/_ctypes_test_generated.c.h", + "MODULE__CTYPES_TEST_LDFLAGS": "", + "MODULE__CTYPES_TEST_STATE": "yes", + "MODULE__CURSES_CFLAGS": "-D_XOPEN_SOURCE_EXTENDED=1", + "MODULE__CURSES_DEPS": "./Include/py_curses.h", + "MODULE__CURSES_LDFLAGS": "-lncurses", + "MODULE__CURSES_PANEL_CFLAGS": "-D_XOPEN_SOURCE_EXTENDED=1", + "MODULE__CURSES_PANEL_DEPS": "./Include/py_curses.h", + "MODULE__CURSES_PANEL_LDFLAGS": "-lpanel -lncurses", + "MODULE__CURSES_PANEL_STATE": "yes", + "MODULE__CURSES_STATE": "yes", + "MODULE__DATETIME_DEPS": "./Include/datetime.h", + "MODULE__DATETIME_LDFLAGS": "", + "MODULE__DATETIME_STATE": "yes", + "MODULE__DBM_CFLAGS": "-DUSE_NDBM", + "MODULE__DBM_LDFLAGS": "", + "MODULE__DBM_STATE": "yes", + "MODULE__DECIMAL_CFLAGS": "", + "MODULE__DECIMAL_DEPS": "./Modules/_decimal/docstrings.h", + "MODULE__DECIMAL_LDFLAGS": " -lmpdec -lm", + "MODULE__DECIMAL_STATE": "yes", + "MODULE__ELEMENTTREE_CFLAGS": "", + "MODULE__ELEMENTTREE_DEPS": "./Modules/pyexpat.c", + "MODULE__ELEMENTTREE_LDFLAGS": "", + "MODULE__ELEMENTTREE_STATE": "yes", + "MODULE__FUNCTOOLS_LDFLAGS": "", + "MODULE__GDBM_STATE": "disabled", + "MODULE__HASHLIB_CFLAGS": "", + "MODULE__HASHLIB_DEPS": "./Modules/hashlib.h", + "MODULE__HASHLIB_LDFLAGS": " -lcrypto", + "MODULE__HASHLIB_STATE": "yes", + "MODULE__HEAPQ_LDFLAGS": "", + "MODULE__HEAPQ_STATE": "yes", + "MODULE__HMAC_CFLAGS": "-I./Modules/_hacl -I./Modules/_hacl/include -D_BSD_SOURCE -D_DEFAULT_SOURCE -fno-strict-overflow -Wsign-compare -Wunreachable-code -DNDEBUG -g -O3 -Wall -O3 -arch arm64 -mmacosx-version-min=11.0 -Wno-nullability-completeness -Wno-expansion-to-defined -Wno-undef-prefix -fPIC -Werror=unguarded-availability-new -flto=thin -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -Werror=unguarded-availability -D_Py_TIER2=3 -D_Py_JIT -fprofile-instr-use=/private/tmp/tmp65dmjnoa/Python-3.14.7/code.profclangd -I./Include/internal -I./Include/internal/mimalloc -I. -I./Include -O3 -arch arm64 -mmacosx-version-min=11.0 -Wno-nullability-completeness -Wno-expansion-to-defined -Wno-undef-prefix -fPIC -Werror=unguarded-availability-new", + "MODULE__HMAC_DEPS": "./Modules/hashlib.h \\ Modules/_hacl/libHacl_HMAC.a", + "MODULE__HMAC_LDEPS": "Modules/_hacl/libHacl_HMAC.a", + "MODULE__HMAC_LDFLAGS": "Modules/_hacl/libHacl_HMAC.a", + "MODULE__HMAC_STATE": "yes", + "MODULE__INTERPCHANNELS_LDFLAGS": "", + "MODULE__INTERPCHANNELS_STATE": "yes", + "MODULE__INTERPQUEUES_LDFLAGS": "", + "MODULE__INTERPQUEUES_STATE": "yes", + "MODULE__INTERPRETERS_LDFLAGS": "", + "MODULE__INTERPRETERS_STATE": "yes", + "MODULE__IO_CFLAGS": "-I./Modules/_io", + "MODULE__IO_DEPS": "./Modules/_io/_iomodule.h", + "MODULE__IO_LDFLAGS": "", + "MODULE__IO_STATE": "yes", + "MODULE__JSON_LDFLAGS": "", + "MODULE__JSON_STATE": "yes", + "MODULE__LOCALE_LDFLAGS": "", + "MODULE__LSPROF_LDFLAGS": "", + "MODULE__LSPROF_STATE": "yes", + "MODULE__LZMA_CFLAGS": " -DLZMA_API_STATIC", + "MODULE__LZMA_LDFLAGS": " -llzma -pthread -lpthread", + "MODULE__LZMA_STATE": "yes", + "MODULE__MD5_CFLAGS": "-I./Modules/_hacl -I./Modules/_hacl/include -D_BSD_SOURCE -D_DEFAULT_SOURCE -fno-strict-overflow -Wsign-compare -Wunreachable-code -DNDEBUG -g -O3 -Wall -O3 -arch arm64 -mmacosx-version-min=11.0 -Wno-nullability-completeness -Wno-expansion-to-defined -Wno-undef-prefix -fPIC -Werror=unguarded-availability-new -flto=thin -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -Werror=unguarded-availability -D_Py_TIER2=3 -D_Py_JIT -fprofile-instr-use=/private/tmp/tmp65dmjnoa/Python-3.14.7/code.profclangd -I./Include/internal -I./Include/internal/mimalloc -I. -I./Include -O3 -arch arm64 -mmacosx-version-min=11.0 -Wno-nullability-completeness -Wno-expansion-to-defined -Wno-undef-prefix -fPIC -Werror=unguarded-availability-new", + "MODULE__MD5_DEPS": "./Modules/hashlib.h \\ Modules/_hacl/libHacl_Hash_MD5.a", + "MODULE__MD5_LDEPS": "Modules/_hacl/libHacl_Hash_MD5.a", + "MODULE__MD5_LDFLAGS": "Modules/_hacl/libHacl_Hash_MD5.a", + "MODULE__MD5_STATE": "yes", + "MODULE__MULTIBYTECODEC_DEPS": "./Modules/cjkcodecs/multibytecodec.h", + "MODULE__MULTIBYTECODEC_LDFLAGS": "", + "MODULE__MULTIBYTECODEC_STATE": "yes", + "MODULE__MULTIPROCESSING_CFLAGS": "-I./Modules/_multiprocessing", + "MODULE__MULTIPROCESSING_LDFLAGS": "", + "MODULE__MULTIPROCESSING_STATE": "yes", + "MODULE__OPCODE_LDFLAGS": "", + "MODULE__OPERATOR_LDFLAGS": "", + "MODULE__PICKLE_LDFLAGS": "", + "MODULE__PICKLE_STATE": "yes", + "MODULE__POSIXSHMEM_CFLAGS": "-I./Modules/_multiprocessing", + "MODULE__POSIXSHMEM_LDFLAGS": "", + "MODULE__POSIXSHMEM_STATE": "yes", + "MODULE__POSIXSUBPROCESS_LDFLAGS": "", + "MODULE__POSIXSUBPROCESS_STATE": "yes", + "MODULE__QUEUE_LDFLAGS": "", + "MODULE__QUEUE_STATE": "yes", + "MODULE__RANDOM_LDFLAGS": "", + "MODULE__RANDOM_STATE": "yes", + "MODULE__REMOTE_DEBUGGING_LDFLAGS": "", + "MODULE__REMOTE_DEBUGGING_STATE": "yes", + "MODULE__SCPROXY_LDFLAGS": "-framework SystemConfiguration -framework CoreFoundation", + "MODULE__SCPROXY_STATE": "yes", + "MODULE__SHA1_CFLAGS": "-I./Modules/_hacl -I./Modules/_hacl/include -D_BSD_SOURCE -D_DEFAULT_SOURCE -fno-strict-overflow -Wsign-compare -Wunreachable-code -DNDEBUG -g -O3 -Wall -O3 -arch arm64 -mmacosx-version-min=11.0 -Wno-nullability-completeness -Wno-expansion-to-defined -Wno-undef-prefix -fPIC -Werror=unguarded-availability-new -flto=thin -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -Werror=unguarded-availability -D_Py_TIER2=3 -D_Py_JIT -fprofile-instr-use=/private/tmp/tmp65dmjnoa/Python-3.14.7/code.profclangd -I./Include/internal -I./Include/internal/mimalloc -I. -I./Include -O3 -arch arm64 -mmacosx-version-min=11.0 -Wno-nullability-completeness -Wno-expansion-to-defined -Wno-undef-prefix -fPIC -Werror=unguarded-availability-new", + "MODULE__SHA1_DEPS": "./Modules/hashlib.h \\ Modules/_hacl/libHacl_Hash_SHA1.a", + "MODULE__SHA1_LDEPS": "Modules/_hacl/libHacl_Hash_SHA1.a", + "MODULE__SHA1_LDFLAGS": "Modules/_hacl/libHacl_Hash_SHA1.a", + "MODULE__SHA1_STATE": "yes", + "MODULE__SHA2_CFLAGS": "-I./Modules/_hacl -I./Modules/_hacl/include -D_BSD_SOURCE -D_DEFAULT_SOURCE -fno-strict-overflow -Wsign-compare -Wunreachable-code -DNDEBUG -g -O3 -Wall -O3 -arch arm64 -mmacosx-version-min=11.0 -Wno-nullability-completeness -Wno-expansion-to-defined -Wno-undef-prefix -fPIC -Werror=unguarded-availability-new -flto=thin -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -Werror=unguarded-availability -D_Py_TIER2=3 -D_Py_JIT -fprofile-instr-use=/private/tmp/tmp65dmjnoa/Python-3.14.7/code.profclangd -I./Include/internal -I./Include/internal/mimalloc -I. -I./Include -O3 -arch arm64 -mmacosx-version-min=11.0 -Wno-nullability-completeness -Wno-expansion-to-defined -Wno-undef-prefix -fPIC -Werror=unguarded-availability-new", + "MODULE__SHA2_DEPS": "./Modules/hashlib.h \\ Modules/_hacl/libHacl_Hash_SHA2.a", + "MODULE__SHA2_LDEPS": "Modules/_hacl/libHacl_Hash_SHA2.a", + "MODULE__SHA2_LDFLAGS": "Modules/_hacl/libHacl_Hash_SHA2.a", + "MODULE__SHA2_STATE": "yes", + "MODULE__SHA3_CFLAGS": "-I./Modules/_hacl -I./Modules/_hacl/include -D_BSD_SOURCE -D_DEFAULT_SOURCE -fno-strict-overflow -Wsign-compare -Wunreachable-code -DNDEBUG -g -O3 -Wall -O3 -arch arm64 -mmacosx-version-min=11.0 -Wno-nullability-completeness -Wno-expansion-to-defined -Wno-undef-prefix -fPIC -Werror=unguarded-availability-new -flto=thin -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -Werror=unguarded-availability -D_Py_TIER2=3 -D_Py_JIT -fprofile-instr-use=/private/tmp/tmp65dmjnoa/Python-3.14.7/code.profclangd -I./Include/internal -I./Include/internal/mimalloc -I. -I./Include -O3 -arch arm64 -mmacosx-version-min=11.0 -Wno-nullability-completeness -Wno-expansion-to-defined -Wno-undef-prefix -fPIC -Werror=unguarded-availability-new", + "MODULE__SHA3_DEPS": "./Modules/hashlib.h \\ Modules/_hacl/libHacl_Hash_SHA3.a", + "MODULE__SHA3_LDEPS": "Modules/_hacl/libHacl_Hash_SHA3.a", + "MODULE__SHA3_LDFLAGS": "Modules/_hacl/libHacl_Hash_SHA3.a", + "MODULE__SHA3_STATE": "yes", + "MODULE__SIGNAL_LDFLAGS": "", + "MODULE__SOCKET_DEPS": "./Modules/socketmodule.h ./Modules/addrinfo.h ./Modules/getaddrinfo.c ./Modules/getnameinfo.c", + "MODULE__SOCKET_LDFLAGS": "", + "MODULE__SOCKET_STATE": "yes", + "MODULE__SQLITE3_CFLAGS": " -I./Modules/_sqlite", + "MODULE__SQLITE3_DEPS": "./Modules/_sqlite/connection.h ./Modules/_sqlite/cursor.h ./Modules/_sqlite/microprotocols.h ./Modules/_sqlite/module.h ./Modules/_sqlite/prepare_protocol.h ./Modules/_sqlite/row.h ./Modules/_sqlite/util.h", + "MODULE__SQLITE3_LDFLAGS": " -lsqlite3 -lz", + "MODULE__SQLITE3_STATE": "yes", + "MODULE__SRE_LDFLAGS": "", + "MODULE__SSL_CFLAGS": "", + "MODULE__SSL_DEPS": "./Modules/_ssl.h ./Modules/_ssl/cert.c ./Modules/_ssl/debughelpers.c ./Modules/_ssl/misc.c ./Modules/_ssl_data_111.h ./Modules/_ssl_data_300.h ./Modules/socketmodule.h", + "MODULE__SSL_LDFLAGS": " -lssl -lcrypto", + "MODULE__SSL_STATE": "yes", + "MODULE__STATISTICS_LDFLAGS": "", + "MODULE__STATISTICS_STATE": "yes", + "MODULE__STAT_LDFLAGS": "", + "MODULE__STRUCT_LDFLAGS": "", + "MODULE__STRUCT_STATE": "yes", + "MODULE__SUGGESTIONS_LDFLAGS": "", + "MODULE__SYMTABLE_LDFLAGS": "", + "MODULE__SYSCONFIG_LDFLAGS": "", + "MODULE__TESTBUFFER_STATE": "yes", + "MODULE__TESTCAPI_DEPS": "./Modules/_testcapi/parts.h ./Modules/_testcapi/util.h", + "MODULE__TESTCAPI_LDFLAGS": "", + "MODULE__TESTCAPI_STATE": "yes", + "MODULE__TESTCLINIC_LIMITED_STATE": "yes", + "MODULE__TESTCLINIC_STATE": "yes", + "MODULE__TESTIMPORTMULTIPLE_STATE": "yes", + "MODULE__TESTINTERNALCAPI_DEPS": "./Modules/_testinternalcapi/parts.h", + "MODULE__TESTINTERNALCAPI_LDFLAGS": "", + "MODULE__TESTINTERNALCAPI_STATE": "yes", + "MODULE__TESTLIMITEDCAPI_DEPS": "./Modules/_testlimitedcapi/testcapi_long.h ./Modules/_testlimitedcapi/parts.h ./Modules/_testlimitedcapi/util.h", + "MODULE__TESTLIMITEDCAPI_STATE": "yes", + "MODULE__TESTMULTIPHASE_STATE": "yes", + "MODULE__TESTSINGLEPHASE_STATE": "yes", + "MODULE__THREAD_LDFLAGS": "", + "MODULE__TKINTER_CFLAGS": " -Wno-strict-prototypes -DWITH_APPINIT=1", + "MODULE__TKINTER_LDFLAGS": " -ltcl9tk9.0 -ltkstub -ltcl9.0 -ltclstub -lz -lpthread -framework CoreFoundation", + "MODULE__TKINTER_STATE": "yes", + "MODULE__TRACEMALLOC_LDFLAGS": "", + "MODULE__TYPES_LDFLAGS": "", + "MODULE__TYPES_STATE": "yes", + "MODULE__TYPING_LDFLAGS": "", + "MODULE__TYPING_STATE": "yes", + "MODULE__UUID_CFLAGS": "", + "MODULE__UUID_LDFLAGS": "-luuid", + "MODULE__UUID_STATE": "yes", + "MODULE__WEAKREF_LDFLAGS": "", + "MODULE__XXTESTFUZZ_LDFLAGS": "", + "MODULE__XXTESTFUZZ_STATE": "yes", + "MODULE__ZONEINFO_LDFLAGS": "", + "MODULE__ZONEINFO_STATE": "yes", + "MODULE__ZSTD_CFLAGS": " -pthread", + "MODULE__ZSTD_DEPS": "./Modules/_zstd/_zstdmodule.h ./Modules/_zstd/buffer.h ./Modules/_zstd/zstddict.h", + "MODULE__ZSTD_LDFLAGS": " -lzstd -pthread", + "MODULE__ZSTD_STATE": "yes", + "MULTIARCH": "darwin", + "MULTIARCH_CPPFLAGS": "-DMULTIARCH=\\\"darwin\\\"", + "MVWDELCH_IS_EXPRESSION": "1", + "NO_AS_NEEDED": "", + "OBJECT_OBJS": "\\", + "OPT": "-DNDEBUG -g -O3 -Wall", + "PACKAGE_BUGREPORT": "0", + "PACKAGE_NAME": "0", + "PACKAGE_STRING": "0", + "PACKAGE_TARNAME": "0", + "PACKAGE_URL": "0", + "PACKAGE_VERSION": "0", + "PARSER_HEADERS": "\\", + "PARSER_OBJS": "\\ \\ \\ Parser/myreadline.o", + "PEGEN_HEADERS": "\\", + "PEGEN_OBJS": "\\", + "PGO_PROF_GEN_FLAG": "-fprofile-instr-generate", + "PGO_PROF_USE_FLAG": "-fprofile-instr-use=\"$(shell pwd)/code.profclangd\"", + "PLATLIBDIR": "lib", + "POBJS": "\\", + "POSIX_SEMAPHORES_NOT_ENABLED": "0", + "PROFILE_TASK": "-m test --pgo -j 12", + "PTHREAD_KEY_T_IS_COMPATIBLE_WITH_INT": "0", + "PTHREAD_SYSTEM_SCHED_SUPPORTED": "1", + "PURIFY": "", + "PY3LIBRARY": "", + "PYLONG_BITS_IN_DIGIT": "0", + "PYTHON": "python", + "PYTHONFRAMEWORK": "", + "PYTHONFRAMEWORKDIR": "no-framework", + "PYTHONFRAMEWORKINSTALLDIR": "", + "PYTHONFRAMEWORKINSTALLNAMEPREFIX": "", + "PYTHONFRAMEWORKPREFIX": "", + "PYTHONPATH": "", + "PYTHON_FOR_BUILD": "_PYTHON_PROJECT_BASE=/private/tmp/tmp65dmjnoa/Python-3.14.7 _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=./Lib _PYTHON_SYSCONFIGDATA_NAME=_sysconfigdata__darwin_darwin _PYTHON_SYSCONFIGDATA_PATH=$(shell test -f pybuilddir.txt && echo /private/tmp/tmp65dmjnoa/Python-3.14.7/`cat pybuilddir.txt`) /tmp/tmp65dmjnoa/tools/host/bin/python3.14", + "PYTHON_FOR_BUILD_DEPS": "", + "PYTHON_FOR_FREEZE": "/tmp/tmp65dmjnoa/tools/host/bin/python3.14", + "PYTHON_FOR_REGEN": "", + "PYTHON_HEADERS": "\\", + "PYTHON_OBJS": "\\", + "PY_BUILTIN_HASHLIB_HASHES": "\"md5,sha1,sha2,sha3,blake2\"", + "PY_BUILTIN_MODULE_CFLAGS": "-fno-strict-overflow -Wsign-compare -Wunreachable-code -DNDEBUG -g -O3 -Wall -O3 -arch arm64 -mmacosx-version-min=11.0 -Wno-nullability-completeness -Wno-expansion-to-defined -Wno-undef-prefix -fPIC -Werror=unguarded-availability-new -flto=thin -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -Werror=unguarded-availability -D_Py_TIER2=3 -D_Py_JIT -fprofile-instr-use=/private/tmp/tmp65dmjnoa/Python-3.14.7/code.profclangd -I./Include/internal -I./Include/internal/mimalloc -I. -I./Include -O3 -arch arm64 -mmacosx-version-min=11.0 -Wno-nullability-completeness -Wno-expansion-to-defined -Wno-undef-prefix -fPIC -Werror=unguarded-availability-new -DPy_BUILD_CORE_BUILTIN", + "PY_CFLAGS": "-fno-strict-overflow -Wsign-compare -Wunreachable-code -DNDEBUG -g -O3 -Wall -O3 -arch arm64 -mmacosx-version-min=11.0 -Wno-nullability-completeness -Wno-expansion-to-defined -Wno-undef-prefix -fPIC -Werror=unguarded-availability-new", + "PY_CFLAGS_NODIST": "-flto=thin -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -Werror=unguarded-availability -D_Py_TIER2=3 -D_Py_JIT -fprofile-instr-use=/private/tmp/tmp65dmjnoa/Python-3.14.7/code.profclangd -I./Include/internal -I./Include/internal/mimalloc", + "PY_COERCE_C_LOCALE": "1", + "PY_CORE_CFLAGS": "-fno-strict-overflow -Wsign-compare -Wunreachable-code -DNDEBUG -g -O3 -Wall -O3 -arch arm64 -mmacosx-version-min=11.0 -Wno-nullability-completeness -Wno-expansion-to-defined -Wno-undef-prefix -fPIC -Werror=unguarded-availability-new -flto=thin -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -Werror=unguarded-availability -D_Py_TIER2=3 -D_Py_JIT -fprofile-instr-use=/private/tmp/tmp65dmjnoa/Python-3.14.7/code.profclangd -I./Include/internal -I./Include/internal/mimalloc -I. -I./Include -O3 -arch arm64 -mmacosx-version-min=11.0 -Wno-nullability-completeness -Wno-expansion-to-defined -Wno-undef-prefix -fPIC -Werror=unguarded-availability-new -DPy_BUILD_CORE", + "PY_CORE_LDFLAGS": "-arch arm64 -mmacosx-version-min=11.0 -Wl,-headerpad,40 -flto=thin -Wl,-export_dynamic -Wl,-object_path_lto,\"$@\".lto -g", + "PY_CPPFLAGS": "-I. -I./Include -O3 -arch arm64 -mmacosx-version-min=11.0 -Wno-nullability-completeness -Wno-expansion-to-defined -Wno-undef-prefix -fPIC -Werror=unguarded-availability-new", + "PY_ENABLE_SHARED": "1", + "PY_HAVE_PERF_TRAMPOLINE": "0", + "PY_LDFLAGS": "-arch arm64 -mmacosx-version-min=11.0 -Wl,-headerpad,40", + "PY_LDFLAGS_NODIST": "-flto=thin -Wl,-export_dynamic -Wl,-object_path_lto,\"$@\".lto -g", + "PY_LDFLAGS_NOLTO": "-arch arm64 -mmacosx-version-min=11.0 -Wl,-headerpad,40 -flto=thin", + "PY_SQLITE_ENABLE_LOAD_EXTENSION": "1", + "PY_SQLITE_HAVE_SERIALIZE": "1", + "PY_SSL_DEFAULT_CIPHERS": "1", + "PY_SSL_DEFAULT_CIPHER_STRING": "0", + "PY_STDMODULE_CFLAGS": "-fno-strict-overflow -Wsign-compare -Wunreachable-code -DNDEBUG -g -O3 -Wall -O3 -arch arm64 -mmacosx-version-min=11.0 -Wno-nullability-completeness -Wno-expansion-to-defined -Wno-undef-prefix -fPIC -Werror=unguarded-availability-new -flto=thin -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -Werror=unguarded-availability -D_Py_TIER2=3 -D_Py_JIT -fprofile-instr-use=/private/tmp/tmp65dmjnoa/Python-3.14.7/code.profclangd -I./Include/internal -I./Include/internal/mimalloc -I. -I./Include -O3 -arch arm64 -mmacosx-version-min=11.0 -Wno-nullability-completeness -Wno-expansion-to-defined -Wno-undef-prefix -fPIC -Werror=unguarded-availability-new", + "PY_SUPPORT_TIER": "1", + "Py_DEBUG": "0", + "Py_ENABLE_SHARED": "1", + "Py_GIL_DISABLED": "0", + "Py_HASH_ALGORITHM": "0", + "Py_REMOTE_DEBUG": "1", + "Py_RL_STARTUP_HOOK_TAKES_ARGS": "1", + "Py_STATS": "0", + "Py_SUNOS_VERSION": "0", + "Py_TAIL_CALL_INTERP": "1", + "Py_TRACE_REFS": "0", + "QUICKTESTOPTS": "-x test_subprocess test_io \\", + "READELF": "@READELF@", + "RESSRCDIR": "", + "RETSIGTYPE": "void", + "RUNSHARED": "DYLD_LIBRARY_PATH=/private/tmp/tmp65dmjnoa/Python-3.14.7", + "SCRIPTDIR": "/install/lib", + "SCRIPT_IDLE": "build/scripts-3.14/idle3.14", + "SCRIPT_PYDOC": "build/scripts-3.14/pydoc3.14", + "SETPGRP_HAVE_ARG": "0", + "SHAREDMODS": "Modules/_dbm.cpython-314-darwin.so Modules/_testbuffer.cpython-314-darwin.so Modules/_testcapi.cpython-314-darwin.so Modules/_testlimitedcapi.cpython-314-darwin.so Modules/_tkinter.cpython-314-darwin.so Modules/_testimportmultiple.cpython-314-darwin.so Modules/_testmultiphase.cpython-314-darwin.so Modules/_testsinglephase.cpython-314-darwin.so Modules/_ctypes_test.cpython-314-darwin.so", + "SHELL": "/bin/sh -e", + "SHLIBS": "-ldl -framework CoreFoundation", + "SHLIB_SUFFIX": ".so", + "SIGNED_RIGHT_SHIFT_ZERO_FILLS": "0", + "SITEPATH": "", + "SIZEOF_DOUBLE": "8", + "SIZEOF_FLOAT": "4", + "SIZEOF_FPOS_T": "8", + "SIZEOF_INT": "4", + "SIZEOF_LONG": "8", + "SIZEOF_LONG_DOUBLE": "8", + "SIZEOF_LONG_LONG": "8", + "SIZEOF_OFF_T": "8", + "SIZEOF_PID_T": "4", + "SIZEOF_PTHREAD_KEY_T": "8", + "SIZEOF_PTHREAD_T": "8", + "SIZEOF_SHORT": "2", + "SIZEOF_SIZE_T": "8", + "SIZEOF_TIME_T": "8", + "SIZEOF_UINTPTR_T": "8", + "SIZEOF_VOID_P": "8", + "SIZEOF_WCHAR_T": "4", + "SIZEOF__BOOL": "1", + "SOABI": "cpython-314-darwin", + "SRCDIRS": "Modules Modules/_ctypes Modules/_decimal Modules/_decimal/libmpdec Modules/_hacl Modules/_io Modules/_multiprocessing Modules/_sqlite Modules/_sre Modules/_testcapi Modules/_testinternalcapi Modules/_testlimitedcapi Modules/_xxtestfuzz Modules/_zstd Modules/cjkcodecs Modules/expat Objects Objects/mimalloc Objects/mimalloc/prim Parser Parser/tokenizer Parser/lexer Programs Python Python/frozen_modules", + "SRC_GDB_HOOKS": "./Tools/gdb/libpython.py", + "STATIC_LIBPYTHON": "1", + "STDC_HEADERS": "1", + "STRICT_SYSV_CURSES": "/* Don't use ncurses extensions */", + "STRIPFLAG": "-s", + "SUBDIRS": "", + "SUBDIRSTOO": "Include Lib Misc", + "SYSLIBS": "", + "SYS_SELECT_WITH_SYS_TIME": "1", + "TESTOPTS": "", + "TESTPATH": "", + "TESTPYTHON": "DYLD_LIBRARY_PATH=/private/tmp/tmp65dmjnoa/Python-3.14.7 _PYTHON_PROJECT_BASE=/private/tmp/tmp65dmjnoa/Python-3.14.7 _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=./Lib _PYTHON_SYSCONFIGDATA_NAME=_sysconfigdata__darwin_darwin _PYTHON_SYSCONFIGDATA_PATH=$(shell test -f pybuilddir.txt && echo /private/tmp/tmp65dmjnoa/Python-3.14.7/`cat pybuilddir.txt`) /tmp/tmp65dmjnoa/tools/host/bin/python3.14", + "TESTPYTHONOPTS": "", + "TESTRUNNER": "DYLD_LIBRARY_PATH=/private/tmp/tmp65dmjnoa/Python-3.14.7 _PYTHON_PROJECT_BASE=/private/tmp/tmp65dmjnoa/Python-3.14.7 _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=./Lib _PYTHON_SYSCONFIGDATA_NAME=_sysconfigdata__darwin_darwin _PYTHON_SYSCONFIGDATA_PATH=$(shell test -f pybuilddir.txt && echo /private/tmp/tmp65dmjnoa/Python-3.14.7/`cat pybuilddir.txt`) /tmp/tmp65dmjnoa/tools/host/bin/python3.14 -m test", + "TESTSUBDIRS": "idlelib/idle_test \\", + "TESTTIMEOUT": "", + "TEST_MODULES": "yes", + "THREAD_STACK_SIZE": "0x1000000", + "TIMEMODULE_LIB": "0", + "TM_IN_SYS_TIME": "0", + "TOKENIZER_HEADERS": "\\", + "TOKENIZER_OBJS": "\\", + "TZPATH": "/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo", + "UNICODE_DEPS": "\\", + "UNIVERSALSDK": "", + "UPDATE_FILE": "./Tools/build/update_file.py", + "USE_COMPUTED_GOTOS": "0", + "VERSION": "3.14", + "WEBEX2": "web_example_pyrepl_jspi", + "WEBEX2_DIR": "./Platforms/emscripten/web_example_pyrepl_jspi/", + "WEBEX_DIR": "./Platforms/emscripten/web_example/", + "WHEEL_PKG_DIR": "", + "WINDOW_HAS_FLAGS": "1", + "WITH_DECIMAL_CONTEXTVAR": "1", + "WITH_DOC_STRINGS": "1", + "WITH_DTRACE": "0", + "WITH_DYLD": "1", + "WITH_EDITLINE": "0", + "WITH_LIBINTL": "0", + "WITH_MIMALLOC": "1", + "WITH_NEXT_FRAMEWORK": "0", + "WITH_PYMALLOC": "1", + "WITH_VALGRIND": "0", + "X87_DOUBLE_ROUNDING": "0", + "XMLLIBSUBDIRS": "xml xml/dom xml/etree xml/parsers xml/sax", + "ZIP_STDLIB": "python3.14.zip", + "abi_thread": "", + "abiflags": "", + "abs_builddir": "/private/tmp/tmp65dmjnoa/Python-3.14.7", + "abs_srcdir": "/private/tmp/tmp65dmjnoa/Python-3.14.7", + "base": "/private/tmp/tmp65dmjnoa/out/python/install", + "datarootdir": "/install/share", + "exec_prefix": "/private/tmp/tmp65dmjnoa/out/python/install", + "host_exec_prefix": "/install", + "host_prefix": "/install", + "implementation": "Python", + "implementation_lower": "python", + "installed_base": "/private/tmp/tmp65dmjnoa/out/python/install", + "installed_platbase": "/private/tmp/tmp65dmjnoa/out/python/install", + "platbase": "/private/tmp/tmp65dmjnoa/out/python/install", + "platlibdir": "lib", + "prefix": "/private/tmp/tmp65dmjnoa/out/python/install", + "projectbase": "/private/tmp/tmp65dmjnoa/out/python/install/bin", + "py_version": "3.14.7", + "py_version_nodot": "314", + "py_version_nodot_plat": "", + "py_version_short": "3.14", + "srcdir": "/private/tmp/tmp65dmjnoa/out/python/install/lib/python3.14/config-3.14-darwin", + "userbase": "/Users/runner/.local" + }, + "python_exe": "install/bin/python3.14", + "python_extension_module_loading": [ + "builtin", + "shared-library" + ], + "python_implementation_cache_tag": "cpython-314", + "python_implementation_hex_version": 51251184, + "python_implementation_name": "cpython", + "python_implementation_version": [ + "3", + "14", + "7", + "final", + "0" + ], + "python_major_minor_version": "3.14", + "python_paths": { + "data": "install", + "include": "install/include/python3.14", + "platinclude": "install/include/python3.14", + "platlib": "install/lib/python3.14/site-packages", + "platstdlib": "install/lib/python3.14", + "purelib": "install/lib/python3.14/site-packages", + "scripts": "install/bin", + "stdlib": "install/lib/python3.14" + }, + "python_paths_abstract": { + "data": "{base}", + "include": "{installed_base}/include/python{py_version_short}{abiflags}", + "platinclude": "{installed_platbase}/include/python{py_version_short}{abiflags}", + "platlib": "{platbase}/{platlibdir}/{implementation_lower}{py_version_short}{abi_thread}/site-packages", + "platstdlib": "{platbase}/{platlibdir}/{implementation_lower}{py_version_short}{abi_thread}", + "purelib": "{base}/lib/{implementation_lower}{py_version_short}{abi_thread}/site-packages", + "scripts": "{base}/bin", + "stdlib": "{installed_base}/{platlibdir}/{implementation_lower}{py_version_short}{abi_thread}" + }, + "python_platform_tag": "macosx-11.0-arm64", + "python_stdlib_platform_config": "install/lib/python3.14/config-3.14-darwin", + "python_stdlib_test_packages": [ + "bsddb.test", + "ctypes.test", + "distutils.tests", + "email.test", + "idlelib.idle_test", + "json.tests", + "lib-tk.test", + "lib2to3.tests", + "sqlite3.test", + "test", + "tkinter.test", + "unittest.test" + ], + "python_suffixes": { + "bytecode": [ + ".pyc" + ], + "debug_bytecode": [ + ".pyc" + ], + "extension": [ + ".cpython-314-darwin.so", + ".abi3.so", + ".so" + ], + "optimized_bytecode": [ + ".pyc" + ], + "source": [ + ".py" + ] + }, + "python_symbol_visibility": "global-default", + "python_tag": "cp314", + "python_version": "3.14.7", + "run_tests": "build/run_tests.py", + "target_triple": "aarch64-apple-darwin", + "tcl_library_path": "install/lib", + "tcl_library_paths": [ + "itcl4.3.8", + "thread3.0.6", + "tk9.0" + ], + "version": "8" +} \ No newline at end of file diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.bdb.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.bdb.txt new file mode 100644 index 000000000..0601b45e0 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.bdb.txt @@ -0,0 +1,126 @@ +The following is the license that applies to this copy of the Berkeley DB +software. For a license to use the Berkeley DB software under conditions +other than those described here, or to purchase support for this software, +please contact Oracle at berkeleydb-info_us@oracle.com. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +/* + * Copyright (c) 1990, 2013 Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Redistributions in any form must be accompanied by information on + * how to obtain complete source code for the DB software and any + * accompanying software that uses the DB software. The source code + * must either be included in the distribution or be available for no + * more than the cost of distribution plus a nominal fee, and must be + * freely redistributable under reasonable conditions. For an + * executable file, complete source code means the source code for all + * modules it contains. It does not include source code for modules or + * files that typically accompany the major components of the operating + * system on which the executable file runs. + * + * THIS SOFTWARE IS PROVIDED BY ORACLE ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR + * NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL ORACLE BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +/* + * Copyright (c) 1990, 1993, 1994, 1995 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +/* + * Copyright (c) 1995, 1996 + * The President and Fellows of Harvard University. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY HARVARD AND ITS CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL HARVARD OR ITS CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +/*** + * ASM: a very small and fast Java bytecode manipulation framework + * Copyright (c) 2000-2005 INRIA, France Telecom + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holders nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.bzip2.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.bzip2.txt new file mode 100644 index 000000000..a5c4cdbc3 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.bzip2.txt @@ -0,0 +1,37 @@ +This program, "bzip2", the associated library "libbzip2", and all +documentation, are copyright (C) 1996-2010 Julian R Seward. All +rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. The origin of this software must not be misrepresented; you must + not claim that you wrote the original software. If you use this + software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + +3. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + +4. The name of the author may not be used to endorse or promote + products derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Julian Seward, jseward@bzip.org +bzip2/libbzip2 version 1.0.6 of 6 September 2010 diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.cpython.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.cpython.txt new file mode 100644 index 000000000..1007a8052 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.cpython.txt @@ -0,0 +1,771 @@ +A. HISTORY OF THE SOFTWARE +========================== + +Python was created in the early 1990s by Guido van Rossum at Stichting +Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands +as a successor of a language called ABC. Guido remains Python's +principal author, although it includes many contributions from others. + +In 1995, Guido continued his work on Python at the Corporation for +National Research Initiatives (CNRI, see http://www.cnri.reston.va.us) +in Reston, Virginia where he released several versions of the +software. + +In May 2000, Guido and the Python core development team moved to +BeOpen.com to form the BeOpen PythonLabs team. In October of the same +year, the PythonLabs team moved to Digital Creations, which became +Zope Corporation. In 2001, the Python Software Foundation (PSF, see +https://www.python.org/psf/) was formed, a non-profit organization +created specifically to own Python-related Intellectual Property. +Zope Corporation was a sponsoring member of the PSF. + +All Python releases are Open Source (see http://www.opensource.org for +the Open Source Definition). Historically, most, but not all, Python +releases have also been GPL-compatible; the table below summarizes +the various releases. + + Release Derived Year Owner GPL- + from compatible? (1) + + 0.9.0 thru 1.2 1991-1995 CWI yes + 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes + 1.6 1.5.2 2000 CNRI no + 2.0 1.6 2000 BeOpen.com no + 1.6.1 1.6 2001 CNRI yes (2) + 2.1 2.0+1.6.1 2001 PSF no + 2.0.1 2.0+1.6.1 2001 PSF yes + 2.1.1 2.1+2.0.1 2001 PSF yes + 2.1.2 2.1.1 2002 PSF yes + 2.1.3 2.1.2 2002 PSF yes + 2.2 and above 2.1.1 2001-now PSF yes + +Footnotes: + +(1) GPL-compatible doesn't mean that we're distributing Python under + the GPL. All Python licenses, unlike the GPL, let you distribute + a modified version without making your changes open source. The + GPL-compatible licenses make it possible to combine Python with + other software that is released under the GPL; the others don't. + +(2) According to Richard Stallman, 1.6.1 is not GPL-compatible, + because its license has a choice of law clause. According to + CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1 + is "not incompatible" with the GPL. + +Thanks to the many outside volunteers who have worked under Guido's +direction to make these releases possible. + + +B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON +=============================================================== + +Python software and documentation are licensed under the +Python Software Foundation License Version 2. + +Starting with Python 3.8.6, examples, recipes, and other code in +the documentation are dual licensed under the PSF License Version 2 +and the Zero-Clause BSD license. + +Some software incorporated into Python is under different licenses. +The licenses are listed with code falling under that license. + + +PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 +-------------------------------------------- + +1. This LICENSE AGREEMENT is between the Python Software Foundation +("PSF"), and the Individual or Organization ("Licensee") accessing and +otherwise using this software ("Python") in source or binary form and +its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, PSF hereby +grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, +analyze, test, perform and/or display publicly, prepare derivative works, +distribute, and otherwise use Python alone or in any derivative version, +provided, however, that PSF's License Agreement and PSF's notice of copyright, +i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Python Software Foundation; +All Rights Reserved" are retained in Python alone or in any derivative version +prepared by Licensee. + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python. + +4. PSF is making Python available to Licensee on an "AS IS" +basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. Nothing in this License Agreement shall be deemed to create any +relationship of agency, partnership, or joint venture between PSF and +Licensee. This License Agreement does not grant permission to use PSF +trademarks or trade name in a trademark sense to endorse or promote +products or services of Licensee, or any third party. + +8. By copying, installing or otherwise using Python, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 +------------------------------------------- + +BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 + +1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an +office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the +Individual or Organization ("Licensee") accessing and otherwise using +this software in source or binary form and its associated +documentation ("the Software"). + +2. Subject to the terms and conditions of this BeOpen Python License +Agreement, BeOpen hereby grants Licensee a non-exclusive, +royalty-free, world-wide license to reproduce, analyze, test, perform +and/or display publicly, prepare derivative works, distribute, and +otherwise use the Software alone or in any derivative version, +provided, however, that the BeOpen Python License is retained in the +Software, alone or in any derivative version prepared by Licensee. + +3. BeOpen is making the Software available to Licensee on an "AS IS" +basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE +SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS +AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY +DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +5. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +6. This License Agreement shall be governed by and interpreted in all +respects by the law of the State of California, excluding conflict of +law provisions. Nothing in this License Agreement shall be deemed to +create any relationship of agency, partnership, or joint venture +between BeOpen and Licensee. This License Agreement does not grant +permission to use BeOpen trademarks or trade names in a trademark +sense to endorse or promote products or services of Licensee, or any +third party. As an exception, the "BeOpen Python" logos available at +http://www.pythonlabs.com/logos.html may be used according to the +permissions granted on that web page. + +7. By copying, installing or otherwise using the software, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 +--------------------------------------- + +1. This LICENSE AGREEMENT is between the Corporation for National +Research Initiatives, having an office at 1895 Preston White Drive, +Reston, VA 20191 ("CNRI"), and the Individual or Organization +("Licensee") accessing and otherwise using Python 1.6.1 software in +source or binary form and its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, CNRI +hereby grants Licensee a nonexclusive, royalty-free, world-wide +license to reproduce, analyze, test, perform and/or display publicly, +prepare derivative works, distribute, and otherwise use Python 1.6.1 +alone or in any derivative version, provided, however, that CNRI's +License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) +1995-2001 Corporation for National Research Initiatives; All Rights +Reserved" are retained in Python 1.6.1 alone or in any derivative +version prepared by Licensee. Alternately, in lieu of CNRI's License +Agreement, Licensee may substitute the following text (omitting the +quotes): "Python 1.6.1 is made available subject to the terms and +conditions in CNRI's License Agreement. This Agreement together with +Python 1.6.1 may be located on the internet using the following +unique, persistent identifier (known as a handle): 1895.22/1013. This +Agreement may also be obtained from a proxy server on the internet +using the following URL: http://hdl.handle.net/1895.22/1013". + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python 1.6.1 or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python 1.6.1. + +4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" +basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. This License Agreement shall be governed by the federal +intellectual property law of the United States, including without +limitation the federal copyright law, and, to the extent such +U.S. federal law does not apply, by the law of the Commonwealth of +Virginia, excluding Virginia's conflict of law provisions. +Notwithstanding the foregoing, with regard to derivative works based +on Python 1.6.1 that incorporate non-separable material that was +previously distributed under the GNU General Public License (GPL), the +law of the Commonwealth of Virginia shall govern this License +Agreement only as to issues arising under or with respect to +Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this +License Agreement shall be deemed to create any relationship of +agency, partnership, or joint venture between CNRI and Licensee. This +License Agreement does not grant permission to use CNRI trademarks or +trade name in a trademark sense to endorse or promote products or +services of Licensee, or any third party. + +8. By clicking on the "ACCEPT" button where indicated, or by copying, +installing or otherwise using Python 1.6.1, Licensee agrees to be +bound by the terms and conditions of this License Agreement. + + ACCEPT + + +CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 +-------------------------------------------------- + +Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, +The Netherlands. All rights reserved. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Stichting Mathematisch +Centrum or CWI not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +ZERO-CLAUSE BSD LICENSE FOR CODE IN THE PYTHON DOCUMENTATION +---------------------------------------------------------------------- + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + +Licenses and Acknowledgements for Incorporated Software +======================================================= + +This section is an incomplete, but growing list of licenses and acknowledgements +for third-party software incorporated in the Python distribution. + +Mersenne Twister +---------------- + +The :mod:`_random` module includes code based on a download from +http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/emt19937ar.html. The following are +the verbatim comments from the original code:: + + A C-program for MT19937, with initialization improved 2002/1/26. + Coded by Takuji Nishimura and Makoto Matsumoto. + + Before using, initialize the state by using init_genrand(seed) + or init_by_array(init_key, key_length). + + Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura, + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. The names of its contributors may not be used to endorse or promote + products derived from this software without specific prior written + permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + Any feedback is very welcome. + http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html + email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space) + + +Sockets +------- + +The :mod:`socket` module uses the functions, :func:`getaddrinfo`, and +:func:`getnameinfo`, which are coded in separate source files from the WIDE +Project, http://www.wide.ad.jp/. :: + + Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the project nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + + +Asynchronous socket services +---------------------------- + +The :mod:`asynchat` and :mod:`asyncore` modules contain the following notice:: + + Copyright 1996 by Sam Rushing + + All Rights Reserved + + Permission to use, copy, modify, and distribute this software and + its documentation for any purpose and without fee is hereby + granted, provided that the above copyright notice appear in all + copies and that both that copyright notice and this permission + notice appear in supporting documentation, and that the name of Sam + Rushing not be used in advertising or publicity pertaining to + distribution of the software without specific, written prior + permission. + + SAM RUSHING DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN + NO EVENT SHALL SAM RUSHING BE LIABLE FOR ANY SPECIAL, INDIRECT OR + CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS + OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +Cookie management +----------------- + +The :mod:`http.cookies` module contains the following notice:: + + Copyright 2000 by Timothy O'Malley + + All Rights Reserved + + Permission to use, copy, modify, and distribute this software + and its documentation for any purpose and without fee is hereby + granted, provided that the above copyright notice appear in all + copies and that both that copyright notice and this permission + notice appear in supporting documentation, and that the name of + Timothy O'Malley not be used in advertising or publicity + pertaining to distribution of the software without specific, written + prior permission. + + Timothy O'Malley DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS + SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS, IN NO EVENT SHALL Timothy O'Malley BE LIABLE FOR + ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + + +Execution tracing +----------------- + +The :mod:`trace` module contains the following notice:: + + portions copyright 2001, Autonomous Zones Industries, Inc., all rights... + err... reserved and offered to the public under the terms of the + Python 2.2 license. + Author: Zooko O'Whielacronx + http://zooko.com/ + mailto:zooko@zooko.com + + Copyright 2000, Mojam Media, Inc., all rights reserved. + Author: Skip Montanaro + + Copyright 1999, Bioreason, Inc., all rights reserved. + Author: Andrew Dalke + + Copyright 1995-1997, Automatrix, Inc., all rights reserved. + Author: Skip Montanaro + + Copyright 1991-1995, Stichting Mathematisch Centrum, all rights reserved. + + + Permission to use, copy, modify, and distribute this Python software and + its associated documentation for any purpose without fee is hereby + granted, provided that the above copyright notice appears in all copies, + and that both that copyright notice and this permission notice appear in + supporting documentation, and that the name of neither Automatrix, + Bioreason or Mojam Media be used in advertising or publicity pertaining to + distribution of the software without specific, written prior permission. + + +UUencode and UUdecode functions +------------------------------- + +The :mod:`uu` module contains the following notice:: + + Copyright 1994 by Lance Ellinghouse + Cathedral City, California Republic, United States of America. + All Rights Reserved + Permission to use, copy, modify, and distribute this software and its + documentation for any purpose and without fee is hereby granted, + provided that the above copyright notice appear in all copies and that + both that copyright notice and this permission notice appear in + supporting documentation, and that the name of Lance Ellinghouse + not be used in advertising or publicity pertaining to distribution + of the software without specific, written prior permission. + LANCE ELLINGHOUSE DISCLAIMS ALL WARRANTIES WITH REGARD TO + THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS, IN NO EVENT SHALL LANCE ELLINGHOUSE CENTRUM BE LIABLE + FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT + OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + Modified by Jack Jansen, CWI, July 1995: + - Use binascii module to do the actual line-by-line conversion + between ascii and binary. This results in a 1000-fold speedup. The C + version is still 5 times faster, though. + - Arguments more compliant with Python standard + + +XML Remote Procedure Calls +-------------------------- + +The :mod:`xmlrpc.client` module contains the following notice:: + + The XML-RPC client interface is + + Copyright (c) 1999-2002 by Secret Labs AB + Copyright (c) 1999-2002 by Fredrik Lundh + + By obtaining, using, and/or copying this software and/or its + associated documentation, you agree that you have read, understood, + and will comply with the following terms and conditions: + + Permission to use, copy, modify, and distribute this software and + its associated documentation for any purpose and without fee is + hereby granted, provided that the above copyright notice appears in + all copies, and that both that copyright notice and this permission + notice appear in supporting documentation, and that the name of + Secret Labs AB or the author not be used in advertising or publicity + pertaining to distribution of the software without specific, written + prior permission. + + SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANT- + ABILITY AND FITNESS. IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR + BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY + DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + OF THIS SOFTWARE. + + +test_epoll +---------- + +The :mod:`test_epoll` module contains the following notice:: + + Copyright (c) 2001-2006 Twisted Matrix Laboratories. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Select kqueue +------------- + +The :mod:`select` module contains the following notice for the kqueue +interface:: + + Copyright (c) 2000 Doug White, 2006 James Knight, 2007 Christian Heimes + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + + +SipHash24 +--------- + +The file :file:`Python/pyhash.c` contains Marek Majkowski' implementation of +Dan Bernstein's SipHash24 algorithm. It contains the following note:: + + + Copyright (c) 2013 Marek Majkowski + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + + Original location: + https://github.com/majek/csiphash/ + + Solution inspired by code from: + Samuel Neves (supercop/crypto_auth/siphash24/little) + djb (supercop/crypto_auth/siphash24/little2) + Jean-Philippe Aumasson (https://131002.net/siphash/siphash24.c) + + +strtod and dtoa +--------------- + +The file :file:`Python/dtoa.c`, which supplies C functions dtoa and +strtod for conversion of C doubles to and from strings, is derived +from the file of the same name by David M. Gay, currently available +from http://www.netlib.org/fp/. The original file, as retrieved on +March 16, 2009, contains the following copyright and licensing +notice:: + + /**************************************************************** + * + * The author of this software is David M. Gay. + * + * Copyright (c) 1991, 2000, 2001 by Lucent Technologies. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose without fee is hereby granted, provided that this entire notice + * is included in all copies of any software which is or includes a copy + * or modification of this software and in all copies of the supporting + * documentation for such software. + * + * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED + * WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR LUCENT MAKES ANY + * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY + * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. + * + ***************************************************************/ + +expat +----- + +The :mod:`pyexpat` extension is built using an included copy of the expat +sources unless the build is configured ``--with-system-expat``:: + + Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd + and Clark Cooper + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +cfuhash +------- + +The implementation of the hash table used by the :mod:`tracemalloc` is based +on the cfuhash project:: + + Copyright (c) 2005 Don Owens + All rights reserved. + + This code is released under the BSD license: + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + * Neither the name of the author nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + OF THE POSSIBILITY OF SUCH DAMAGE. + + +libmpdec +-------- + +The :mod:`_decimal` module is built using an included copy of the libmpdec +library unless the build is configured ``--with-system-libmpdec``:: + + Copyright (c) 2008-2020 Stefan Krah. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + +W3C C14N test suite +------------------- + +The C14N 2.0 test suite in the :mod:`test` package +(``Lib/test/xmltestdata/c14n-20/``) was retrieved from the W3C website at +https://www.w3.org/TR/xml-c14n2-testcases/ and is distributed under the +3-clause BSD license:: + + Copyright (c) 2013 W3C(R) (MIT, ERCIM, Keio, Beihang), + All Rights Reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + * Redistributions of works must retain the original copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the original copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the W3C nor the names of its contributors may be + used to endorse or promote products derived from this work without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.expat.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.expat.txt new file mode 100644 index 000000000..ce9e59392 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.expat.txt @@ -0,0 +1,21 @@ +Copyright (c) 1998-2000 Thai Open Source Software Center Ltd and Clark Cooper +Copyright (c) 2001-2022 Expat maintainers + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libX11.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libX11.txt new file mode 100644 index 000000000..b065516e4 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libX11.txt @@ -0,0 +1,942 @@ +The following is the 'standard copyright' agreed upon by most contributors, +and is currently the canonical license preferred by the X.Org Foundation. +This is a slight variant of the common MIT license form published by the +Open Source Initiative at http://www.opensource.org/licenses/mit-license.php + +Copyright holders of new code should use this license statement where +possible, and insert their name to this list. Please sort by surname +for people, and by the full name for other entities (e.g. Juliusz +Chroboczek sorts before Intel Corporation sorts before Daniel Stone). + +See each individual source file or directory for the license that applies +to that file. + +Copyright (C) 2003-2006,2008 Jamey Sharp, Josh Triplett +Copyright © 2009 Red Hat, Inc. +Copyright 1990-1992,1999,2000,2004,2009,2010 Oracle and/or its affiliates. +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next +paragraph) shall be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + + ---------------------------------------------------------------------- + +The following licenses are 'legacy' - usually MIT/X11 licenses with the name +of the copyright holder(s) in the license statement: + +Copyright 1984-1994, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from The Open Group. + +X Window System is a trademark of The Open Group. + + ---------------------------------------- + +Copyright 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium +Copyright 2000 The XFree86 Project, Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the X Consortium shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization +from the X Consortium. + +Copyright 1985, 1986, 1987, 1988, 1989, 1990, 1991 by +Digital Equipment Corporation + +Portions Copyright 1990, 1991 by Tektronix, Inc. + +Permission to use, copy, modify and distribute this documentation for +any purpose and without fee is hereby granted, provided that the above +copyright notice appears in all copies and that both that copyright notice +and this permission notice appear in all copies, and that the names of +Digital and Tektronix not be used in in advertising or publicity pertaining +to this documentation without specific, written prior permission. +Digital and Tektronix makes no representations about the suitability +of this documentation for any purpose. +It is provided ``as is'' without express or implied warranty. + + ---------------------------------------- + +Copyright (c) 1999-2000 Free Software Foundation, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +FREE SOFTWARE FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the Free Software Foundation +shall not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization from the +Free Software Foundation. + + ---------------------------------------- + +Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. + All Rights Reserved + +This file is a component of an X Window System-specific implementation +of Xcms based on the TekColor Color Management System. TekColor is a +trademark of Tektronix, Inc. The term "TekHVC" designates a particular +color space that is the subject of U.S. Patent No. 4,985,853 (equivalent +foreign patents pending). Permission is hereby granted to use, copy, +modify, sell, and otherwise distribute this software and its +documentation for any purpose and without fee, provided that: + +1. This copyright, permission, and disclaimer notice is reproduced in + all copies of this software and any modification thereof and in + supporting documentation; +2. Any color-handling application which displays TekHVC color + cooordinates identifies these as TekHVC color coordinates in any + interface that displays these coordinates and in any associated + documentation; +3. The term "TekHVC" is always used, and is only used, in association + with the mathematical derivations of the TekHVC Color Space, + including those provided in this file and any equivalent pathways and + mathematical derivations, regardless of digital (e.g., floating point + or integer) representation. + +Tektronix makes no representation about the suitability of this software +for any purpose. It is provided "as is" and with all faults. + +TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, +INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF +CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +(c) Copyright 1995 FUJITSU LIMITED +This is source code modified by FUJITSU LIMITED under the Joint +Development Agreement for the CDE/Motif PST. + + ---------------------------------------- + +Copyright 1992 by Oki Technosystems Laboratory, Inc. +Copyright 1992 by Fuji Xerox Co., Ltd. + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of Oki Technosystems +Laboratory and Fuji Xerox not be used in advertising or publicity +pertaining to distribution of the software without specific, written +prior permission. +Oki Technosystems Laboratory and Fuji Xerox make no representations +about the suitability of this software for any purpose. It is provided +"as is" without express or implied warranty. + +OKI TECHNOSYSTEMS LABORATORY AND FUJI XEROX DISCLAIM ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL OKI TECHNOSYSTEMS +LABORATORY AND FUJI XEROX BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE +OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1990, 1991, 1992, 1993, 1994 by FUJITSU LIMITED + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of FUJITSU LIMITED +not be used in advertising or publicity pertaining to distribution +of the software without specific, written prior permission. +FUJITSU LIMITED makes no representations about the suitability of +this software for any purpose. +It is provided "as is" without express or implied warranty. + +FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + + +Copyright (c) 1995 David E. Wexelblat. All rights reserved + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL DAVID E. WEXELBLAT BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of David E. Wexelblat shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization +from David E. Wexelblat. + + ---------------------------------------- + +Copyright 1990, 1991 by OMRON Corporation + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name OMRON not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. OMRON makes no representations +about the suitability of this software for any purpose. It is provided +"as is" without express or implied warranty. + +OMRON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL OMRON BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTUOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1985, 1986, 1987, 1988, 1989, 1990, 1991 by +Digital Equipment Corporation + +Portions Copyright 1990, 1991 by Tektronix, Inc + +Rewritten for X.org by Chris Lee + +Permission to use, copy, modify, distribute, and sell this documentation +for any purpose and without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. +Chris Lee makes no representations about the suitability for any purpose +of the information in this document. It is provided \`\`as-is'' without +express or implied warranty. + + ---------------------------------------- + +Copyright 1993 by Digital Equipment Corporation, Maynard, Massachusetts, +Copyright 1994 by FUJITSU LIMITED +Copyright 1994 by Sony Corporation + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the names of Digital, FUJITSU +LIMITED and Sony Corporation not be used in advertising or publicity +pertaining to distribution of the software without specific, written +prior permission. + +DIGITAL, FUJITSU LIMITED AND SONY CORPORATION DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL, FUJITSU LIMITED +AND SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + + +Copyright 1991 by the Open Software Foundation + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of Open Software Foundation +not be used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. Open Software +Foundation makes no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +OPEN SOFTWARE FOUNDATION DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL OPEN SOFTWARE FOUNDATIONN BE +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1990, 1991, 1992,1993, 1994 by FUJITSU LIMITED +Copyright 1993, 1994 by Sony Corporation + +Permission to use, copy, modify, distribute, and sell this software and +its documentation for any purpose is hereby granted without fee, provided +that the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of FUJITSU LIMITED and Sony Corporation +not be used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. FUJITSU LIMITED and +Sony Corporation makes no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +FUJITSU LIMITED AND SONY CORPORATION DISCLAIMS ALL WARRANTIES WITH REGARD +TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL FUJITSU LIMITED OR SONY CORPORATION BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE +USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright (c) 1993, 1995 by Silicon Graphics Computer Systems, Inc. + +Permission to use, copy, modify, and distribute this +software and its documentation for any purpose and without +fee is hereby granted, provided that the above copyright +notice appear in all copies and that both that copyright +notice and this permission notice appear in supporting +documentation, and that the name of Silicon Graphics not be +used in advertising or publicity pertaining to distribution +of the software without specific prior written permission. +Silicon Graphics makes no representation about the suitability +of this software for any purpose. It is provided "as is" +without any express or implied warranty. + +SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS +SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON +GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH +THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1991, 1992, 1993, 1994 by FUJITSU LIMITED +Copyright 1993 by Digital Equipment Corporation + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of FUJITSU LIMITED and +Digital Equipment Corporation not be used in advertising or publicity +pertaining to distribution of the software without specific, written +prior permission. FUJITSU LIMITED and Digital Equipment Corporation +makes no representations about the suitability of this software for +any purpose. It is provided "as is" without express or implied +warranty. + +FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION DISCLAIM ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION BE LIABLE FOR +ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1992, 1993 by FUJITSU LIMITED +Copyright 1993 by Fujitsu Open Systems Solutions, Inc. +Copyright 1994 by Sony Corporation + +Permission to use, copy, modify, distribute and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of FUJITSU LIMITED, +Fujitsu Open Systems Solutions, Inc. and Sony Corporation not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. +FUJITSU LIMITED, Fujitsu Open Systems Solutions, Inc. and +Sony Corporation make no representations about the suitability of +this software for any purpose. It is provided "as is" without +express or implied warranty. + +FUJITSU LIMITED, FUJITSU OPEN SYSTEMS SOLUTIONS, INC. AND SONY +CORPORATION DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, +IN NO EVENT SHALL FUJITSU OPEN SYSTEMS SOLUTIONS, INC., FUJITSU LIMITED +AND SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE +OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1987, 1988, 1990, 1993 by Digital Equipment Corporation, +Maynard, Massachusetts, + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Digital not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + + ---------------------------------------- + +Copyright 1993 by SunSoft, Inc. +Copyright 1999-2000 by Bruno Haible + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the names of SunSoft, Inc. and +Bruno Haible not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. SunSoft, Inc. and Bruno Haible make no representations +about the suitability of this software for any purpose. It is +provided "as is" without express or implied warranty. + +SunSoft Inc. AND Bruno Haible DISCLAIM ALL WARRANTIES WITH REGARD +TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS, IN NO EVENT SHALL SunSoft, Inc. OR Bruno Haible BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1991 by the Open Software Foundation +Copyright 1993 by the TOSHIBA Corp. + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the names of Open Software Foundation and TOSHIBA +not be used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. Open Software +Foundation and TOSHIBA make no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +OPEN SOFTWARE FOUNDATION AND TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL OPEN SOFTWARE FOUNDATIONN OR TOSHIBA BE +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1988 by Wyse Technology, Inc., San Jose, Ca., + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name Wyse not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +WYSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + + ---------------------------------------- + + +Copyright 1991 by the Open Software Foundation +Copyright 1993, 1994 by the Sony Corporation + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the names of Open Software Foundation and +Sony Corporation not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior permission. +Open Software Foundation and Sony Corporation make no +representations about the suitability of this software for any purpose. +It is provided "as is" without express or implied warranty. + +OPEN SOFTWARE FOUNDATION AND SONY CORPORATION DISCLAIM ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL OPEN +SOFTWARE FOUNDATIONN OR SONY CORPORATION BE LIABLE FOR ANY SPECIAL, +INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1992, 1993 by FUJITSU LIMITED +Copyright 1993 by Fujitsu Open Systems Solutions, Inc. + +Permission to use, copy, modify, distribute and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of FUJITSU LIMITED and +Fujitsu Open Systems Solutions, Inc. not be used in advertising or +publicity pertaining to distribution of the software without specific, +written prior permission. +FUJITSU LIMITED and Fujitsu Open Systems Solutions, Inc. makes no +representations about the suitability of this software for any purpose. +It is provided "as is" without express or implied warranty. + +FUJITSU LIMITED AND FUJITSU OPEN SYSTEMS SOLUTIONS, INC. DISCLAIMS ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU OPEN SYSTEMS +SOLUTIONS, INC. AND FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT +OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE +OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1993, 1994 by Sony Corporation + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of Sony Corporation +not be used in advertising or publicity pertaining to distribution +of the software without specific, written prior permission. +Sony Corporation makes no representations about the suitability of +this software for any purpose. It is provided "as is" without +express or implied warranty. + +SONY CORPORATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1986, 1998 The Open Group +Copyright (c) 2000 The XFree86 Project, Inc. + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +X CONSORTIUM OR THE XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +Except as contained in this notice, the name of the X Consortium or of the +XFree86 Project shall not be used in advertising or otherwise to promote the +sale, use or other dealings in this Software without prior written +authorization from the X Consortium and the XFree86 Project. + + ---------------------------------------- + +Copyright 1990, 1991 by OMRON Corporation, NTT Software Corporation, + and Nippon Telegraph and Telephone Corporation +Copyright 1991 by the Open Software Foundation +Copyright 1993 by the FUJITSU LIMITED + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the names of OMRON, NTT Software, NTT, and +Open Software Foundation not be used in advertising or publicity +pertaining to distribution of the software without specific, +written prior permission. OMRON, NTT Software, NTT, and Open Software +Foundation make no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +OMRON, NTT SOFTWARE, NTT, AND OPEN SOFTWARE FOUNDATION +DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT +SHALL OMRON, NTT SOFTWARE, NTT, OR OPEN SOFTWARE FOUNDATION BE +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1988 by Wyse Technology, Inc., San Jose, Ca, +Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts, + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name Digital not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL AND WYSE DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL DIGITAL OR WYSE BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + + +Copyright 1991, 1992 by Fuji Xerox Co., Ltd. +Copyright 1992, 1993, 1994 by FUJITSU LIMITED + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of Fuji Xerox, +FUJITSU LIMITED not be used in advertising or publicity pertaining +to distribution of the software without specific, written prior +permission. Fuji Xerox, FUJITSU LIMITED make no representations +about the suitability of this software for any purpose. +It is provided "as is" without express or implied warranty. + +FUJI XEROX, FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJI XEROX, +FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA +OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 2006 Josh Triplett + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + + ---------------------------------------- + +(c) Copyright 1996 by Sebastien Marineau and Holger Veit + + + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +HOLGER VEIT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +Except as contained in this notice, the name of Sebastien Marineau or Holger Veit +shall not be used in advertising or otherwise to promote the sale, use or other +dealings in this Software without prior written authorization from Holger Veit or +Sebastien Marineau. + + ---------------------------------------- + +Copyright 1990, 1991 by OMRON Corporation, NTT Software Corporation, + and Nippon Telegraph and Telephone Corporation +Copyright 1991 by the Open Software Foundation +Copyright 1993 by the TOSHIBA Corp. +Copyright 1993, 1994 by Sony Corporation +Copyright 1993, 1994 by the FUJITSU LIMITED + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the names of OMRON, NTT Software, NTT, Open +Software Foundation, and Sony Corporation not be used in advertising +or publicity pertaining to distribution of the software without specific, +written prior permission. OMRON, NTT Software, NTT, Open Software +Foundation, and Sony Corporation make no representations about the +suitability of this software for any purpose. It is provided "as is" +without express or implied warranty. + +OMRON, NTT SOFTWARE, NTT, OPEN SOFTWARE FOUNDATION, AND SONY +CORPORATION DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT +SHALL OMRON, NTT SOFTWARE, NTT, OPEN SOFTWARE FOUNDATION, OR SONY +CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 2000 by Bruno Haible + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of Bruno Haible not +be used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. Bruno Haible +makes no representations about the suitability of this software for +any purpose. It is provided "as is" without express or implied +warranty. + +Bruno Haible DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN +NO EVENT SHALL Bruno Haible BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE +OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright © 2003 Keith Packard + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of Keith Packard not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. Keith Packard makes no +representations about the suitability of this software for any purpose. It +is provided "as is" without express or implied warranty. + +KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright (c) 2007-2009, Troy D. Hanson +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + ---------------------------------------- + +Copyright 1992, 1993 by TOSHIBA Corp. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, provided +that the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of TOSHIBA not be used in advertising +or publicity pertaining to distribution of the software without specific, +written prior permission. TOSHIBA make no representations about the +suitability of this software for any purpose. It is provided "as is" +without express or implied warranty. + +TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + + + ---------------------------------------- + +Copyright IBM Corporation 1993 + +All Rights Reserved + +License to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of IBM not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS, AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS, IN NO EVENT SHALL +IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + + ---------------------------------------- + +Copyright 1990, 1991 by OMRON Corporation, NTT Software Corporation, + and Nippon Telegraph and Telephone Corporation + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the names of OMRON, NTT Software, and NTT +not be used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. OMRON, NTT Software, +and NTT make no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +OMRON, NTT SOFTWARE, AND NTT, DISCLAIM ALL WARRANTIES WITH REGARD +TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS, IN NO EVENT SHALL OMRON, NTT SOFTWARE, OR NTT, BE +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libXau.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libXau.txt new file mode 100644 index 000000000..64492ad80 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libXau.txt @@ -0,0 +1,21 @@ +Copyright 1988, 1993, 1994, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from The Open Group. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libedit.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libedit.txt new file mode 100644 index 000000000..52c8707dc --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libedit.txt @@ -0,0 +1,29 @@ +Copyright (c) 1992, 1993 + The Regents of the University of California. All rights reserved. + +This code is derived from software contributed to Berkeley by +Christos Zoulas of Cornell University. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libffi.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libffi.txt new file mode 100644 index 000000000..acb2f7a07 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libffi.txt @@ -0,0 +1,21 @@ +libffi - Copyright (c) 1996-2019 Anthony Green, Red Hat, Inc and others. +See source files for details. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +``Software''), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.liblzma.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.liblzma.txt new file mode 100644 index 000000000..2d7885199 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.liblzma.txt @@ -0,0 +1,13 @@ +Copyright (C) The XZ Utils authors and contributors + +Permission to use, copy, modify, and/or distribute this +software for any purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL +THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libuuid.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libuuid.txt new file mode 100644 index 000000000..ec87a77f1 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libuuid.txt @@ -0,0 +1,27 @@ +Copyright (C) 1996, 1997 Theodore Ts'o. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, and the entire permission notice in its entirety, + including the disclaimer of warranties. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote + products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF +WHICH ARE HEREBY DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libxcb.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libxcb.txt new file mode 100644 index 000000000..54bfbe5b0 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libxcb.txt @@ -0,0 +1,30 @@ +Copyright (C) 2001-2006 Bart Massey, Jamey Sharp, and Josh Triplett. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, +sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall +be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the names of the authors +or their institutions shall not be used in advertising or +otherwise to promote the sale, use or other dealings in this +Software without prior written authorization from the +authors. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.mpdecimal.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.mpdecimal.txt new file mode 100644 index 000000000..c7688a928 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.mpdecimal.txt @@ -0,0 +1,24 @@ +Copyright (c) 2008-2020 Stefan Krah. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.ncurses.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.ncurses.txt new file mode 100644 index 000000000..3a2297536 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.ncurses.txt @@ -0,0 +1,29 @@ +Copyright 2018-2020,2021 Thomas E. Dickey +Copyright 1998-2017,2018 Free Software Foundation, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, distribute with modifications, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR +THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name(s) of the above copyright +holders shall not be used in advertising or otherwise to promote the +sale, use or other dealings in this Software without prior written +authorization. + +-- vile:txtmode fc=72 +-- $Id: COPYING,v 1.10 2021/01/01 09:54:30 tom Exp $ diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.openssl-1.1.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.openssl-1.1.txt new file mode 100644 index 000000000..5b5ccdc96 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.openssl-1.1.txt @@ -0,0 +1,124 @@ + + LICENSE ISSUES + ============== + + The OpenSSL toolkit stays under a double license, i.e. both the conditions of + the OpenSSL License and the original SSLeay license apply to the toolkit. + See below for the actual license texts. + + OpenSSL License + --------------- + +/* ==================================================================== + * Copyright (c) 1998-2019 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + + Original SSLeay License + ----------------------- + +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.openssl-3.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.openssl-3.txt new file mode 100644 index 000000000..49cc83d2e --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.openssl-3.txt @@ -0,0 +1,177 @@ + + Apache License + Version 2.0, January 2004 + https://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.sqlite.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.sqlite.txt new file mode 100644 index 000000000..68b36ebd1 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.sqlite.txt @@ -0,0 +1,23 @@ +All of the code and documentation in SQLite has been dedicated to the public +domain by the authors. All code authors, and representatives of the companies +they work for, have signed affidavits dedicating their contributions to the +public domain and originals of those signed affidavits are stored in a firesafe +at the main offices of Hwaci. Anyone is free to copy, modify, publish, use, +compile, sell, or distribute the original SQLite code, either in source code form +or as a compiled binary, for any purpose, commercial or non-commercial, and by +any means. + +The previous paragraph applies to the deliverable code and documentation in +SQLite - those parts of the SQLite library that you actually bundle and ship +with a larger application. Some scripts used as part of the build process (for +example the "configure" scripts generated by autoconf) might fall under other +open-source licenses. Nothing from these build scripts ever reaches the final +deliverable SQLite library, however, and so the licenses associated with those +scripts should not be a factor in assessing your rights to copy and use the +SQLite library. + +All of the deliverable code in SQLite has been written from scratch. No code has +been taken from other projects or from the open internet. Every line of code can +be traced back to its original author, and all of those authors have public +domain dedications on file. So the SQLite code base is clean and is +uncontaminated with licensed code from other projects. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.tcl.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.tcl.txt new file mode 100644 index 000000000..d8049cd9e --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.tcl.txt @@ -0,0 +1,40 @@ +This software is copyrighted by the Regents of the University of +California, Sun Microsystems, Inc., Scriptics Corporation, ActiveState +Corporation and other parties. The following terms apply to all files +associated with the software unless explicitly disclaimed in +individual files. + +The authors hereby grant permission to use, copy, modify, distribute, +and license this software and its documentation for any purpose, provided +that existing copyright notices are retained in all copies and that this +notice is included verbatim in any distributions. No written agreement, +license, or royalty fee is required for any of the authorized uses. +Modifications to this software may be copyrighted by their authors +and need not follow the licensing terms described here, provided that +the new terms are clearly indicated on the first page of each file where +they apply. + +IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +MODIFICATIONS. + +GOVERNMENT USE: If you are acquiring this software on behalf of the +U.S. government, the Government shall have only "Restricted Rights" +in the software and related documentation as defined in the Federal +Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you +are acquiring the software on behalf of the Department of Defense, the +software shall be classified as "Commercial Computer Software" and the +Government shall have only "Restricted Rights" as defined in Clause +252.227-7014 (b) (3) of DFARs. Notwithstanding the foregoing, the +authors grant the U.S. Government and others acting in its behalf +permission to use and distribute the software in accordance with the +terms specified in this license. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.tix.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.tix.txt new file mode 100644 index 000000000..5323a3fc3 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.tix.txt @@ -0,0 +1,54 @@ +Copyright (c) 1993-1999 Ioi Kim Lam. +Copyright (c) 2000-2001 Tix Project Group. +Copyright (c) 2004 ActiveState + +This software is copyrighted by the above entities +and other parties. The following terms apply to all files associated +with the software unless explicitly disclaimed in individual files. + +The authors hereby grant permission to use, copy, modify, distribute, +and license this software and its documentation for any purpose, provided +that existing copyright notices are retained in all copies and that this +notice is included verbatim in any distributions. No written agreement, +license, or royalty fee is required for any of the authorized uses. +Modifications to this software may be copyrighted by their authors +and need not follow the licensing terms described here, provided that +the new terms are clearly indicated on the first page of each file where +they apply. + +IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +MODIFICATIONS. + +GOVERNMENT USE: If you are acquiring this software on behalf of the +U.S. government, the Government shall have only "Restricted Rights" +in the software and related documentation as defined in the Federal +Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you +are acquiring the software on behalf of the Department of Defense, the +software shall be classified as "Commercial Computer Software" and the +Government shall have only "Restricted Rights" as defined in Clause +252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the +authors grant the U.S. Government and others acting in its behalf +permission to use and distribute the software in accordance with the +terms specified in this license. + +---------------------------------------------------------------------- + +Parts of this software are based on the Tcl/Tk software copyrighted by +the Regents of the University of California, Sun Microsystems, Inc., +and other parties. The original license terms of the Tcl/Tk software +distribution is included in the file docs/license.tcltk. + +Parts of this software are based on the HTML Library software +copyrighted by Sun Microsystems, Inc. The original license terms of +the HTML Library software distribution is included in the file +docs/license.html_lib. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.zlib.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.zlib.txt new file mode 100644 index 000000000..5eb28a147 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.zlib.txt @@ -0,0 +1,21 @@ + + Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/missing-declared-license-references.md b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/missing-declared-license-references.md new file mode 100644 index 000000000..88611f81c --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/missing-declared-license-references.md @@ -0,0 +1,28 @@ +# Missing declared upstream license references + +**Status:** Open release attribution blocker. Owner: Pumas release/licensing review. + +CodeRabbit identified a reference to `licenses/LICENSE.zstd.txt` in the Windows +CPython 3.14.7 `PYTHON.json` that is absent from the retained license files. +On 2026-09-29 the exact official Windows full archive was downloaded again: + +- Asset: `cpython-3.14.7+20260901-x86_64-pc-windows-msvc-pgo-full.tar.zst` +- SHA-256: `5363ec4aab59c24417f9877217aae95ca17f9ae6eb99c3bbfb25e4a76dcadafe` +- Size: 49,262,780 bytes; both size and digest match the retained manifest. +- The archive itself contains 19 `python/licenses/` files and omits the declared + zstd file. This is an upstream evidence gap, not an omitted extraction. + +The retained metadata and manifest remain byte-exact. Do not insert a guessed +license text or misrepresent an externally sourced file as an archive member. +The current inventory covers collected files; it does not certify every declared +reference. Audit of all three retained metadata records found: + +- `windows-x86_64-cpython-3.14.7`: `licenses/LICENSE.zstd.txt`. +- `macos-arm64-cpython-3.14.7`: `licenses/LICENSE.zlib-ng.txt`, `licenses/LICENSE.zstd.txt`. +- `linux-x86_64-cpython-3.14.7`: `licenses/LICENSE.zlib-ng.txt`, `licenses/LICENSE.zstd.txt`. + +Before release acceptance, obtain authoritative terms and exact source/version +mapping for the missing bundled component from the upstream provider, retain +separate provenance for any supplemental legal files, and update the notice +generator and inventory from that evidence. Native runtime test success does +not close this licensing gate. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive-manifest.json b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive-manifest.json new file mode 100644 index 000000000..a1bfc5887 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive-manifest.json @@ -0,0 +1,114 @@ +{ + "archive_name": "cpython-3.14.7+20260901-x86_64-pc-windows-msvc-pgo-full.tar.zst", + "archive_sha256": "5363ec4aab59c24417f9877217aae95ca17f9ae6eb99c3bbfb25e4a76dcadafe", + "archive_size": 49262780, + "archive_url": "https://github.com/astral-sh/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-x86_64-pc-windows-msvc-pgo-full.tar.zst", + "asset_id": 539917754, + "files": [ + { + "declared": false, + "path": "licenses/LICENSE.bdb.txt", + "sha256": "8f2d533ab34899499d5b07f209854b101b17dba2c69f3251860aecf3e4005faa" + }, + { + "declared": false, + "path": "licenses/LICENSE.bzip2.txt", + "sha256": "bd5628cc76fb0ebf9c657d1dd4d1a240a1a7b216c31663e7bbf1131c0b70a910" + }, + { + "declared": true, + "path": "licenses/LICENSE.cpython.txt", + "sha256": "8fe98bf9822926d854f56ffd8d97877d8b942617aa44eb7ea77fd99e22f2537e" + }, + { + "declared": false, + "path": "licenses/LICENSE.expat.txt", + "sha256": "8a9cfe4b5924f4b25881aa0c9f5e4561c5f31065d0c4a13cdcdbcf917edf39aa" + }, + { + "declared": false, + "path": "licenses/LICENSE.libX11.txt", + "sha256": "f353accfe2976df31ea297a77d1d454bd51ef6be8c3df39bd6aca95901579357" + }, + { + "declared": false, + "path": "licenses/LICENSE.libXau.txt", + "sha256": "cec808cd2163fccdc8de4a91d526490777afbaeea060e1168c40a804694b7444" + }, + { + "declared": false, + "path": "licenses/LICENSE.libedit.txt", + "sha256": "d9932ccdd42eccf6cdded7bcb35b088e64cfc7c24d355af2cc0d02edb6b637d3" + }, + { + "declared": false, + "path": "licenses/LICENSE.libffi.txt", + "sha256": "9afb8970cd29fc1031fa647278e4bef613399e2e3468a1e3a397f4d158c6101c" + }, + { + "declared": false, + "path": "licenses/LICENSE.liblzma.txt", + "sha256": "d87d218dd908b3243ec4cbc72af400e5b7437513ea9d9229291d0812b8464fec" + }, + { + "declared": false, + "path": "licenses/LICENSE.libuuid.txt", + "sha256": "cbccaa3efe07a9a602751375085be572d4410a250b996716fbe8c5255c7ec6f2" + }, + { + "declared": false, + "path": "licenses/LICENSE.libxcb.txt", + "sha256": "29a9539190e6de1af5fd06a9139c7103137cd1f9290b08c7b11bce89c01c14d2" + }, + { + "declared": false, + "path": "licenses/LICENSE.mpdecimal.txt", + "sha256": "f094277cd46e1f6e4d87916cc4b51e22f613d45eb81f48231c3cb7caf8fc8a6a" + }, + { + "declared": false, + "path": "licenses/LICENSE.ncurses.txt", + "sha256": "4f571cad3ea6c888bf0a7092e5b215dddb3142e9e3f1857fd5fac6cf13d345d7" + }, + { + "declared": false, + "path": "licenses/LICENSE.openssl-1.1.txt", + "sha256": "ad89e3fed746413af1d34d5353978ee1520cedd361c853f8022e7bb210ac6b31" + }, + { + "declared": false, + "path": "licenses/LICENSE.openssl-3.txt", + "sha256": "ed72ce2b51ee58f117e5a021e2e04af158857f40269fbc03491f0b2a99dbcc96" + }, + { + "declared": false, + "path": "licenses/LICENSE.sqlite.txt", + "sha256": "d8eb9aba7ef6b5ed06cb3ec19a7242316af2e5933c638eb67fb781c13884e01d" + }, + { + "declared": false, + "path": "licenses/LICENSE.tcl.txt", + "sha256": "41613eabfc08921a7da9c4bfd7f3ce5d5406f55214b253d89f392ed86eebeb8f" + }, + { + "declared": false, + "path": "licenses/LICENSE.tix.txt", + "sha256": "8cdff3addb9e9eb108c78e2cf5e05f26b216c098304945733bbec382b2eaef66" + }, + { + "declared": false, + "path": "licenses/LICENSE.zlib.txt", + "sha256": "365e36720db366054863235aea5d6f440142ab968834bfaf81fa9d187c99b9b8" + } + ], + "mapping_authority": "https://github.com/astral-sh/python-build-standalone/blob/20260901/src/release.rs", + "python_json": { + "path": "PYTHON.json", + "sha256": "621218c8ca0ff0d9a92ba0533a2d460d6832cc277286852800e605e8062ec401", + "size": 68368 + }, + "release_id": 380696527, + "scope": "selected_full_archive_license_directory_and_declared_references", + "source_url": "https://releases.astral.sh/github/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-x86_64-pc-windows-msvc-install_only_stripped.tar.gz", + "target": "x86_64-pc-windows-msvc" +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/PYTHON.json b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/PYTHON.json new file mode 100644 index 000000000..8384337ae --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/PYTHON.json @@ -0,0 +1,1822 @@ +{ + "build_info": { + "core": { + "links": [ + { + "name": "version", + "system": true + }, + { + "name": "ws2_32", + "system": true + }, + { + "name": "Ole32", + "system": true + }, + { + "name": "OleAut32", + "system": true + }, + { + "name": "User32", + "system": true + }, + { + "name": "pathcch", + "system": true + } + ], + "objs": [ + "build/core/Hacl_HMAC.obj", + "build/core/Hacl_Hash_Blake2b.obj", + "build/core/Hacl_Hash_Blake2b_Simd256.obj", + "build/core/Hacl_Hash_Blake2s.obj", + "build/core/Hacl_Hash_Blake2s_Simd128.obj", + "build/core/Hacl_Hash_MD5.obj", + "build/core/Hacl_Hash_SHA1.obj", + "build/core/Hacl_Hash_SHA2.obj", + "build/core/Hacl_Hash_SHA3.obj", + "build/core/Hacl_Streaming_HMAC.obj", + "build/core/Lib_Memzero0.obj", + "build/core/Python-ast.obj", + "build/core/Python-tokenize.obj", + "build/core/_abc.obj", + "build/core/_bisectmodule.obj", + "build/core/_codecs_cn.obj", + "build/core/_codecs_hk.obj", + "build/core/_codecs_iso2022.obj", + "build/core/_codecs_jp.obj", + "build/core/_codecs_kr.obj", + "build/core/_codecs_tw.obj", + "build/core/_codecsmodule.obj", + "build/core/_collectionsmodule.obj", + "build/core/_contextvars.obj", + "build/core/_csv.obj", + "build/core/_datetimemodule.obj", + "build/core/_functoolsmodule.obj", + "build/core/_heapqmodule.obj", + "build/core/_interpchannelsmodule.obj", + "build/core/_interpqueuesmodule.obj", + "build/core/_interpretersmodule.obj", + "build/core/_iomodule.obj", + "build/core/_json.obj", + "build/core/_localemodule.obj", + "build/core/_lsprof.obj", + "build/core/_opcode.obj", + "build/core/_operator.obj", + "build/core/_pickle.obj", + "build/core/_randommodule.obj", + "build/core/_stat.obj", + "build/core/_statisticsmodule.obj", + "build/core/_struct.obj", + "build/core/_suggestions.obj", + "build/core/_sysconfig.obj", + "build/core/_threadmodule.obj", + "build/core/_tracemalloc.obj", + "build/core/_typesmodule.obj", + "build/core/_typingmodule.obj", + "build/core/_warnings.obj", + "build/core/_weakref.obj", + "build/core/_winapi.obj", + "build/core/abstract.obj", + "build/core/action_helpers.obj", + "build/core/arraymodule.obj", + "build/core/asdl.obj", + "build/core/assemble.obj", + "build/core/ast.obj", + "build/core/ast_preprocess.obj", + "build/core/ast_unparse.obj", + "build/core/atexitmodule.obj", + "build/core/binascii.obj", + "build/core/blake2module.obj", + "build/core/bltinmodule.obj", + "build/core/boolobject.obj", + "build/core/bootstrap_hash.obj", + "build/core/brc.obj", + "build/core/buffer.obj", + "build/core/bufferedio.obj", + "build/core/bytearrayobject.obj", + "build/core/bytes_methods.obj", + "build/core/bytesio.obj", + "build/core/bytesobject.obj", + "build/core/call.obj", + "build/core/capsule.obj", + "build/core/cellobject.obj", + "build/core/ceval.obj", + "build/core/ceval_gil.obj", + "build/core/classobject.obj", + "build/core/cmathmodule.obj", + "build/core/codecs.obj", + "build/core/codegen.obj", + "build/core/codeobject.obj", + "build/core/compile.obj", + "build/core/complexobject.obj", + "build/core/config.obj", + "build/core/context.obj", + "build/core/critical_section.obj", + "build/core/crossinterp.obj", + "build/core/descrobject.obj", + "build/core/dictobject.obj", + "build/core/dl_nt.obj", + "build/core/dtoa.obj", + "build/core/dynamic_annotations.obj", + "build/core/dynload_win.obj", + "build/core/enumobject.obj", + "build/core/errnomodule.obj", + "build/core/errors.obj", + "build/core/exceptions.obj", + "build/core/faulthandler.obj", + "build/core/file_tokenizer.obj", + "build/core/fileio.obj", + "build/core/fileobject.obj", + "build/core/fileutils.obj", + "build/core/floatobject.obj", + "build/core/flowgraph.obj", + "build/core/formatter_unicode.obj", + "build/core/frame.obj", + "build/core/frameobject.obj", + "build/core/frozen.obj", + "build/core/funcobject.obj", + "build/core/future.obj", + "build/core/gc.obj", + "build/core/gc_free_threading.obj", + "build/core/gc_gil.obj", + "build/core/gcmodule.obj", + "build/core/genericaliasobject.obj", + "build/core/genobject.obj", + "build/core/getargs.obj", + "build/core/getbuildinfo.obj", + "build/core/getcompiler.obj", + "build/core/getcopyright.obj", + "build/core/getopt.obj", + "build/core/getpath.obj", + "build/core/getplatform.obj", + "build/core/getversion.obj", + "build/core/hamt.obj", + "build/core/hashtable.obj", + "build/core/helpers.obj", + "build/core/hmacmodule.obj", + "build/core/import.obj", + "build/core/importdl.obj", + "build/core/index_pool.obj", + "build/core/initconfig.obj", + "build/core/instruction_sequence.obj", + "build/core/instrumentation.obj", + "build/core/interpconfig.obj", + "build/core/interpolationobject.obj", + "build/core/intrinsics.obj", + "build/core/invalid_parameter_handler.obj", + "build/core/iobase.obj", + "build/core/iterobject.obj", + "build/core/itertoolsmodule.obj", + "build/core/jit.obj", + "build/core/legacy_tracing.obj", + "build/core/lexer.obj", + "build/core/listobject.obj", + "build/core/lock.obj", + "build/core/longobject.obj", + "build/core/main.obj", + "build/core/marshal.obj", + "build/core/mathmodule.obj", + "build/core/md5module.obj", + "build/core/memoryobject.obj", + "build/core/methodobject.obj", + "build/core/mmapmodule.obj", + "build/core/modsupport.obj", + "build/core/moduleobject.obj", + "build/core/msvcrtmodule.obj", + "build/core/multibytecodec.obj", + "build/core/myreadline.obj", + "build/core/mysnprintf.obj", + "build/core/mystrtoul.obj", + "build/core/namespaceobject.obj", + "build/core/object.obj", + "build/core/object_stack.obj", + "build/core/obmalloc.obj", + "build/core/odictobject.obj", + "build/core/optimizer.obj", + "build/core/optimizer_analysis.obj", + "build/core/optimizer_symbols.obj", + "build/core/parking_lot.obj", + "build/core/parser.obj", + "build/core/pathconfig.obj", + "build/core/peg_api.obj", + "build/core/pegen.obj", + "build/core/pegen_errors.obj", + "build/core/perf_jit_trampoline.obj", + "build/core/perf_trampoline.obj", + "build/core/picklebufobject.obj", + "build/core/posixmodule.obj", + "build/core/preconfig.obj", + "build/core/pyarena.obj", + "build/core/pyctype.obj", + "build/core/pyfpe.obj", + "build/core/pyhash.obj", + "build/core/pylifecycle.obj", + "build/core/pymath.obj", + "build/core/pystate.obj", + "build/core/pystrcmp.obj", + "build/core/pystrhex.obj", + "build/core/pystrtod.obj", + "build/core/pythonrun.obj", + "build/core/pytime.obj", + "build/core/qsbr.obj", + "build/core/rangeobject.obj", + "build/core/readline_tokenizer.obj", + "build/core/remote_debugging.obj", + "build/core/rotatingtree.obj", + "build/core/setobject.obj", + "build/core/sha1module.obj", + "build/core/sha2module.obj", + "build/core/sha3module.obj", + "build/core/signalmodule.obj", + "build/core/sliceobject.obj", + "build/core/specialize.obj", + "build/core/sre.obj", + "build/core/state.obj", + "build/core/string_parser.obj", + "build/core/string_tokenizer.obj", + "build/core/stringio.obj", + "build/core/structmember.obj", + "build/core/structseq.obj", + "build/core/suggestions.obj", + "build/core/symtable.obj", + "build/core/symtablemodule.obj", + "build/core/sysmodule.obj", + "build/core/templateobject.obj", + "build/core/textio.obj", + "build/core/thread.obj", + "build/core/timemodule.obj", + "build/core/token.obj", + "build/core/traceback.obj", + "build/core/tracemalloc.obj", + "build/core/tupleobject.obj", + "build/core/typeobject.obj", + "build/core/typevarobject.obj", + "build/core/unicodectype.obj", + "build/core/unicodeobject.obj", + "build/core/unionobject.obj", + "build/core/uniqueid.obj", + "build/core/utf8_tokenizer.obj", + "build/core/weakrefobject.obj", + "build/core/winconsoleio.obj", + "build/core/winreg.obj", + "build/core/xxsubtype.obj", + "build/core/zlibmodule.obj" + ], + "shared_lib": "install/python314.dll" + }, + "extensions": { + "_abc": [ + { + "in_core": true, + "init_fn": "PyInit__abc", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_ast": [ + { + "in_core": true, + "init_fn": "PyInit__ast", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_asyncio": [ + { + "in_core": false, + "init_fn": "PyInit__asyncio", + "links": [], + "objs": [ + "build/extensions/_asyncio/_asynciomodule.obj" + ], + "required": false, + "shared_lib": "install/DLLs/_asyncio.pyd", + "static_lib": null, + "variant": "default" + } + ], + "_bisect": [ + { + "in_core": true, + "init_fn": "PyInit__bisect", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_blake2": [ + { + "in_core": true, + "init_fn": "PyInit__blake2", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_bz2": [ + { + "in_core": false, + "init_fn": "PyInit__bz2", + "license_paths": [ + "licenses/LICENSE.bzip2.txt" + ], + "license_public_domain": null, + "licenses": [ + "bzip2-1.0.6" + ], + "links": [], + "objs": [ + "build/extensions/_bz2/_bz2module.obj", + "build/extensions/_bz2/blocksort.obj", + "build/extensions/_bz2/bzlib.obj", + "build/extensions/_bz2/compress.obj", + "build/extensions/_bz2/crctable.obj", + "build/extensions/_bz2/decompress.obj", + "build/extensions/_bz2/huffman.obj", + "build/extensions/_bz2/randtable.obj" + ], + "required": false, + "shared_lib": "install/DLLs/_bz2.pyd", + "static_lib": null, + "variant": "default" + } + ], + "_codecs": [ + { + "in_core": true, + "init_fn": "PyInit__codecs", + "links": [], + "objs": [], + "required": true, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_codecs_cn": [ + { + "in_core": true, + "init_fn": "PyInit__codecs_cn", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_codecs_hk": [ + { + "in_core": true, + "init_fn": "PyInit__codecs_hk", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_codecs_iso2022": [ + { + "in_core": true, + "init_fn": "PyInit__codecs_iso2022", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_codecs_jp": [ + { + "in_core": true, + "init_fn": "PyInit__codecs_jp", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_codecs_kr": [ + { + "in_core": true, + "init_fn": "PyInit__codecs_kr", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_codecs_tw": [ + { + "in_core": true, + "init_fn": "PyInit__codecs_tw", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_collections": [ + { + "in_core": true, + "init_fn": "PyInit__collections", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_contextvars": [ + { + "in_core": true, + "init_fn": "PyInit__contextvars", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_csv": [ + { + "in_core": true, + "init_fn": "PyInit__csv", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_ctypes": [ + { + "in_core": false, + "init_fn": "PyInit__ctypes", + "license_paths": [ + "licenses/LICENSE.libffi.txt" + ], + "license_public_domain": null, + "licenses": [ + "MIT" + ], + "links": [ + { + "name": "libffi-8", + "path_dynamic": "install/DLLs/libffi-8.dll" + } + ], + "objs": [ + "build/extensions/_ctypes/_ctypes.obj", + "build/extensions/_ctypes/callbacks.obj", + "build/extensions/_ctypes/callproc.obj", + "build/extensions/_ctypes/cfield.obj", + "build/extensions/_ctypes/malloc_closure.obj", + "build/extensions/_ctypes/stgdict.obj" + ], + "required": false, + "shared_lib": "install/DLLs/_ctypes.pyd", + "static_lib": null, + "variant": "default" + } + ], + "_datetime": [ + { + "in_core": true, + "init_fn": "PyInit__datetime", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_decimal": [ + { + "in_core": false, + "init_fn": "PyInit__decimal", + "links": [], + "objs": [ + "build/extensions/_decimal/_decimal.obj", + "build/extensions/_decimal/basearith.obj", + "build/extensions/_decimal/constants.obj", + "build/extensions/_decimal/context.obj", + "build/extensions/_decimal/convolute.obj", + "build/extensions/_decimal/crt.obj", + "build/extensions/_decimal/difradix2.obj", + "build/extensions/_decimal/fnt.obj", + "build/extensions/_decimal/fourstep.obj", + "build/extensions/_decimal/io.obj", + "build/extensions/_decimal/mpalloc.obj", + "build/extensions/_decimal/mpdecimal.obj", + "build/extensions/_decimal/numbertheory.obj", + "build/extensions/_decimal/sixstep.obj", + "build/extensions/_decimal/transpose.obj", + "build/extensions/_decimal/vcdiv64.obj" + ], + "required": false, + "shared_lib": "install/DLLs/_decimal.pyd", + "static_lib": null, + "variant": "default" + } + ], + "_elementtree": [ + { + "in_core": false, + "init_fn": "PyInit__elementtree", + "links": [], + "objs": [ + "build/extensions/_elementtree/_elementtree.obj", + "build/extensions/_elementtree/xmlparse.obj", + "build/extensions/_elementtree/xmlrole.obj", + "build/extensions/_elementtree/xmltok.obj" + ], + "required": false, + "shared_lib": "install/DLLs/_elementtree.pyd", + "static_lib": null, + "variant": "default" + } + ], + "_functools": [ + { + "in_core": true, + "init_fn": "PyInit__functools", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_hashlib": [ + { + "in_core": false, + "init_fn": "PyInit__hashlib", + "license_paths": [ + "licenses/LICENSE.openssl-3.txt" + ], + "license_public_domain": null, + "licenses": [ + "Apache-2.0" + ], + "links": [ + { + "name": "ws2_32", + "system": true + }, + { + "name": "libcrypto-1_1-x64", + "path_dynamic": "install/DLLs/libcrypto-1_1-x64.dll" + } + ], + "objs": [ + "build/extensions/_hashlib/_hashopenssl.obj" + ], + "required": false, + "shared_lib": "install/DLLs/_hashlib.pyd", + "static_lib": null, + "variant": "default" + } + ], + "_heapq": [ + { + "in_core": true, + "init_fn": "PyInit__heapq", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_hmac": [ + { + "in_core": true, + "init_fn": "PyInit__hmac", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_imp": [ + { + "in_core": true, + "init_fn": "PyInit__imp", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_interpchannels": [ + { + "in_core": true, + "init_fn": "PyInit__interpchannels", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_interpqueues": [ + { + "in_core": true, + "init_fn": "PyInit__interpqueues", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_interpreters": [ + { + "in_core": true, + "init_fn": "PyInit__interpreters", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_io": [ + { + "in_core": true, + "init_fn": "PyInit__io", + "links": [], + "objs": [], + "required": true, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_json": [ + { + "in_core": true, + "init_fn": "PyInit__json", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_locale": [ + { + "in_core": true, + "init_fn": "PyInit__locale", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_lsprof": [ + { + "in_core": true, + "init_fn": "PyInit__lsprof", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_lzma": [ + { + "in_core": false, + "init_fn": "PyInit__lzma", + "license_paths": [ + "licenses/LICENSE.liblzma.txt" + ], + "license_public_domain": null, + "licenses": [ + "0BSD" + ], + "links": [], + "objs": [ + "build/extensions/_lzma/_lzmamodule.obj" + ], + "required": false, + "shared_lib": "install/DLLs/_lzma.pyd", + "static_lib": null, + "variant": "default" + } + ], + "_md5": [ + { + "in_core": true, + "init_fn": "PyInit__md5", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_multibytecodec": [ + { + "in_core": true, + "init_fn": "PyInit__multibytecodec", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_multiprocessing": [ + { + "in_core": false, + "init_fn": "PyInit__multiprocessing", + "links": [ + { + "name": "ws2_32", + "system": true + } + ], + "objs": [ + "build/extensions/_multiprocessing/multiprocessing.obj", + "build/extensions/_multiprocessing/semaphore.obj" + ], + "required": false, + "shared_lib": "install/DLLs/_multiprocessing.pyd", + "static_lib": null, + "variant": "default" + } + ], + "_opcode": [ + { + "in_core": true, + "init_fn": "PyInit__opcode", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_operator": [ + { + "in_core": true, + "init_fn": "PyInit__operator", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_overlapped": [ + { + "in_core": false, + "init_fn": "PyInit__overlapped", + "links": [ + { + "name": "ws2_32", + "system": true + } + ], + "objs": [ + "build/extensions/_overlapped/overlapped.obj" + ], + "required": false, + "shared_lib": "install/DLLs/_overlapped.pyd", + "static_lib": null, + "variant": "default" + } + ], + "_pickle": [ + { + "in_core": true, + "init_fn": "PyInit__pickle", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_queue": [ + { + "in_core": false, + "init_fn": "PyInit__queue", + "links": [], + "objs": [ + "build/extensions/_queue/_queuemodule.obj" + ], + "required": false, + "shared_lib": "install/DLLs/_queue.pyd", + "static_lib": null, + "variant": "default" + } + ], + "_random": [ + { + "in_core": true, + "init_fn": "PyInit__random", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_remote_debugging": [ + { + "in_core": false, + "init_fn": "PyInit__remote_debugging", + "links": [], + "objs": [ + "build/extensions/_remote_debugging/_remote_debugging_module.obj" + ], + "required": false, + "shared_lib": "install/DLLs/_remote_debugging.pyd", + "static_lib": null, + "variant": "default" + } + ], + "_sha1": [ + { + "in_core": true, + "init_fn": "PyInit__sha1", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_sha2": [ + { + "in_core": true, + "init_fn": "PyInit__sha2", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_sha3": [ + { + "in_core": true, + "init_fn": "PyInit__sha3", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_signal": [ + { + "in_core": true, + "init_fn": "PyInit__signal", + "links": [], + "objs": [], + "required": true, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_socket": [ + { + "in_core": false, + "init_fn": "PyInit__socket", + "links": [ + { + "name": "Rpcrt4", + "system": true + }, + { + "name": "iphlpapi", + "system": true + }, + { + "name": "ws2_32", + "system": true + } + ], + "objs": [ + "build/extensions/_socket/socketmodule.obj" + ], + "required": false, + "shared_lib": "install/DLLs/_socket.pyd", + "static_lib": null, + "variant": "default" + } + ], + "_sqlite3": [ + { + "in_core": false, + "init_fn": "PyInit__sqlite3", + "license_paths": [ + "licenses/LICENSE.sqlite.txt" + ], + "license_public_domain": true, + "licenses": [], + "links": [ + { + "name": "sqlite3", + "path_dynamic": "install/DLLs/sqlite3.dll" + } + ], + "objs": [ + "build/extensions/_sqlite3/blob.obj", + "build/extensions/_sqlite3/connection.obj", + "build/extensions/_sqlite3/cursor.obj", + "build/extensions/_sqlite3/microprotocols.obj", + "build/extensions/_sqlite3/module.obj", + "build/extensions/_sqlite3/prepare_protocol.obj", + "build/extensions/_sqlite3/row.obj", + "build/extensions/_sqlite3/statement.obj", + "build/extensions/_sqlite3/util.obj" + ], + "required": false, + "shared_lib": "install/DLLs/_sqlite3.pyd", + "static_lib": null, + "variant": "default" + } + ], + "_sre": [ + { + "in_core": true, + "init_fn": "PyInit__sre", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_ssl": [ + { + "in_core": false, + "init_fn": "PyInit__ssl", + "license_paths": [ + "licenses/LICENSE.openssl-3.txt" + ], + "license_public_domain": null, + "licenses": [ + "Apache-2.0" + ], + "links": [ + { + "name": "crypt32", + "system": true + }, + { + "name": "ws2_32", + "system": true + }, + { + "name": "libcrypto-1_1-x64", + "path_dynamic": "install/DLLs/libcrypto-1_1-x64.dll" + }, + { + "name": "libssl-1_1-x64", + "path_dynamic": "install/DLLs/libssl-1_1-x64.dll" + } + ], + "objs": [ + "build/extensions/_ssl/_ssl.obj" + ], + "required": false, + "shared_lib": "install/DLLs/_ssl.pyd", + "static_lib": null, + "variant": "default" + } + ], + "_stat": [ + { + "in_core": true, + "init_fn": "PyInit__stat", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_statistics": [ + { + "in_core": true, + "init_fn": "PyInit__statistics", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_string": [ + { + "in_core": true, + "init_fn": "PyInit__string", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_struct": [ + { + "in_core": true, + "init_fn": "PyInit__struct", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_suggestions": [ + { + "in_core": true, + "init_fn": "PyInit__suggestions", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_symtable": [ + { + "in_core": true, + "init_fn": "PyInit__symtable", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_sysconfig": [ + { + "in_core": true, + "init_fn": "PyInit__sysconfig", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_thread": [ + { + "in_core": true, + "init_fn": "PyInit__thread", + "links": [], + "objs": [], + "required": true, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_tkinter": [ + { + "in_core": false, + "init_fn": "PyInit__tkinter", + "license_paths": [ + "licenses/LICENSE.tcl.txt", + "licenses/LICENSE.tix.txt" + ], + "license_public_domain": null, + "licenses": [ + "TCL" + ], + "links": [ + { + "name": "$(tcltk", + "system": true + }, + { + "name": "tcl86t", + "path_dynamic": "install/DLLs/tcl86t.dll" + }, + { + "name": "tk86t", + "path_dynamic": "install/DLLs/tk86t.dll" + } + ], + "objs": [ + "build/extensions/_tkinter/_tkinter.obj", + "build/extensions/_tkinter/tkappinit.obj" + ], + "required": false, + "shared_lib": "install/DLLs/_tkinter.pyd", + "static_lib": null, + "variant": "default" + } + ], + "_tokenize": [ + { + "in_core": true, + "init_fn": "PyInit__tokenize", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_tracemalloc": [ + { + "in_core": true, + "init_fn": "PyInit__tracemalloc", + "links": [], + "objs": [], + "required": true, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_types": [ + { + "in_core": true, + "init_fn": "PyInit__types", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_typing": [ + { + "in_core": true, + "init_fn": "PyInit__typing", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_uuid": [ + { + "in_core": false, + "init_fn": "PyInit__uuid", + "license_paths": [ + "licenses/LICENSE.libuuid.txt" + ], + "license_public_domain": null, + "licenses": [ + "BSD-3-Clause" + ], + "links": [ + { + "name": "rpcrt4", + "system": true + } + ], + "objs": [ + "build/extensions/_uuid/_uuidmodule.obj" + ], + "required": false, + "shared_lib": "install/DLLs/_uuid.pyd", + "static_lib": null, + "variant": "default" + } + ], + "_warnings": [ + { + "in_core": true, + "init_fn": "_PyWarnings_Init", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_weakref": [ + { + "in_core": true, + "init_fn": "PyInit__weakref", + "links": [], + "objs": [], + "required": true, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_winapi": [ + { + "in_core": true, + "init_fn": "PyInit__winapi", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "_wmi": [ + { + "in_core": false, + "init_fn": "PyInit__wmi", + "links": [ + { + "name": "propsys", + "system": true + }, + { + "name": "wbemuuid", + "system": true + } + ], + "objs": [ + "build/extensions/_wmi/_wmimodule.obj" + ], + "required": false, + "shared_lib": "install/DLLs/_wmi.pyd", + "static_lib": null, + "variant": "default" + } + ], + "_zoneinfo": [ + { + "in_core": false, + "init_fn": "PyInit__zoneinfo", + "links": [], + "objs": [ + "build/extensions/_zoneinfo/_zoneinfo.obj" + ], + "required": false, + "shared_lib": "install/DLLs/_zoneinfo.pyd", + "static_lib": null, + "variant": "default" + } + ], + "_zstd": [ + { + "in_core": false, + "init_fn": "PyInit__zstd", + "license_paths": [ + "licenses/LICENSE.zstd.txt" + ], + "license_public_domain": null, + "licenses": [ + "BSD-3-Clause" + ], + "links": [], + "objs": [ + "build/extensions/_zstd/_zstdmodule.obj", + "build/extensions/_zstd/compressor.obj", + "build/extensions/_zstd/cover.obj", + "build/extensions/_zstd/debug.obj", + "build/extensions/_zstd/decompressor.obj", + "build/extensions/_zstd/divsufsort.obj", + "build/extensions/_zstd/entropy_common.obj", + "build/extensions/_zstd/error_private.obj", + "build/extensions/_zstd/fastcover.obj", + "build/extensions/_zstd/fse_compress.obj", + "build/extensions/_zstd/fse_decompress.obj", + "build/extensions/_zstd/hist.obj", + "build/extensions/_zstd/huf_compress.obj", + "build/extensions/_zstd/huf_decompress.obj", + "build/extensions/_zstd/pool.obj", + "build/extensions/_zstd/threading.obj", + "build/extensions/_zstd/xxhash.obj", + "build/extensions/_zstd/zdict.obj", + "build/extensions/_zstd/zstd_common.obj", + "build/extensions/_zstd/zstd_compress.obj", + "build/extensions/_zstd/zstd_compress_literals.obj", + "build/extensions/_zstd/zstd_compress_sequences.obj", + "build/extensions/_zstd/zstd_compress_superblock.obj", + "build/extensions/_zstd/zstd_ddict.obj", + "build/extensions/_zstd/zstd_decompress.obj", + "build/extensions/_zstd/zstd_decompress_block.obj", + "build/extensions/_zstd/zstd_double_fast.obj", + "build/extensions/_zstd/zstd_fast.obj", + "build/extensions/_zstd/zstd_lazy.obj", + "build/extensions/_zstd/zstd_ldm.obj", + "build/extensions/_zstd/zstd_opt.obj", + "build/extensions/_zstd/zstd_preSplit.obj", + "build/extensions/_zstd/zstddict.obj", + "build/extensions/_zstd/zstdmt_compress.obj" + ], + "required": false, + "shared_lib": "install/DLLs/_zstd.pyd", + "static_lib": null, + "variant": "default" + } + ], + "array": [ + { + "in_core": true, + "init_fn": "PyInit_array", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "atexit": [ + { + "in_core": true, + "init_fn": "PyInit_atexit", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "binascii": [ + { + "in_core": true, + "init_fn": "PyInit_binascii", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "builtins": [ + { + "in_core": true, + "init_fn": "NULL", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "cmath": [ + { + "in_core": true, + "init_fn": "PyInit_cmath", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "errno": [ + { + "in_core": true, + "init_fn": "PyInit_errno", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "faulthandler": [ + { + "in_core": true, + "init_fn": "PyInit_faulthandler", + "links": [], + "objs": [], + "required": true, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "gc": [ + { + "in_core": true, + "init_fn": "PyInit_gc", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "itertools": [ + { + "in_core": true, + "init_fn": "PyInit_itertools", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "marshal": [ + { + "in_core": true, + "init_fn": "PyMarshal_Init", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "math": [ + { + "in_core": true, + "init_fn": "PyInit_math", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "mmap": [ + { + "in_core": true, + "init_fn": "PyInit_mmap", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "msvcrt": [ + { + "in_core": true, + "init_fn": "PyInit_msvcrt", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "nt": [ + { + "in_core": true, + "init_fn": "PyInit_nt", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "pyexpat": [ + { + "in_core": false, + "init_fn": "PyInit_pyexpat", + "links": [], + "objs": [ + "build/extensions/pyexpat/pyexpat.obj", + "build/extensions/pyexpat/xmlparse.obj", + "build/extensions/pyexpat/xmlrole.obj", + "build/extensions/pyexpat/xmltok.obj" + ], + "required": false, + "shared_lib": "install/DLLs/pyexpat.pyd", + "static_lib": null, + "variant": "default" + } + ], + "select": [ + { + "in_core": false, + "init_fn": "PyInit_select", + "links": [ + { + "name": "ws2_32", + "system": true + } + ], + "objs": [ + "build/extensions/select/selectmodule.obj" + ], + "required": false, + "shared_lib": "install/DLLs/select.pyd", + "static_lib": null, + "variant": "default" + } + ], + "sys": [ + { + "in_core": true, + "init_fn": "NULL", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "time": [ + { + "in_core": true, + "init_fn": "PyInit_time", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "unicodedata": [ + { + "in_core": false, + "init_fn": "PyInit_unicodedata", + "links": [], + "objs": [ + "build/extensions/unicodedata/unicodedata.obj" + ], + "required": false, + "shared_lib": "install/DLLs/unicodedata.pyd", + "static_lib": null, + "variant": "default" + } + ], + "winreg": [ + { + "in_core": true, + "init_fn": "PyInit_winreg", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "winsound": [ + { + "in_core": false, + "init_fn": "PyInit_winsound", + "links": [ + { + "name": "winmm", + "system": true + } + ], + "objs": [ + "build/extensions/winsound/winsound.obj" + ], + "required": false, + "shared_lib": "install/DLLs/winsound.pyd", + "static_lib": null, + "variant": "default" + } + ], + "xxsubtype": [ + { + "in_core": true, + "init_fn": "PyInit_xxsubtype", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ], + "zlib": [ + { + "in_core": true, + "init_fn": "PyInit_zlib", + "links": [], + "objs": [], + "required": false, + "shared_lib": null, + "static_lib": null, + "variant": "default" + } + ] + }, + "inittab_cflags": [ + "-DNDEBUG", + "-DPy_BUILD_CORE" + ], + "inittab_object": "build/core/config.obj", + "inittab_source": "build/core/config.c", + "object_file_format": "coff" + }, + "build_options": "pgo", + "crt_features": [ + "vcruntime:140" + ], + "libpython_link_mode": "shared", + "license_path": "licenses/LICENSE.cpython.txt", + "licenses": [ + "Python-2.0", + "CNRI-Python" + ], + "optimizations": "pgo", + "python_abi_tag": null, + "python_bytecode_magic_number": "2b0e0d0a", + "python_config_vars": { + "ABIFLAGS": "", + "BINDIR": "C:\\Users\\Administrator\\AppData\\Local\\Temp\\python-build-vfjc8efy\\out\\python\\install", + "BINLIBDEST": "C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\python-build-vfjc8efy\\out\\python\\install\\Lib", + "EXE": ".exe", + "EXT_SUFFIX": ".cp314-win_amd64.pyd", + "INCLUDEPY": "C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\python-build-vfjc8efy\\out\\python\\install\\Include", + "LDLIBRARY": "python314.dll", + "LIBDEST": "C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\python-build-vfjc8efy\\out\\python\\install\\Lib", + "LIBDIR": "C:\\Users\\Administrator\\AppData\\Local\\Temp\\python-build-vfjc8efy\\out\\python\\install\\libs", + "LIBRARY": "python314.dll", + "Py_DEBUG": "0", + "Py_GIL_DISABLED": "0", + "SOABI": "cp314-win_amd64", + "TZPATH": "", + "VERSION": "314", + "VPATH": "..\\..", + "abi_thread": "", + "abiflags": "", + "base": "C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\python-build-vfjc8efy\\out\\python\\install", + "exec_prefix": "C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\python-build-vfjc8efy\\out\\python\\install", + "implementation": "Python", + "implementation_lower": "python", + "installed_base": "C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\python-build-vfjc8efy\\out\\python\\install", + "installed_platbase": "C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\python-build-vfjc8efy\\out\\python\\install", + "platbase": "C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\python-build-vfjc8efy\\out\\python\\install", + "platlibdir": "DLLs", + "prefix": "C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\python-build-vfjc8efy\\out\\python\\install", + "projectbase": "C:\\Users\\Administrator\\AppData\\Local\\Temp\\python-build-vfjc8efy\\out\\python\\install", + "py_version": "3.14.7", + "py_version_nodot": "314", + "py_version_nodot_plat": "314", + "py_version_short": "3.14", + "srcdir": "C:\\Users\\Administrator\\AppData\\Local\\Temp\\python-build-vfjc8efy\\out\\python\\install", + "userbase": "C:\\Users\\Administrator\\AppData\\Roaming\\Python" + }, + "python_exe": "install/python.exe", + "python_extension_module_loading": [ + "builtin", + "shared-library" + ], + "python_implementation_cache_tag": "cpython-314", + "python_implementation_hex_version": 51251184, + "python_implementation_name": "cpython", + "python_implementation_version": [ + "3", + "14", + "7", + "final", + "0" + ], + "python_major_minor_version": "3.14", + "python_paths": { + "data": "install", + "include": "install/include", + "platinclude": "install/include", + "platlib": "install/Lib/site-packages", + "platstdlib": "install/Lib", + "purelib": "install/Lib/site-packages", + "scripts": "install/Scripts", + "stdlib": "install/Lib" + }, + "python_paths_abstract": { + "data": "{base}", + "include": "{installed_base}/Include", + "platinclude": "{installed_base}/Include", + "platlib": "{base}/Lib/site-packages", + "platstdlib": "{base}/Lib", + "purelib": "{base}/Lib/site-packages", + "scripts": "{base}/Scripts", + "stdlib": "{installed_base}/Lib" + }, + "python_platform_tag": "win-amd64", + "python_stdlib_test_packages": [ + "bsddb.test", + "ctypes.test", + "distutils.tests", + "email.test", + "idlelib.idle_test", + "json.tests", + "lib-tk.test", + "lib2to3.tests", + "sqlite3.test", + "test", + "tkinter.test", + "unittest.test" + ], + "python_suffixes": { + "bytecode": [ + ".pyc" + ], + "debug_bytecode": [ + ".pyc" + ], + "extension": [ + ".cp314-win_amd64.pyd", + ".pyd" + ], + "optimized_bytecode": [ + ".pyc" + ], + "source": [ + ".py", + ".pyw" + ] + }, + "python_symbol_visibility": "dllexport", + "python_tag": "cp314", + "python_version": "3.14.7", + "run_tests": "build/run_tests.py", + "target_triple": "x86_64-pc-windows-msvc", + "tcl_library_path": "install/tcl", + "tcl_library_paths": [ + "dde1.4", + "reg1.3", + "tcl8.6", + "tk8.6", + "tcl8", + "tix8.4.3" + ], + "version": "8" +} \ No newline at end of file diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.bdb.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.bdb.txt new file mode 100644 index 000000000..f2a722597 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.bdb.txt @@ -0,0 +1,126 @@ +The following is the license that applies to this copy of the Berkeley DB +software. For a license to use the Berkeley DB software under conditions +other than those described here, or to purchase support for this software, +please contact Oracle at berkeleydb-info_us@oracle.com. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +/* + * Copyright (c) 1990, 2013 Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Redistributions in any form must be accompanied by information on + * how to obtain complete source code for the DB software and any + * accompanying software that uses the DB software. The source code + * must either be included in the distribution or be available for no + * more than the cost of distribution plus a nominal fee, and must be + * freely redistributable under reasonable conditions. For an + * executable file, complete source code means the source code for all + * modules it contains. It does not include source code for modules or + * files that typically accompany the major components of the operating + * system on which the executable file runs. + * + * THIS SOFTWARE IS PROVIDED BY ORACLE ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR + * NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL ORACLE BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +/* + * Copyright (c) 1990, 1993, 1994, 1995 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +/* + * Copyright (c) 1995, 1996 + * The President and Fellows of Harvard University. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY HARVARD AND ITS CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL HARVARD OR ITS CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +/*** + * ASM: a very small and fast Java bytecode manipulation framework + * Copyright (c) 2000-2005 INRIA, France Telecom + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holders nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.bzip2.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.bzip2.txt new file mode 100644 index 000000000..cf96e1cb9 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.bzip2.txt @@ -0,0 +1,37 @@ +This program, "bzip2", the associated library "libbzip2", and all +documentation, are copyright (C) 1996-2010 Julian R Seward. All +rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. The origin of this software must not be misrepresented; you must + not claim that you wrote the original software. If you use this + software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + +3. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + +4. The name of the author may not be used to endorse or promote + products derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Julian Seward, jseward@bzip.org +bzip2/libbzip2 version 1.0.6 of 6 September 2010 diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.cpython.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.cpython.txt new file mode 100644 index 000000000..2308494de --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.cpython.txt @@ -0,0 +1,771 @@ +A. HISTORY OF THE SOFTWARE +========================== + +Python was created in the early 1990s by Guido van Rossum at Stichting +Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands +as a successor of a language called ABC. Guido remains Python's +principal author, although it includes many contributions from others. + +In 1995, Guido continued his work on Python at the Corporation for +National Research Initiatives (CNRI, see http://www.cnri.reston.va.us) +in Reston, Virginia where he released several versions of the +software. + +In May 2000, Guido and the Python core development team moved to +BeOpen.com to form the BeOpen PythonLabs team. In October of the same +year, the PythonLabs team moved to Digital Creations, which became +Zope Corporation. In 2001, the Python Software Foundation (PSF, see +https://www.python.org/psf/) was formed, a non-profit organization +created specifically to own Python-related Intellectual Property. +Zope Corporation was a sponsoring member of the PSF. + +All Python releases are Open Source (see http://www.opensource.org for +the Open Source Definition). Historically, most, but not all, Python +releases have also been GPL-compatible; the table below summarizes +the various releases. + + Release Derived Year Owner GPL- + from compatible? (1) + + 0.9.0 thru 1.2 1991-1995 CWI yes + 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes + 1.6 1.5.2 2000 CNRI no + 2.0 1.6 2000 BeOpen.com no + 1.6.1 1.6 2001 CNRI yes (2) + 2.1 2.0+1.6.1 2001 PSF no + 2.0.1 2.0+1.6.1 2001 PSF yes + 2.1.1 2.1+2.0.1 2001 PSF yes + 2.1.2 2.1.1 2002 PSF yes + 2.1.3 2.1.2 2002 PSF yes + 2.2 and above 2.1.1 2001-now PSF yes + +Footnotes: + +(1) GPL-compatible doesn't mean that we're distributing Python under + the GPL. All Python licenses, unlike the GPL, let you distribute + a modified version without making your changes open source. The + GPL-compatible licenses make it possible to combine Python with + other software that is released under the GPL; the others don't. + +(2) According to Richard Stallman, 1.6.1 is not GPL-compatible, + because its license has a choice of law clause. According to + CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1 + is "not incompatible" with the GPL. + +Thanks to the many outside volunteers who have worked under Guido's +direction to make these releases possible. + + +B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON +=============================================================== + +Python software and documentation are licensed under the +Python Software Foundation License Version 2. + +Starting with Python 3.8.6, examples, recipes, and other code in +the documentation are dual licensed under the PSF License Version 2 +and the Zero-Clause BSD license. + +Some software incorporated into Python is under different licenses. +The licenses are listed with code falling under that license. + + +PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 +-------------------------------------------- + +1. This LICENSE AGREEMENT is between the Python Software Foundation +("PSF"), and the Individual or Organization ("Licensee") accessing and +otherwise using this software ("Python") in source or binary form and +its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, PSF hereby +grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, +analyze, test, perform and/or display publicly, prepare derivative works, +distribute, and otherwise use Python alone or in any derivative version, +provided, however, that PSF's License Agreement and PSF's notice of copyright, +i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Python Software Foundation; +All Rights Reserved" are retained in Python alone or in any derivative version +prepared by Licensee. + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python. + +4. PSF is making Python available to Licensee on an "AS IS" +basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. Nothing in this License Agreement shall be deemed to create any +relationship of agency, partnership, or joint venture between PSF and +Licensee. This License Agreement does not grant permission to use PSF +trademarks or trade name in a trademark sense to endorse or promote +products or services of Licensee, or any third party. + +8. By copying, installing or otherwise using Python, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 +------------------------------------------- + +BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 + +1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an +office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the +Individual or Organization ("Licensee") accessing and otherwise using +this software in source or binary form and its associated +documentation ("the Software"). + +2. Subject to the terms and conditions of this BeOpen Python License +Agreement, BeOpen hereby grants Licensee a non-exclusive, +royalty-free, world-wide license to reproduce, analyze, test, perform +and/or display publicly, prepare derivative works, distribute, and +otherwise use the Software alone or in any derivative version, +provided, however, that the BeOpen Python License is retained in the +Software, alone or in any derivative version prepared by Licensee. + +3. BeOpen is making the Software available to Licensee on an "AS IS" +basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE +SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS +AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY +DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +5. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +6. This License Agreement shall be governed by and interpreted in all +respects by the law of the State of California, excluding conflict of +law provisions. Nothing in this License Agreement shall be deemed to +create any relationship of agency, partnership, or joint venture +between BeOpen and Licensee. This License Agreement does not grant +permission to use BeOpen trademarks or trade names in a trademark +sense to endorse or promote products or services of Licensee, or any +third party. As an exception, the "BeOpen Python" logos available at +http://www.pythonlabs.com/logos.html may be used according to the +permissions granted on that web page. + +7. By copying, installing or otherwise using the software, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 +--------------------------------------- + +1. This LICENSE AGREEMENT is between the Corporation for National +Research Initiatives, having an office at 1895 Preston White Drive, +Reston, VA 20191 ("CNRI"), and the Individual or Organization +("Licensee") accessing and otherwise using Python 1.6.1 software in +source or binary form and its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, CNRI +hereby grants Licensee a nonexclusive, royalty-free, world-wide +license to reproduce, analyze, test, perform and/or display publicly, +prepare derivative works, distribute, and otherwise use Python 1.6.1 +alone or in any derivative version, provided, however, that CNRI's +License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) +1995-2001 Corporation for National Research Initiatives; All Rights +Reserved" are retained in Python 1.6.1 alone or in any derivative +version prepared by Licensee. Alternately, in lieu of CNRI's License +Agreement, Licensee may substitute the following text (omitting the +quotes): "Python 1.6.1 is made available subject to the terms and +conditions in CNRI's License Agreement. This Agreement together with +Python 1.6.1 may be located on the internet using the following +unique, persistent identifier (known as a handle): 1895.22/1013. This +Agreement may also be obtained from a proxy server on the internet +using the following URL: http://hdl.handle.net/1895.22/1013". + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python 1.6.1 or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python 1.6.1. + +4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" +basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. This License Agreement shall be governed by the federal +intellectual property law of the United States, including without +limitation the federal copyright law, and, to the extent such +U.S. federal law does not apply, by the law of the Commonwealth of +Virginia, excluding Virginia's conflict of law provisions. +Notwithstanding the foregoing, with regard to derivative works based +on Python 1.6.1 that incorporate non-separable material that was +previously distributed under the GNU General Public License (GPL), the +law of the Commonwealth of Virginia shall govern this License +Agreement only as to issues arising under or with respect to +Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this +License Agreement shall be deemed to create any relationship of +agency, partnership, or joint venture between CNRI and Licensee. This +License Agreement does not grant permission to use CNRI trademarks or +trade name in a trademark sense to endorse or promote products or +services of Licensee, or any third party. + +8. By clicking on the "ACCEPT" button where indicated, or by copying, +installing or otherwise using Python 1.6.1, Licensee agrees to be +bound by the terms and conditions of this License Agreement. + + ACCEPT + + +CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 +-------------------------------------------------- + +Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, +The Netherlands. All rights reserved. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Stichting Mathematisch +Centrum or CWI not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +ZERO-CLAUSE BSD LICENSE FOR CODE IN THE PYTHON DOCUMENTATION +---------------------------------------------------------------------- + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + +Licenses and Acknowledgements for Incorporated Software +======================================================= + +This section is an incomplete, but growing list of licenses and acknowledgements +for third-party software incorporated in the Python distribution. + +Mersenne Twister +---------------- + +The :mod:`_random` module includes code based on a download from +http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/emt19937ar.html. The following are +the verbatim comments from the original code:: + + A C-program for MT19937, with initialization improved 2002/1/26. + Coded by Takuji Nishimura and Makoto Matsumoto. + + Before using, initialize the state by using init_genrand(seed) + or init_by_array(init_key, key_length). + + Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura, + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. The names of its contributors may not be used to endorse or promote + products derived from this software without specific prior written + permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + Any feedback is very welcome. + http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html + email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space) + + +Sockets +------- + +The :mod:`socket` module uses the functions, :func:`getaddrinfo`, and +:func:`getnameinfo`, which are coded in separate source files from the WIDE +Project, http://www.wide.ad.jp/. :: + + Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the project nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + + +Asynchronous socket services +---------------------------- + +The :mod:`asynchat` and :mod:`asyncore` modules contain the following notice:: + + Copyright 1996 by Sam Rushing + + All Rights Reserved + + Permission to use, copy, modify, and distribute this software and + its documentation for any purpose and without fee is hereby + granted, provided that the above copyright notice appear in all + copies and that both that copyright notice and this permission + notice appear in supporting documentation, and that the name of Sam + Rushing not be used in advertising or publicity pertaining to + distribution of the software without specific, written prior + permission. + + SAM RUSHING DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN + NO EVENT SHALL SAM RUSHING BE LIABLE FOR ANY SPECIAL, INDIRECT OR + CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS + OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +Cookie management +----------------- + +The :mod:`http.cookies` module contains the following notice:: + + Copyright 2000 by Timothy O'Malley + + All Rights Reserved + + Permission to use, copy, modify, and distribute this software + and its documentation for any purpose and without fee is hereby + granted, provided that the above copyright notice appear in all + copies and that both that copyright notice and this permission + notice appear in supporting documentation, and that the name of + Timothy O'Malley not be used in advertising or publicity + pertaining to distribution of the software without specific, written + prior permission. + + Timothy O'Malley DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS + SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS, IN NO EVENT SHALL Timothy O'Malley BE LIABLE FOR + ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + + +Execution tracing +----------------- + +The :mod:`trace` module contains the following notice:: + + portions copyright 2001, Autonomous Zones Industries, Inc., all rights... + err... reserved and offered to the public under the terms of the + Python 2.2 license. + Author: Zooko O'Whielacronx + http://zooko.com/ + mailto:zooko@zooko.com + + Copyright 2000, Mojam Media, Inc., all rights reserved. + Author: Skip Montanaro + + Copyright 1999, Bioreason, Inc., all rights reserved. + Author: Andrew Dalke + + Copyright 1995-1997, Automatrix, Inc., all rights reserved. + Author: Skip Montanaro + + Copyright 1991-1995, Stichting Mathematisch Centrum, all rights reserved. + + + Permission to use, copy, modify, and distribute this Python software and + its associated documentation for any purpose without fee is hereby + granted, provided that the above copyright notice appears in all copies, + and that both that copyright notice and this permission notice appear in + supporting documentation, and that the name of neither Automatrix, + Bioreason or Mojam Media be used in advertising or publicity pertaining to + distribution of the software without specific, written prior permission. + + +UUencode and UUdecode functions +------------------------------- + +The :mod:`uu` module contains the following notice:: + + Copyright 1994 by Lance Ellinghouse + Cathedral City, California Republic, United States of America. + All Rights Reserved + Permission to use, copy, modify, and distribute this software and its + documentation for any purpose and without fee is hereby granted, + provided that the above copyright notice appear in all copies and that + both that copyright notice and this permission notice appear in + supporting documentation, and that the name of Lance Ellinghouse + not be used in advertising or publicity pertaining to distribution + of the software without specific, written prior permission. + LANCE ELLINGHOUSE DISCLAIMS ALL WARRANTIES WITH REGARD TO + THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS, IN NO EVENT SHALL LANCE ELLINGHOUSE CENTRUM BE LIABLE + FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT + OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + Modified by Jack Jansen, CWI, July 1995: + - Use binascii module to do the actual line-by-line conversion + between ascii and binary. This results in a 1000-fold speedup. The C + version is still 5 times faster, though. + - Arguments more compliant with Python standard + + +XML Remote Procedure Calls +-------------------------- + +The :mod:`xmlrpc.client` module contains the following notice:: + + The XML-RPC client interface is + + Copyright (c) 1999-2002 by Secret Labs AB + Copyright (c) 1999-2002 by Fredrik Lundh + + By obtaining, using, and/or copying this software and/or its + associated documentation, you agree that you have read, understood, + and will comply with the following terms and conditions: + + Permission to use, copy, modify, and distribute this software and + its associated documentation for any purpose and without fee is + hereby granted, provided that the above copyright notice appears in + all copies, and that both that copyright notice and this permission + notice appear in supporting documentation, and that the name of + Secret Labs AB or the author not be used in advertising or publicity + pertaining to distribution of the software without specific, written + prior permission. + + SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANT- + ABILITY AND FITNESS. IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR + BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY + DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + OF THIS SOFTWARE. + + +test_epoll +---------- + +The :mod:`test_epoll` module contains the following notice:: + + Copyright (c) 2001-2006 Twisted Matrix Laboratories. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Select kqueue +------------- + +The :mod:`select` module contains the following notice for the kqueue +interface:: + + Copyright (c) 2000 Doug White, 2006 James Knight, 2007 Christian Heimes + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + + +SipHash24 +--------- + +The file :file:`Python/pyhash.c` contains Marek Majkowski' implementation of +Dan Bernstein's SipHash24 algorithm. It contains the following note:: + + + Copyright (c) 2013 Marek Majkowski + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + + Original location: + https://github.com/majek/csiphash/ + + Solution inspired by code from: + Samuel Neves (supercop/crypto_auth/siphash24/little) + djb (supercop/crypto_auth/siphash24/little2) + Jean-Philippe Aumasson (https://131002.net/siphash/siphash24.c) + + +strtod and dtoa +--------------- + +The file :file:`Python/dtoa.c`, which supplies C functions dtoa and +strtod for conversion of C doubles to and from strings, is derived +from the file of the same name by David M. Gay, currently available +from http://www.netlib.org/fp/. The original file, as retrieved on +March 16, 2009, contains the following copyright and licensing +notice:: + + /**************************************************************** + * + * The author of this software is David M. Gay. + * + * Copyright (c) 1991, 2000, 2001 by Lucent Technologies. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose without fee is hereby granted, provided that this entire notice + * is included in all copies of any software which is or includes a copy + * or modification of this software and in all copies of the supporting + * documentation for such software. + * + * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED + * WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR LUCENT MAKES ANY + * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY + * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. + * + ***************************************************************/ + +expat +----- + +The :mod:`pyexpat` extension is built using an included copy of the expat +sources unless the build is configured ``--with-system-expat``:: + + Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd + and Clark Cooper + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +cfuhash +------- + +The implementation of the hash table used by the :mod:`tracemalloc` is based +on the cfuhash project:: + + Copyright (c) 2005 Don Owens + All rights reserved. + + This code is released under the BSD license: + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + * Neither the name of the author nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + OF THE POSSIBILITY OF SUCH DAMAGE. + + +libmpdec +-------- + +The :mod:`_decimal` module is built using an included copy of the libmpdec +library unless the build is configured ``--with-system-libmpdec``:: + + Copyright (c) 2008-2020 Stefan Krah. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + +W3C C14N test suite +------------------- + +The C14N 2.0 test suite in the :mod:`test` package +(``Lib/test/xmltestdata/c14n-20/``) was retrieved from the W3C website at +https://www.w3.org/TR/xml-c14n2-testcases/ and is distributed under the +3-clause BSD license:: + + Copyright (c) 2013 W3C(R) (MIT, ERCIM, Keio, Beihang), + All Rights Reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + * Redistributions of works must retain the original copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the original copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the W3C nor the names of its contributors may be + used to endorse or promote products derived from this work without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.expat.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.expat.txt new file mode 100644 index 000000000..fa71a7160 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.expat.txt @@ -0,0 +1,21 @@ +Copyright (c) 1998-2000 Thai Open Source Software Center Ltd and Clark Cooper +Copyright (c) 2001-2022 Expat maintainers + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libX11.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libX11.txt new file mode 100644 index 000000000..df1e85a69 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libX11.txt @@ -0,0 +1,942 @@ +The following is the 'standard copyright' agreed upon by most contributors, +and is currently the canonical license preferred by the X.Org Foundation. +This is a slight variant of the common MIT license form published by the +Open Source Initiative at http://www.opensource.org/licenses/mit-license.php + +Copyright holders of new code should use this license statement where +possible, and insert their name to this list. Please sort by surname +for people, and by the full name for other entities (e.g. Juliusz +Chroboczek sorts before Intel Corporation sorts before Daniel Stone). + +See each individual source file or directory for the license that applies +to that file. + +Copyright (C) 2003-2006,2008 Jamey Sharp, Josh Triplett +Copyright © 2009 Red Hat, Inc. +Copyright 1990-1992,1999,2000,2004,2009,2010 Oracle and/or its affiliates. +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next +paragraph) shall be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + + ---------------------------------------------------------------------- + +The following licenses are 'legacy' - usually MIT/X11 licenses with the name +of the copyright holder(s) in the license statement: + +Copyright 1984-1994, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from The Open Group. + +X Window System is a trademark of The Open Group. + + ---------------------------------------- + +Copyright 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium +Copyright 2000 The XFree86 Project, Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the X Consortium shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization +from the X Consortium. + +Copyright 1985, 1986, 1987, 1988, 1989, 1990, 1991 by +Digital Equipment Corporation + +Portions Copyright 1990, 1991 by Tektronix, Inc. + +Permission to use, copy, modify and distribute this documentation for +any purpose and without fee is hereby granted, provided that the above +copyright notice appears in all copies and that both that copyright notice +and this permission notice appear in all copies, and that the names of +Digital and Tektronix not be used in in advertising or publicity pertaining +to this documentation without specific, written prior permission. +Digital and Tektronix makes no representations about the suitability +of this documentation for any purpose. +It is provided ``as is'' without express or implied warranty. + + ---------------------------------------- + +Copyright (c) 1999-2000 Free Software Foundation, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +FREE SOFTWARE FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the Free Software Foundation +shall not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization from the +Free Software Foundation. + + ---------------------------------------- + +Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. + All Rights Reserved + +This file is a component of an X Window System-specific implementation +of Xcms based on the TekColor Color Management System. TekColor is a +trademark of Tektronix, Inc. The term "TekHVC" designates a particular +color space that is the subject of U.S. Patent No. 4,985,853 (equivalent +foreign patents pending). Permission is hereby granted to use, copy, +modify, sell, and otherwise distribute this software and its +documentation for any purpose and without fee, provided that: + +1. This copyright, permission, and disclaimer notice is reproduced in + all copies of this software and any modification thereof and in + supporting documentation; +2. Any color-handling application which displays TekHVC color + cooordinates identifies these as TekHVC color coordinates in any + interface that displays these coordinates and in any associated + documentation; +3. The term "TekHVC" is always used, and is only used, in association + with the mathematical derivations of the TekHVC Color Space, + including those provided in this file and any equivalent pathways and + mathematical derivations, regardless of digital (e.g., floating point + or integer) representation. + +Tektronix makes no representation about the suitability of this software +for any purpose. It is provided "as is" and with all faults. + +TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, +INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF +CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +(c) Copyright 1995 FUJITSU LIMITED +This is source code modified by FUJITSU LIMITED under the Joint +Development Agreement for the CDE/Motif PST. + + ---------------------------------------- + +Copyright 1992 by Oki Technosystems Laboratory, Inc. +Copyright 1992 by Fuji Xerox Co., Ltd. + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of Oki Technosystems +Laboratory and Fuji Xerox not be used in advertising or publicity +pertaining to distribution of the software without specific, written +prior permission. +Oki Technosystems Laboratory and Fuji Xerox make no representations +about the suitability of this software for any purpose. It is provided +"as is" without express or implied warranty. + +OKI TECHNOSYSTEMS LABORATORY AND FUJI XEROX DISCLAIM ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL OKI TECHNOSYSTEMS +LABORATORY AND FUJI XEROX BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE +OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1990, 1991, 1992, 1993, 1994 by FUJITSU LIMITED + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of FUJITSU LIMITED +not be used in advertising or publicity pertaining to distribution +of the software without specific, written prior permission. +FUJITSU LIMITED makes no representations about the suitability of +this software for any purpose. +It is provided "as is" without express or implied warranty. + +FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + + +Copyright (c) 1995 David E. Wexelblat. All rights reserved + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL DAVID E. WEXELBLAT BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of David E. Wexelblat shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization +from David E. Wexelblat. + + ---------------------------------------- + +Copyright 1990, 1991 by OMRON Corporation + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name OMRON not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. OMRON makes no representations +about the suitability of this software for any purpose. It is provided +"as is" without express or implied warranty. + +OMRON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL OMRON BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTUOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1985, 1986, 1987, 1988, 1989, 1990, 1991 by +Digital Equipment Corporation + +Portions Copyright 1990, 1991 by Tektronix, Inc + +Rewritten for X.org by Chris Lee + +Permission to use, copy, modify, distribute, and sell this documentation +for any purpose and without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. +Chris Lee makes no representations about the suitability for any purpose +of the information in this document. It is provided \`\`as-is'' without +express or implied warranty. + + ---------------------------------------- + +Copyright 1993 by Digital Equipment Corporation, Maynard, Massachusetts, +Copyright 1994 by FUJITSU LIMITED +Copyright 1994 by Sony Corporation + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the names of Digital, FUJITSU +LIMITED and Sony Corporation not be used in advertising or publicity +pertaining to distribution of the software without specific, written +prior permission. + +DIGITAL, FUJITSU LIMITED AND SONY CORPORATION DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL, FUJITSU LIMITED +AND SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + + +Copyright 1991 by the Open Software Foundation + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of Open Software Foundation +not be used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. Open Software +Foundation makes no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +OPEN SOFTWARE FOUNDATION DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL OPEN SOFTWARE FOUNDATIONN BE +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1990, 1991, 1992,1993, 1994 by FUJITSU LIMITED +Copyright 1993, 1994 by Sony Corporation + +Permission to use, copy, modify, distribute, and sell this software and +its documentation for any purpose is hereby granted without fee, provided +that the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of FUJITSU LIMITED and Sony Corporation +not be used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. FUJITSU LIMITED and +Sony Corporation makes no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +FUJITSU LIMITED AND SONY CORPORATION DISCLAIMS ALL WARRANTIES WITH REGARD +TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL FUJITSU LIMITED OR SONY CORPORATION BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE +USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright (c) 1993, 1995 by Silicon Graphics Computer Systems, Inc. + +Permission to use, copy, modify, and distribute this +software and its documentation for any purpose and without +fee is hereby granted, provided that the above copyright +notice appear in all copies and that both that copyright +notice and this permission notice appear in supporting +documentation, and that the name of Silicon Graphics not be +used in advertising or publicity pertaining to distribution +of the software without specific prior written permission. +Silicon Graphics makes no representation about the suitability +of this software for any purpose. It is provided "as is" +without any express or implied warranty. + +SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS +SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON +GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH +THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1991, 1992, 1993, 1994 by FUJITSU LIMITED +Copyright 1993 by Digital Equipment Corporation + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of FUJITSU LIMITED and +Digital Equipment Corporation not be used in advertising or publicity +pertaining to distribution of the software without specific, written +prior permission. FUJITSU LIMITED and Digital Equipment Corporation +makes no representations about the suitability of this software for +any purpose. It is provided "as is" without express or implied +warranty. + +FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION DISCLAIM ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION BE LIABLE FOR +ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1992, 1993 by FUJITSU LIMITED +Copyright 1993 by Fujitsu Open Systems Solutions, Inc. +Copyright 1994 by Sony Corporation + +Permission to use, copy, modify, distribute and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of FUJITSU LIMITED, +Fujitsu Open Systems Solutions, Inc. and Sony Corporation not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. +FUJITSU LIMITED, Fujitsu Open Systems Solutions, Inc. and +Sony Corporation make no representations about the suitability of +this software for any purpose. It is provided "as is" without +express or implied warranty. + +FUJITSU LIMITED, FUJITSU OPEN SYSTEMS SOLUTIONS, INC. AND SONY +CORPORATION DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, +IN NO EVENT SHALL FUJITSU OPEN SYSTEMS SOLUTIONS, INC., FUJITSU LIMITED +AND SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE +OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1987, 1988, 1990, 1993 by Digital Equipment Corporation, +Maynard, Massachusetts, + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Digital not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + + ---------------------------------------- + +Copyright 1993 by SunSoft, Inc. +Copyright 1999-2000 by Bruno Haible + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the names of SunSoft, Inc. and +Bruno Haible not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. SunSoft, Inc. and Bruno Haible make no representations +about the suitability of this software for any purpose. It is +provided "as is" without express or implied warranty. + +SunSoft Inc. AND Bruno Haible DISCLAIM ALL WARRANTIES WITH REGARD +TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS, IN NO EVENT SHALL SunSoft, Inc. OR Bruno Haible BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1991 by the Open Software Foundation +Copyright 1993 by the TOSHIBA Corp. + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the names of Open Software Foundation and TOSHIBA +not be used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. Open Software +Foundation and TOSHIBA make no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +OPEN SOFTWARE FOUNDATION AND TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL OPEN SOFTWARE FOUNDATIONN OR TOSHIBA BE +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1988 by Wyse Technology, Inc., San Jose, Ca., + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name Wyse not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +WYSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + + ---------------------------------------- + + +Copyright 1991 by the Open Software Foundation +Copyright 1993, 1994 by the Sony Corporation + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the names of Open Software Foundation and +Sony Corporation not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior permission. +Open Software Foundation and Sony Corporation make no +representations about the suitability of this software for any purpose. +It is provided "as is" without express or implied warranty. + +OPEN SOFTWARE FOUNDATION AND SONY CORPORATION DISCLAIM ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL OPEN +SOFTWARE FOUNDATIONN OR SONY CORPORATION BE LIABLE FOR ANY SPECIAL, +INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1992, 1993 by FUJITSU LIMITED +Copyright 1993 by Fujitsu Open Systems Solutions, Inc. + +Permission to use, copy, modify, distribute and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of FUJITSU LIMITED and +Fujitsu Open Systems Solutions, Inc. not be used in advertising or +publicity pertaining to distribution of the software without specific, +written prior permission. +FUJITSU LIMITED and Fujitsu Open Systems Solutions, Inc. makes no +representations about the suitability of this software for any purpose. +It is provided "as is" without express or implied warranty. + +FUJITSU LIMITED AND FUJITSU OPEN SYSTEMS SOLUTIONS, INC. DISCLAIMS ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU OPEN SYSTEMS +SOLUTIONS, INC. AND FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT +OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE +OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1993, 1994 by Sony Corporation + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of Sony Corporation +not be used in advertising or publicity pertaining to distribution +of the software without specific, written prior permission. +Sony Corporation makes no representations about the suitability of +this software for any purpose. It is provided "as is" without +express or implied warranty. + +SONY CORPORATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1986, 1998 The Open Group +Copyright (c) 2000 The XFree86 Project, Inc. + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +X CONSORTIUM OR THE XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +Except as contained in this notice, the name of the X Consortium or of the +XFree86 Project shall not be used in advertising or otherwise to promote the +sale, use or other dealings in this Software without prior written +authorization from the X Consortium and the XFree86 Project. + + ---------------------------------------- + +Copyright 1990, 1991 by OMRON Corporation, NTT Software Corporation, + and Nippon Telegraph and Telephone Corporation +Copyright 1991 by the Open Software Foundation +Copyright 1993 by the FUJITSU LIMITED + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the names of OMRON, NTT Software, NTT, and +Open Software Foundation not be used in advertising or publicity +pertaining to distribution of the software without specific, +written prior permission. OMRON, NTT Software, NTT, and Open Software +Foundation make no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +OMRON, NTT SOFTWARE, NTT, AND OPEN SOFTWARE FOUNDATION +DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT +SHALL OMRON, NTT SOFTWARE, NTT, OR OPEN SOFTWARE FOUNDATION BE +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1988 by Wyse Technology, Inc., San Jose, Ca, +Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts, + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name Digital not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL AND WYSE DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL DIGITAL OR WYSE BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + + +Copyright 1991, 1992 by Fuji Xerox Co., Ltd. +Copyright 1992, 1993, 1994 by FUJITSU LIMITED + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of Fuji Xerox, +FUJITSU LIMITED not be used in advertising or publicity pertaining +to distribution of the software without specific, written prior +permission. Fuji Xerox, FUJITSU LIMITED make no representations +about the suitability of this software for any purpose. +It is provided "as is" without express or implied warranty. + +FUJI XEROX, FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJI XEROX, +FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA +OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 2006 Josh Triplett + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + + ---------------------------------------- + +(c) Copyright 1996 by Sebastien Marineau and Holger Veit + + + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +HOLGER VEIT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +Except as contained in this notice, the name of Sebastien Marineau or Holger Veit +shall not be used in advertising or otherwise to promote the sale, use or other +dealings in this Software without prior written authorization from Holger Veit or +Sebastien Marineau. + + ---------------------------------------- + +Copyright 1990, 1991 by OMRON Corporation, NTT Software Corporation, + and Nippon Telegraph and Telephone Corporation +Copyright 1991 by the Open Software Foundation +Copyright 1993 by the TOSHIBA Corp. +Copyright 1993, 1994 by Sony Corporation +Copyright 1993, 1994 by the FUJITSU LIMITED + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the names of OMRON, NTT Software, NTT, Open +Software Foundation, and Sony Corporation not be used in advertising +or publicity pertaining to distribution of the software without specific, +written prior permission. OMRON, NTT Software, NTT, Open Software +Foundation, and Sony Corporation make no representations about the +suitability of this software for any purpose. It is provided "as is" +without express or implied warranty. + +OMRON, NTT SOFTWARE, NTT, OPEN SOFTWARE FOUNDATION, AND SONY +CORPORATION DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT +SHALL OMRON, NTT SOFTWARE, NTT, OPEN SOFTWARE FOUNDATION, OR SONY +CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 2000 by Bruno Haible + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of Bruno Haible not +be used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. Bruno Haible +makes no representations about the suitability of this software for +any purpose. It is provided "as is" without express or implied +warranty. + +Bruno Haible DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN +NO EVENT SHALL Bruno Haible BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE +OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright © 2003 Keith Packard + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of Keith Packard not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. Keith Packard makes no +representations about the suitability of this software for any purpose. It +is provided "as is" without express or implied warranty. + +KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright (c) 2007-2009, Troy D. Hanson +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + ---------------------------------------- + +Copyright 1992, 1993 by TOSHIBA Corp. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, provided +that the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of TOSHIBA not be used in advertising +or publicity pertaining to distribution of the software without specific, +written prior permission. TOSHIBA make no representations about the +suitability of this software for any purpose. It is provided "as is" +without express or implied warranty. + +TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + + + ---------------------------------------- + +Copyright IBM Corporation 1993 + +All Rights Reserved + +License to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of IBM not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS, AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS, IN NO EVENT SHALL +IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + + ---------------------------------------- + +Copyright 1990, 1991 by OMRON Corporation, NTT Software Corporation, + and Nippon Telegraph and Telephone Corporation + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the names of OMRON, NTT Software, and NTT +not be used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. OMRON, NTT Software, +and NTT make no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +OMRON, NTT SOFTWARE, AND NTT, DISCLAIM ALL WARRANTIES WITH REGARD +TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS, IN NO EVENT SHALL OMRON, NTT SOFTWARE, OR NTT, BE +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libXau.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libXau.txt new file mode 100644 index 000000000..e893a82a7 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libXau.txt @@ -0,0 +1,21 @@ +Copyright 1988, 1993, 1994, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from The Open Group. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libedit.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libedit.txt new file mode 100644 index 000000000..598a5d8d4 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libedit.txt @@ -0,0 +1,29 @@ +Copyright (c) 1992, 1993 + The Regents of the University of California. All rights reserved. + +This code is derived from software contributed to Berkeley by +Christos Zoulas of Cornell University. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libffi.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libffi.txt new file mode 100644 index 000000000..ad3c09a2d --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libffi.txt @@ -0,0 +1,21 @@ +libffi - Copyright (c) 1996-2019 Anthony Green, Red Hat, Inc and others. +See source files for details. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +``Software''), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.liblzma.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.liblzma.txt new file mode 100644 index 000000000..71bace856 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.liblzma.txt @@ -0,0 +1,13 @@ +Copyright (C) The XZ Utils authors and contributors + +Permission to use, copy, modify, and/or distribute this +software for any purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL +THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libuuid.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libuuid.txt new file mode 100644 index 000000000..77dfae44b --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libuuid.txt @@ -0,0 +1,27 @@ +Copyright (C) 1996, 1997 Theodore Ts'o. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, and the entire permission notice in its entirety, + including the disclaimer of warranties. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote + products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF +WHICH ARE HEREBY DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libxcb.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libxcb.txt new file mode 100644 index 000000000..50a14e39e --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libxcb.txt @@ -0,0 +1,30 @@ +Copyright (C) 2001-2006 Bart Massey, Jamey Sharp, and Josh Triplett. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, +sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall +be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the names of the authors +or their institutions shall not be used in advertising or +otherwise to promote the sale, use or other dealings in this +Software without prior written authorization from the +authors. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.mpdecimal.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.mpdecimal.txt new file mode 100644 index 000000000..969e12f2d --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.mpdecimal.txt @@ -0,0 +1,24 @@ +Copyright (c) 2008-2020 Stefan Krah. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.ncurses.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.ncurses.txt new file mode 100644 index 000000000..44d025c45 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.ncurses.txt @@ -0,0 +1,29 @@ +Copyright 2018-2020,2021 Thomas E. Dickey +Copyright 1998-2017,2018 Free Software Foundation, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, distribute with modifications, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR +THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name(s) of the above copyright +holders shall not be used in advertising or otherwise to promote the +sale, use or other dealings in this Software without prior written +authorization. + +-- vile:txtmode fc=72 +-- $Id: COPYING,v 1.10 2021/01/01 09:54:30 tom Exp $ diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.openssl-1.1.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.openssl-1.1.txt new file mode 100644 index 000000000..f3d29bdf8 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.openssl-1.1.txt @@ -0,0 +1,124 @@ + + LICENSE ISSUES + ============== + + The OpenSSL toolkit stays under a double license, i.e. both the conditions of + the OpenSSL License and the original SSLeay license apply to the toolkit. + See below for the actual license texts. + + OpenSSL License + --------------- + +/* ==================================================================== + * Copyright (c) 1998-2019 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + + Original SSLeay License + ----------------------- + +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.openssl-3.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.openssl-3.txt new file mode 100644 index 000000000..3e7051509 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.openssl-3.txt @@ -0,0 +1,177 @@ + + Apache License + Version 2.0, January 2004 + https://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.sqlite.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.sqlite.txt new file mode 100644 index 000000000..f43ea61f9 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.sqlite.txt @@ -0,0 +1,23 @@ +All of the code and documentation in SQLite has been dedicated to the public +domain by the authors. All code authors, and representatives of the companies +they work for, have signed affidavits dedicating their contributions to the +public domain and originals of those signed affidavits are stored in a firesafe +at the main offices of Hwaci. Anyone is free to copy, modify, publish, use, +compile, sell, or distribute the original SQLite code, either in source code form +or as a compiled binary, for any purpose, commercial or non-commercial, and by +any means. + +The previous paragraph applies to the deliverable code and documentation in +SQLite - those parts of the SQLite library that you actually bundle and ship +with a larger application. Some scripts used as part of the build process (for +example the "configure" scripts generated by autoconf) might fall under other +open-source licenses. Nothing from these build scripts ever reaches the final +deliverable SQLite library, however, and so the licenses associated with those +scripts should not be a factor in assessing your rights to copy and use the +SQLite library. + +All of the deliverable code in SQLite has been written from scratch. No code has +been taken from other projects or from the open internet. Every line of code can +be traced back to its original author, and all of those authors have public +domain dedications on file. So the SQLite code base is clean and is +uncontaminated with licensed code from other projects. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.tcl.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.tcl.txt new file mode 100644 index 000000000..393489a07 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.tcl.txt @@ -0,0 +1,40 @@ +This software is copyrighted by the Regents of the University of +California, Sun Microsystems, Inc., Scriptics Corporation, ActiveState +Corporation and other parties. The following terms apply to all files +associated with the software unless explicitly disclaimed in +individual files. + +The authors hereby grant permission to use, copy, modify, distribute, +and license this software and its documentation for any purpose, provided +that existing copyright notices are retained in all copies and that this +notice is included verbatim in any distributions. No written agreement, +license, or royalty fee is required for any of the authorized uses. +Modifications to this software may be copyrighted by their authors +and need not follow the licensing terms described here, provided that +the new terms are clearly indicated on the first page of each file where +they apply. + +IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +MODIFICATIONS. + +GOVERNMENT USE: If you are acquiring this software on behalf of the +U.S. government, the Government shall have only "Restricted Rights" +in the software and related documentation as defined in the Federal +Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you +are acquiring the software on behalf of the Department of Defense, the +software shall be classified as "Commercial Computer Software" and the +Government shall have only "Restricted Rights" as defined in Clause +252.227-7014 (b) (3) of DFARs. Notwithstanding the foregoing, the +authors grant the U.S. Government and others acting in its behalf +permission to use and distribute the software in accordance with the +terms specified in this license. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.tix.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.tix.txt new file mode 100644 index 000000000..e9d1a6164 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.tix.txt @@ -0,0 +1,54 @@ +Copyright (c) 1993-1999 Ioi Kim Lam. +Copyright (c) 2000-2001 Tix Project Group. +Copyright (c) 2004 ActiveState + +This software is copyrighted by the above entities +and other parties. The following terms apply to all files associated +with the software unless explicitly disclaimed in individual files. + +The authors hereby grant permission to use, copy, modify, distribute, +and license this software and its documentation for any purpose, provided +that existing copyright notices are retained in all copies and that this +notice is included verbatim in any distributions. No written agreement, +license, or royalty fee is required for any of the authorized uses. +Modifications to this software may be copyrighted by their authors +and need not follow the licensing terms described here, provided that +the new terms are clearly indicated on the first page of each file where +they apply. + +IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +MODIFICATIONS. + +GOVERNMENT USE: If you are acquiring this software on behalf of the +U.S. government, the Government shall have only "Restricted Rights" +in the software and related documentation as defined in the Federal +Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you +are acquiring the software on behalf of the Department of Defense, the +software shall be classified as "Commercial Computer Software" and the +Government shall have only "Restricted Rights" as defined in Clause +252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the +authors grant the U.S. Government and others acting in its behalf +permission to use and distribute the software in accordance with the +terms specified in this license. + +---------------------------------------------------------------------- + +Parts of this software are based on the Tcl/Tk software copyrighted by +the Regents of the University of California, Sun Microsystems, Inc., +and other parties. The original license terms of the Tcl/Tk software +distribution is included in the file docs/license.tcltk. + +Parts of this software are based on the HTML Library software +copyrighted by Sun Microsystems, Inc. The original license terms of +the HTML Library software distribution is included in the file +docs/license.html_lib. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.zlib.txt b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.zlib.txt new file mode 100644 index 000000000..faac5e7b2 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.zlib.txt @@ -0,0 +1,21 @@ + + Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-provider.md b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-provider.md new file mode 100644 index 000000000..94d582be4 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/managed-python-provider.md @@ -0,0 +1,139 @@ +# Managed Python Provider Admission + +**Status:** Current-source manual native run +[36229508586](https://github.com/MrScripty/Pumas-Library/actions/runs/36229508586) +on runtime commit `21041697` passed Torch 2.14.0 CPU/Core RPC installation and +restart on Linux x86_64, Windows x86_64 MSVC, and macOS arm64. Each target +provisioned Pumas-managed CPython 3.14.7 with uv 0.12.18, resolved and installed +25 hashed official artifacts, persisted the interpreter across restart, passed +the CPU-operation and resolver-probe checks, completed protocol 3 sidecar +trial/stop, and shut down gracefully with safe cleanup. Retained reports: +[Linux](v2.14.0-linux-current-source-cpu-rpc-restart-acceptance/README.md), +[Windows](v2.14.0-windows-current-source-cpu-rpc-restart-acceptance/README.md), +and [macOS](v2.14.0-macos-current-source-cpu-rpc-restart-acceptance/README.md). +The three target-specific CPython full-archive notice supersets are included in +the generated 0.7.0 attribution inventory. Native RPC acceptance does not +establish Electron UI-driven installation, packaged Windows/macOS Torch +installation, CUDA/MPS execution, or v2.14.0 Tuldok image-generation support. + +The current-branch local Linux AppImage/deb backend separately passed the full +Torch 2.14.0 CPU/Core install/restart acceptance with backend `PATH` cleared; +see the [packaged Linux acceptance](v2.14.0-linux-packaged-cpu-acceptance/README.md). +This verifies the packaged RPC backend but not user interaction through the +Electron UI. Windows/macOS packaged installation, CUDA/MPS, and v2.14.0 Tuldok +image-generation support remain unverified. + +The attribution gate hashes the Rust provider source and checks each +`NativeTarget::pin()` arm against its exact target triple and uv SHA-256. It +also checks the selected install-only URL against the reviewed full-archive +release/flavor mapping, validates the full-archive SHA-256, and verifies an +exact one-to-one set of legal file paths and hashes. The 0.7.0 inventory +contains 371 package entries, 78 hashed inputs, and 57 CPython legal texts; +Windows legal bytes retain CRLF. + +**Decision:** Use the app-manager's exact-hash-pinned uv release to provision +stable, standard CPython distributions from uv's embedded Python Build Standalone +catalog. Pumas requires CPython 3.10 or newer for the sidecar and has no upper +minor-version cap. Do not use a host Python, ambient `uv`, runtime `latest` URL, +shell installer, system package manager, PATH shim, or Windows registry +registration. + +## uv target artifacts + +The official uv `0.12.18` release is immutable and was published 2026-09-22. +It is the latest published release selected for this pin; the unreleased +`0.12.19` development version is not used. The three shipped target +archives and published SHA-256 checksums are: + +| Pumas target | Official asset URL | Published SHA-256 | +| --- | --- | --- | +| Linux x86_64 GNU | [`uv-x86_64-unknown-linux-gnu.tar.gz`](https://releases.astral.sh/github/uv/releases/download/0.12.18/uv-x86_64-unknown-linux-gnu.tar.gz) | `89eadd7c76fc063887959510d5ba0ab1264dfd5f1143b925ddb73021a40acf16` | +| Windows x86_64 MSVC | [`uv-x86_64-pc-windows-msvc.zip`](https://releases.astral.sh/github/uv/releases/download/0.12.18/uv-x86_64-pc-windows-msvc.zip) | `cae6a3bc25239f83dffb467a4b180508d9da23986c04639ebfa44e43e6a84bff` | +| macOS arm64 | [`uv-aarch64-apple-darwin.tar.gz`](https://releases.astral.sh/github/uv/releases/download/0.12.18/uv-aarch64-apple-darwin.tar.gz) | `cf40e0c6a202190ccd9e0406dcfdd5b2d6668a9a5c779b17948963df32aafe5b` | + +The digest values come from the release's official `.sha256` assets for [Linux](https://releases.astral.sh/github/uv/releases/download/0.12.18/uv-x86_64-unknown-linux-gnu.tar.gz.sha256), [Windows](https://releases.astral.sh/github/uv/releases/download/0.12.18/uv-x86_64-pc-windows-msvc.zip.sha256), and [macOS](https://releases.astral.sh/github/uv/releases/download/0.12.18/uv-aarch64-apple-darwin.tar.gz.sha256). The upstream [release page](https://github.com/astral-sh/uv/releases/tag/0.12.18) marks the release immutable and documents GitHub artifact attestations. The selected official Python Build Standalone records came from uv's embedded catalog. Manual native RPC acceptance exercised the pinned provider on Linux, Windows, and macOS and retained each target's uv archive SHA-256 and selected CPython identity. + +The app-manager must download the exact target URL into a private temporary file, +enforce a finite size/time budget, verify SHA-256 before extraction, extract only +the expected executable, and atomically publish it under the private managed +Python root. A failed download, digest, or extraction leaves no executable +eligible for invocation. This is runtime bootstrapping from versioned assets, +not a package-time bundled binary. + +## Interpreter catalog and provenance + +uv documents that available Python versions are frozen for each uv release and +that its managed CPython distributions come from +[python-build-standalone](https://docs.astral.sh/uv/concepts/python-versions/). +The exact uv binary pin therefore pins the catalog implementation and data +compiled into that release; Pumas must not fetch catalog metadata from `main` or +maintain a second Python-version allowlist. + +At runtime, the manager asks the pinned uv binary to enumerate downloadable +interpreters for the current native target, validates the returned structured +records, filters to stable standard CPython 3.10+, and sorts by numeric version +descending. It selects the newest stable version within each minor and installs +that exact version; it does not keep an upper minor allowlist. For each selected +interpreter the retained runtime record stores the full version, catalog key, +source URL, target triple, pinned uv version and archive SHA-256, canonical +executable path, and executable fingerprint. uv performs the Python archive +integrity check against the checksum carried by its embedded metadata; provider +output alone is not treated as proof of the installed interpreter's identity. +The manager re-probes the installed interpreter's implementation, version, +native architecture, and wheel tags before use. + +The public Python catalog page identifies the current tier-one standard CPython +range through 3.14 and states that 3.15 is pre-release support. Candidate +stability is decided from structured version metadata, not from a hard-coded +upper limit or an assumption based on a Torch wheel filename. A stable Python +minor absent from the pinned catalog remains unavailable until a reviewed uv +provider update adds its artifact and native evidence. + +The provider implementation runs `uv python list --managed-python +--only-downloads --show-urls --output-format json`. The pinned uv 0.12.18 +provider returned structured URL-bearing records and provisioned CPython 3.14.7 +on each shipped target. +The live v2.14.0 CUDA 13.2/Core preview resolved 44 artifacts. A separate CPU +Core preview resolved 25 artifacts, and `install_version` installed its +retained wheel resolution, checked installed identity and CPU operation, +published `v2.14.0`, and allowed explicit selection. The same RPC acceptance +started the managed sidecar, passed health and protocol 3, stopped its owned +generation, and shut down the backend successfully. Linux ran with Python, +pip, and uv absent from the backend's child `PATH`; it directly executed the +installed venv and verified that its base interpreter resolves to the recorded +managed executable and hash. Provider version `0.12.18` and archive SHA-256 +`89eadd7c76fc063887959510d5ba0ab1264dfd5f1143b925ddb73021a40acf16` are +retained with the runtime, resolution, probe, and backend log artifacts. The +temporary launcher root was removed after evidence collection. The CUDA wheel +set was resolved but not installed. Provider fixtures cover native filtering, +stable-version ordering, the 3.10 floor, exact-version install selection, and +malformed catalogs. + +## Licensing and remaining admission gates + +The uv release uses the [MIT/Apache-2.0 license policy](https://docs.astral.sh/uv/reference/policies/license/). +The exact `0.12.18` [MIT](https://raw.githubusercontent.com/astral-sh/uv/0.12.18/LICENSE-MIT) +and [Apache-2.0](https://raw.githubusercontent.com/astral-sh/uv/0.12.18/LICENSE-APACHE) +texts are pinned in `scripts/release/licenses/sources.json` with SHA-256 values +`860e3d7a86b84e6a7012c7a635fc64df475cebc6cce34dfeb73a5982ec58176c` +and `c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4`. +They are included in the 0.7.0 attribution inventory for the uv runtime executable +downloaded by Pumas, which is not bundled in the application package. + +The Python Build Standalone documentation says distribution archives include +license texts and individual bundled dependencies carry their own terms +([distribution runtime and licensing](https://github.com/astral-sh/python-build-standalone/blob/main/docs/running.rst)). +The Linux x86_64, Windows x86_64, and macOS arm64 CPython 3.14.7 full archives +were downloaded from the official release API and verified by SHA-256. Native +RPC acceptance confirmed CPython 3.14.7 selection on all three targets. Each +target has 19 license texts, raw `PYTHON.json`, and a separate full-archive +manifest in the [target archive evidence index](managed-python-license-collection/README.md). +The generated 0.7.0 notices include all three target-specific full-archive +license supersets. The selected install-only URL and its CPython/provider +identity remain recorded separately from each full archive's SHA-256. + +Further admission remains pending for packaged desktop Torch installation, +provider cancellation/tamper/retry and durable-retention cases, and any +device-execution or Tuldok claims. The native RPC reports establish the +CPU/Core install and sidecar lifecycle only; they do not qualify CUDA, macOS +MPS, or v2.14.0 image generation. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/target-wheel-research.md b/docs/plans/torch-cross-platform-runtime-management/reports/target-wheel-research.md new file mode 100644 index 000000000..77ab38601 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/target-wheel-research.md @@ -0,0 +1,51 @@ +# Target and Official Torch Wheel Research + +Date checked: 2026-09-24. + +## Pumas desktop targets + +[`scripts/release/artifact-plan.json`](../../../../scripts/release/artifact-plan.json#L58) +is the current product target authority. It lists `x86_64-unknown-linux-gnu`, +`x86_64-pc-windows-msvc`, and `aarch64-apple-darwin`, with native Ubuntu, +Windows, and macOS release runners. The Electron packaging config also ships +Windows x64 and macOS arm64, not Windows ARM or Intel Mac. + +## Official PyTorch examples + +The [official CPU Torch index](https://download.pytorch.org/whl/cpu/torch/) +contains Torch 2.14.0 `+cpu` wheels tagged `win_amd64` and `win_arm64`, and +macOS arm64 wheels named with the plain release version and +`macosx_14_0_arm64`. CPython 3.10–3.13 artifacts are listed for the macOS +arm64 tag; the exact wheel tag sets the minimum supported macOS version for +that release. The Pumas target matrix supports only the macOS arm64 variant. + +The [official CUDA 13.2 Torch index](https://download.pytorch.org/whl/cu132/torch/) +contains Torch 2.14.0 Windows x64 wheels for CPython 3.10–3.15, as well as Linux +wheels. This establishes package availability, not a Windows driver floor, +device execution, model compatibility, or image-generation support. + +PyTorch's [MPS backend documentation](https://docs.pytorch.org/docs/stable/notes/mps.html) +describes Metal as a runtime backend. Therefore MPS is probed as a capability +of an installed native Torch runtime, not selected as an official wheel build +channel. + +## Local support boundary inspected + +- [`torch-server/resolve_runtime.py`](../../../../torch-server/resolve_runtime.py) + runs wheel-tag inspection using the candidate interpreter but currently + gates it to Linux x86_64 and assumes every build is represented by a + `+` distribution version. +- [`torch_alternatives.rs`](../../../../rust/crates/pumas-app-manager/src/version_manager/torch_alternatives.rs) + is the host's current discovery owner but uses Linux PCI paths and + Linux-only driver policy. +- [`torch_preview.rs`](../../../../rust/crates/pumas-app-manager/src/version_manager/torch_preview.rs), + [`installer/torch.rs`](../../../../rust/crates/pumas-app-manager/src/version_manager/installer/torch.rs), + and [`state.rs`](../../../../rust/crates/pumas-app-manager/src/version_manager/state.rs) + contain Linux executable paths and/or gates. +- [`process_owner.rs`](../../../../rust/crates/pumas-core/src/runtime_profiles/process_owner.rs) + rejects non-Linux owned binary-profile startup. Existing generic process + helpers do not by themselves provide the Linux process group's retained + generation evidence or a Windows Job Object lifetime. + +These sources establish a clear code gap, not target acceptance. Required +Windows and macOS acceptance remains native and pending. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-acceptance/acceptance.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-acceptance/acceptance.json new file mode 100644 index 000000000..da76db543 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-acceptance/acceptance.json @@ -0,0 +1,21 @@ +{ + "architecture": "x86_64", + "artifact_count": 25, + "build": "cpu", + "cleanup_safe": true, + "cpython_version": "3.14.7", + "platform": "linux", + "probe": "passed", + "provider": "uv", + "provider_archive_sha256": "89eadd7c76fc063887959510d5ba0ab1264dfd5f1143b925ddb73021a40acf16", + "provider_version": "0.12.18", + "python": "python3.14", + "release": "v2.14.0", + "sidecar_generation": "1", + "sidecar_protocol": 3, + "stop_result": true, + "stopped": true, + "success": true, + "target": "x86_64-unknown-linux-gnu", + "trial": "passed" +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-acceptance/pip-resolution.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-acceptance/pip-resolution.json new file mode 100644 index 000000000..01a28e8e2 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-acceptance/pip-resolution.json @@ -0,0 +1,2057 @@ +{ + "version": "1", + "pip_version": "26.2.1", + "install": [ + { + "download_info": { + "url": "https://download-r2.pytorch.org/whl/cpu/torch-2.14.0%2Bcpu-cp314-cp314-manylinux_2_28_x86_64.whl", + "archive_info": { + "hashes": { + "sha256": "f152f41dc5dc462afe0de780e451ebb47ea8b4451f8f919f9537aa8e2cbe1d7e" + }, + "hash": "sha256=f152f41dc5dc462afe0de780e451ebb47ea8b4451f8f919f9537aa8e2cbe1d7e" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.4", + "name": "torch", + "version": "2.14.0+cpu", + "summary": "Tensors and Dynamic neural networks in Python with strong GPU acceleration", + "description": "\n \n \n \"PyTorch\n\n\n--------------------------------------------------------------------------------\n\nPyTorch is a Python package that provides two high-level features:\n- Tensor computation (like NumPy) with strong GPU acceleration\n- Deep neural networks built on a tape-based autograd system\n\nYou can reuse your favorite Python packages such as NumPy, SciPy, and Cython to extend PyTorch when needed.\n\nOur trunk health (Continuous Integration signals) can be found at [hud.pytorch.org](https://hud.pytorch.org/ci/pytorch/pytorch/main).\n\n\n\n- [More About PyTorch](#more-about-pytorch)\n - [A GPU-Ready Tensor Library](#a-gpu-ready-tensor-library)\n - [Dynamic Neural Networks: Tape-Based Autograd](#dynamic-neural-networks-tape-based-autograd)\n - [Python First](#python-first)\n - [Imperative Experiences](#imperative-experiences)\n - [Fast and Lean](#fast-and-lean)\n - [Extensions Without Pain](#extensions-without-pain)\n- [Installation](#installation)\n - [Binaries](#binaries)\n - [NVIDIA Jetson Platforms](#nvidia-jetson-platforms)\n - [From Source](#from-source)\n - [Prerequisites](#prerequisites)\n - [NVIDIA CUDA Support](#nvidia-cuda-support)\n - [AMD ROCm Support](#amd-rocm-support)\n - [Intel GPU Support](#intel-gpu-support)\n - [Get the PyTorch Source](#get-the-pytorch-source)\n - [Install Dependencies](#install-dependencies)\n - [Install PyTorch](#install-pytorch)\n - [Adjust Build Options (Optional)](#adjust-build-options-optional)\n - [Docker Image](#docker-image)\n - [Using pre-built images](#using-pre-built-images)\n - [Building the image yourself](#building-the-image-yourself)\n - [Building the Documentation](#building-the-documentation)\n - [Troubleshooting CI Errors](#troubleshooting-ci-errors)\n - [Building a PDF](#building-a-pdf)\n - [Previous Versions](#previous-versions)\n- [Getting Started](#getting-started)\n- [Resources](#resources)\n- [Communication](#communication)\n- [Releases and Contributing](#releases-and-contributing)\n- [The Team](#the-team)\n- [License](#license)\n\n\n\n## More About PyTorch\n\n[Learn the basics of PyTorch](https://pytorch.org/tutorials/beginner/basics/intro.html)\n\nAt a granular level, PyTorch is a library that consists of the following components:\n\n| Component | Description |\n| ---- | --- |\n| [**torch**](https://pytorch.org/docs/stable/torch.html) | A Tensor library like NumPy, with strong GPU support |\n| [**torch.autograd**](https://pytorch.org/docs/stable/autograd.html) | A tape-based automatic differentiation library that supports all differentiable Tensor operations in torch |\n| [**torch.jit**](https://pytorch.org/docs/stable/jit.html) | A compilation stack (TorchScript) to create serializable and optimizable models from PyTorch code |\n| [**torch.nn**](https://pytorch.org/docs/stable/nn.html) | A neural networks library deeply integrated with autograd designed for maximum flexibility |\n| [**torch.multiprocessing**](https://pytorch.org/docs/stable/multiprocessing.html) | Python multiprocessing, but with magical memory sharing of torch Tensors across processes. Useful for data loading and Hogwild training |\n| [**torch.utils**](https://pytorch.org/docs/stable/data.html) | DataLoader and other utility functions for convenience |\n\nUsually, PyTorch is used either as:\n\n- A replacement for NumPy to use the power of GPUs.\n- A deep learning research platform that provides maximum flexibility and speed.\n\nElaborating Further:\n\n### A GPU-Ready Tensor Library\n\nIf you use NumPy, then you have used Tensors (a.k.a. ndarray).\n\n![Tensor illustration](https://github.com/pytorch/pytorch/raw/main/docs/source/_static/img/tensor_illustration.png)\n\nPyTorch provides Tensors that can live either on the CPU or the GPU and accelerates the\ncomputation by a huge amount.\n\nWe provide a wide variety of tensor routines to accelerate and fit your scientific computation needs\nsuch as slicing, indexing, mathematical operations, linear algebra, reductions.\nAnd they are fast!\n\n### Dynamic Neural Networks: Tape-Based Autograd\n\nPyTorch has a unique way of building neural networks: using and replaying a tape recorder.\n\nMost frameworks such as TensorFlow, Theano, Caffe, and CNTK have a static view of the world.\nOne has to build a neural network and reuse the same structure again and again.\nChanging the way the network behaves means that one has to start from scratch.\n\nWith PyTorch, we use a technique called reverse-mode auto-differentiation, which allows you to\nchange the way your network behaves arbitrarily with zero lag or overhead. Our inspiration comes\nfrom several research papers on this topic, as well as current and past work such as\n[torch-autograd](https://github.com/twitter/torch-autograd),\n[autograd](https://github.com/HIPS/autograd),\n[Chainer](https://chainer.org), etc.\n\nWhile this technique is not unique to PyTorch, it's one of the fastest implementations of it to date.\nYou get the best of speed and flexibility for your crazy research.\n\n![Dynamic graph](https://github.com/pytorch/pytorch/raw/main/docs/source/_static/img/dynamic_graph.gif)\n\n### Python First\n\nPyTorch is not a Python binding into a monolithic C++ framework.\nIt is built to be deeply integrated into Python.\nYou can use it naturally like you would use [NumPy](https://www.numpy.org/) / [SciPy](https://www.scipy.org/) / [scikit-learn](https://scikit-learn.org) etc.\nYou can write your new neural network layers in Python itself, using your favorite libraries\nand use packages such as [Cython](https://cython.org/) and [Numba](https://numba.pydata.org/).\nOur goal is to not reinvent the wheel where appropriate.\n\n### Imperative Experiences\n\nPyTorch is designed to be intuitive, linear in thought, and easy to use.\nWhen you execute a line of code, it gets executed. There isn't an asynchronous view of the world.\nWhen you drop into a debugger or receive error messages and stack traces, understanding them is straightforward.\nThe stack trace points to exactly where your code was defined.\nWe hope you never spend hours debugging your code because of bad stack traces or asynchronous and opaque execution engines.\n\n### Fast and Lean\n\nPyTorch has minimal framework overhead. We integrate acceleration libraries\nsuch as [Intel MKL](https://software.intel.com/mkl) and NVIDIA ([cuDNN](https://developer.nvidia.com/cudnn), [NCCL](https://developer.nvidia.com/nccl)) to maximize speed.\nAt the core, its CPU and GPU Tensor and neural network backends\nare mature and have been tested for years.\n\nHence, PyTorch is quite fast — whether you run small or large neural networks.\n\nThe memory usage in PyTorch is extremely efficient compared to Torch or some of the alternatives.\nWe've written custom memory allocators for the GPU to make sure that\nyour deep learning models are maximally memory efficient.\nThis enables you to train bigger deep learning models than before.\n\n### Extensions Without Pain\n\nWriting new neural network modules, or interfacing with PyTorch's Tensor API, was designed to be straightforward\nand with minimal abstractions.\n\nYou can write new neural network layers in Python using the torch API\n[or your favorite NumPy-based libraries such as SciPy](https://pytorch.org/tutorials/advanced/numpy_extensions_tutorial.html).\n\nIf you want to write your layers in C/C++, we provide a convenient extension API that is efficient and with minimal boilerplate.\nNo wrapper code needs to be written. You can see [a tutorial here](https://pytorch.org/tutorials/advanced/cpp_extension.html) and [an example here](https://github.com/pytorch/extension-cpp).\n\n\n## Installation\n\n### Binaries\nCommands to install binaries via Conda or pip wheels are on our website: [https://pytorch.org/get-started/locally/](https://pytorch.org/get-started/locally/)\n\n\n#### NVIDIA Jetson Platforms\n\nPython wheels for NVIDIA's Jetson Nano, Jetson TX1/TX2, Jetson Xavier NX/AGX, and Jetson AGX Orin are provided [here](https://forums.developer.nvidia.com/t/pytorch-for-jetson-version-1-10-now-available/72048) and the L4T container is published [here](https://catalog.ngc.nvidia.com/orgs/nvidia/containers/l4t-pytorch)\n\nThey require JetPack 4.2 and above, and [@dusty-nv](https://github.com/dusty-nv) and [@ptrblck](https://github.com/ptrblck) are maintaining them.\n\n\n### From Source\n\n#### Prerequisites\nIf you are installing from source, you will need:\n- Python 3.10 or later\n- A compiler that fully supports C++20, such as clang or gcc (gcc 11.3.0 or newer is required, on Linux)\n- Visual Studio or Visual Studio Build Tool (Windows only)\n- At least 10 GB of free disk space\n- 30-60 minutes for the initial build (subsequent rebuilds are much faster)\n\n\\* PyTorch CI uses Visual C++ BuildTools, which come with Visual Studio Enterprise,\nProfessional, or Community Editions. You can also install the build tools from\nhttps://visualstudio.microsoft.com/visual-cpp-build-tools/. The build tools *do not*\ncome with Visual Studio Code by default.\n\nAn example of environment setup is shown below:\n\n* Linux:\n\n```bash\n$ source /bin/activate\n$ conda create -y -n \n$ conda activate \n```\n* Windows:\n\n```bash\n$ source \\Scripts\\activate.bat\n$ conda create -y -n \n$ conda activate \n$ call \"C:\\Program Files\\Microsoft Visual Studio\\\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat\" x64\n```\n\nA conda environment is not required. You can also do a PyTorch build in a\nstandard virtual environment, e.g., created with tools like `uv`, provided\nyour system has installed all the necessary dependencies unavailable as pip\npackages (e.g., CUDA, MKL.)\n\n##### NVIDIA CUDA Support\nIf you want to compile with CUDA support, [select a supported version of CUDA from our support matrix](https://pytorch.org/get-started/locally/), then install the following:\n- [NVIDIA CUDA](https://developer.nvidia.com/cuda-downloads)\n- [NVIDIA cuDNN](https://developer.nvidia.com/cudnn) v9.0 or above\n- [Compiler](https://gist.github.com/ax3l/9489132) compatible with CUDA\n\nNote: You could refer to the [cuDNN Support Matrix](https://docs.nvidia.com/deeplearning/cudnn/backend/latest/reference/support-matrix.html) for cuDNN versions with the various supported CUDA, CUDA driver, and NVIDIA hardware.\n\nIf you want to disable CUDA support, export the environment variable `USE_CUDA=0`.\nOther potentially useful environment variables are documented in `cmake/EnvVarForwarding.cmake`. If\nCUDA is installed in a non-standard location, set PATH so that the nvcc you\nwant to use can be found (e.g., `export PATH=/usr/local/cuda-12.8/bin:$PATH`).\n\nIf you are building for NVIDIA's Jetson platforms (Jetson Nano, TX1, TX2, AGX Xavier), Instructions to install PyTorch for Jetson Nano are [available here](https://devtalk.nvidia.com/default/topic/1049071/jetson-nano/pytorch-for-jetson-nano/)\n\n##### AMD ROCm Support\nIf you want to compile with ROCm support, install\n- [AMD ROCm](https://rocm.docs.amd.com/en/latest/deploy/linux/quick_start.html) 4.0 and above installation\n- ROCm is currently supported only for Linux systems.\n\nBy default the build system expects ROCm to be installed in `/opt/rocm`. If ROCm is installed in a different directory, the `ROCM_PATH` environment variable must be set to the ROCm installation directory. The build system automatically detects the AMD GPU architecture. Optionally, the AMD GPU architecture can be explicitly set with the `PYTORCH_ROCM_ARCH` environment variable [AMD GPU architecture](https://rocm.docs.amd.com/projects/install-on-linux/en/latest/reference/system-requirements.html#supported-gpus)\n\nIf you want to disable ROCm support, export the environment variable `USE_ROCM=0`.\nOther potentially useful environment variables are documented in `cmake/EnvVarForwarding.cmake`.\n\n##### Intel GPU Support\nIf you want to compile with Intel GPU support, follow these\n- [PyTorch Prerequisites for Intel GPUs](https://www.intel.com/content/www/us/en/developer/articles/tool/pytorch-prerequisites-for-intel-gpu.html) instructions.\n- Intel GPU is supported for Linux and Windows.\n\nIf you want to disable Intel GPU support, export the environment variable `USE_XPU=0`.\nOther potentially useful environment variables are documented in `cmake/EnvVarForwarding.cmake`.\n\n#### Get the PyTorch Source\n\n```bash\ngit clone https://github.com/pytorch/pytorch\ncd pytorch\n# if you are updating an existing checkout\ngit submodule sync\ngit submodule update --init --recursive\n```\n\n#### Install Dependencies\n\n**Common**\n\n```bash\n# Run this command from the PyTorch directory after cloning the source code using the “Get the PyTorch Source“ section above\npip install --group dev\n```\n\n**On Linux**\n\n```bash\npip install mkl-static mkl-include\n# CUDA only: Add LAPACK support for the GPU if needed\n# magma installation: run with active conda environment. specify CUDA version to install\n.ci/docker/common/install_magma_conda.sh 12.4\n\n# (optional) If using torch.compile with inductor/triton, install the matching version of triton\n# Run from the pytorch directory after cloning\n# For Intel GPU support, please explicitly `export USE_XPU=1` before running command.\nmake triton\n```\n\n**On Windows**\n\n```bash\npip install mkl-static mkl-include\n# Add these packages if torch.distributed is needed.\n# Distributed package support on Windows is a prototype feature and is subject to changes.\nconda install -c conda-forge libuv=1.51\n```\n\n#### Install PyTorch\n\n**On Linux**\n\nIf you're compiling for AMD ROCm then first run this command:\n\n```bash\n# Only run this if you're compiling for ROCm\npython tools/amd_build/build_amd.py\n```\n\nInstall PyTorch\n\n```bash\n# the CMake prefix for conda environment\nexport CMAKE_PREFIX_PATH=\"${CONDA_PREFIX:-'$(dirname $(which conda))/../'}:${CMAKE_PREFIX_PATH}\"\npython -m pip install --no-build-isolation -v -e .\n\n# the CMake prefix for non-conda environment, e.g. Python venv\n# call following after activating the venv\nexport CMAKE_PREFIX_PATH=\"${VIRTUAL_ENV}:${CMAKE_PREFIX_PATH}\"\n```\n\n**On macOS**\n\n```bash\npython -m pip install --no-build-isolation -v -e .\n```\n\n**On Windows**\n\nIf you want to build legacy python code, please refer to [Building on legacy code and CUDA](https://github.com/pytorch/pytorch/blob/main/CONTRIBUTING.md#building-on-legacy-code-and-cuda)\n\n**CPU-only builds**\n\nIn this mode PyTorch computations will run on your CPU, not your GPU.\n\n```cmd\npython -m pip install --no-build-isolation -v -e .\n```\n\nNote on OpenMP: The desired OpenMP implementation is Intel OpenMP (iomp). In order to link against iomp, you'll need to manually download the library and set up the building environment by tweaking `CMAKE_INCLUDE_PATH` and `LIB`. The instruction [here](https://docs.pytorch.org/docs/main/notes/windows.html#building-from-source) is an example for setting up both MKL and Intel OpenMP. Without these configurations for CMake, Microsoft Visual C OpenMP runtime (vcomp) will be used.\n\n**CUDA based build**\n\nIn this mode PyTorch computations will leverage your GPU via CUDA for faster number crunching\n\n[NVTX](https://docs.nvidia.com/gameworks/content/gameworkslibrary/nvtx/nvidia_tools_extension_library_nvtx.htm) is needed to build PyTorch with CUDA.\nNVTX is a part of CUDA distributive, where it is called \"Nsight Compute\". To install it onto an already installed CUDA run CUDA installation once again and check the corresponding checkbox.\nMake sure that CUDA with Nsight Compute is installed after Visual Studio.\n\nCurrently, VS 2017 / 2019, and Ninja are supported as the generator of CMake. If `ninja.exe` is detected in `PATH`, then Ninja will be used as the default generator, otherwise, it will use VS 2017 / 2019.\n
If Ninja is selected as the generator, the latest MSVC will get selected as the underlying toolchain.\n\nAdditional libraries such as\n[Magma](https://developer.nvidia.com/magma), [oneDNN, a.k.a. MKLDNN or DNNL](https://github.com/oneapi-src/oneDNN), and [Sccache](https://github.com/mozilla/sccache) are often needed. Please refer to the [installation-helper](https://github.com/pytorch/pytorch/tree/main/.ci/pytorch/win-test-helpers/installation-helpers) to install them.\n\nYou can refer to the [build_pytorch.bat](https://github.com/pytorch/pytorch/blob/main/.ci/pytorch/win-test-helpers/build_pytorch.bat) script for some other environment variables configurations\n\n```cmd\ncmd\n\n:: Set the environment variables after you have downloaded and unzipped the mkl package,\n:: else CMake would throw an error as `Could NOT find OpenMP`.\nset CMAKE_INCLUDE_PATH={Your directory}\\mkl\\include\nset LIB={Your directory}\\mkl\\lib;%LIB%\n\n:: Read the content in the previous section carefully before you proceed.\n:: [Optional] If you want to override the underlying toolset used by Ninja and Visual Studio with CUDA, please run the following script block.\n:: \"Visual Studio 2019 Developer Command Prompt\" will be run automatically.\n:: Make sure you have CMake >= 3.12 before you do this when you use the Visual Studio generator.\nset CMAKE_GENERATOR_TOOLSET_VERSION=14.27\nset DISTUTILS_USE_SDK=1\nfor /f \"usebackq tokens=*\" %i in (`\"%ProgramFiles(x86)%\\Microsoft Visual Studio\\Installer\\vswhere.exe\" -version [15^,17^) -products * -latest -property installationPath`) do call \"%i\\VC\\Auxiliary\\Build\\vcvarsall.bat\" x64 -vcvars_ver=%CMAKE_GENERATOR_TOOLSET_VERSION%\n\n:: [Optional] If you want to override the CUDA host compiler\nset CUDAHOSTCXX=C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.27.29110\\bin\\HostX64\\x64\\cl.exe\n\npython -m pip install --no-build-isolation -v -e .\n```\n\n**Intel GPU builds**\n\nIn this mode PyTorch with Intel GPU support will be built.\n\nPlease make sure [the common prerequisites](#prerequisites) as well as [the prerequisites for Intel GPU](#intel-gpu-support) are properly installed and the environment variables are configured prior to starting the build. For build tool support, `Visual Studio 2022` is required.\n\nThen PyTorch can be built with the command:\n\n```cmd\n:: CMD Commands:\n:: Set the CMAKE_PREFIX_PATH to help find corresponding packages\n:: %CONDA_PREFIX% only works after `conda activate custom_env`\n\nif defined CMAKE_PREFIX_PATH (\n set \"CMAKE_PREFIX_PATH=%CONDA_PREFIX%\\Library;%CMAKE_PREFIX_PATH%\"\n) else (\n set \"CMAKE_PREFIX_PATH=%CONDA_PREFIX%\\Library\"\n)\n\npython -m pip install --no-build-isolation -v -e .\n```\n\n##### Adjust Build Options (Optional)\n\nYou can adjust the configuration of CMake variables through environment variables, which the\nbuild forwards to CMake (see [`cmake/EnvVarForwarding.cmake`](./cmake/EnvVarForwarding.cmake) for\nthe full list). For example, pointing the build at a specific Conda prefix, CuDNN, or BLAS:\n\nOn Linux\n\n```bash\nexport CMAKE_PREFIX_PATH=\"${CONDA_PREFIX:-'$(dirname $(which conda))/../'}:${CMAKE_PREFIX_PATH}\"\nspin develop\n```\n\nOn macOS\n\n```bash\nexport CMAKE_PREFIX_PATH=\"${CONDA_PREFIX:-'$(dirname $(which conda))/../'}:${CMAKE_PREFIX_PATH}\"\nMACOSX_DEPLOYMENT_TARGET=11.0 spin develop\n```\n\nAfter a first `spin develop`, you can inspect or adjust the CMake cache interactively with\n`ccmake build` (or `cmake-gui build`) and rebuild with `spin develop`; your edits persist, because\nreconfiguration does not use `--fresh` and environment variables only seed cache entries that are\nnot already set. The corollary: once a variable is in the cache, changing its environment variable\nno longer affects it -- edit the cache directly (or delete `build/CMakeCache.txt`) to change it.\nThe build type and compiler are the exception; the build always re-applies them.\n\n### Docker Image\n\n#### Using pre-built images\n\nYou can also pull a pre-built docker image from Docker Hub and run with docker v23.0+\n\n```bash\ndocker run --gpus all --rm -ti --ipc=host pytorch/pytorch:latest\n```\n\nPlease note that PyTorch uses shared memory to share data between processes, so if torch multiprocessing is used (e.g.\nfor multithreaded data loaders) the default shared memory segment size that container runs with is not enough, and you\nshould increase shared memory size either with `--ipc=host` or `--shm-size` command line options to `nvidia-docker run`.\n\n#### Building the image yourself\n\n**NOTE:** Must be built with a Docker version >= 23.0\n\nThe Dockerfile is supplied to build images with CUDA 12.6 support and cuDNN v9.\nYou can pass `PYTHON_VERSION=x.y` make variable to specify which Python version is to be used by Miniconda, or leave it\nunset to use the default, as the Dockerfile uses system Python.\n\n```bash\nmake -f docker.Makefile\n# images are tagged as docker.io/${your_docker_username}/pytorch\n```\n\nYou can also pass the `CMAKE_VARS=\"...\"` environment variable to specify additional CMake variables to be passed to CMake during the build.\nSee [`cmake/EnvVarForwarding.cmake`](./cmake/EnvVarForwarding.cmake) for the list of available variables.\n\n```bash\nmake -f docker.Makefile\n```\n\n### Building the Documentation\n\nTo build documentation in various formats, you will need [Sphinx](https://www.sphinx-doc.org)\nand the `pytorch_sphinx_theme2`.\n\nBefore you build the documentation locally, ensure `torch` is\ninstalled in your environment. For small fixes, you can install the\nnightly version as described in [Getting Started](https://pytorch.org/get-started/locally/).\n\nFor more complex fixes, such as adding a new module and docstrings for\nthe new module, you might need to install torch [from source](#from-source).\nSee [Docstring Guidelines](https://github.com/pytorch/pytorch/wiki/Docstring-Guidelines)\nfor docstring conventions.\n\n```bash\ncd docs/\npip install -r requirements.txt\nmake html\nmake serve\n```\n\nRun `make` to get a list of all available output formats.\n\nIf you get a katex error run `npm install katex`. If it persists, try\n`npm install -g katex`\n\n> [!NOTE]\n> If you see a numpy incompatibility error, run:\n> ```\n> pip install 'numpy<2'\n> ```\n\n\n#### Troubleshooting CI Errors\nYour build may show errors you didn't have locally - here's how to find the errors relevant to the docs.\n\nIf the build has any errors, you will see something like this on the PR:\n\n\"Monosnap\n\nAny doc-related errors will occur in jobs that include \"doc\" somewhere in the title. It doesn't look like any of these jobs are relevant to our docs.\n\n\nLet's take a look anyway. Click on the job to see the logs:\n\n\"Monosnap\n\nAnd we can be sure that this job does not involve docs.\n\nLooking at this build, we can see these jobs are relevant to our docs - and they didn't have any errors:\n\n\"Check\n\nYou might also see a comment on the PR like this:\n\n\"PR\n\nWe can see that some of these issues are relevant to our docs.\n\nOpen the logs by clicking on the `gh` link:\n\n\"View\n\nAnd here we can see there is a doc-related error:\n\n\"Doc\n\nYou can always find the relevant doc builds by going to the `Checks` tab on your PR, and scrolling down to `pull`.\n\n\"checks\"\n\nYou can either click through or toggle the accordion to see all of the jobs here, where you can see the docs jobs highlighted:\n\n\"jobs\"\n\nIf you click through, you'll see the doc jobs at the bottom, like this:\n\n\"View\n\n\n#### Building a PDF\n\nTo compile a PDF of all PyTorch documentation, ensure you have\n`texlive` and LaTeX installed. On macOS, you can install them using:\n\n```\nbrew install --cask mactex\n```\n\nTo create the PDF:\n\n1. Run:\n\n ```\n make latexpdf\n ```\n\n This will generate the necessary files in the `build/latex` directory.\n\n2. Navigate to this directory and execute:\n\n ```\n make LATEXOPTS=\"-interaction=nonstopmode\"\n ```\n\n This will produce a `pytorch.pdf` with the desired content. Run this\n command one more time so that it generates the correct table\n of contents and index.\n\n> [!NOTE]\n> To view the Table of Contents, switch to the **Table of Contents**\n> view in your PDF viewer.\n\n\n### Previous Versions\n\nInstallation instructions and binaries for previous PyTorch versions may be found\non [our website](https://pytorch.org/get-started/previous-versions).\n\n\n## Getting Started\n\nPointers to get you started:\n- [Tutorials: get you started with understanding and using PyTorch](https://pytorch.org/tutorials/)\n- [Examples: easy to understand PyTorch code across all domains](https://github.com/pytorch/examples)\n- [The API Reference](https://pytorch.org/docs/)\n- [Glossary](https://github.com/pytorch/pytorch/blob/main/GLOSSARY.md)\n\n## Resources\n\n* [PyTorch.org](https://pytorch.org/)\n* [PyTorch Tutorials](https://pytorch.org/tutorials/)\n* [PyTorch Examples](https://github.com/pytorch/examples)\n* [PyTorch Models](https://pytorch.org/hub/)\n* [Intro to Deep Learning with PyTorch from Udacity](https://www.udacity.com/course/deep-learning-pytorch--ud188)\n* [Intro to Machine Learning with PyTorch from Udacity](https://www.udacity.com/course/intro-to-machine-learning-nanodegree--nd229)\n* [Deep Neural Networks with PyTorch from Coursera](https://www.coursera.org/learn/deep-neural-networks-with-pytorch)\n* [PyTorch Twitter](https://twitter.com/PyTorch)\n* [PyTorch Blog](https://pytorch.org/blog/)\n* [PyTorch YouTube](https://www.youtube.com/channel/UCWXI5YeOsh03QvJ59PMaXFw)\n\n## Communication\n* Forums: Discuss implementations, research, etc. https://discuss.pytorch.org\n* GitHub Issues: Bug reports, feature requests, install issues, RFCs, thoughts, etc.\n* Slack: The [PyTorch Slack](https://pytorch.slack.com/) hosts a primary audience of moderate to experienced PyTorch users and developers for general chat, online discussions, collaboration, etc. If you are a beginner looking for help, the primary medium is [PyTorch Forums](https://discuss.pytorch.org). If you need a slack invite, please fill this form: https://goo.gl/forms/PP1AGvNHpSaJP8to1\n* Newsletter: No-noise, a one-way email newsletter with important announcements about PyTorch. You can sign-up here: https://eepurl.com/cbG0rv\n* Facebook Page: Important announcements about PyTorch. https://www.facebook.com/pytorch\n* For brand guidelines, please visit our website at [pytorch.org](https://pytorch.org/)\n\n## Releases and Contributing\n\nTypically, PyTorch has three minor releases a year. Please let us know if you encounter a bug by [filing an issue](https://github.com/pytorch/pytorch/issues).\n\nWe appreciate all contributions. If you are planning to contribute back bug-fixes, please do so without any further discussion.\n\nIf you plan to contribute new features, utility functions, or extensions to the core, please first open an issue and discuss the feature with us.\nSending a PR without discussion might end up resulting in a rejected PR because we might be taking the core in a different direction than you might be aware of.\n\nTo learn more about making a contribution to PyTorch, please see our [Contribution page](CONTRIBUTING.md). For more information about PyTorch releases, see [Release page](RELEASE.md).\n\n## The Team\n\nPyTorch is a community-driven project with several skillful engineers and researchers contributing to it.\n\nPyTorch is currently maintained by [Soumith Chintala](https://soumith.ch), [Gregory Chanan](https://github.com/gchanan), [Dmytro Dzhulgakov](https://github.com/dzhulgakov), [Edward Yang](https://github.com/ezyang), [Alban Desmaison](https://github.com/albanD), [Piotr Bialecki](https://github.com/ptrblck) and [Nikita Shulga](https://github.com/malfet) with major contributions coming from hundreds of talented individuals in various forms and means.\nA non-exhaustive but growing list needs to mention: [Trevor Killeen](https://github.com/killeent), [Sasank Chilamkurthy](https://github.com/chsasank), [Sergey Zagoruyko](https://github.com/szagoruyko), [Adam Lerer](https://github.com/adamlerer), [Francisco Massa](https://github.com/fmassa), [Alykhan Tejani](https://github.com/alykhantejani), [Luca Antiga](https://github.com/lantiga), [Alban Desmaison](https://github.com/albanD), [Andreas Koepf](https://github.com/andreaskoepf), [James Bradbury](https://github.com/jekbradbury), [Zeming Lin](https://github.com/ebetica), [Yuandong Tian](https://github.com/yuandong-tian), [Guillaume Lample](https://github.com/glample), [Marat Dukhan](https://github.com/Maratyszcza), [Natalia Gimelshein](https://github.com/ngimel), [Christian Sarofeen](https://github.com/csarofeen), [Martin Raison](https://github.com/martinraison), [Edward Yang](https://github.com/ezyang), [Zachary Devito](https://github.com/zdevito). \n\nNote: This project is unrelated to [hughperkins/pytorch](https://github.com/hughperkins/pytorch) with the same name. Hugh is a valuable contributor to the Torch community and has helped with many things Torch and PyTorch.\n\n## License\n\nPyTorch has a BSD-style license, as found in the [LICENSE](LICENSE) file.\n", + "description_content_type": "text/markdown", + "keywords": [ + "pytorch", + "machine learning" + ], + "author_email": "PyTorch Team ", + "license_expression": "Apache-2.0 AND Apache-2.0 WITH LLVM-exception AND BSD-2-Clause AND BSD-3-Clause AND BSL-1.0 AND MIT", + "license_file": [ + "LICENSE", + "third_party/FP16/LICENSE", + "third_party/FXdiv/LICENSE", + "third_party/NNPACK/LICENSE", + "third_party/NVTX/LICENSE.txt", + "third_party/NVTX/docs/LICENSE.txt", + "third_party/NVTX/python/LICENSE.txt", + "third_party/NVTX/rust/LICENSE", + "third_party/VulkanMemoryAllocator/LICENSE.txt", + "third_party/XNNPACK/LICENSE", + "third_party/aiter/3rdparty/composable_kernel/LICENSE", + "third_party/aiter/LICENSE", + "third_party/benchmark/LICENSE", + "third_party/composable_kernel/LICENSE", + "third_party/cpp-httplib/LICENSE", + "third_party/cpuinfo/LICENSE", + "third_party/cpuinfo/deps/clog/LICENSE", + "third_party/cudnn_frontend/LICENSE.txt", + "third_party/cutlass/LICENSE.txt", + "third_party/cutlass/python/LICENSE.txt", + "third_party/fbgemm/LICENSE", + "third_party/fbgemm/external/composable_kernel/LICENSE", + "third_party/fbgemm/external/cpuinfo/LICENSE", + "third_party/fbgemm/external/cpuinfo/deps/clog/LICENSE", + "third_party/fbgemm/external/cutlass/LICENSE.txt", + "third_party/fbgemm/external/cutlass/python/LICENSE.txt", + "third_party/fbgemm/external/googletest/LICENSE", + "third_party/fbgemm/external/hipify_torch/LICENSE.txt", + "third_party/fbgemm/fbgemm_gpu/experimental/hstu/LICENSE", + "third_party/fbgemm/fbgemm_gpu/src/quantize_ops/mx/LICENSE", + "third_party/fbgemm/fbgemm_gpu/test/quantize/mx/LICENSE", + "third_party/flash-attention/LICENSE", + "third_party/flash-attention/csrc/composable_kernel/LICENSE", + "third_party/flash-attention/csrc/cutlass/LICENSE.txt", + "third_party/flash-attention/csrc/cutlass/python/LICENSE.txt", + "third_party/flash-attention/flash_attn/cute/LICENSE", + "third_party/flash-attention/third_party/aiter/3rdparty/composable_kernel/LICENSE", + "third_party/flash-attention/third_party/aiter/LICENSE", + "third_party/flatbuffers/LICENSE", + "third_party/flatbuffers/dart/LICENSE", + "third_party/flatbuffers/swift/LICENSE", + "third_party/fmt/LICENSE", + "third_party/gemmlowp/gemmlowp/LICENSE", + "third_party/gloo/LICENSE", + "third_party/googletest/LICENSE", + "third_party/ideep/LICENSE", + "third_party/ideep/mkl-dnn/LICENSE", + "third_party/ideep/mkl-dnn/third_party/gtest/LICENSE", + "third_party/ideep/mkl-dnn/third_party/opencl/LICENSE", + "third_party/kineto/LICENSE", + "third_party/kineto/libkineto/third_party/dynolog_headers/LICENSE", + "third_party/kineto/libkineto/third_party/fmt/LICENSE", + "third_party/kineto/libkineto/third_party/googletest/LICENSE", + "third_party/llvm-openmp/LICENSE.txt", + "third_party/mimalloc/LICENSE", + "third_party/miniz-3.0.2/LICENSE", + "third_party/mslk/LICENSE", + "third_party/mslk/external/composable_kernel/LICENSE", + "third_party/mslk/external/cutlass/LICENSE.txt", + "third_party/mslk/external/cutlass/python/LICENSE.txt", + "third_party/mslk/external/googletest/LICENSE", + "third_party/mslk/external/hipify_torch/LICENSE.txt", + "third_party/mslk/mslk/attention/flash_attn/LICENSE", + "third_party/onnx/LICENSE", + "third_party/onnx/third_party/pybind11/LICENSE", + "third_party/perfetto/LICENSE", + "third_party/protobuf/LICENSE", + "third_party/protobuf/third_party/benchmark/LICENSE", + "third_party/protobuf/third_party/googletest/LICENSE", + "third_party/protobuf/third_party/googletest/googlemock/LICENSE", + "third_party/protobuf/third_party/googletest/googlemock/scripts/generator/LICENSE", + "third_party/protobuf/third_party/googletest/googletest/LICENSE", + "third_party/protobuf/third_party/utf8_range/LICENSE", + "third_party/psimd/LICENSE", + "third_party/pthreadpool/LICENSE", + "third_party/pybind11/LICENSE", + "third_party/python-peachpy/LICENSE.rst", + "third_party/sleef/LICENSE.txt", + "third_party/tensorpipe/LICENSE.txt", + "third_party/tensorpipe/third_party/googletest/LICENSE", + "third_party/tensorpipe/third_party/googletest/googlemock/LICENSE", + "third_party/tensorpipe/third_party/googletest/googlemock/scripts/generator/LICENSE", + "third_party/tensorpipe/third_party/googletest/googletest/LICENSE", + "third_party/tensorpipe/third_party/libnop/LICENSE", + "third_party/tensorpipe/third_party/libuv/LICENSE", + "third_party/tensorpipe/third_party/pybind11/LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Intended Audience :: Education", + "Intended Audience :: Science/Research", + "Topic :: Scientific/Engineering", + "Topic :: Scientific/Engineering :: Mathematics", + "Topic :: Scientific/Engineering :: Artificial Intelligence", + "Topic :: Software Development", + "Topic :: Software Development :: Libraries", + "Topic :: Software Development :: Libraries :: Python Modules", + "Programming Language :: C++", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15" + ], + "requires_dist": [ + "filelock", + "typing-extensions>=4.10.0", + "setuptools>=77.0.3", + "sympy>=1.13.3", + "networkx>=2.5.1", + "jinja2", + "fsspec>=0.8.5", + "optree>=0.13.0; extra == \"optree\"", + "opt-einsum>=3.3; extra == \"opt-einsum\"", + "pyyaml; extra == \"pyyaml\"" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://pytorch.org", + "Repository, https://github.com/pytorch/pytorch", + "Documentation, https://pytorch.org/docs", + "Issue Tracker, https://github.com/pytorch/pytorch/issues", + "Forum, https://discuss.pytorch.org" + ], + "provides_extra": [ + "optree", + "opt-einsum", + "pyyaml" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/cb/03/10388a42375ee7e4ac9b94eb2c5c569c8b5795e377e701c9ac3ad63de890/fastapi-0.141.1-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3" + }, + "hash": "sha256=bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.4", + "name": "fastapi", + "version": "0.141.1", + "summary": "FastAPI framework, high performance, easy to learn, fast to code, ready for production", + "description": "

\n \"FastAPI\"\n

\n

\n FastAPI framework, high performance, easy to learn, fast to code, ready for production\n

\n

\n\n \"Test\"\n\n\n \"Coverage\"\n\n\n \"Package\n\n\n \"Supported\n\n

\n\n---\n\n**Documentation**: [https://fastapi.tiangolo.com](https://fastapi.tiangolo.com)\n\n**Source Code**: [https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi)\n\n---\n\nFastAPI is a modern, fast (high-performance), web framework for building APIs with Python based on standard Python type hints.\n\nThe key features are:\n\n* **Fast**: Very high performance, on par with **NodeJS** and **Go** (thanks to Starlette and Pydantic). [One of the fastest Python frameworks available](#performance).\n* **Fast to code**: Increase the speed to develop features by about 200% to 300%. *\n* **Fewer bugs**: Reduce about 40% of human (developer) induced errors. *\n* **Intuitive**: Great editor support. Completion everywhere. Less time debugging.\n* **Easy**: Designed to be easy to use and learn. Less time reading docs.\n* **Short**: Minimize code duplication. Multiple features from each parameter declaration. Fewer bugs.\n* **Robust**: Get production-ready code. With automatic interactive documentation.\n* **Standards-based**: Based on (and fully compatible with) the open standards for APIs: [OpenAPI](https://github.com/OAI/OpenAPI-Specification) (previously known as Swagger) and [JSON Schema](https://json-schema.org/).\n\n* estimation based on tests conducted by an internal development team, building production applications.\n\n## Sponsors\n\n\n### Keystone Sponsor\n\n\n\n### Gold Sponsors\n\n\n\n\n\n\n\n\n\n\n### Silver Sponsors\n\n\n\n\n\n\n\n\n\n\n[Other sponsors](https://fastapi.tiangolo.com/fastapi-people/#sponsors)\n\n## Opinions\n\n\n\n
\n\n\"_[...] I'm using **FastAPI** a ton these days. [...] I'm actually planning to use it for all of my team's **ML services at Microsoft**. Some of them are getting integrated into the core **Windows** product and some **Office** products._\"\n\n
Kabir Khan - Microsoft (ref)
\n\n---\n\n\"_We adopted the **FastAPI** library to spawn a **REST** server that can be queried to obtain **predictions**. [for Ludwig]_\"\n\n
Piero Molino, Yaroslav Dudin, and Sai Sumanth Miryala - Uber (ref)
\n\n---\n\n\"_**Netflix** is pleased to announce the open-source release of our **crisis management** orchestration framework: **Dispatch**! [built with **FastAPI**]_\"\n\n
Kevin Glisson, Marc Vilanova, Forest Monsen - Netflix (ref)
\n\n---\n\n\"_If anyone is looking to build a production Python API, I would highly recommend **FastAPI**. It is **beautifully designed**, **simple to use** and **highly scalable**, it has become a **key component** in our API first development strategy and is driving many automations and services such as our Virtual TAC Engineer._\"\n\n
Deon Pillsbury - Cisco (ref)
\n\n---\n\n
\n\n## FastAPI Conf\n\n[**FastAPI Conf '26**](https://fastapiconf.com) is happening on **October 28, 2026** in **Amsterdam, NL**. All about FastAPI, right from the source. 🎤\n\n\"FastAPI\n\n## FastAPI mini documentary\n\nThere's a [FastAPI mini documentary](https://www.youtube.com/watch?v=mpR8ngthqiE) released at the end of 2025, you can watch it online:\n\n\"FastAPI\n\n## **Typer**, the FastAPI of CLIs\n\n\n\nIf you are building a CLI app to be used in the terminal instead of a web API, check out [**Typer**](https://typer.tiangolo.com/).\n\n**Typer** is FastAPI's little sibling. And it's intended to be the **FastAPI of CLIs**. ⌨️ 🚀\n\n## Requirements\n\nFastAPI stands on the shoulders of giants:\n\n* [Starlette](https://starlette.dev/) for the web parts.\n* [Pydantic](https://pydantic.dev/docs/) for the data parts.\n\n## Installation\n\nFirst, [install `uv`](https://docs.astral.sh/uv/getting-started/installation/), and then add FastAPI to your project:\n\n
\n\n```console\n$ uv add \"fastapi[standard]\"\n\n---> 100%\n```\n\n
\n\n**Note**: Make sure you put `\"fastapi[standard]\"` in quotes to ensure it works in all terminals.\n\nIf you prefer to use `pip`, install `fastapi[standard]` inside a virtual environment. See the [installation guide](tutorial/#install-fastapi) for the alternative steps.\n\n## Example\n\n### Create it\n\nCreate a file `main.py` with:\n\n```Python\nfrom fastapi import FastAPI\n\napp = FastAPI()\n\n\n@app.get(\"/\")\ndef read_root():\n return {\"Hello\": \"World\"}\n\n\n@app.get(\"/items/{item_id}\")\ndef read_item(item_id: int, q: str | None = None):\n return {\"item_id\": item_id, \"q\": q}\n```\n\n
\nOr use async def...\n\nIf your code uses `async` / `await`, use `async def`:\n\n```Python hl_lines=\"7 12\"\nfrom fastapi import FastAPI\n\napp = FastAPI()\n\n\n@app.get(\"/\")\nasync def read_root():\n return {\"Hello\": \"World\"}\n\n\n@app.get(\"/items/{item_id}\")\nasync def read_item(item_id: int, q: str | None = None):\n return {\"item_id\": item_id, \"q\": q}\n```\n\n**Note**:\n\nIf you don't know, check the _\"In a hurry?\"_ section about [`async` and `await` in the docs](https://fastapi.tiangolo.com/async/#in-a-hurry).\n\n
\n\n### Run it\n\nRun the server with:\n\n
\n\n```console\n$ uv run fastapi dev\n\n ╭────────── FastAPI CLI - Development mode ───────────╮\n │ │\n │ Serving at: http://127.0.0.1:8000 │\n │ │\n │ API docs: http://127.0.0.1:8000/docs │\n │ │\n │ Running in development mode, for production use: │\n │ │\n │ fastapi run │\n │ │\n ╰─────────────────────────────────────────────────────╯\n\nINFO: Will watch for changes in these directories: ['/home/user/code/awesomeapp']\nINFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)\nINFO: Started reloader process [2248755] using WatchFiles\nINFO: Started server process [2248757]\nINFO: Waiting for application startup.\nINFO: Application startup complete.\n```\n\n
\n\n
\nAbout the command fastapi dev...\n\nThe command `fastapi dev` reads your `main.py` file automatically, detects the **FastAPI** app in it, and starts a server using [Uvicorn](https://uvicorn.dev).\n\nBy default, `fastapi dev` will start with auto-reload enabled for local development.\n\nYou can read more about it in the [FastAPI CLI docs](https://fastapi.tiangolo.com/fastapi-cli/).\n\n
\n\n### Check it\n\nOpen your browser at [http://127.0.0.1:8000/items/5?q=somequery](http://127.0.0.1:8000/items/5?q=somequery).\n\nYou will see the JSON response as:\n\n```JSON\n{\"item_id\": 5, \"q\": \"somequery\"}\n```\n\nYou already created an API that:\n\n* Receives HTTP requests in the _paths_ `/` and `/items/{item_id}`.\n* Both _paths_ take `GET` operations (also known as HTTP _methods_).\n* The _path_ `/items/{item_id}` has a _path parameter_ `item_id` that should be an `int`.\n* The _path_ `/items/{item_id}` has an optional `str` _query parameter_ `q`.\n\n### Interactive API docs\n\nNow go to [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs).\n\nYou will see the automatic interactive API documentation (provided by [Swagger UI](https://github.com/swagger-api/swagger-ui)):\n\n![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png)\n\n### Alternative API docs\n\nAnd now, go to [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc).\n\nYou will see the alternative automatic documentation (provided by [ReDoc](https://github.com/Redocly/redoc)):\n\n![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png)\n\n## Example upgrade\n\nNow modify the file `main.py` to receive a body from a `PUT` request.\n\nDeclare the body using standard Python types, thanks to Pydantic.\n\n```Python hl_lines=\"2 7-10 23-25\"\nfrom fastapi import FastAPI\nfrom pydantic import BaseModel\n\napp = FastAPI()\n\n\nclass Item(BaseModel):\n name: str\n price: float\n is_offer: bool | None = None\n\n\n@app.get(\"/\")\ndef read_root():\n return {\"Hello\": \"World\"}\n\n\n@app.get(\"/items/{item_id}\")\ndef read_item(item_id: int, q: str | None = None):\n return {\"item_id\": item_id, \"q\": q}\n\n\n@app.put(\"/items/{item_id}\")\ndef update_item(item_id: int, item: Item):\n return {\"item_name\": item.name, \"item_id\": item_id}\n```\n\nThe `fastapi dev` server should reload automatically.\n\n### Interactive API docs upgrade\n\nNow go to [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs).\n\n* The interactive API documentation will be automatically updated, including the new body:\n\n![Swagger UI](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png)\n\n* Click on the button \"Try it out\", it allows you to fill the parameters and directly interact with the API:\n\n![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-04-swagger-03.png)\n\n* Then click on the \"Execute\" button, the user interface will communicate with your API, send the parameters, get the results and show them on the screen:\n\n![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-05-swagger-04.png)\n\n### Alternative API docs upgrade\n\nAnd now, go to [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc).\n\n* The alternative documentation will also reflect the new query parameter and body:\n\n![ReDoc](https://fastapi.tiangolo.com/img/index/index-06-redoc-02.png)\n\n### Recap\n\nIn summary, you declare **once** the types of parameters, body, etc. as function parameters.\n\nYou do that with standard modern Python types.\n\nYou don't have to learn a new syntax, the methods or classes of a specific library, etc.\n\nJust standard **Python**.\n\nFor example, for an `int`:\n\n```Python\nitem_id: int\n```\n\nor for a more complex `Item` model:\n\n```Python\nitem: Item\n```\n\n...and with that single declaration you get:\n\n* Editor support, including:\n * Completion.\n * Type checks.\n* Validation of data:\n * Automatic and clear errors when the data is invalid.\n * Validation even for deeply nested JSON objects.\n* Conversion of input data: coming from the network to Python data and types. Reading from:\n * JSON.\n * Path parameters.\n * Query parameters.\n * Cookies.\n * Headers.\n * Forms.\n * Files.\n* Conversion of output data: converting from Python data and types to network data (as JSON):\n * Convert Python types (`str`, `int`, `float`, `bool`, `list`, etc).\n * `datetime` objects.\n * `UUID` objects.\n * Database models.\n * ...and many more.\n* Automatic interactive API documentation, including 2 alternative user interfaces:\n * Swagger UI.\n * ReDoc.\n\n---\n\nComing back to the previous code example, **FastAPI** will:\n\n* Validate that there is an `item_id` in the path for `GET` and `PUT` requests.\n* Validate that the `item_id` is of type `int` for `GET` and `PUT` requests.\n * If it is not, the client will see a useful, clear error.\n* Check if there is an optional query parameter named `q` (as in `http://127.0.0.1:8000/items/foo?q=somequery`) for `GET` requests.\n * As the `q` parameter is declared with `= None`, it is optional.\n * Without the `None` it would be required (as is the body in the case with `PUT`).\n* For `PUT` requests to `/items/{item_id}`, read the body as JSON:\n * Check that it has a required attribute `name` that should be a `str`.\n * Check that it has a required attribute `price` that has to be a `float`.\n * Check that it has an optional attribute `is_offer`, that should be a `bool`, if present.\n * All this would also work for deeply nested JSON objects.\n* Convert from and to JSON automatically.\n* Document everything with OpenAPI, that can be used by:\n * Interactive documentation systems.\n * Automatic client code generation systems, for many languages.\n* Provide 2 interactive documentation web interfaces directly.\n\n---\n\nWe just scratched the surface, but you already get the idea of how it all works.\n\nTry changing the line with:\n\n```Python\n return {\"item_name\": item.name, \"item_id\": item_id}\n```\n\n...from:\n\n```Python\n ... \"item_name\": item.name ...\n```\n\n...to:\n\n```Python\n ... \"item_price\": item.price ...\n```\n\n...and see how your editor will auto-complete the attributes and know their types:\n\n![editor support](https://fastapi.tiangolo.com/img/vscode-completion.png)\n\nFor a more complete example including more features, see the Tutorial - User Guide.\n\n**Spoiler alert**: the tutorial - user guide includes:\n\n* Declaration of **parameters** from other different places such as: **headers**, **cookies**, **form fields** and **files**.\n* How to set **validation constraints** such as `maximum_length` or `regex`.\n* A very powerful and easy to use **Dependency Injection** system.\n* Security and authentication, including support for **OAuth2** with **JWT tokens** and **HTTP Basic** auth.\n* More advanced (but equally easy) techniques for declaring **deeply nested JSON models** (thanks to Pydantic).\n* **GraphQL** integration with [Strawberry](https://strawberry.rocks) and other libraries.\n* Many extra features (thanks to Starlette) such as:\n * **WebSockets**\n * extremely easy tests based on HTTPX and `pytest`\n * **CORS**\n * **Cookie Sessions**\n * ...and more.\n\n### Deploy your app (optional)\n\nYou can optionally deploy your FastAPI app to [FastAPI Cloud](https://fastapicloud.com) with a single command. 🚀\n\n
\n\n```console\n$ uv run fastapi deploy\n\nDeploying to FastAPI Cloud...\n\n✅ Deployment successful!\n\n🐔 Ready the chicken! Your app is ready at https://myapp.fastapicloud.dev\n```\n\n
\n\nThe CLI will automatically detect your FastAPI application and deploy it to the cloud. If you are not logged in, your browser will open to complete the authentication process.\n\nThat's it! Now you can access your app at that URL. ✨\n\n#### About FastAPI Cloud\n\n**[FastAPI Cloud](https://fastapicloud.com)** is built by the same author and team behind **FastAPI**.\n\nIt streamlines the process of **building**, **deploying**, and **accessing** an API with minimal effort.\n\nIt brings the same **developer experience** of building apps with FastAPI to **deploying** them to the cloud. 🎉\n\nFastAPI Cloud is the primary sponsor and funding provider for the *FastAPI and friends* open source projects. ✨\n\n#### Deploy to other cloud providers\n\nFastAPI is open source and based on standards. You can deploy FastAPI apps to any cloud provider you choose.\n\nFollow your cloud provider's guides to deploy FastAPI apps with them. 🤓\n\n## Performance\n\nIndependent TechEmpower benchmarks show **FastAPI** applications running under Uvicorn as [one of the fastest Python frameworks available](https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7), only below Starlette and Uvicorn themselves (used internally by FastAPI). (*)\n\nTo understand more about it, see the section [Benchmarks](https://fastapi.tiangolo.com/benchmarks/).\n\n## Dependencies\n\nFastAPI depends on Pydantic and Starlette.\n\n### `standard` Dependencies\n\nWhen you install FastAPI with `uv add \"fastapi[standard]\"` it comes with the `standard` group of optional dependencies:\n\nUsed by Pydantic:\n\n* [`email-validator`](https://github.com/JoshData/python-email-validator) - for email validation.\n\nUsed by Starlette:\n\n* [`httpx`](https://www.python-httpx.org) - Required if you want to use the `TestClient`.\n* [`jinja2`](https://jinja.palletsprojects.com) - Required if you want to use the default template configuration.\n* [`python-multipart`](https://github.com/Kludex/python-multipart) - Required if you want to support form \"parsing\", with `request.form()`.\n\nUsed by FastAPI:\n\n* [`uvicorn`](https://uvicorn.dev) - for the server that loads and serves your application. This includes `uvicorn[standard]`, which includes some dependencies (e.g. `uvloop`) needed for high performance serving.\n* `fastapi-cli[standard]` - to provide the `fastapi` command.\n * This includes `fastapi-cloud-cli`, which allows you to deploy your FastAPI application to [FastAPI Cloud](https://fastapicloud.com).\n\n### Without `standard` Dependencies\n\nIf you don't want to include the `standard` optional dependencies, you can install with `uv add fastapi` instead of `uv add \"fastapi[standard]\"`.\n\n### Without `fastapi-cloud-cli`\n\nIf you want to install FastAPI with the standard dependencies but without the `fastapi-cloud-cli`, you can install with `uv add \"fastapi[standard-no-fastapi-cloud-cli]\"`.\n\n### Additional Optional Dependencies\n\nThere are some additional dependencies you might want to install.\n\nAdditional optional Pydantic dependencies:\n\n* [`pydantic-settings`](https://pydantic.dev/docs/validation/latest/concepts/pydantic_settings/) - for settings management.\n* [`pydantic-extra-types`](https://github.com/pydantic/pydantic-extra-types) - for extra types to be used with Pydantic.\n\nAdditional optional FastAPI dependencies:\n\n* [`orjson`](https://github.com/ijl/orjson) - Required if you want to use `ORJSONResponse`.\n* [`ujson`](https://github.com/ultrajson/ultrajson) - Required if you want to use `UJSONResponse`.\n\n## License\n\nThis project is licensed under the terms of the MIT license.\n", + "description_content_type": "text/markdown", + "author_email": "=?utf-8?q?Sebasti=C3=A1n_Ram=C3=ADrez?= ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Intended Audience :: Information Technology", + "Intended Audience :: System Administrators", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python", + "Topic :: Internet", + "Topic :: Software Development :: Libraries :: Application Frameworks", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Software Development :: Libraries", + "Topic :: Software Development", + "Typing :: Typed", + "Development Status :: 4 - Beta", + "Environment :: Web Environment", + "Framework :: AsyncIO", + "Framework :: FastAPI", + "Framework :: Pydantic", + "Framework :: Pydantic :: 2", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Topic :: Internet :: WWW/HTTP :: HTTP Servers", + "Topic :: Internet :: WWW/HTTP" + ], + "requires_dist": [ + "starlette>=0.46.0", + "pydantic>=2.9.0", + "typing-extensions>=4.8.0", + "typing-inspection>=0.4.2", + "annotated-doc>=0.0.2", + "fastapi-cli[standard]>=0.0.32; extra == \"standard\"", + "fastar>=0.9.0; extra == \"standard\"", + "httpx<1.0.0,>=0.23.0; extra == \"standard\"", + "jinja2>=3.1.5; extra == \"standard\"", + "python-multipart>=0.0.18; extra == \"standard\"", + "email-validator>=2.0.0; extra == \"standard\"", + "uvicorn[standard]>=0.12.0; extra == \"standard\"", + "pydantic-settings>=2.0.0; extra == \"standard\"", + "pydantic-extra-types>=2.0.0; extra == \"standard\"", + "fastapi-cli[standard-no-fastapi-cloud-cli]>=0.0.32; extra == \"standard-no-fastapi-cloud-cli\"", + "httpx<1.0.0,>=0.23.0; extra == \"standard-no-fastapi-cloud-cli\"", + "jinja2>=3.1.5; extra == \"standard-no-fastapi-cloud-cli\"", + "python-multipart>=0.0.18; extra == \"standard-no-fastapi-cloud-cli\"", + "email-validator>=2.0.0; extra == \"standard-no-fastapi-cloud-cli\"", + "uvicorn[standard]>=0.12.0; extra == \"standard-no-fastapi-cloud-cli\"", + "pydantic-settings>=2.0.0; extra == \"standard-no-fastapi-cloud-cli\"", + "pydantic-extra-types>=2.0.0; extra == \"standard-no-fastapi-cloud-cli\"", + "fastapi-cli[standard]>=0.0.32; extra == \"all\"", + "httpx<1.0.0,>=0.23.0; extra == \"all\"", + "jinja2>=3.1.5; extra == \"all\"", + "python-multipart>=0.0.18; extra == \"all\"", + "itsdangerous>=1.1.0; extra == \"all\"", + "pyyaml>=5.3.1; extra == \"all\"", + "email-validator>=2.0.0; extra == \"all\"", + "uvicorn[standard]>=0.12.0; extra == \"all\"", + "pydantic-settings>=2.0.0; extra == \"all\"", + "pydantic-extra-types>=2.0.0; extra == \"all\"" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://github.com/fastapi/fastapi", + "Documentation, https://fastapi.tiangolo.com/", + "Repository, https://github.com/fastapi/fastapi", + "Issues, https://github.com/fastapi/fastapi/issues", + "Changelog, https://fastapi.tiangolo.com/release-notes/" + ], + "provides_extra": [ + "standard", + "standard-no-fastapi-cloud-cli", + "all" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/38/0c/b54a4fdd7f90a3af8b02ebc9ce6712c2c208b7926a2f7bad95c33ebbe943/uvicorn-0.54.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf" + }, + "hash": "sha256=505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.5", + "name": "uvicorn", + "version": "0.54.0", + "summary": "The lightning-fast ASGI server.", + "description": "

\n uvicorn\n

\n\n

\nAn ASGI web server, for Python.\n

\n\n---\n\n[![Build Status](https://github.com/Kludex/uvicorn/workflows/Test%20Suite/badge.svg)](https://github.com/Kludex/uvicorn/actions)\n[![Package version](https://badge.fury.io/py/uvicorn.svg)](https://pypi.python.org/pypi/uvicorn)\n[![Supported Python Version](https://img.shields.io/pypi/pyversions/uvicorn.svg?color=%2334D058)](https://pypi.org/project/uvicorn)\n[![Discord](https://img.shields.io/discord/1051468649518616576?logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2)](https://discord.gg/RxKUF5JuHs)\n\n---\n\n**Documentation**: [https://uvicorn.dev](https://uvicorn.dev)\n\n**Source Code**: [https://www.github.com/Kludex/uvicorn](https://www.github.com/Kludex/uvicorn)\n\n---\n\nUvicorn is an ASGI web server implementation for Python.\n\nUntil recently Python has lacked a minimal low-level server/application interface for\nasync frameworks. The [ASGI specification][asgi] fills this gap, and means we're now able to\nstart building a common set of tooling usable across all async frameworks.\n\nUvicorn currently supports HTTP/1.1, HTTP/2 and WebSockets.\n\n## Quickstart\n\nInstall using `pip`:\n\n```shell\n$ pip install uvicorn\n```\n\nThis will install uvicorn with minimal (pure Python) dependencies.\n\n```shell\n$ pip install 'uvicorn[standard]'\n```\n\nThis will install uvicorn with \"Cython-based\" dependencies (where possible) and other \"optional extras\".\n\nIn this context, \"Cython-based\" means the following:\n\n- the event loop `uvloop` will be installed and used if possible.\n- the http protocol will be handled by `httptools` if possible.\n\nMoreover, \"optional extras\" means that:\n\n- the websocket protocol will be handled by `websockets` (should you want to use `wsproto` you'd need to install it manually) if possible.\n- the `--reload` flag in development mode will use `watchfiles`.\n- `python-dotenv` will be installed should you want to use the `--env-file` option.\n- `PyYAML` will be installed to allow you to provide a `.yaml` file to `--log-config`, if desired.\n\nCreate an application, in `example.py`:\n\n```python\nasync def app(scope, receive, send):\n assert scope['type'] == 'http'\n\n await send({\n 'type': 'http.response.start',\n 'status': 200,\n 'headers': [\n (b'content-type', b'text/plain'),\n ],\n })\n await send({\n 'type': 'http.response.body',\n 'body': b'Hello, world!',\n })\n```\n\nRun the server:\n\n```shell\n$ uvicorn example:app\n```\n\n---\n\n## Why ASGI?\n\nMost well established Python Web frameworks started out as WSGI-based frameworks.\n\nWSGI applications are a single, synchronous callable that takes a request and returns a response.\nThis doesn’t allow for long-lived connections, like you get with long-poll HTTP or WebSocket connections,\nwhich WSGI doesn't support well.\n\nHaving an async concurrency model also allows for options such as lightweight background tasks,\nand can be less of a limiting factor for endpoints that have long periods being blocked on network\nI/O such as dealing with slow HTTP requests.\n\n---\n\n## Alternative ASGI servers\n\nA strength of the ASGI protocol is that it decouples the server implementation\nfrom the application framework. This allows for an ecosystem of interoperating\nwebservers and application frameworks.\n\n### Daphne\n\nThe first ASGI server implementation, originally developed to power Django Channels, is [the Daphne webserver][daphne].\n\nIt is run widely in production, and supports HTTP/1.1, HTTP/2, and WebSockets.\n\nAny of the example applications given here can equally well be run using `daphne` instead.\n\n```\n$ pip install daphne\n$ daphne app:App\n```\n\n### Hypercorn\n\n[Hypercorn][hypercorn] was initially part of the Quart web framework, before\nbeing separated out into a standalone ASGI server.\n\nHypercorn supports HTTP/1.1, HTTP/2, and WebSockets.\n\nIt also supports [the excellent `trio` async framework][trio], as an alternative to `asyncio`.\n\n```\n$ pip install hypercorn\n$ hypercorn app:App\n```\n\n### Mangum\n\n[Mangum][mangum] is an adapter for using ASGI applications with AWS Lambda & API Gateway.\n\n### Granian\n\n[Granian][granian] is an ASGI compatible Rust HTTP server which supports HTTP/2, TLS and WebSockets.\n\n---\n\n

Uvicorn is BSD licensed code.
Designed & crafted with care.

— 🦄 —

\n\n[asgi]: https://asgi.readthedocs.io/en/latest/\n[daphne]: https://github.com/django/daphne\n[hypercorn]: https://github.com/pgjones/hypercorn\n[trio]: https://trio.readthedocs.io\n[mangum]: https://github.com/jordaneremieff/mangum\n[granian]: https://github.com/emmett-framework/granian\n", + "description_content_type": "text/markdown", + "author_email": "Tom Christie ", + "maintainer_email": "Marcelo Trylesinski ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.md" + ], + "classifier": [ + "Development Status :: 4 - Beta", + "Environment :: Web Environment", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Internet :: WWW/HTTP" + ], + "requires_dist": [ + "click>=7.0", + "h11>=0.8", + "typing-extensions>=4.0; python_version < '3.11'", + "httptools>=0.8.0; extra == 'standard'", + "python-dotenv>=0.13; extra == 'standard'", + "pyyaml>=5.1; extra == 'standard'", + "uvloop>=0.15.1; (sys_platform != 'win32' and (sys_platform != 'cygwin' and platform_python_implementation != 'PyPy')) and extra == 'standard'", + "watchfiles>=0.20; extra == 'standard'", + "websockets>=13.0; extra == 'standard'" + ], + "requires_python": ">=3.10", + "project_url": [ + "Changelog, https://uvicorn.dev/release-notes", + "Funding, https://github.com/sponsors/Kludex", + "Homepage, https://uvicorn.dev/", + "Source, https://github.com/Kludex/uvicorn" + ], + "provides_extra": [ + "standard" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", + "archive_info": { + "hashes": { + "sha256": "076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9" + }, + "hash": "sha256=076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "psutil", + "version": "7.2.2", + "platform": [ + "Platform Independent" + ], + "summary": "Cross-platform lib for process and system monitoring.", + "description": "| |downloads| |stars| |forks| |contributors| |packages|\n| |version| |license| |stackoverflow| |twitter| |tidelift|\n| |github-actions-wheels| |github-actions-bsd|\n\n.. |downloads| image:: https://img.shields.io/pypi/dm/psutil.svg\n :target: https://clickpy.clickhouse.com/dashboard/psutil\n :alt: Downloads\n\n.. |stars| image:: https://img.shields.io/github/stars/giampaolo/psutil.svg\n :target: https://github.com/giampaolo/psutil/stargazers\n :alt: Github stars\n\n.. |forks| image:: https://img.shields.io/github/forks/giampaolo/psutil.svg\n :target: https://github.com/giampaolo/psutil/network/members\n :alt: Github forks\n\n.. |contributors| image:: https://img.shields.io/github/contributors/giampaolo/psutil.svg\n :target: https://github.com/giampaolo/psutil/graphs/contributors\n :alt: Contributors\n\n.. |stackoverflow| image:: https://img.shields.io/badge/stackoverflow-Ask%20questions-blue.svg\n :target: https://stackoverflow.com/questions/tagged/psutil\n :alt: Stackoverflow\n\n.. |github-actions-wheels| image:: https://img.shields.io/github/actions/workflow/status/giampaolo/psutil/.github/workflows/build.yml.svg?label=Linux%2C%20macOS%2C%20Windows\n :target: https://github.com/giampaolo/psutil/actions?query=workflow%3Abuild\n :alt: Linux, macOS, Windows\n\n.. |github-actions-bsd| image:: https://img.shields.io/github/actions/workflow/status/giampaolo/psutil/.github/workflows/bsd.yml.svg?label=FreeBSD,%20NetBSD,%20OpenBSD\n :target: https://github.com/giampaolo/psutil/actions?query=workflow%3Absd-tests\n :alt: FreeBSD, NetBSD, OpenBSD\n\n.. |version| image:: https://img.shields.io/pypi/v/psutil.svg?label=pypi\n :target: https://pypi.org/project/psutil\n :alt: Latest version\n\n.. |packages| image:: https://repology.org/badge/tiny-repos/python:psutil.svg\n :target: https://repology.org/metapackage/python:psutil/versions\n :alt: Binary packages\n\n.. |license| image:: https://img.shields.io/pypi/l/psutil.svg\n :target: https://github.com/giampaolo/psutil/blob/master/LICENSE\n :alt: License\n\n.. |twitter| image:: https://img.shields.io/twitter/follow/grodola?style=flat\n :target: https://twitter.com/grodola\n :alt: Twitter Follow\n\n.. |tidelift| image:: https://tidelift.com/badges/github/giampaolo/psutil?style=flat\n :target: https://tidelift.com/subscription/pkg/pypi-psutil?utm_source=pypi-psutil&utm_medium=referral&utm_campaign=readme\n :alt: Tidelift\n\n-----\n\nQuick links\n===========\n\n- `Home page `_\n- `Install `_\n- `Documentation `_\n- `Download `_\n- `Forum `_\n- `StackOverflow `_\n- `Blog `_\n- `What's new `_\n\n\nSummary\n=======\n\npsutil (process and system utilities) is a cross-platform library for\nretrieving information on **running processes** and **system utilization**\n(CPU, memory, disks, network, sensors) in Python.\nIt is useful mainly for **system monitoring**, **profiling and limiting process\nresources** and **management of running processes**.\nIt implements many functionalities offered by classic UNIX command line tools\nsuch as *ps, top, iotop, lsof, netstat, ifconfig, free* and others.\npsutil currently supports the following platforms:\n\n- **Linux**\n- **Windows**\n- **macOS**\n- **FreeBSD, OpenBSD**, **NetBSD**\n- **Sun Solaris**\n- **AIX**\n\nSupported Python versions are cPython 3.6+ and `PyPy `__.\nLatest psutil version supporting Python 2.7 is\n`psutil 6.1.1 `__.\n\nExample usages\n==============\n\nThis represents pretty much the whole psutil API.\n\nCPU\n---\n\n.. code-block:: python\n\n >>> import psutil\n >>>\n >>> psutil.cpu_times()\n scputimes(user=3961.46, nice=169.729, system=2150.659, idle=16900.540, iowait=629.59, irq=0.0, softirq=19.42, steal=0.0, guest=0, guest_nice=0.0)\n >>>\n >>> for x in range(3):\n ... psutil.cpu_percent(interval=1)\n ...\n 4.0\n 5.9\n 3.8\n >>>\n >>> for x in range(3):\n ... psutil.cpu_percent(interval=1, percpu=True)\n ...\n [4.0, 6.9, 3.7, 9.2]\n [7.0, 8.5, 2.4, 2.1]\n [1.2, 9.0, 9.9, 7.2]\n >>>\n >>> for x in range(3):\n ... psutil.cpu_times_percent(interval=1, percpu=False)\n ...\n scputimes(user=1.5, nice=0.0, system=0.5, idle=96.5, iowait=1.5, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)\n scputimes(user=1.0, nice=0.0, system=0.0, idle=99.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)\n scputimes(user=2.0, nice=0.0, system=0.0, idle=98.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)\n >>>\n >>> psutil.cpu_count()\n 4\n >>> psutil.cpu_count(logical=False)\n 2\n >>>\n >>> psutil.cpu_stats()\n scpustats(ctx_switches=20455687, interrupts=6598984, soft_interrupts=2134212, syscalls=0)\n >>>\n >>> psutil.cpu_freq()\n scpufreq(current=931.42925, min=800.0, max=3500.0)\n >>>\n >>> psutil.getloadavg() # also on Windows (emulated)\n (3.14, 3.89, 4.67)\n\nMemory\n------\n\n.. code-block:: python\n\n >>> psutil.virtual_memory()\n svmem(total=10367352832, available=6472179712, percent=37.6, used=8186245120, free=2181107712, active=4748992512, inactive=2758115328, buffers=790724608, cached=3500347392, shared=787554304)\n >>> psutil.swap_memory()\n sswap(total=2097147904, used=296128512, free=1801019392, percent=14.1, sin=304193536, sout=677842944)\n >>>\n\nDisks\n-----\n\n.. code-block:: python\n\n >>> psutil.disk_partitions()\n [sdiskpart(device='/dev/sda1', mountpoint='/', fstype='ext4', opts='rw,nosuid'),\n sdiskpart(device='/dev/sda2', mountpoint='/home', fstype='ext', opts='rw')]\n >>>\n >>> psutil.disk_usage('/')\n sdiskusage(total=21378641920, used=4809781248, free=15482871808, percent=22.5)\n >>>\n >>> psutil.disk_io_counters(perdisk=False)\n sdiskio(read_count=719566, write_count=1082197, read_bytes=18626220032, write_bytes=24081764352, read_time=5023392, write_time=63199568, read_merged_count=619166, write_merged_count=812396, busy_time=4523412)\n >>>\n\nNetwork\n-------\n\n.. code-block:: python\n\n >>> psutil.net_io_counters(pernic=True)\n {'eth0': netio(bytes_sent=485291293, bytes_recv=6004858642, packets_sent=3251564, packets_recv=4787798, errin=0, errout=0, dropin=0, dropout=0),\n 'lo': netio(bytes_sent=2838627, bytes_recv=2838627, packets_sent=30567, packets_recv=30567, errin=0, errout=0, dropin=0, dropout=0)}\n >>>\n >>> psutil.net_connections(kind='tcp')\n [sconn(fd=115, family=, type=, laddr=addr(ip='10.0.0.1', port=48776), raddr=addr(ip='93.186.135.91', port=80), status='ESTABLISHED', pid=1254),\n sconn(fd=117, family=, type=, laddr=addr(ip='10.0.0.1', port=43761), raddr=addr(ip='72.14.234.100', port=80), status='CLOSING', pid=2987),\n ...]\n >>>\n >>> psutil.net_if_addrs()\n {'lo': [snicaddr(family=, address='127.0.0.1', netmask='255.0.0.0', broadcast='127.0.0.1', ptp=None),\n snicaddr(family=, address='::1', netmask='ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', broadcast=None, ptp=None),\n snicaddr(family=, address='00:00:00:00:00:00', netmask=None, broadcast='00:00:00:00:00:00', ptp=None)],\n 'wlan0': [snicaddr(family=, address='192.168.1.3', netmask='255.255.255.0', broadcast='192.168.1.255', ptp=None),\n snicaddr(family=, address='fe80::c685:8ff:fe45:641%wlan0', netmask='ffff:ffff:ffff:ffff::', broadcast=None, ptp=None),\n snicaddr(family=, address='c4:85:08:45:06:41', netmask=None, broadcast='ff:ff:ff:ff:ff:ff', ptp=None)]}\n >>>\n >>> psutil.net_if_stats()\n {'lo': snicstats(isup=True, duplex=, speed=0, mtu=65536, flags='up,loopback,running'),\n 'wlan0': snicstats(isup=True, duplex=, speed=100, mtu=1500, flags='up,broadcast,running,multicast')}\n >>>\n\nSensors\n-------\n\n.. code-block:: python\n\n >>> import psutil\n >>> psutil.sensors_temperatures()\n {'acpitz': [shwtemp(label='', current=47.0, high=103.0, critical=103.0)],\n 'asus': [shwtemp(label='', current=47.0, high=None, critical=None)],\n 'coretemp': [shwtemp(label='Physical id 0', current=52.0, high=100.0, critical=100.0),\n shwtemp(label='Core 0', current=45.0, high=100.0, critical=100.0)]}\n >>>\n >>> psutil.sensors_fans()\n {'asus': [sfan(label='cpu_fan', current=3200)]}\n >>>\n >>> psutil.sensors_battery()\n sbattery(percent=93, secsleft=16628, power_plugged=False)\n >>>\n\nOther system info\n-----------------\n\n.. code-block:: python\n\n >>> import psutil\n >>> psutil.users()\n [suser(name='giampaolo', terminal='pts/2', host='localhost', started=1340737536.0, pid=1352),\n suser(name='giampaolo', terminal='pts/3', host='localhost', started=1340737792.0, pid=1788)]\n >>>\n >>> psutil.boot_time()\n 1365519115.0\n >>>\n\nProcess management\n------------------\n\n.. code-block:: python\n\n >>> import psutil\n >>> psutil.pids()\n [1, 2, 3, 4, 5, 6, 7, 46, 48, 50, 51, 178, 182, 222, 223, 224, 268, 1215,\n 1216, 1220, 1221, 1243, 1244, 1301, 1601, 2237, 2355, 2637, 2774, 3932,\n 4176, 4177, 4185, 4187, 4189, 4225, 4243, 4245, 4263, 4282, 4306, 4311,\n 4312, 4313, 4314, 4337, 4339, 4357, 4358, 4363, 4383, 4395, 4408, 4433,\n 4443, 4445, 4446, 5167, 5234, 5235, 5252, 5318, 5424, 5644, 6987, 7054,\n 7055, 7071]\n >>>\n >>> p = psutil.Process(7055)\n >>> p\n psutil.Process(pid=7055, name='python3', status='running', started='09:04:44')\n >>> p.pid\n 7055\n >>> p.name()\n 'python3'\n >>> p.exe()\n '/usr/bin/python3'\n >>> p.cwd()\n '/home/giampaolo'\n >>> p.cmdline()\n ['/usr/bin/python3', 'main.py']\n >>>\n >>> p.ppid()\n 7054\n >>> p.parent()\n psutil.Process(pid=4699, name='bash', status='sleeping', started='09:06:44')\n >>> p.parents()\n [psutil.Process(pid=4699, name='bash', started='09:06:44'),\n psutil.Process(pid=4689, name='gnome-terminal-server', status='sleeping', started='0:06:44'),\n psutil.Process(pid=1, name='systemd', status='sleeping', started='05:56:55')]\n >>> p.children(recursive=True)\n [psutil.Process(pid=29835, name='python3', status='sleeping', started='11:45:38'),\n psutil.Process(pid=29836, name='python3', status='waking', started='11:43:39')]\n >>>\n >>> p.status()\n 'running'\n >>> p.create_time()\n 1267551141.5019531\n >>> p.terminal()\n '/dev/pts/0'\n >>>\n >>> p.username()\n 'giampaolo'\n >>> p.uids()\n puids(real=1000, effective=1000, saved=1000)\n >>> p.gids()\n pgids(real=1000, effective=1000, saved=1000)\n >>>\n >>> p.cpu_times()\n pcputimes(user=1.02, system=0.31, children_user=0.32, children_system=0.1, iowait=0.0)\n >>> p.cpu_percent(interval=1.0)\n 12.1\n >>> p.cpu_affinity()\n [0, 1, 2, 3]\n >>> p.cpu_affinity([0, 1]) # set\n >>> p.cpu_num()\n 1\n >>>\n >>> p.memory_info()\n pmem(rss=10915840, vms=67608576, shared=3313664, text=2310144, lib=0, data=7262208, dirty=0)\n >>> p.memory_full_info() # \"real\" USS memory usage (Linux, macOS, Win only)\n pfullmem(rss=10199040, vms=52133888, shared=3887104, text=2867200, lib=0, data=5967872, dirty=0, uss=6545408, pss=6872064, swap=0)\n >>> p.memory_percent()\n 0.7823\n >>> p.memory_maps()\n [pmmap_grouped(path='/lib/x8664-linux-gnu/libutil-2.15.so', rss=32768, size=2125824, pss=32768, shared_clean=0, shared_dirty=0, private_clean=20480, private_dirty=12288, referenced=32768, anonymous=12288, swap=0),\n pmmap_grouped(path='/lib/x8664-linux-gnu/libc-2.15.so', rss=3821568, size=3842048, pss=3821568, shared_clean=0, shared_dirty=0, private_clean=0, private_dirty=3821568, referenced=3575808, anonymous=3821568, swap=0),\n pmmap_grouped(path='[heap]', rss=32768, size=139264, pss=32768, shared_clean=0, shared_dirty=0, private_clean=0, private_dirty=32768, referenced=32768, anonymous=32768, swap=0),\n pmmap_grouped(path='[stack]', rss=2465792, size=2494464, pss=2465792, shared_clean=0, shared_dirty=0, private_clean=0, private_dirty=2465792, referenced=2277376, anonymous=2465792, swap=0),\n ...]\n >>>\n >>> p.io_counters()\n pio(read_count=478001, write_count=59371, read_bytes=700416, write_bytes=69632, read_chars=456232, write_chars=517543)\n >>>\n >>> p.open_files()\n [popenfile(path='/home/giampaolo/monit.py', fd=3, position=0, mode='r', flags=32768),\n popenfile(path='/var/log/monit.log', fd=4, position=235542, mode='a', flags=33793)]\n >>>\n >>> p.net_connections(kind='tcp')\n [pconn(fd=115, family=, type=, laddr=addr(ip='10.0.0.1', port=48776), raddr=addr(ip='93.186.135.91', port=80), status='ESTABLISHED'),\n pconn(fd=117, family=, type=, laddr=addr(ip='10.0.0.1', port=43761), raddr=addr(ip='72.14.234.100', port=80), status='CLOSING')]\n >>>\n >>> p.threads()\n [pthread(id=5234, user_time=22.5, system_time=9.2891),\n pthread(id=5237, user_time=0.0707, system_time=1.1)]\n >>>\n >>> p.num_threads()\n 4\n >>> p.num_fds()\n 8\n >>> p.num_ctx_switches()\n pctxsw(voluntary=78, involuntary=19)\n >>>\n >>> p.nice()\n 0\n >>> p.nice(10) # set\n >>>\n >>> p.ionice(psutil.IOPRIO_CLASS_IDLE) # IO priority (Win and Linux only)\n >>> p.ionice()\n pionice(ioclass=, value=0)\n >>>\n >>> p.rlimit(psutil.RLIMIT_NOFILE, (5, 5)) # set resource limits (Linux only)\n >>> p.rlimit(psutil.RLIMIT_NOFILE)\n (5, 5)\n >>>\n >>> p.environ()\n {'LC_PAPER': 'it_IT.UTF-8', 'SHELL': '/bin/bash', 'GREP_OPTIONS': '--color=auto',\n 'XDG_CONFIG_DIRS': '/etc/xdg/xdg-ubuntu:/usr/share/upstart/xdg:/etc/xdg',\n ...}\n >>>\n >>> p.as_dict()\n {'status': 'running', 'num_ctx_switches': pctxsw(voluntary=63, involuntary=1), 'pid': 5457, ...}\n >>> p.is_running()\n True\n >>> p.suspend()\n >>> p.resume()\n >>>\n >>> p.terminate()\n >>> p.kill()\n >>> p.wait(timeout=3)\n \n >>>\n >>> psutil.test()\n USER PID %CPU %MEM VSZ RSS TTY START TIME COMMAND\n root 1 0.0 0.0 24584 2240 Jun17 00:00 init\n root 2 0.0 0.0 0 0 Jun17 00:00 kthreadd\n ...\n giampaolo 31475 0.0 0.0 20760 3024 /dev/pts/0 Jun19 00:00 python2.4\n giampaolo 31721 0.0 2.2 773060 181896 00:04 10:30 chrome\n root 31763 0.0 0.0 0 0 00:05 00:00 kworker/0:1\n >>>\n\nFurther process APIs\n--------------------\n\n.. code-block:: python\n\n >>> import psutil\n >>> for proc in psutil.process_iter(['pid', 'name']):\n ... print(proc.info)\n ...\n {'pid': 1, 'name': 'systemd'}\n {'pid': 2, 'name': 'kthreadd'}\n {'pid': 3, 'name': 'ksoftirqd/0'}\n ...\n >>>\n >>> psutil.pid_exists(3)\n True\n >>>\n >>> def on_terminate(proc):\n ... print(\"process {} terminated\".format(proc))\n ...\n >>> # waits for multiple processes to terminate\n >>> gone, alive = psutil.wait_procs(procs_list, timeout=3, callback=on_terminate)\n >>>\n\nHeap info\n---------\n\n.. code-block:: python\n\n >>> import psutil\n >>> psutil.heap_info()\n pheap(heap_used=5177792, mmap_used=819200)\n >>> psutil.heap_trim()\n\nSee also `psleak `__\n\nWindows services\n----------------\n\n.. code-block:: python\n\n >>> list(psutil.win_service_iter())\n [,\n ,\n ,\n ,\n ...]\n >>> s = psutil.win_service_get('alg')\n >>> s.as_dict()\n {'binpath': 'C:\\\\Windows\\\\System32\\\\alg.exe',\n 'description': 'Provides support for 3rd party protocol plug-ins for Internet Connection Sharing',\n 'display_name': 'Application Layer Gateway Service',\n 'name': 'alg',\n 'pid': None,\n 'start_type': 'manual',\n 'status': 'stopped',\n 'username': 'NT AUTHORITY\\\\LocalService'}\n\nProjects using psutil\n=====================\n\nHere's some I find particularly interesting:\n\n- https://github.com/giampaolo/psleak\n- https://github.com/google/grr\n- https://github.com/facebook/osquery/\n- https://github.com/nicolargo/glances\n- https://github.com/aristocratos/bpytop\n- https://github.com/Jahaja/psdash\n- https://github.com/ajenti/ajenti\n- https://github.com/home-assistant/home-assistant/\n\nPortings\n========\n\n- Go: https://github.com/shirou/gopsutil\n- C: https://github.com/hamon-in/cpslib\n- Rust: https://github.com/rust-psutil/rust-psutil\n- Nim: https://github.com/johnscillieri/psutil-nim\n\n\n\n", + "description_content_type": "text/x-rst", + "keywords": [ + "ps", + "top", + "kill", + "free", + "lsof", + "netstat", + "nice", + "tty", + "ionice", + "uptime", + "taskmgr", + "process", + "df", + "iotop", + "iostat", + "ifconfig", + "taskset", + "who", + "pidof", + "pmap", + "smem", + "pstree", + "monitoring", + "ulimit", + "prlimit", + "smem", + "performance", + "metrics", + "agent", + "observability" + ], + "home_page": "https://github.com/giampaolo/psutil", + "author": "Giampaolo Rodola", + "author_email": "g.rodola@gmail.com", + "license": "BSD-3-Clause", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Environment :: Console", + "Intended Audience :: Developers", + "Intended Audience :: Information Technology", + "Intended Audience :: System Administrators", + "Operating System :: MacOS :: MacOS X", + "Operating System :: Microsoft :: Windows :: Windows 10", + "Operating System :: Microsoft :: Windows :: Windows 11", + "Operating System :: Microsoft :: Windows :: Windows 7", + "Operating System :: Microsoft :: Windows :: Windows 8", + "Operating System :: Microsoft :: Windows :: Windows 8.1", + "Operating System :: Microsoft :: Windows :: Windows Server 2003", + "Operating System :: Microsoft :: Windows :: Windows Server 2008", + "Operating System :: Microsoft :: Windows :: Windows Vista", + "Operating System :: Microsoft :: Windows", + "Operating System :: Microsoft", + "Operating System :: OS Independent", + "Operating System :: POSIX :: AIX", + "Operating System :: POSIX :: BSD :: FreeBSD", + "Operating System :: POSIX :: BSD :: NetBSD", + "Operating System :: POSIX :: BSD :: OpenBSD", + "Operating System :: POSIX :: BSD", + "Operating System :: POSIX :: Linux", + "Operating System :: POSIX :: SunOS/Solaris", + "Operating System :: POSIX", + "Programming Language :: C", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Programming Language :: Python", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Software Development :: Libraries", + "Topic :: System :: Benchmark", + "Topic :: System :: Hardware", + "Topic :: System :: Monitoring", + "Topic :: System :: Networking :: Monitoring :: Hardware Watchdog", + "Topic :: System :: Networking :: Monitoring", + "Topic :: System :: Networking", + "Topic :: System :: Operating System", + "Topic :: System :: Systems Administration", + "Topic :: Utilities" + ], + "requires_dist": [ + "psleak ; extra == 'dev'", + "pytest ; extra == 'dev'", + "pytest-instafail ; extra == 'dev'", + "pytest-xdist ; extra == 'dev'", + "setuptools ; extra == 'dev'", + "abi3audit ; extra == 'dev'", + "black ; extra == 'dev'", + "check-manifest ; extra == 'dev'", + "coverage ; extra == 'dev'", + "packaging ; extra == 'dev'", + "pylint ; extra == 'dev'", + "pyperf ; extra == 'dev'", + "pypinfo ; extra == 'dev'", + "pytest-cov ; extra == 'dev'", + "requests ; extra == 'dev'", + "rstcheck ; extra == 'dev'", + "ruff ; extra == 'dev'", + "sphinx ; extra == 'dev'", + "sphinx-rtd-theme ; extra == 'dev'", + "toml-sort ; extra == 'dev'", + "twine ; extra == 'dev'", + "validate-pyproject[all] ; extra == 'dev'", + "virtualenv ; extra == 'dev'", + "vulture ; extra == 'dev'", + "wheel ; extra == 'dev'", + "colorama ; (os_name == \"nt\") and extra == 'dev'", + "pyreadline3 ; (os_name == \"nt\") and extra == 'dev'", + "pywin32 ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'dev'", + "wheel ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'dev'", + "wmi ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'dev'", + "psleak ; extra == 'test'", + "pytest ; extra == 'test'", + "pytest-instafail ; extra == 'test'", + "pytest-xdist ; extra == 'test'", + "setuptools ; extra == 'test'", + "pywin32 ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'test'", + "wheel ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'test'", + "wmi ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'test'" + ], + "requires_python": ">=3.6", + "provides_extra": [ + "dev", + "test" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/5c/44/c85361f65dbe00eea8576ee467c768d25129989efb76e94f205e9ca9bb46/pillow-12.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", + "archive_info": { + "hashes": { + "sha256": "251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b" + }, + "hash": "sha256=251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.4", + "name": "pillow", + "version": "12.3.0", + "dynamic": [ + "license-file" + ], + "summary": "Python Imaging Library (fork)", + "description": "

\n \"Pillow\n

\n\n# Pillow\n\n## Python Imaging Library (Fork)\n\nPillow is the friendly PIL fork by [Jeffrey 'Alex' Clark and\ncontributors](https://github.com/python-pillow/Pillow/graphs/contributors).\nPIL is the Python Imaging Library by Fredrik Lundh and contributors.\nDevelopment is supported by:\n- [Tidelift](https://tidelift.com/subscription/pkg/pypi-pillow?utm_source=pypi-pillow&utm_medium=readme&utm_campaign=enterprise) (since 2018)\n- [Thanks.dev](https://thanks.dev) (since 2023)\n- [GitHub Sponsors](https://github.com/sponsors/python-pillow) (since 2026)\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
docs\n \n
tests\n \n \n \n \n \n \n \n \n
package\n \n \n \n \n \n
social\n \n \n
\n\n## Overview\n\nThe Python Imaging Library adds image processing capabilities to your Python interpreter.\n\nThis library provides extensive file format support, an efficient internal representation, and fairly powerful image processing capabilities.\n\nThe core image library is designed for fast access to data stored in a few basic pixel formats. It should provide a solid foundation for a general image processing tool.\n\n## More information\n\n- [Documentation](https://pillow.readthedocs.io/)\n - [Installation](https://pillow.readthedocs.io/en/latest/installation/basic-installation.html)\n - [Handbook](https://pillow.readthedocs.io/en/latest/handbook/index.html)\n- [Contribute](https://github.com/python-pillow/Pillow/blob/main/.github/CONTRIBUTING.md)\n - [Issues](https://github.com/python-pillow/Pillow/issues)\n - [Pull requests](https://github.com/python-pillow/Pillow/pulls)\n- [Release notes](https://pillow.readthedocs.io/en/stable/releasenotes/index.html)\n- [Changelog](https://github.com/python-pillow/Pillow/releases)\n - [Pre-fork](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst#pre-fork)\n\n## Report a vulnerability\n\nTo report sensitive vulnerability information, report it [privately on GitHub](https://github.com/python-pillow/Pillow/security/advisories/new).\n\nIf you cannot use GitHub, use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure.\n\nDO NOT report sensitive vulnerability information in public.\n", + "description_content_type": "text/markdown", + "keywords": [ + "Imaging" + ], + "author_email": "Jeffrey 'Alex' Clark ", + "license_expression": "MIT-CMU", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 6 - Mature", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Multimedia :: Graphics", + "Topic :: Multimedia :: Graphics :: Capture :: Digital Camera", + "Topic :: Multimedia :: Graphics :: Capture :: Screen Capture", + "Topic :: Multimedia :: Graphics :: Graphics Conversion", + "Topic :: Multimedia :: Graphics :: Viewers", + "Typing :: Typed" + ], + "requires_dist": [ + "furo; extra == \"docs\"", + "olefile; extra == \"docs\"", + "sphinx>=8.2; extra == \"docs\"", + "sphinx-autobuild; extra == \"docs\"", + "sphinx-copybutton; extra == \"docs\"", + "sphinx-inline-tabs; extra == \"docs\"", + "sphinxext-opengraph; extra == \"docs\"", + "olefile; extra == \"fpx\"", + "olefile; extra == \"mic\"", + "arro3-compute; extra == \"test-arrow\"", + "arro3-core; extra == \"test-arrow\"", + "nanoarrow; extra == \"test-arrow\"", + "pyarrow; extra == \"test-arrow\"", + "coverage>=7.4.2; extra == \"tests\"", + "defusedxml; extra == \"tests\"", + "markdown2; extra == \"tests\"", + "olefile; extra == \"tests\"", + "packaging; extra == \"tests\"", + "pytest; extra == \"tests\"", + "pytest-cov; extra == \"tests\"", + "pytest-timeout; extra == \"tests\"", + "pytest-xdist; extra == \"tests\"", + "setuptools; extra == \"tests\"", + "trove-classifiers>=2024.10.12; extra == \"tests\"", + "defusedxml; extra == \"xmp\"" + ], + "requires_python": ">=3.10", + "project_url": [ + "Release notes, https://pillow.readthedocs.io/en/stable/releasenotes/index.html", + "Changelog, https://github.com/python-pillow/Pillow/releases", + "Documentation, https://pillow.readthedocs.io", + "Funding, https://tidelift.com/subscription/pkg/pypi-pillow?utm_source=pypi-pillow&utm_medium=pypi", + "Homepage, https://python-pillow.github.io", + "Mastodon, https://fosstodon.org/@pillow", + "Source, https://github.com/python-pillow/Pillow" + ], + "provides_extra": [ + "docs", + "fpx", + "mic", + "test-arrow", + "tests", + "xmp" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/28/50/f203ff3a3ddfe19308efc83c5a3a29ed02bf786732ec35e68bf9162f3365/safetensors-0.8.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "archive_info": { + "hashes": { + "sha256": "fd6f3f93c9a0a7cc2788ee63fb763353d4bd2e89b0751bc78fcf7dda00bea774" + }, + "hash": "sha256=fd6f3f93c9a0a7cc2788ee63fb763353d4bd2e89b0751bc78fcf7dda00bea774" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.4", + "name": "safetensors", + "version": "0.8.0", + "description": "## Installation\n\n```\npip install safetensors\n```\n\n\n## Usage\n\n### Numpy\n\n```python\nfrom safetensors.numpy import save_file, load_file\nimport numpy as np\n\ntensors = {\n \"a\": np.zeros((2, 2)),\n \"b\": np.zeros((2, 3), dtype=np.uint8)\n}\n\nsave_file(tensors, \"./model.safetensors\")\n\n\n# Now loading\nloaded = load_file(\"./model.safetensors\")\n```\n\n### Torch\n\n```python\nfrom safetensors.torch import save_file, load_file\nimport torch\n\ntensors = {\n \"a\": torch.zeros((2, 2)),\n \"b\": torch.zeros((2, 3), dtype=torch.uint8)\n}\n\nsave_file(tensors, \"./model.safetensors\")\n\n\n# Now loading\nloaded = load_file(\"./model.safetensors\")\n```\n\n### Developing\n\n```\n# inside ./safetensors/bindings/python\npip install .[dev]\n```\nShould be enough to install this library locally.\n\n### Testing\n\n```\n# inside ./safetensors/bindings/python\npip install .[dev]\npytest -sv tests/\n```\n\n", + "description_content_type": "text/markdown; charset=UTF-8; variant=GFM", + "author_email": "Nicolas Patry , Luc Georges , Daniël De Kok ", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Intended Audience :: Education", + "Intended Audience :: Science/Research", + "License :: OSI Approved :: Apache Software License", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Topic :: Scientific/Engineering :: Artificial Intelligence", + "Typing :: Typed" + ], + "requires_dist": [ + "safetensors[torch] ; extra == 'all'", + "safetensors[numpy] ; extra == 'all'", + "safetensors[jax] ; extra == 'all'", + "safetensors[paddlepaddle] ; extra == 'all'", + "safetensors[convert] ; extra == 'all'", + "safetensors[quality] ; extra == 'all'", + "safetensors[testing] ; extra == 'all'", + "safetensors[torch] ; extra == 'convert'", + "huggingface-hub>=1.4 ; extra == 'convert'", + "safetensors[all] ; extra == 'dev'", + "safetensors[pinned-tf] ; extra == 'dev'", + "safetensors[numpy] ; extra == 'jax'", + "flax>=0.6.3 ; extra == 'jax'", + "jax>=0.3.25 ; extra == 'jax'", + "jaxlib>=0.3.25 ; extra == 'jax'", + "mlx>=0.0.9 ; extra == 'mlx'", + "numpy>=1.24.6 ; extra == 'numpy'", + "safetensors[numpy] ; extra == 'paddlepaddle'", + "paddlepaddle>=2.4.1 ; extra == 'paddlepaddle'", + "safetensors[numpy] ; extra == 'pinned-tf'", + "tensorflow==2.18.0 ; extra == 'pinned-tf'", + "ruff ; extra == 'quality'", + "safetensors[numpy] ; extra == 'tensorflow'", + "tensorflow>=2.11.0 ; extra == 'tensorflow'", + "safetensors[numpy] ; extra == 'testing'", + "h5py>=3.7.0 ; extra == 'testing'", + "setuptools-rust>=1.12.0 ; extra == 'testing'", + "pytest>=9.0 ; extra == 'testing'", + "pytest-benchmark>=5.2 ; extra == 'testing'", + "hypothesis>=6.70.2 ; extra == 'testing'", + "fsspec>=2024.6.0 ; extra == 'testing'", + "s3fs>=2024.6.0 ; extra == 'testing'", + "safetensors[numpy] ; extra == 'tf-nightly'", + "tf-nightly ; extra == 'tf-nightly'", + "safetensors[numpy] ; extra == 'torch'", + "torch>=2.4 ; extra == 'torch'" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://github.com/huggingface/safetensors", + "Source, https://github.com/huggingface/safetensors" + ], + "provides_extra": [ + "all", + "convert", + "dev", + "jax", + "mlx", + "numpy", + "paddlepaddle", + "pinned-tf", + "quality", + "tensorflow", + "testing", + "tf-nightly", + "torch" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101" + }, + "hash": "sha256=117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "annotated-doc", + "version": "0.0.5", + "summary": "Document parameters, class attributes, return types, and variables inline, with Annotated.", + "description": "# Annotated Doc\n\nDocument parameters, class attributes, return types, and variables inline, with `Annotated`.\n\n\n \"Test\"\n\n\n \"Coverage\"\n\n\n \"Package\n\n\n \"Supported\n\n\n## Installation\n\n```bash\npip install annotated-doc\n```\n\nOr with `uv`:\n\n```Python\nuv add annotated-doc\n```\n\n## Usage\n\nImport `Doc` and pass a single literal string with the documentation for the specific parameter, class attribute, return type, or variable.\n\nFor example, to document a parameter `name` in a function `hi` you could do:\n\n```Python\nfrom typing import Annotated\n\nfrom annotated_doc import Doc\n\ndef hi(name: Annotated[str, Doc(\"Who to say hi to\")]) -> None:\n print(f\"Hi, {name}!\")\n```\n\nYou can also use it to document class attributes:\n\n```Python\nfrom typing import Annotated\n\nfrom annotated_doc import Doc\n\nclass User:\n name: Annotated[str, Doc(\"The user's name\")]\n age: Annotated[int, Doc(\"The user's age\")]\n```\n\nThe same way, you could document return types and variables, or anything that could have a type annotation with `Annotated`.\n\n## Who Uses This\n\n`annotated-doc` was made for:\n\n* [FastAPI](https://fastapi.tiangolo.com/)\n* [Typer](https://typer.tiangolo.com/)\n* [SQLModel](https://sqlmodel.tiangolo.com/)\n* [Asyncer](https://asyncer.tiangolo.com/)\n\n`annotated-doc` is supported by [griffe-typingdoc](https://github.com/mkdocstrings/griffe-typingdoc), which powers reference documentation like the one in the [FastAPI Reference](https://fastapi.tiangolo.com/reference/).\n\n## Reasons not to use `annotated-doc`\n\nYou are already comfortable with one of the existing docstring formats, like:\n\n* Sphinx\n* numpydoc\n* Google\n* Keras\n\nYour team is already comfortable using them.\n\nYou prefer having the documentation about parameters all together in a docstring, separated from the code defining them.\n\nYou care about a specific set of users, using one specific editor, and that editor already has support for the specific docstring format you use.\n\n## Reasons to use `annotated-doc`\n\n* No micro-syntax to learn for newcomers, it’s **just Python** syntax.\n* **Editing** would be already fully supported by default by any editor (current or future) supporting Python syntax, including syntax errors, syntax highlighting, etc.\n* **Rendering** would be relatively straightforward to implement by static tools (tools that don't need runtime execution), as the information can be extracted from the AST they normally already create.\n* **Deduplication of information**: the name of a parameter would be defined in a single place, not duplicated inside of a docstring.\n* **Elimination** of the possibility of having **inconsistencies** when removing a parameter or class variable and **forgetting to remove** its documentation.\n* **Minimization** of the probability of adding a new parameter or class variable and **forgetting to add its documentation**.\n* **Elimination** of the possibility of having **inconsistencies** between the **name** of a parameter in the **signature** and the name in the docstring when it is renamed.\n* **Access** to the documentation string for each symbol at **runtime**, including existing (older) Python versions.\n* A more formalized way to document other symbols, like type aliases, that could use Annotated.\n* **Support** for apps using FastAPI, Typer and others.\n* **AI Accessibility**: AI tools will have an easier way understanding each parameter as the distance from documentation to parameter is much closer.\n\n## History\n\nI ([@tiangolo](https://github.com/tiangolo)) originally wanted for this to be part of the Python standard library (in [PEP 727](https://peps.python.org/pep-0727/)), but the proposal was withdrawn as there was a fair amount of negative feedback and opposition.\n\nThe conclusion was that this was better done as an external effort, in a third-party library.\n\nSo, here it is, with a simpler approach, as a third-party library, in a way that can be used by others, starting with FastAPI and friends.\n\n## License\n\nThis project is licensed under the terms of the MIT license.\n", + "description_content_type": "text/markdown", + "author_email": "=?utf-8?q?Sebasti=C3=A1n_Ram=C3=ADrez?= ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Intended Audience :: Information Technology", + "Intended Audience :: System Administrators", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python", + "Topic :: Internet", + "Topic :: Software Development :: Libraries :: Application Frameworks", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Software Development :: Libraries", + "Topic :: Software Development", + "Typing :: Typed", + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14" + ], + "requires_python": ">=3.9", + "project_url": [ + "Homepage, https://github.com/fastapi/annotated-doc", + "Documentation, https://github.com/fastapi/annotated-doc", + "Repository, https://github.com/fastapi/annotated-doc", + "Issues, https://github.com/fastapi/annotated-doc/issues", + "Changelog, https://github.com/fastapi/annotated-doc/release-notes.md" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360" + }, + "hash": "sha256=255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "click", + "version": "8.5.0", + "summary": "Composable command line interface toolkit", + "description": "
\"\"
\n\n# Click\n\nClick is a Python package for creating beautiful command line interfaces\nin a composable way with as little code as necessary. It's the \"Command\nLine Interface Creation Kit\". It's highly configurable but comes with\nsensible defaults out of the box.\n\nIt aims to make the process of writing command line tools quick and fun\nwhile also preventing any frustration caused by the inability to\nimplement an intended CLI API.\n\nClick in three points:\n\n- Arbitrary nesting of commands\n- Automatic help page generation\n- Supports lazy loading of subcommands at runtime\n\n\n## A Simple Example\n\n```python\nimport click\n\n@click.command()\n@click.option(\"--count\", default=1, help=\"Number of greetings.\")\n@click.option(\"--name\", prompt=\"Your name\", help=\"The person to greet.\")\ndef hello(count, name):\n \"\"\"Simple program that greets NAME for a total of COUNT times.\"\"\"\n for _ in range(count):\n click.echo(f\"Hello, {name}!\")\n\nif __name__ == '__main__':\n hello()\n```\n\n```\n$ python hello.py --count=3\nYour name: Click\nHello, Click!\nHello, Click!\nHello, Click!\n```\n\n\n## Donate\n\nThe Pallets organization develops and supports Click and other popular\npackages. In order to grow the community of contributors and users, and\nallow the maintainers to devote more time to the projects, [please\ndonate today][].\n\n[please donate today]: https://palletsprojects.com/donate\n\n## Contributing\n\nSee our [detailed contributing documentation][contrib] for many ways to\ncontribute, including reporting issues, requesting features, asking or answering\nquestions, and making PRs.\n\n[contrib]: https://palletsprojects.com/contributing/\n\n", + "description_content_type": "text/markdown", + "maintainer_email": "Pallets ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.txt" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Typing :: Typed" + ], + "requires_python": ">=3.10", + "project_url": [ + "Changes, https://click.palletsprojects.com/page/changes/", + "Chat, https://discord.gg/pallets", + "Documentation, https://click.palletsprojects.com/", + "Donate, https://palletsprojects.com/donate", + "Source, https://github.com/pallets/click/" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/6c/c0/a98505f18594f1bce828bb159cec0fcf9860562f1a2c85913409fc8f3d9e/fsspec-2026.9.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f" + }, + "hash": "sha256=8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "fsspec", + "version": "2026.9.0", + "summary": "File-system specification", + "description": "# filesystem_spec\n\n[![PyPI version](https://badge.fury.io/py/fsspec.svg)](https://pypi.python.org/pypi/fsspec/)\n[![Anaconda-Server Badge](https://anaconda.org/conda-forge/fsspec/badges/version.svg)](https://anaconda.org/conda-forge/fsspec)\n![Build](https://github.com/fsspec/filesystem_spec/workflows/CI/badge.svg)\n[![Docs](https://readthedocs.org/projects/filesystem-spec/badge/?version=latest)](https://filesystem-spec.readthedocs.io/en/latest/?badge=latest)\n\nA specification for pythonic filesystems.\n\n## Install\n\n```bash\npip install fsspec\n```\n\nwould install the base fsspec. Various optionally supported features might require specification of custom\nextra require, e.g. `pip install fsspec[ssh]` will install dependencies for `ssh` backends support.\nUse `pip install fsspec[full]` for installation of all known extra dependencies.\n\nUp-to-date package also provided through conda-forge distribution:\n\n```bash\nconda install -c conda-forge fsspec\n```\n\n\n## Purpose\n\nTo produce a template or specification for a file-system interface, that specific implementations should follow,\nso that applications making use of them can rely on a common behaviour and not have to worry about the specific\ninternal implementation decisions with any given backend. Many such implementations are included in this package,\nor in sister projects such as `s3fs` and `gcsfs`.\n\nIn addition, if this is well-designed, then additional functionality, such as a key-value store or FUSE\nmounting of the file-system implementation may be available for all implementations \"for free\".\n\n## Documentation\n\nPlease refer to [RTD](https://filesystem-spec.readthedocs.io/en/latest/?badge=latest)\n\n## Develop\n\nfsspec uses GitHub Actions for CI. Environment files can be found\nin the \"ci/\" directory. Note that the main environment is called \"py38\",\nbut it is expected that the version of python installed be adjustable at\nCI runtime. For local use, pick a version suitable for you.\n\n```bash\n# For a new environment (mamba / conda).\nmamba create -n fsspec -c conda-forge python=3.10 -y\nconda activate fsspec\n\n# Standard dev install with docs and tests.\npip install -e \".[dev,doc,test]\"\n\n# Full tests except for downstream\npip install s3fs\npip uninstall s3fs\npip install -e .[dev,doc,test_full]\npip install s3fs --no-deps\npytest -v\n\n# Downstream tests.\nsh install_s3fs.sh\n# Windows powershell.\ninstall_s3fs.sh\n```\n\n### Testing\n\nTests can be run in the dev environment, if activated, via ``pytest fsspec``.\n\nThe full fsspec suite requires a system-level docker, docker-compose, and fuse\ninstallation. If only making changes to one backend implementation, it is\nnot generally necessary to run all tests locally.\n\nIt is expected that contributors ensure that any change to fsspec does not\ncause issues or regressions for either other fsspec-related packages such\nas gcsfs and s3fs, nor for downstream users of fsspec. The \"downstream\" CI\nrun and corresponding environment file run a set of tests from the dask\ntest suite, and very minimal tests against pandas and zarr from the\ntest_downstream.py module in this repo.\n\n### Code Formatting\n\nfsspec uses [Black](https://black.readthedocs.io/en/stable) to ensure\na consistent code format throughout the project.\nRun ``black fsspec`` from the root of the filesystem_spec repository to\nauto-format your code. Additionally, many editors have plugins that will apply\n``black`` as you edit files. ``black`` is included in the ``tox`` environments.\n\nOptionally, you may wish to setup [pre-commit hooks](https://pre-commit.com) to\nautomatically run ``black`` when you make a git commit.\nRun ``pre-commit install --install-hooks`` from the root of the\nfilesystem_spec repository to setup pre-commit hooks. ``black`` will now be run\nbefore you commit, reformatting any changed files. You can format without\ncommitting via ``pre-commit run`` or skip these checks with ``git commit\n--no-verify``.\n\n## Support\n\nWork on this repository is supported in part by:\n\n\"Anaconda, Inc. - Advancing AI through open source.\"\n\n\"anaconda\n", + "description_content_type": "text/markdown", + "keywords": [ + "file" + ], + "maintainer_email": "Martin Durant ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14" + ], + "requires_dist": [ + "adlfs; extra == 'abfs'", + "adlfs; extra == 'adl'", + "pyarrow>=1; extra == 'arrow'", + "dask; extra == 'dask'", + "distributed; extra == 'dask'", + "pre-commit; extra == 'dev'", + "ruff>=0.5; extra == 'dev'", + "numpydoc; extra == 'doc'", + "sphinx; extra == 'doc'", + "sphinx-design; extra == 'doc'", + "sphinx-rtd-theme; extra == 'doc'", + "yarl; extra == 'doc'", + "dropbox; extra == 'dropbox'", + "dropboxdrivefs; extra == 'dropbox'", + "requests; extra == 'dropbox'", + "adlfs; extra == 'full'", + "aiohttp!=4.0.0a0,!=4.0.0a1; extra == 'full'", + "dask; extra == 'full'", + "distributed; extra == 'full'", + "dropbox; extra == 'full'", + "dropboxdrivefs; extra == 'full'", + "fusepy; extra == 'full'", + "gcsfs>=2026.4.0; extra == 'full'", + "libarchive-c; extra == 'full'", + "ocifs; extra == 'full'", + "panel; extra == 'full'", + "paramiko; extra == 'full'", + "pyarrow>=1; extra == 'full'", + "pygit2; extra == 'full'", + "requests; extra == 'full'", + "s3fs>=2026.6.0; extra == 'full'", + "smbprotocol; extra == 'full'", + "tqdm; extra == 'full'", + "fusepy; extra == 'fuse'", + "gcsfs>=2026.4.0; extra == 'gcs'", + "pygit2; extra == 'git'", + "requests; extra == 'github'", + "gcsfs>=2026.4.0; extra == 'gs'", + "panel; extra == 'gui'", + "pyarrow>=1; extra == 'hdfs'", + "aiohttp!=4.0.0a0,!=4.0.0a1; extra == 'http'", + "libarchive-c; extra == 'libarchive'", + "ocifs; extra == 'oci'", + "s3fs>=2026.6.0; extra == 's3'", + "paramiko; extra == 'sftp'", + "smbprotocol; extra == 'smb'", + "paramiko; extra == 'ssh'", + "aiohttp!=4.0.0a0,!=4.0.0a1; extra == 'test'", + "numpy; extra == 'test'", + "pytest; extra == 'test'", + "pytest-asyncio!=0.22.0; extra == 'test'", + "pytest-benchmark; extra == 'test'", + "pytest-cov; extra == 'test'", + "pytest-mock; extra == 'test'", + "pytest-recording; extra == 'test'", + "pytest-rerunfailures; extra == 'test'", + "requests; extra == 'test'", + "aiobotocore<3.0.0,>=2.5.4; extra == 'test-downstream'", + "dask[dataframe,test]; extra == 'test-downstream'", + "moto[server]<5,>4; extra == 'test-downstream'", + "pytest-timeout; extra == 'test-downstream'", + "xarray; extra == 'test-downstream'", + "zarr; extra == 'test-downstream'", + "adlfs; extra == 'test-full'", + "aiohttp!=4.0.0a0,!=4.0.0a1; extra == 'test-full'", + "backports-zstd; (python_version < '3.14') and extra == 'test-full'", + "cloudpickle; extra == 'test-full'", + "dask; extra == 'test-full'", + "distributed; extra == 'test-full'", + "dropbox; extra == 'test-full'", + "dropboxdrivefs; extra == 'test-full'", + "fastparquet; extra == 'test-full'", + "fusepy; extra == 'test-full'", + "gcsfs>=2026.4.0; extra == 'test-full'", + "jinja2; extra == 'test-full'", + "kerchunk; extra == 'test-full'", + "libarchive-c; extra == 'test-full'", + "lz4; extra == 'test-full'", + "notebook; extra == 'test-full'", + "numpy; extra == 'test-full'", + "ocifs; extra == 'test-full'", + "pandas<3.0.0; extra == 'test-full'", + "panel; extra == 'test-full'", + "paramiko; extra == 'test-full'", + "pyarrow>=1; extra == 'test-full'", + "pyftpdlib; extra == 'test-full'", + "pygit2; extra == 'test-full'", + "pytest; extra == 'test-full'", + "pytest-asyncio!=0.22.0; extra == 'test-full'", + "pytest-benchmark; extra == 'test-full'", + "pytest-cov; extra == 'test-full'", + "pytest-mock; extra == 'test-full'", + "pytest-recording; extra == 'test-full'", + "pytest-rerunfailures; extra == 'test-full'", + "python-snappy; extra == 'test-full'", + "requests; extra == 'test-full'", + "s3fs>=2026.6.0; extra == 'test-full'", + "smbprotocol; extra == 'test-full'", + "tqdm; extra == 'test-full'", + "urllib3; extra == 'test-full'", + "zarr<3.2.0; extra == 'test-full'", + "zstandard; (python_version < '3.14') and extra == 'test-full'", + "tqdm; extra == 'tqdm'" + ], + "requires_python": ">=3.10", + "project_url": [ + "Changelog, https://filesystem-spec.readthedocs.io/en/latest/changelog.html", + "Documentation, https://filesystem-spec.readthedocs.io/en/latest/", + "Homepage, https://github.com/fsspec/filesystem_spec" + ], + "provides_extra": [ + "abfs", + "adl", + "arrow", + "dask", + "dev", + "doc", + "dropbox", + "entrypoints", + "full", + "fuse", + "gcs", + "git", + "github", + "gs", + "gui", + "hdfs", + "http", + "libarchive", + "oci", + "s3", + "sftp", + "smb", + "ssh", + "test", + "test-downstream", + "test-full", + "tqdm" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86" + }, + "hash": "sha256=63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "h11", + "version": "0.16.0", + "dynamic": [ + "author", + "author-email", + "classifier", + "description", + "home-page", + "license", + "license-file", + "requires-python", + "summary" + ], + "summary": "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1", + "description": "h11\n===\n\n.. image:: https://travis-ci.org/python-hyper/h11.svg?branch=master\n :target: https://travis-ci.org/python-hyper/h11\n :alt: Automated test status\n\n.. image:: https://codecov.io/gh/python-hyper/h11/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/python-hyper/h11\n :alt: Test coverage\n\n.. image:: https://readthedocs.org/projects/h11/badge/?version=latest\n :target: http://h11.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation Status\n\nThis is a little HTTP/1.1 library written from scratch in Python,\nheavily inspired by `hyper-h2 `_.\n\nIt's a \"bring-your-own-I/O\" library; h11 contains no IO code\nwhatsoever. This means you can hook h11 up to your favorite network\nAPI, and that could be anything you want: synchronous, threaded,\nasynchronous, or your own implementation of `RFC 6214\n`_ -- h11 won't judge you.\n(Compare this to the current state of the art, where every time a `new\nnetwork API `_ comes along then someone\ngets to start over reimplementing the entire HTTP protocol from\nscratch.) Cory Benfield made an `excellent blog post describing the\nbenefits of this approach\n`_, or if you like video\nthen here's his `PyCon 2016 talk on the same theme\n`_.\n\nThis also means that h11 is not immediately useful out of the box:\nit's a toolkit for building programs that speak HTTP, not something\nthat could directly replace ``requests`` or ``twisted.web`` or\nwhatever. But h11 makes it much easier to implement something like\n``requests`` or ``twisted.web``.\n\nAt a high level, working with h11 goes like this:\n\n1) First, create an ``h11.Connection`` object to track the state of a\n single HTTP/1.1 connection.\n\n2) When you read data off the network, pass it to\n ``conn.receive_data(...)``; you'll get back a list of objects\n representing high-level HTTP \"events\".\n\n3) When you want to send a high-level HTTP event, create the\n corresponding \"event\" object and pass it to ``conn.send(...)``;\n this will give you back some bytes that you can then push out\n through the network.\n\nFor example, a client might instantiate and then send a\n``h11.Request`` object, then zero or more ``h11.Data`` objects for the\nrequest body (e.g., if this is a POST), and then a\n``h11.EndOfMessage`` to indicate the end of the message. Then the\nserver would then send back a ``h11.Response``, some ``h11.Data``, and\nits own ``h11.EndOfMessage``. If either side violates the protocol,\nyou'll get a ``h11.ProtocolError`` exception.\n\nh11 is suitable for implementing both servers and clients, and has a\npleasantly symmetric API: the events you send as a client are exactly\nthe ones that you receive as a server and vice-versa.\n\n`Here's an example of a tiny HTTP client\n`_\n\nIt also has `a fine manual `_.\n\nFAQ\n---\n\n*Whyyyyy?*\n\nI wanted to play with HTTP in `Curio\n`__ and `Trio\n`__, which at the time didn't have any\nHTTP libraries. So I thought, no big deal, Python has, like, a dozen\ndifferent implementations of HTTP, surely I can find one that's\nreusable. I didn't find one, but I did find Cory's call-to-arms\nblog-post. So I figured, well, fine, if I have to implement HTTP from\nscratch, at least I can make sure no-one *else* has to ever again.\n\n*Should I use it?*\n\nMaybe. You should be aware that it's a very young project. But, it's\nfeature complete and has an exhaustive test-suite and complete docs,\nso the next step is for people to try using it and see how it goes\n:-). If you do then please let us know -- if nothing else we'll want\nto talk to you before making any incompatible changes!\n\n*What are the features/limitations?*\n\nRoughly speaking, it's trying to be a robust, complete, and non-hacky\nimplementation of the first \"chapter\" of the HTTP/1.1 spec: `RFC 7230:\nHTTP/1.1 Message Syntax and Routing\n`_. That is, it mostly focuses on\nimplementing HTTP at the level of taking bytes on and off the wire,\nand the headers related to that, and tries to be anal about spec\nconformance. It doesn't know about higher-level concerns like URL\nrouting, conditional GETs, cross-origin cookie policies, or content\nnegotiation. But it does know how to take care of framing,\ncross-version differences in keep-alive handling, and the \"obsolete\nline folding\" rule, so you can focus your energies on the hard /\ninteresting parts for your application, and it tries to support the\nfull specification in the sense that any useful HTTP/1.1 conformant\napplication should be able to use h11.\n\nIt's pure Python, and has no dependencies outside of the standard\nlibrary.\n\nIt has a test suite with 100.0% coverage for both statements and\nbranches.\n\nCurrently it supports Python 3 (testing on 3.8-3.12) and PyPy 3.\nThe last Python 2-compatible version was h11 0.11.x.\n(Originally it had a Cython wrapper for `http-parser\n`_ and a beautiful nested state\nmachine implemented with ``yield from`` to postprocess the output. But\nI had to take these out -- the new *parser* needs fewer lines-of-code\nthan the old *parser wrapper*, is written in pure Python, uses no\nexotic language syntax, and has more features. It's sad, really; that\nold state machine was really slick. I just need a few sentences here\nto mourn that.)\n\nI don't know how fast it is. I haven't benchmarked or profiled it yet,\nso it's probably got a few pointless hot spots, and I've been trying\nto err on the side of simplicity and robustness instead of\nmicro-optimization. But at the architectural level I tried hard to\navoid fundamentally bad decisions, e.g., I believe that all the\nparsing algorithms remain linear-time even in the face of pathological\ninput like slowloris, and there are no byte-by-byte loops. (I also\nbelieve that it maintains bounded memory usage in the face of\narbitrary/pathological input.)\n\nThe whole library is ~800 lines-of-code. You can read and understand\nthe whole thing in less than an hour. Most of the energy invested in\nthis so far has been spent on trying to keep things simple by\nminimizing special-cases and ad hoc state manipulation; even though it\nis now quite small and simple, I'm still annoyed that I haven't\nfigured out how to make it even smaller and simpler. (Unfortunately,\nHTTP does not lend itself to simplicity.)\n\nThe API is ~feature complete and I don't expect the general outlines\nto change much, but you can't judge an API's ergonomics until you\nactually document and use it, so I'd expect some changes in the\ndetails.\n\n*How do I try it?*\n\n.. code-block:: sh\n\n $ pip install h11\n $ git clone git@github.com:python-hyper/h11\n $ cd h11/examples\n $ python basic-client.py\n\nand go from there.\n\n*License?*\n\nMIT\n\n*Code of conduct?*\n\nContributors are requested to follow our `code of conduct\n`_ in\nall project spaces.\n", + "home_page": "https://github.com/python-hyper/h11", + "author": "Nathaniel J. Smith", + "author_email": "njs@pobox.com", + "license": "MIT", + "license_file": [ + "LICENSE.txt" + ], + "classifier": [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Topic :: Internet :: WWW/HTTP", + "Topic :: System :: Networking" + ], + "requires_python": ">=3.8" + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0" + }, + "hash": "sha256=e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "networkx", + "version": "3.7", + "dynamic": [ + "license-file" + ], + "platform": [ + "Linux", + "Mac OSX", + "Windows", + "Unix" + ], + "summary": "Python package for creating and manipulating graphs and networks", + "description": "NetworkX\n========\n\n\n.. image::\n https://github.com/networkx/networkx/actions/workflows/test.yml/badge.svg?branch=main\n :target: https://github.com/networkx/networkx/actions/workflows/test.yml\n\n.. image::\n https://img.shields.io/pypi/v/networkx.svg?\n :target: https://pypi.python.org/pypi/networkx\n\n.. image::\n https://img.shields.io/pypi/l/networkx.svg?\n :target: https://github.com/networkx/networkx/blob/main/LICENSE.txt\n\n.. image::\n https://img.shields.io/pypi/pyversions/networkx.svg?\n :target: https://pypi.python.org/pypi/networkx\n\n.. image::\n https://insights.linuxfoundation.org/api/badge/health-score?project=networkx\n :target: https://insights.linuxfoundation.org/project/networkx\n\n\nNetworkX is a Python package for the creation, manipulation,\nand study of the structure, dynamics, and functions\nof complex networks.\n\n- **Website (including documentation):** https://networkx.org\n- **Mailing list:** https://groups.google.com/forum/#!forum/networkx-discuss\n- **Source:** https://github.com/networkx/networkx\n- **Bug reports:** https://github.com/networkx/networkx/issues\n- **Report a security vulnerability:** https://tidelift.com/security\n- **Tutorial:** https://networkx.org/documentation/latest/tutorial.html\n- **GitHub Discussions:** https://github.com/networkx/networkx/discussions\n- **Discord (Scientific Python) invite link:** https://discord.com/invite/vur45CbwMz\n- **NetworkX meetings calendar (open to all):** https://scientific-python.org/calendars/networkx.ics\n\nSimple example\n--------------\n\nFind the shortest path between two nodes in an undirected graph:\n\n.. code:: pycon\n\n >>> import networkx as nx\n >>> G = nx.Graph()\n >>> G.add_edge(\"A\", \"B\", weight=4)\n >>> G.add_edge(\"B\", \"D\", weight=2)\n >>> G.add_edge(\"A\", \"C\", weight=3)\n >>> G.add_edge(\"C\", \"D\", weight=4)\n >>> nx.shortest_path(G, \"A\", \"D\", weight=\"weight\")\n ['A', 'B', 'D']\n\nInstall\n-------\n\nInstall the latest released version of NetworkX:\n\n.. code:: shell\n\n $ pip install networkx\n\nInstall with all optional dependencies:\n\n.. code:: shell\n\n $ pip install networkx[default]\n\nFor additional details,\nplease see the `installation guide `_.\n\nBugs\n----\n\nPlease report any bugs that you find `here `_.\nOr, even better, fork the repository on `GitHub `_\nand create a pull request (PR). We welcome all changes, big or small, and we\nwill help you make the PR if you are new to `git` (just ask on the issue and/or\nsee the `contributor guide `_).\n\nLicense\n-------\n\nReleased under the `3-clause BSD license `_::\n\n Copyright (c) 2004-2026, NetworkX Developers\n Aric Hagberg \n Dan Schult \n Pieter Swart \n", + "description_content_type": "text/x-rst", + "keywords": [ + "Networks", + "Graph Theory", + "Mathematics", + "network", + "graph", + "discrete mathematics", + "math" + ], + "author_email": "Aric Hagberg ", + "maintainer_email": "NetworkX Developers ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.txt" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Intended Audience :: Science/Research", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Programming Language :: Python :: 3 :: Only", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Scientific/Engineering :: Bio-Informatics", + "Topic :: Scientific/Engineering :: Information Analysis", + "Topic :: Scientific/Engineering :: Mathematics", + "Topic :: Scientific/Engineering :: Physics" + ], + "requires_dist": [ + "asv>=0.6.5; extra == \"benchmarking\"", + "py-rattler<0.22,>=0.21; extra == \"benchmarking\"", + "virtualenv; extra == \"benchmarking\"", + "numpy>=2.2; extra == \"default\"", + "scipy>=1.15; extra == \"default\"", + "matplotlib>=3.10; extra == \"default\"", + "pandas>=2.3; extra == \"default\"", + "pre-commit>=4.1; extra == \"developer\"", + "mypy>=1.15; extra == \"developer\"", + "sphinx>=8.0; extra == \"doc\"", + "pydata-sphinx-theme>=0.16; extra == \"doc\"", + "sphinx-gallery>=0.18; extra == \"doc\"", + "numpydoc>=1.8.0; extra == \"doc\"", + "pillow>=10; extra == \"doc\"", + "texext>=0.6.7; extra == \"doc\"", + "myst-nb>=1.1; extra == \"doc\"", + "intersphinx-registry; extra == \"doc\"", + "osmnx>=2.0.0; extra == \"example\"", + "momepy>=0.7.2; extra == \"example\"", + "contextily>=1.6; extra == \"example\"", + "seaborn>=0.13; extra == \"example\"", + "cairocffi>=1.7; extra == \"example\"", + "igraph>=0.11; extra == \"example\"", + "scikit-learn>=1.6; extra == \"example\"", + "iplotx>=0.9.0; extra == \"example\"", + "hiveplotlib>=0.28; extra == \"example\"", + "lxml>=4.6; extra == \"extra\"", + "pygraphviz>=2.0; extra == \"extra\"", + "pydot>=3.0.1; extra == \"extra\"", + "sympy>=1.10; extra == \"extra\"", + "build>=0.10; extra == \"release\"", + "twine>=4.0; extra == \"release\"", + "wheel>=0.40; extra == \"release\"", + "changelist==0.5; extra == \"release\"", + "pytest>=7.2; extra == \"test\"", + "pytest-cov>=4.0; extra == \"test\"", + "pytest-xdist>=3.0; extra == \"test\"", + "pytest-mpl; extra == \"test-extras\"", + "pytest-randomly; extra == \"test-extras\"" + ], + "requires_python": "!=3.14.1,>=3.12", + "project_url": [ + "Homepage, https://networkx.org/", + "Bug Tracker, https://github.com/networkx/networkx/issues", + "Documentation, https://networkx.org/documentation/stable/", + "Source Code, https://github.com/networkx/networkx" + ], + "provides_extra": [ + "benchmarking", + "default", + "developer", + "doc", + "example", + "extra", + "release", + "test", + "test-extras" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73" + }, + "hash": "sha256=346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "pydantic", + "version": "2.13.5", + "summary": "Data validation using Python type hints", + "description": "# Pydantic Validation\n\n[![CI](https://img.shields.io/github/actions/workflow/status/pydantic/pydantic/ci.yml?branch=main&logo=github&label=CI)](https://github.com/pydantic/pydantic/actions?query=event%3Apush+branch%3Amain+workflow%3ACI)\n[![Coverage](https://coverage-badge.samuelcolvin.workers.dev/pydantic/pydantic.svg)](https://coverage-badge.samuelcolvin.workers.dev/redirect/pydantic/pydantic)\n[![pypi](https://img.shields.io/pypi/v/pydantic.svg)](https://pypi.python.org/pypi/pydantic)\n[![CondaForge](https://img.shields.io/conda/v/conda-forge/pydantic.svg)](https://anaconda.org/conda-forge/pydantic)\n[![downloads](https://static.pepy.tech/badge/pydantic/month)](https://pepy.tech/project/pydantic)\n[![versions](https://img.shields.io/pypi/pyversions/pydantic.svg)](https://github.com/pydantic/pydantic)\n[![license](https://img.shields.io/github/license/pydantic/pydantic.svg)](https://github.com/pydantic/pydantic/blob/main/LICENSE)\n[![Pydantic v2](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/pydantic/pydantic/main/docs/badge/v2.json)](https://docs.pydantic.dev/latest/contributing/#badges)\n[![llms.txt](https://img.shields.io/badge/llms.txt-green)](https://docs.pydantic.dev/latest/llms.txt)\n\nData validation using Python type hints.\n\nFast and extensible, Pydantic plays nicely with your linters/IDE/brain.\nDefine how data should be in pure, canonical Python 3.9+; validate it with Pydantic.\n\n## Pydantic Logfire :fire:\n\nWe've launched Pydantic Logfire to help you monitor your applications.\n[Learn more](https://pydantic.dev/logfire/?utm_source=pydantic_validation)\n\n## Pydantic V1.10 vs. V2\n\nPydantic V2 is a ground-up rewrite that offers many new features, performance improvements, and some breaking changes compared to Pydantic V1.\n\nIf you're using Pydantic V1 you may want to look at the\n[pydantic V1.10 Documentation](https://docs.pydantic.dev/) or,\n[`1.10.X-fixes` git branch](https://github.com/pydantic/pydantic/tree/1.10.X-fixes). Pydantic V2 also ships with the latest version of Pydantic V1 built in so that you can incrementally upgrade your code base and projects: `from pydantic import v1 as pydantic_v1`.\n\n## Help\n\nSee [documentation](https://docs.pydantic.dev/) for more details.\n\n## Installation\n\nInstall using `pip install -U pydantic` or `conda install pydantic -c conda-forge`.\nFor more installation options to make Pydantic even faster,\nsee the [Install](https://docs.pydantic.dev/install/) section in the documentation.\n\n## A Simple Example\n\n```python\nfrom datetime import datetime\nfrom typing import Optional\nfrom pydantic import BaseModel\n\nclass User(BaseModel):\n id: int\n name: str = 'John Doe'\n signup_ts: Optional[datetime] = None\n friends: list[int] = []\n\nexternal_data = {'id': '123', 'signup_ts': '2017-06-01 12:22', 'friends': [1, '2', b'3']}\nuser = User(**external_data)\nprint(user)\n#> User id=123 name='John Doe' signup_ts=datetime.datetime(2017, 6, 1, 12, 22) friends=[1, 2, 3]\nprint(user.id)\n#> 123\n```\n\n## Contributing\n\nFor guidance on setting up a development environment and how to make a\ncontribution to Pydantic, see\n[Contributing to Pydantic](https://docs.pydantic.dev/contributing/).\n\n## Reporting a Security Vulnerability\n\nSee our [security policy](https://github.com/pydantic/pydantic/security/policy).\n\n## Changelog\n\n\n\n\n\n## v2.13.5 (2026-08-28)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.5)\n\n### What's Changed\n\n#### Fixes\n\n* Allow reuse of validators when plugins are set by [@Viicos](https://github.com/Viicos) in [#13535](https://github.com/pydantic/pydantic/pull/13535)\n* Fix missing GC traversal on some `pydantic-core` struct fields by [@Viicos](https://github.com/Viicos) in [#13624](https://github.com/pydantic/pydantic/pull/13624)\n* Fix missing GC traversal in `pydantic-core` for `GeneralFieldsSerializer` by [@Viicos](https://github.com/Viicos) in [#13629](https://github.com/pydantic/pydantic/pull/13629)\n* Count validated model fields once in smart unions by [@tamird](https://github.com/tamird) in [#13731](https://github.com/pydantic/pydantic/pull/13731)\n\n## v2.13.4 (2026-05-06)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.4)\n\n### What's Changed\n\n#### Packaging\n\n* Bump libc from 0.2.155 to 0.2.185 by [@Viicos](https://github.com/Viicos) in [#13109](https://github.com/pydantic/pydantic/pull/13109)\n* Adapt `pydantic-core` linker flags on macOS by [@washingtoneg](https://github.com/washingtoneg) and [@Viicos](https://github.com/Viicos) in [#13147](https://github.com/pydantic/pydantic/pull/13147)\n\n#### Fixes\n\n* Preserve `RootModel` core metadata by [@Viicos](https://github.com/Viicos) in [#13129](https://github.com/pydantic/pydantic/pull/13129)\n\n## v2.13.3 (2026-04-20)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.3)\n\n### What's Changed\n\n#### Fixes\n\n* Handle `AttributeError` subclasses with `from_attributes` by [@Viicos](https://github.com/Viicos) in [#13096](https://github.com/pydantic/pydantic/pull/13096)\n\n## v2.13.2 (2026-04-17)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.2)\n\n### What's Changed\n\n#### Fixes\n\n* Fix `ValidationInfo.field_name` missing with `model_validate_json()` by [@Viicos](https://github.com/Viicos) in [#13084](https://github.com/pydantic/pydantic/pull/13084)\n\n## v2.13.1 (2026-04-15)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.1)\n\n### What's Changed\n\n#### Fixes\n\n* Fix `ValidationInfo.data` missing with `model_validate_json()` by [@davidhewitt](https://github.com/davidhewitt) in [#13079](https://github.com/pydantic/pydantic/pull/13079)\n\n## v2.13.0 (2026-04-13)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.0)\n\nThe highlights of the v2.13 release are available in the [blog post](https://pydantic.dev/articles/pydantic-v2-13-release).\nSeveral minor changes (considered non-breaking changes according to our [versioning policy](https://pydantic.dev/docs/validation/2.13/get-started/version-policy/#pydantic-v2))\nare also included in this release. Make sure to look into them before upgrading.\n\nThis release contains the updated `pydantic.v1` namespace, matching version 1.10.26 which includes support for Python 3.14.\n\n### What's Changed\n\nSee the beta releases for all changes sinces 2.12.\n\n#### New Features\n\n* Allow default factories of private attributes to take validated model data by [@Viicos](https://github.com/Viicos) in [#13013](https://github.com/pydantic/pydantic/pull/13013)\n\n#### Changes\n\n* Warn when serializing fixed length tuples with too few items by [@arvindsaripalli](https://github.com/arvindsaripalli) in [#13016](https://github.com/pydantic/pydantic/pull/13016)\n\n#### Fixes\n\n* Change type of `Any` when synthesizing `_build_sources` for `BaseSettings.__init__()` signature in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#13049](https://github.com/pydantic/pydantic/pull/13049)\n* Fix model equality when using runtime `extra` configuration by [@Viicos](https://github.com/Viicos) in [#13062](https://github.com/pydantic/pydantic/pull/13062)\n\n#### Packaging\n\n* Add zizmor for GitHub Actions workflow linting by [@Viicos](https://github.com/Viicos) in [#13039](https://github.com/pydantic/pydantic/pull/13039)\n* Update jiter to v0.14.0 to fix a segmentation fault on musl Linux by [@Viicos](https://github.com/Viicos) in [#13064](https://github.com/pydantic/pydantic/pull/13064)\n\n### New Contributors\n\n* [@arvindsaripalli](https://github.com/arvindsaripalli) made their first contribution in [#13016](https://github.com/pydantic/pydantic/pull/13016)\n\n## v2.13.0b3 (2026-03-31)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.0b3)\n\n### What's Changed\n\n#### New Features\n\n* Add `ascii_only` option to `StringConstraints` by [@ai-man-codes](https://github.com/ai-man-codes) in [#12907](https://github.com/pydantic/pydantic/pull/12907)\n* Support `exclude_if` in computed fields by [@andresliszt](https://github.com/andresliszt) in [#12748](https://github.com/pydantic/pydantic/pull/12748)\n* Push down constraints in unions involving `MISSING` sentinel by [@Viicos](https://github.com/Viicos) in [#12908](https://github.com/pydantic/pydantic/pull/12908)\n\n#### Changes\n\n* Track extra fields set after init in `model_fields_set` by [@navalprakhar](https://github.com/navalprakhar) in [#12817](https://github.com/pydantic/pydantic/pull/12817)\n* Do not include annotations that are not part of named tuple fields by [@galuszkak](https://github.com/galuszkak) in [#12951](https://github.com/pydantic/pydantic/pull/12951)\n* No longer fall back to trying all union members when the variant selected by discriminator fails to serialize by [@navalprakhar](https://github.com/navalprakhar) in [#12825](https://github.com/pydantic/pydantic/pull/12825)\n\n#### Fixes\n\n* Support discriminator metadata outside union type alias by [@Viicos](https://github.com/Viicos) in [#12785](https://github.com/pydantic/pydantic/pull/12785)\n* Respect `extras_schema` when only `extra_fields_behavior` is set on the config in JSON Schema generation for typed dictionaries by [@Viicos](https://github.com/Viicos) in [#12810](https://github.com/pydantic/pydantic/pull/12810)\n* Ensure `__pydantic_private__` is set in `model_construct()` with user-defined `model_post_init()` by [@nightcityblade](https://github.com/nightcityblade) in [#12816](https://github.com/pydantic/pydantic/pull/12816)\n* Handle all schema generation errors in `InstanceOf` by [@Viicos](https://github.com/Viicos) in [#12705](https://github.com/pydantic/pydantic/pull/12705)\n* Allow dynamic models created with `create_model()` to be used as annotations in the Mypy plugin by [@Br1an67](https://github.com/Br1an67) in [#12879](https://github.com/pydantic/pydantic/pull/12879)\n* Check for `PlaceholderNode` in Mypy plugin by [@Viicos](https://github.com/Viicos) in [#12929](https://github.com/pydantic/pydantic/pull/12929)\n* Try other branches in smart union in case of omit errors by [@mikeedjones](https://github.com/mikeedjones) in [#12758](https://github.com/pydantic/pydantic/pull/12758)\n* Patch unset attributes with `MISSING` during model serialization with `exclude_unset` by [@davidhewitt](https://github.com/davidhewitt) in [#12905](https://github.com/pydantic/pydantic/pull/12905)\n* Ensure custom `__init__()` is called when using `model_validate_strings()` by [@siewcapital](https://github.com/siewcapital) in [#12897](https://github.com/pydantic/pydantic/pull/12897)\n\n#### Packaging\n\n* Add riscv64 build target for manylinux by [@boosterl](https://github.com/boosterl) in [#12723](https://github.com/pydantic/pydantic/pull/12723)\n\n### New Contributors\n\n* [@kelsonbrito50](https://github.com/kelsonbrito50) made their first contribution in [#12860](https://github.com/pydantic/pydantic/pull/12860)\n* [@boosterl](https://github.com/boosterl) made their first contribution in [#12723](https://github.com/pydantic/pydantic/pull/12723)\n* [@adityagiri3600](https://github.com/adityagiri3600) made their first contribution in [#12868](https://github.com/pydantic/pydantic/pull/12868)\n* [@navalprakhar](https://github.com/navalprakhar) made their first contribution in [#12817](https://github.com/pydantic/pydantic/pull/12817)\n* [@Br1an67](https://github.com/Br1an67) made their first contribution in [#12879](https://github.com/pydantic/pydantic/pull/12879)\n* [@rmorshea](https://github.com/rmorshea) made their first contribution in [#12910](https://github.com/pydantic/pydantic/pull/12910)\n* [@N3XT3R1337](https://github.com/N3XT3R1337) made their first contribution in [#12922](https://github.com/pydantic/pydantic/pull/12922)\n* [@ai-man-codes](https://github.com/ai-man-codes) made their first contribution in [#12907](https://github.com/pydantic/pydantic/pull/12907)\n* [@Yume05-dev](https://github.com/Yume05-dev) made their first contribution in [#12953](https://github.com/pydantic/pydantic/pull/12953)\n* [@galuszkak](https://github.com/galuszkak) made their first contribution in [#12951](https://github.com/pydantic/pydantic/pull/12951)\n* [@siewcapital](https://github.com/siewcapital) made their first contribution in [#12897](https://github.com/pydantic/pydantic/pull/12897)\n\n## v2.13.0b2 (2026-02-24)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.0b2)\n\n### What's Changed\n\n#### Fixes\n\n* Fix backported V1 namespace by [@Viicos](https://github.com/Viicos) in [#12855](https://github.com/pydantic/pydantic/pull/12855)\n* Allow any type form to be used in `validate_as()` by [@bledden](https://github.com/bledden) in [#12846](https://github.com/pydantic/pydantic/pull/12846)\n* Fix walrus operator precedence in `UrlConstraints.__get_pydantic_core_schema__()` by [@bysiber](https://github.com/bysiber) in [#12826](https://github.com/pydantic/pydantic/pull/12826)\n\n### New Contributors\n\n* [@bledden](https://github.com/bledden) made their first contribution in [#12846](https://github.com/pydantic/pydantic/pull/12846)\n* [@bysiber](https://github.com/bysiber) made their first contribution in [#12827](https://github.com/pydantic/pydantic/pull/12827)\n\n## v2.13.0b1 (2026-02-23)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.0b1)\n\nThis is the first beta release of the 2.13 version, mainly providing bug fixes and performance improvements\nfor validation and serialization.\n\nNotable changes include:\n\n* Add a new `polymorphic_serialization` option, solving issues with `serialize_as_any` introduced in 2.12.\n* Latest V1.10.26 release under the `pydantic.v1` namespace. This version includes support for Python 3.14.\n* The [`pydantic-core`](https://github.com/pydantic/pydantic-core/) repository was merged inside the main `pydantic` one.\n\n### What's Changed\n\n#### New Features\n\n* Add `polymorphic_serialization` option by [@davidhewitt](https://github.com/davidhewitt) in [#12518](https://github.com/pydantic/pydantic/pull/12518)\n* Support Root models with `Literal` root types as discriminator field types by [@YassinNouh21](https://github.com/YassinNouh21) in [#12680](https://github.com/pydantic/pydantic/pull/12680)\n\n#### Changes\n\n* Migrate `pydantic-core` CI by [@Viicos](https://github.com/Viicos) in [#12752](https://github.com/pydantic/pydantic/pull/12752)\n* Import `pydantic-core` into pydantic by [@davidhewitt](https://github.com/davidhewitt) in [#12481](https://github.com/pydantic/pydantic/pull/12481)\n* Backport V1 changes up to v1.10.26 by [@Viicos](https://github.com/Viicos) in [#12663](https://github.com/pydantic/pydantic/pull/12663)\n* Use the `complex()` constructor unconditionally when validating `complex` Python data by [@tanmaymunjal](https://github.com/tanmaymunjal) in [#12498](https://github.com/pydantic/pydantic/pull/12498)\n* Add support for three-tuple input for `Decimal` by [@tanmaymunjal](https://github.com/tanmaymunjal) in [#12500](https://github.com/pydantic/pydantic/pull/12500)\n* Align `@field_serializer` logic with `@field_validator` by [@Viicos](https://github.com/Viicos) in [#12577](https://github.com/pydantic/pydantic/pull/12577)\n* Make `PydanticUserError` a `RuntimeError` instead of a `TypeError` by [@poliakovva](https://github.com/poliakovva) in [#12579](https://github.com/pydantic/pydantic/pull/12579)\n* Remove redundant serialization attempts in nested unions by [@davidhewitt](https://github.com/davidhewitt) in [#12604](https://github.com/pydantic/pydantic/pull/12604)\n* Copy `root` value when making root model shallow copies by [@YassinNouh21](https://github.com/YassinNouh21) in [#12679](https://github.com/pydantic/pydantic/pull/12679)\n* Ensure deterministic JSON schema defaults by sorting sets by [@drshvik](https://github.com/drshvik) in [#12760](https://github.com/pydantic/pydantic/pull/12760)\n\n#### Performance\n\n* Refactor `DecoratorInfos.build()` implementation by [@Viicos](https://github.com/Viicos) in [#12536](https://github.com/pydantic/pydantic/pull/12536)\n* Cache compiled regex in `pydantic-core` by [@Viicos](https://github.com/Viicos) in [#12549](https://github.com/pydantic/pydantic/pull/12549)\n* Optimize creation of `Literal` validators by [@davidhewitt](https://github.com/davidhewitt) in [#12569](https://github.com/pydantic/pydantic/pull/12569)\n* Optimize implementation of `LookupKey` by [@davidhewitt](https://github.com/davidhewitt) in [#12571](https://github.com/pydantic/pydantic/pull/12571)\n* Use python strings for field names by [@davidhewitt](https://github.com/davidhewitt) in [#12631](https://github.com/pydantic/pydantic/pull/12631)\n* Optimize datetime formatting code by [@davidhewitt](https://github.com/davidhewitt) in [#12626](https://github.com/pydantic/pydantic/pull/12626)\n* Validate JSON model data by iteration by [@davidhewitt](https://github.com/davidhewitt) in [#12550](https://github.com/pydantic/pydantic/pull/12550)\n* Optimize annotations evaluation of Pydantic models by [@Viicos](https://github.com/Viicos) in [#12681](https://github.com/pydantic/pydantic/pull/12681)\n* Optimize `FieldInfo._copy()` by [@Viicos](https://github.com/Viicos) in [#12727](https://github.com/pydantic/pydantic/pull/12727)\n\n#### Fixes\n\n* Fix `FieldInfo` rebuilding when parameterizing generic models with an `Annotated` type by [@Viicos](https://github.com/Viicos) in [#12463](https://github.com/pydantic/pydantic/pull/12463)\n* Fix nested model schema deduplication in JSON schema generation by [@marwan-alloreview](https://github.com/marwan-alloreview) in [#12494](https://github.com/pydantic/pydantic/pull/12494)\n* Fix `InitVar` being ignored when using with the `pydantic.Field()` function by [@Viicos](https://github.com/Viicos) in [#12495](https://github.com/pydantic/pydantic/pull/12495)\n* Fix support for enums with `NamedTuple` as values by [@Viicos](https://github.com/Viicos) in [#12506](https://github.com/pydantic/pydantic/pull/12506)\n* Do not delete mock validator/serializer in `rebuild_dataclass()` by [@Viicos](https://github.com/Viicos) in [#12513](https://github.com/pydantic/pydantic/pull/12513)\n* Require test suite to pass with free threading, switch back to global generic types cache by [@davidhewitt](https://github.com/davidhewitt) in [#12537](https://github.com/pydantic/pydantic/pull/12537)\n* Refactor `__pydantic_extra__` annotation handling by [@Viicos](https://github.com/Viicos) in [#12563](https://github.com/pydantic/pydantic/pull/12563)\n* Do not add claim of UUID \"safety\" provision by [@davidhewitt](https://github.com/davidhewitt) in [#12567](https://github.com/pydantic/pydantic/pull/12567)\n* Use Python hash to perform lookup in tagged union serializer by [@davidhewitt](https://github.com/davidhewitt) in [#12594](https://github.com/pydantic/pydantic/pull/12594)\n* Do not emit serialization warning `MISSING` sentinel is present in a nested model by [@Viicos](https://github.com/Viicos) in [#12635](https://github.com/pydantic/pydantic/pull/12635)\n* Do not eagerly evaluate annotations in signature logic by [@Viicos](https://github.com/Viicos) in [#12660](https://github.com/pydantic/pydantic/pull/12660)\n* Fix serialization of typed dict unions when `exclude_none` is set by [@davidhewitt](https://github.com/davidhewitt) in [#12677](https://github.com/pydantic/pydantic/pull/12677)\n* Do not reuse prebuilt serializers/validators on rebuilds by [@lmmx](https://github.com/lmmx) in [#12689](https://github.com/pydantic/pydantic/pull/12689)\n* Fix type annotation of `field_definitions` in `create_model()` by [@lehmann-hqs](https://github.com/lehmann-hqs) in [#12734](https://github.com/pydantic/pydantic/pull/12734)\n* Fix incorrect dataclass constructor signature when overriding class `kw_only` with `Field()` by [@jfadia](https://github.com/jfadia) in [#12741](https://github.com/pydantic/pydantic/pull/12741)\n* Use `typing.Union` when replacing types under Python 3.14 by [@Viicos](https://github.com/Viicos) in [#12733](https://github.com/pydantic/pydantic/pull/12733)\n* Improve ImportString error when internal imports fail by [@tsembp](https://github.com/tsembp) in [#12740](https://github.com/pydantic/pydantic/pull/12740)\n* Fix serializing complex numbers with negative zero imaginary part by [@lhnwrk](https://github.com/lhnwrk) in [#12770](https://github.com/pydantic/pydantic/pull/12770)\n* Preserve custom docstrings on stdlib dataclasses in JSON schema by [@nightcityblade](https://github.com/nightcityblade) in [#12815](https://github.com/pydantic/pydantic/pull/12815)\n\n#### Packaging\n\n* Bump Rust url dependency from 2.5.4 to 2.5.7 in `pydantic-core` by [@dependabot](https://github.com/dependabot)[bot] in [#12508](https://github.com/pydantic/pydantic/pull/12508)\n* Bump Rust minimum version to 1.88, use edition 2024 by [@davidhewitt](https://github.com/davidhewitt) and [@Viicos](https://github.com/Viicos) in [#12551](https://github.com/pydantic/pydantic/pull/12551) and [#12752](https://github.com/pydantic/pydantic/pull/12752)\n* Bump PyO3 to 0.28, jiter to 0.13 by [@davidhewitt](https://github.com/davidhewitt) in [#12767](https://github.com/pydantic/pydantic/pull/12767)\n\n### New Contributors\n\n* [@marwan-alloreview](https://github.com/marwan-alloreview) made their first contribution in [#12494](https://github.com/pydantic/pydantic/pull/12494)\n* [@tanmaymunjal](https://github.com/tanmaymunjal) made their first contribution in [#12498](https://github.com/pydantic/pydantic/pull/12498)\n* [@poliakovva](https://github.com/poliakovva) made their first contribution in [#12579](https://github.com/pydantic/pydantic/pull/12579)\n* [@lehmann-hqs](https://github.com/lehmann-hqs) made their first contribution in [#12734](https://github.com/pydantic/pydantic/pull/12734)\n* [@jfadia](https://github.com/jfadia) made their first contribution in [#12741](https://github.com/pydantic/pydantic/pull/12741)\n* [@tsembp](https://github.com/tsembp) made their first contribution in [#12740](https://github.com/pydantic/pydantic/pull/12740)\n* [@drshvik](https://github.com/drshvik) made their first contribution in [#12760](https://github.com/pydantic/pydantic/pull/12760)\n* [@lhnwrk](https://github.com/lhnwrk) made their first contribution in [#12770](https://github.com/pydantic/pydantic/pull/12770)\n* [@nightcityblade](https://github.com/nightcityblade) made their first contribution in [#12815](https://github.com/pydantic/pydantic/pull/12811)\n\n## v2.12.5 (2025-11-26)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.5)\n\nThis is the fifth 2.12 patch release, addressing an issue with the `MISSING` sentinel and providing several documentation improvements.\n\nThe next 2.13 minor release will be published in a couple weeks, and will include a new *polymorphic serialization* feature addressing\nthe remaining unexpected changes to the *serialize as any* behavior.\n\n* Fix pickle error when using `model_construct()` on a model with `MISSING` as a default value by [@ornariece](https://github.com/ornariece) in [#12522](https://github.com/pydantic/pydantic/pull/12522).\n* Several updates to the documentation by [@Viicos](https://github.com/Viicos).\n\n## v2.12.4 (2025-11-05)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.4)\n\nThis is the fourth 2.12 patch release, fixing more regressions, and reverting a change in the `build()` method\nof the [`AnyUrl` and Dsn types](https://docs.pydantic.dev/latest/api/networks/).\n\nThis patch release also fixes an issue with the serialization of IP address types, when `serialize_as_any` is used. The next patch release\nwill try to address the remaining issues with *serialize as any* behavior by introducing a new *polymorphic serialization* feature, that\nshould be used in most cases in place of *serialize as any*.\n\n* Fix issue with forward references in parent `TypedDict` classes by [@Viicos](https://github.com/Viicos) in [#12427](https://github.com/pydantic/pydantic/pull/12427).\n\n This issue is only relevant on Python 3.14 and greater.\n\n* Exclude fields with `exclude_if` from JSON Schema required fields by [@Viicos](https://github.com/Viicos) in [#12430](https://github.com/pydantic/pydantic/pull/12430)\n* Revert URL percent-encoding of credentials in the `build()` method\n of the [`AnyUrl` and Dsn types](https://docs.pydantic.dev/latest/api/networks/) by [@davidhewitt](https://github.com/davidhewitt) in\n [pydantic-core#1833](https://github.com/pydantic/pydantic-core/pull/1833).\n\n This was initially considered as a bugfix, but caused regressions and as such was fully reverted. The next release will include\n an opt-in option to percent-encode components of the URL.\n\n* Add type inference for IP address types by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1868](https://github.com/pydantic/pydantic-core/pull/1868).\n\n The 2.12 changes to the `serialize_as_any` behavior made it so that IP address types could not properly serialize to JSON.\n\n* Avoid getting default values from defaultdict by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1853](https://github.com/pydantic/pydantic-core/pull/1853).\n\n This fixes a subtle regression in the validation behavior of the [`collections.defaultdict`](https://docs.python.org/3/library/collections.html#collections.defaultdict)\n type.\n\n* Fix issue with field serializers on nested typed dictionaries by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1879](https://github.com/pydantic/pydantic-core/pull/1879).\n* Add more `pydantic-core` builds for the three-threaded version of Python 3.14 by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1864](https://github.com/pydantic/pydantic-core/pull/1864).\n\n## v2.12.3 (2025-10-17)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.3)\n\n### What's Changed\n\nThis is the third 2.12 patch release, fixing issues related to the `FieldInfo` class, and reverting a change to the supported\n[*after* model validator](https://docs.pydantic.dev/latest/concepts/validators/#model-validators) function signatures.\n\n* Raise a warning when an invalid after model validator function signature is raised by [@Viicos](https://github.com/Viicos) in [#12414](https://github.com/pydantic/pydantic/pull/12414).\n Starting in 2.12.0, using class methods for *after* model validators raised an error, but the error wasn't raised concistently. We decided\n to emit a deprecation warning instead.\n* Add [`FieldInfo.asdict()`](https://docs.pydantic.dev/latest/api/fields/#pydantic.fields.FieldInfo.asdict) method, improve documentation around `FieldInfo` by [@Viicos](https://github.com/Viicos) in [#12411](https://github.com/pydantic/pydantic/pull/12411).\n This also add back support for mutations on `FieldInfo` classes, that are reused as `Annotated` metadata. **However**, note that this is still\n *not* a supported pattern. Instead, please refer to the [added example](https://docs.pydantic.dev/latest/examples/dynamic_models/) in the documentation.\n\nThe [blog post](https://pydantic.dev/articles/pydantic-v2-12-release#changes) section on changes was also updated to document the changes related to `serialize_as_any`.\n\n## v2.12.2 (2025-10-14)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.2)\n\n### What's Changed\n\n#### Fixes\n\n* Release a new `pydantic-core` version, as a corrupted CPython 3.10 `manylinux2014_aarch64` wheel got uploaded ([pydantic-core#1843](https://github.com/pydantic/pydantic-core/pull/1843)).\n* Fix issue with recursive generic models with a parent model class by [@Viicos](https://github.com/Viicos) in [#12398](https://github.com/pydantic/pydantic/pull/12398)\n\n## v2.12.1 (2025-10-13)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.1)\n\n### What's Changed\n\nThis is the first 2.12 patch release, addressing most (but not all yet) regressions from the initial 2.12.0 release.\n\n#### Fixes\n\n* Do not evaluate annotations when inspecting validators and serializers by [@Viicos](https://github.com/Viicos) in [#12355](https://github.com/pydantic/pydantic/pull/12355)\n* Make sure `None` is converted as `NoneType` in Python 3.14 by [@Viicos](https://github.com/Viicos) in [#12370](https://github.com/pydantic/pydantic/pull/12370)\n* Backport V1 runtime warning when using Python 3.14 by [@Viicos](https://github.com/Viicos) in [#12367](https://github.com/pydantic/pydantic/pull/12367)\n* Fix error message for invalid validator signatures by [@Viicos](https://github.com/Viicos) in [#12366](https://github.com/pydantic/pydantic/pull/12366)\n* Populate field name in `ValidationInfo` for validation of default value by [@Viicos](https://github.com/Viicos) in [pydantic-core#1826](https://github.com/pydantic/pydantic-core/pull/1826)\n* Encode credentials in `MultiHostUrl` builder by [@willswire](https://github.com/willswire) in [pydantic-core#1829](https://github.com/pydantic/pydantic-core/pull/1829)\n* Respect field serializers when using `serialize_as_any` serialization flag by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1829](https://github.com/pydantic/pydantic-core/pull/1829)\n* Fix various `RootModel` serialization issues by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1836](https://github.com/pydantic/pydantic-core/pull/1836)\n\n### New Contributors\n\n* [@willswire](https://github.com/willswire) made their first contribution in [pydantic-core#1829](https://github.com/pydantic/pydantic-core/pull/1829)\n\n## v2.12.0 (2025-10-07)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.0)\n\nThis is the final 2.12 release. It features the work of 20 external contributors and provides useful new features, along with initial Python 3.14 support.\nSeveral minor changes (considered non-breaking changes according to our [versioning policy](https://docs.pydantic.dev/2.12/version-policy/#pydantic-v2))\nare also included in this release. Make sure to look into them before upgrading.\n\n**Note that Pydantic V1 is not compatible with Python 3.14 and greater**.\n\n### What's Changed\n\nSee the beta releases for all changes sinces 2.11.\n\n#### New Features\n\n* Add `extra` parameter to the validate functions by [@anvilpete](https://github.com/anvilpete) in [#12233](https://github.com/pydantic/pydantic/pull/12233)\n* Add `exclude_computed_fields` serialization option by [@Viicos](https://github.com/Viicos) in [#12334](https://github.com/pydantic/pydantic/pull/12334)\n* Add `preverse_empty_path` URL options by [@Viicos](https://github.com/Viicos) in [#12336](https://github.com/pydantic/pydantic/pull/12336)\n* Add `union_format` parameter to JSON Schema generation by [@Viicos](https://github.com/Viicos) in [#12147](https://github.com/pydantic/pydantic/pull/12147)\n* Add `__qualname__` parameter for `create_model` by [@Atry](https://github.com/Atry) in [#12001](https://github.com/pydantic/pydantic/pull/12001)\n\n#### Fixes\n\n* Do not try to infer name from lambda definitions in pipelines API by [@Viicos](https://github.com/Viicos) in [#12289](https://github.com/pydantic/pydantic/pull/12289)\n* Use proper namespace for functions in `TypeAdapter` by [@Viicos](https://github.com/Viicos) in [#12324](https://github.com/pydantic/pydantic/pull/12324)\n* Use `Any` for context type annotation in `TypeAdapter` by [@inducer](https://github.com/inducer) in [#12279](https://github.com/pydantic/pydantic/pull/12279)\n* Expose `FieldInfo` in `pydantic.fields.__all__` by [@Viicos](https://github.com/Viicos) in [#12339](https://github.com/pydantic/pydantic/pull/12339)\n* Respect `validation_alias` in `@validate_call` by [@Viicos](https://github.com/Viicos) in [#12340](https://github.com/pydantic/pydantic/pull/12340)\n* Use `Any` as context annotation in plugin API by [@Viicos](https://github.com/Viicos) in [#12341](https://github.com/pydantic/pydantic/pull/12341)\n* Use proper `stacklevel` in warnings when possible by [@Viicos](https://github.com/Viicos) in [#12342](https://github.com/pydantic/pydantic/pull/12342)\n\n#### Packaging\n\n* Update V1 copy to v1.10.24 by [@Viicos](https://github.com/Viicos) in [#12338](https://github.com/pydantic/pydantic/pull/12338)\n\n### New Contributors\n\n* [@anvilpete](https://github.com/anvilpete) made their first contribution in [#12233](https://github.com/pydantic/pydantic/pull/12233)\n* [@JonathanWindell](https://github.com/JonathanWindell) made their first contribution in [#12327](https://github.com/pydantic/pydantic/pull/12327)\n* [@inducer](https://github.com/inducer) made their first contribution in [#12279](https://github.com/pydantic/pydantic/pull/12279)\n* [@Atry](https://github.com/Atry) made their first contribution in [#12001](https://github.com/pydantic/pydantic/pull/12001)\n\n## v2.12.0b1 (2025-10-03)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.0b1)\n\nThis is the first beta release of the upcoming 2.12 release.\n\n### What's Changed\n\n#### New Features\n\n* Add support for `exclude_if` at the field level by [@andresliszt](https://github.com/andresliszt) in [#12141](https://github.com/pydantic/pydantic/pull/12141)\n* Add `ValidateAs` annotation helper by [@Viicos](https://github.com/Viicos) in [#11942](https://github.com/pydantic/pydantic/pull/11942)\n* Add configuration options for validation and JSON serialization of temporal types by [@ollz272](https://github.com/ollz272) in [#12068](https://github.com/pydantic/pydantic/pull/12068)\n* Add support for PEP 728 by [@Viicos](https://github.com/Viicos) in [#12179](https://github.com/pydantic/pydantic/pull/12179)\n* Add field name in serialization error by [@NicolasPllr1](https://github.com/NicolasPllr1) in [pydantic-core#1799](https://github.com/pydantic/pydantic-core/pull/1799)\n* Add option to preserve empty URL paths by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1789](https://github.com/pydantic/pydantic-core/pull/1789)\n\n#### Changes\n\n* Raise error if an incompatible `pydantic-core` version is installed by [@Viicos](https://github.com/Viicos) in [#12196](https://github.com/pydantic/pydantic/pull/12196)\n* Remove runtime warning for experimental features by [@Viicos](https://github.com/Viicos) in [#12265](https://github.com/pydantic/pydantic/pull/12265)\n* Warn if registering virtual subclasses on Pydantic models by [@Viicos](https://github.com/Viicos) in [#11669](https://github.com/pydantic/pydantic/pull/11669)\n\n#### Fixes\n\n* Fix `__getattr__()` behavior on Pydantic models when a property raised an `AttributeError` and extra values are present by [@raspuchin](https://github.com/raspuchin) in [#12106](https://github.com/pydantic/pydantic/pull/12106)\n* Add test to prevent regression with Pydantic models used as annotated metadata by [@Viicos](https://github.com/Viicos) in [#12133](https://github.com/pydantic/pydantic/pull/12133)\n* Allow to use property setters on Pydantic dataclasses with `validate_assignment` set by [@Viicos](https://github.com/Viicos) in [#12173](https://github.com/pydantic/pydantic/pull/12173)\n* Fix mypy v2 plugin for upcoming mypy release by [@cdce8p](https://github.com/cdce8p) in [#12209](https://github.com/pydantic/pydantic/pull/12209)\n* Respect custom title in functions JSON Schema by [@Viicos](https://github.com/Viicos) in [#11892](https://github.com/pydantic/pydantic/pull/11892)\n* Fix `ImportString` JSON serialization for objects with a `name` attribute by [@chr1sj0nes](https://github.com/chr1sj0nes) in [#12219](https://github.com/pydantic/pydantic/pull/12219)\n* Do not error on fields overridden by methods in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#12290](https://github.com/pydantic/pydantic/pull/12290)\n\n#### Packaging\n\n* Bump `pydantic-core` to v2.40.1 by [@Viicos](https://github.com/Viicos) in [#12314](https://github.com/pydantic/pydantic/pull/12314)\n\n### New Contributors\n\n* [@raspuchin](https://github.com/raspuchin) made their first contribution in [#12106](https://github.com/pydantic/pydantic/pull/12106)\n* [@chr1sj0nes](https://github.com/chr1sj0nes) made their first contribution in [#12219](https://github.com/pydantic/pydantic/pull/12219)\n\n## v2.12.0a1 (2025-07-26)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.0a1)\n\nThis is the first alpha release of the upcoming 2.12 release, which adds initial support for Python 3.14.\n\n### What's Changed\n\n#### New Features\n\n* Add `__pydantic_on_complete__()` hook that is called once model is fully ready to be used by [@DouweM](https://github.com/DouweM) in [#11762](https://github.com/pydantic/pydantic/pull/11762)\n* Add initial support for Python 3.14 by [@Viicos](https://github.com/Viicos) in [#11991](https://github.com/pydantic/pydantic/pull/11991)\n* Add regex patterns to JSON schema for `Decimal` type by [@Dima-Bulavenko](https://github.com/Dima-Bulavenko) in [#11987](https://github.com/pydantic/pydantic/pull/11987)\n* Add support for `doc` attribute on dataclass fields by [@Viicos](https://github.com/Viicos) in [#12077](https://github.com/pydantic/pydantic/pull/12077)\n* Add experimental `MISSING` sentinel by [@Viicos](https://github.com/Viicos) in [#11883](https://github.com/pydantic/pydantic/pull/11883)\n\n#### Changes\n\n* Allow config and bases to be specified together in `create_model()` by [@Viicos](https://github.com/Viicos) in [#11714](https://github.com/pydantic/pydantic/pull/11714)\n* Move some field logic out of the `GenerateSchema` class by [@Viicos](https://github.com/Viicos) in [#11733](https://github.com/pydantic/pydantic/pull/11733)\n* Always make use of `inspect.getsourcelines()` for docstring extraction on Python 3.13 and greater by [@Viicos](https://github.com/Viicos) in [#11829](https://github.com/pydantic/pydantic/pull/11829)\n* Only support the latest Mypy version by [@Viicos](https://github.com/Viicos) in [#11832](https://github.com/pydantic/pydantic/pull/11832)\n* Do not implicitly convert after model validators to class methods by [@Viicos](https://github.com/Viicos) in [#11957](https://github.com/pydantic/pydantic/pull/11957)\n* Refactor `FieldInfo` creation implementation by [@Viicos](https://github.com/Viicos) in [#11898](https://github.com/pydantic/pydantic/pull/11898)\n* Make `Secret` covariant by [@bluenote10](https://github.com/bluenote10) in [#12008](https://github.com/pydantic/pydantic/pull/12008)\n* Emit warning when field-specific metadata is used in invalid contexts by [@Viicos](https://github.com/Viicos) in [#12028](https://github.com/pydantic/pydantic/pull/12028)\n\n#### Fixes\n\n* Properly fetch plain serializer function when serializing default value in JSON Schema by [@Viicos](https://github.com/Viicos) in [#11721](https://github.com/pydantic/pydantic/pull/11721)\n* Remove generics cache workaround by [@Viicos](https://github.com/Viicos) in [#11755](https://github.com/pydantic/pydantic/pull/11755)\n* Remove coercion of decimal constraints by [@Viicos](https://github.com/Viicos) in [#11772](https://github.com/pydantic/pydantic/pull/11772)\n* Fix crash when expanding root type in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11735](https://github.com/pydantic/pydantic/pull/11735)\n* Only mark model as complete once all fields are complete by [@DouweM](https://github.com/DouweM) in [#11759](https://github.com/pydantic/pydantic/pull/11759)\n* Do not provide `field_name` in validator core schemas by [@DouweM](https://github.com/DouweM) in [#11761](https://github.com/pydantic/pydantic/pull/11761)\n* Fix issue with recursive generic models by [@Viicos](https://github.com/Viicos) in [#11775](https://github.com/pydantic/pydantic/pull/11775)\n* Fix qualified name comparison of private attributes during namespace inspection by [@karta9821](https://github.com/karta9821) in [#11803](https://github.com/pydantic/pydantic/pull/11803)\n* Make sure Pydantic dataclasses with slots and `validate_assignment` can be unpickled by [@Viicos](https://github.com/Viicos) in [#11769](https://github.com/pydantic/pydantic/pull/11769)\n* Traverse `function-before` schemas during schema gathering by [@Viicos](https://github.com/Viicos) in [#11801](https://github.com/pydantic/pydantic/pull/11801)\n* Fix check for stdlib dataclasses by [@Viicos](https://github.com/Viicos) in [#11822](https://github.com/pydantic/pydantic/pull/11822)\n* Check if `FieldInfo` is complete after applying type variable map by [@Viicos](https://github.com/Viicos) in [#11855](https://github.com/pydantic/pydantic/pull/11855)\n* Do not delete mock validator/serializer in `model_rebuild()` by [@Viicos](https://github.com/Viicos) in [#11890](https://github.com/pydantic/pydantic/pull/11890)\n* Rebuild dataclass fields before schema generation by [@Viicos](https://github.com/Viicos) in [#11949](https://github.com/pydantic/pydantic/pull/11949)\n* Always store the original field assignment on `FieldInfo` by [@Viicos](https://github.com/Viicos) in [#11946](https://github.com/pydantic/pydantic/pull/11946)\n* Do not use deprecated methods as default field values by [@Viicos](https://github.com/Viicos) in [#11914](https://github.com/pydantic/pydantic/pull/11914)\n* Allow callable discriminator to be applied on PEP 695 type aliases by [@Viicos](https://github.com/Viicos) in [#11941](https://github.com/pydantic/pydantic/pull/11941)\n* Suppress core schema generation warning when using `SkipValidation` by [@ygsh0816](https://github.com/ygsh0816) in [#12002](https://github.com/pydantic/pydantic/pull/12002)\n* Do not emit typechecking error for invalid `Field()` default with `validate_default` set to `True` by [@Viicos](https://github.com/Viicos) in [#11988](https://github.com/pydantic/pydantic/pull/11988)\n* Refactor logic to support Pydantic's `Field()` function in dataclasses by [@Viicos](https://github.com/Viicos) in [#12051](https://github.com/pydantic/pydantic/pull/12051)\n\n#### Packaging\n\n* Update project metadata to use PEP 639 by [@Viicos](https://github.com/Viicos) in [#11694](https://github.com/pydantic/pydantic/pull/11694)\n* Bump `mkdocs-llmstxt` to v0.2.0 by [@Viicos](https://github.com/Viicos) in [#11725](https://github.com/pydantic/pydantic/pull/11725)\n* Bump `pydantic-core` to v2.35.1 by [@Viicos](https://github.com/Viicos) in [#11963](https://github.com/pydantic/pydantic/pull/11963)\n* Bump dawidd6/action-download-artifact from 10 to 11 by [@dependabot](https://github.com/dependabot)[bot] in [#12033](https://github.com/pydantic/pydantic/pull/12033)\n* Bump astral-sh/setup-uv from 5 to 6 by [@dependabot](https://github.com/dependabot)[bot] in [#11826](https://github.com/pydantic/pydantic/pull/11826)\n* Update mypy to 1.17.0 by [@Viicos](https://github.com/Viicos) in [#12076](https://github.com/pydantic/pydantic/pull/12076)\n\n### New Contributors\n\n* [@parth-paradkar](https://github.com/parth-paradkar) made their first contribution in [#11695](https://github.com/pydantic/pydantic/pull/11695)\n* [@dqkqd](https://github.com/dqkqd) made their first contribution in [#11739](https://github.com/pydantic/pydantic/pull/11739)\n* [@fhightower](https://github.com/fhightower) made their first contribution in [#11722](https://github.com/pydantic/pydantic/pull/11722)\n* [@gbaian10](https://github.com/gbaian10) made their first contribution in [#11766](https://github.com/pydantic/pydantic/pull/11766)\n* [@DouweM](https://github.com/DouweM) made their first contribution in [#11759](https://github.com/pydantic/pydantic/pull/11759)\n* [@bowenliang123](https://github.com/bowenliang123) made their first contribution in [#11719](https://github.com/pydantic/pydantic/pull/11719)\n* [@rawwar](https://github.com/rawwar) made their first contribution in [#11799](https://github.com/pydantic/pydantic/pull/11799)\n* [@karta9821](https://github.com/karta9821) made their first contribution in [#11803](https://github.com/pydantic/pydantic/pull/11803)\n* [@jinnovation](https://github.com/jinnovation) made their first contribution in [#11834](https://github.com/pydantic/pydantic/pull/11834)\n* [@zmievsa](https://github.com/zmievsa) made their first contribution in [#11861](https://github.com/pydantic/pydantic/pull/11861)\n* [@Otto-AA](https://github.com/Otto-AA) made their first contribution in [#11860](https://github.com/pydantic/pydantic/pull/11860)\n* [@ygsh0816](https://github.com/ygsh0816) made their first contribution in [#12002](https://github.com/pydantic/pydantic/pull/12002)\n* [@lukland](https://github.com/lukland) made their first contribution in [#12015](https://github.com/pydantic/pydantic/pull/12015)\n* [@Dima-Bulavenko](https://github.com/Dima-Bulavenko) made their first contribution in [#11987](https://github.com/pydantic/pydantic/pull/11987)\n* [@GSemikozov](https://github.com/GSemikozov) made their first contribution in [#12050](https://github.com/pydantic/pydantic/pull/12050)\n* [@hannah-heywa](https://github.com/hannah-heywa) made their first contribution in [#12082](https://github.com/pydantic/pydantic/pull/12082)\n\n## v2.11.10 (2025-10-04)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.10)\n\n### What's Changed\n\n#### Fixes\n\n* Backport v1.10.24 changes by [@Viicos](https://github.com/Viicos)\n\n## v2.11.9 (2025-09-13)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.9)\n\n### What's Changed\n\n#### Fixes\n\n* Backport v1.10.23 changes by [@Viicos](https://github.com/Viicos)\n\n## v2.11.8 (2025-09-13)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.8)\n\n### What's Changed\n\n#### Fixes\n\n* Fix mypy plugin for mypy 1.18 by [@cdce8p](https://github.com/cdce8p) in [#12209](https://github.com/pydantic/pydantic/pull/12209)\n\n## v2.11.7 (2025-06-14)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.7)\n\n### What's Changed\n\n#### Fixes\n\n* Copy `FieldInfo` instance if necessary during `FieldInfo` build by [@Viicos](https://github.com/Viicos) in [#11898](https://github.com/pydantic/pydantic/pull/11898)\n\n## v2.11.6 (2025-06-13)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.6)\n\n### What's Changed\n\n#### Fixes\n\n* Rebuild dataclass fields before schema generation by [@Viicos](https://github.com/Viicos) in [#11949](https://github.com/pydantic/pydantic/pull/11949)\n* Always store the original field assignment on `FieldInfo` by [@Viicos](https://github.com/Viicos) in [#11946](https://github.com/pydantic/pydantic/pull/11946)\n\n## v2.11.5 (2025-05-22)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.5)\n\n### What's Changed\n\n#### Fixes\n\n* Check if `FieldInfo` is complete after applying type variable map by [@Viicos](https://github.com/Viicos) in [#11855](https://github.com/pydantic/pydantic/pull/11855)\n* Do not delete mock validator/serializer in `model_rebuild()` by [@Viicos](https://github.com/Viicos) in [#11890](https://github.com/pydantic/pydantic/pull/11890)\n* Do not duplicate metadata on model rebuild by [@Viicos](https://github.com/Viicos) in [#11902](https://github.com/pydantic/pydantic/pull/11902)\n\n## v2.11.4 (2025-04-29)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.4)\n\n### What's Changed\n\n#### Changes\n\n* Allow config and bases to be specified together in `create_model()` by [@Viicos](https://github.com/Viicos) in [#11714](https://github.com/pydantic/pydantic/pull/11714).\n This change was backported as it was previously possible (although not meant to be supported)\n to provide `model_config` as a field, which would make it possible to provide both configuration\n and bases.\n\n#### Fixes\n\n* Remove generics cache workaround by [@Viicos](https://github.com/Viicos) in [#11755](https://github.com/pydantic/pydantic/pull/11755)\n* Remove coercion of decimal constraints by [@Viicos](https://github.com/Viicos) in [#11772](https://github.com/pydantic/pydantic/pull/11772)\n* Fix crash when expanding root type in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11735](https://github.com/pydantic/pydantic/pull/11735)\n* Fix issue with recursive generic models by [@Viicos](https://github.com/Viicos) in [#11775](https://github.com/pydantic/pydantic/pull/11775)\n* Traverse `function-before` schemas during schema gathering by [@Viicos](https://github.com/Viicos) in [#11801](https://github.com/pydantic/pydantic/pull/11801)\n\n#### Packaging\n\n* Bump `mkdocs-llmstxt` to v0.2.0 by [@Viicos](https://github.com/Viicos) in [#11725](https://github.com/pydantic/pydantic/pull/11725)\n\n## v2.11.3 (2025-04-08)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.3)\n\n### What's Changed\n\n#### Fixes\n\n* Preserve field description when rebuilding model fields by [@Viicos](https://github.com/Viicos) in [#11698](https://github.com/pydantic/pydantic/pull/11698)\n\n#### Packaging\n\n* Update V1 copy to v1.10.21 by [@Viicos](https://github.com/Viicos) in [#11706](https://github.com/pydantic/pydantic/pull/11706)\n\n## v2.11.2 (2025-04-03)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.2)\n\n### What's Changed\n\n#### Fixes\n\n* Bump `pydantic-core` to v2.33.1 by [@Viicos](https://github.com/Viicos) in [#11678](https://github.com/pydantic/pydantic/pull/11678)\n* Make sure `__pydantic_private__` exists before setting private attributes by [@Viicos](https://github.com/Viicos) in [#11666](https://github.com/pydantic/pydantic/pull/11666)\n* Do not override `FieldInfo._complete` when using field from parent class by [@Viicos](https://github.com/Viicos) in [#11668](https://github.com/pydantic/pydantic/pull/11668)\n* Provide the available definitions when applying discriminated unions by [@Viicos](https://github.com/Viicos) in [#11670](https://github.com/pydantic/pydantic/pull/11670)\n* Do not expand root type in the mypy plugin for variables by [@Viicos](https://github.com/Viicos) in [#11676](https://github.com/pydantic/pydantic/pull/11676)\n* Mention the attribute name in model fields deprecation message by [@Viicos](https://github.com/Viicos) in [#11674](https://github.com/pydantic/pydantic/pull/11674)\n* Properly validate parameterized mappings by [@Viicos](https://github.com/Viicos) in [#11658](https://github.com/pydantic/pydantic/pull/11658)\n\n## v2.11.1 (2025-03-28)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.1)\n\n### What's Changed\n\n#### Fixes\n\n* Do not override `'definitions-ref'` schemas containing serialization schemas or metadata by [@Viicos](https://github.com/Viicos) in [#11644](https://github.com/pydantic/pydantic/pull/11644)\n\n## v2.11.0 (2025-03-27)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0)\n\n### What's Changed\n\nPydantic v2.11 is a version strongly focused on build time performance of Pydantic models (and core schema generation in general).\nSee the [blog post](https://pydantic.dev/articles/pydantic-v2-11-release) for more details.\n\n#### New Features\n\n* Add `encoded_string()` method to the URL types by [@YassinNouh21](https://github.com/YassinNouh21) in [#11580](https://github.com/pydantic/pydantic/pull/11580)\n* Add support for `defer_build` with `@validate_call` decorator by [@Viicos](https://github.com/Viicos) in [#11584](https://github.com/pydantic/pydantic/pull/11584)\n* Allow `@with_config` decorator to be used with keyword arguments by [@Viicos](https://github.com/Viicos) in [#11608](https://github.com/pydantic/pydantic/pull/11608)\n* Simplify customization of default value inclusion in JSON Schema generation by [@Viicos](https://github.com/Viicos) in [#11634](https://github.com/pydantic/pydantic/pull/11634)\n* Add `generate_arguments_schema()` function by [@Viicos](https://github.com/Viicos) in [#11572](https://github.com/pydantic/pydantic/pull/11572)\n\n#### Fixes\n\n* Allow generic typed dictionaries to be used for unpacked variadic keyword parameters by [@Viicos](https://github.com/Viicos) in [#11571](https://github.com/pydantic/pydantic/pull/11571)\n* Fix runtime error when computing model string representation involving cached properties and self-referenced models by [@Viicos](https://github.com/Viicos) in [#11579](https://github.com/pydantic/pydantic/pull/11579)\n* Preserve other steps when using the ellipsis in the pipeline API by [@Viicos](https://github.com/Viicos) in [#11626](https://github.com/pydantic/pydantic/pull/11626)\n* Fix deferred discriminator application logic by [@Viicos](https://github.com/Viicos) in [#11591](https://github.com/pydantic/pydantic/pull/11591)\n\n#### Packaging\n\n* Bump `pydantic-core` to v2.33.0 by [@Viicos](https://github.com/Viicos) in [#11631](https://github.com/pydantic/pydantic/pull/11631)\n\n### New Contributors\n\n* [@cmenon12](https://github.com/cmenon12) made their first contribution in [#11562](https://github.com/pydantic/pydantic/pull/11562)\n* [@Jeukoh](https://github.com/Jeukoh) made their first contribution in [#11611](https://github.com/pydantic/pydantic/pull/11611)\n\n## v2.11.0b2 (2025-03-17)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0b2)\n\n### What's Changed\n\n#### New Features\n\n* Add experimental support for free threading by [@Viicos](https://github.com/Viicos) in [#11516](https://github.com/pydantic/pydantic/pull/11516)\n\n#### Fixes\n\n* Fix `NotRequired` qualifier not taken into account in stringified annotation by [@Viicos](https://github.com/Viicos) in [#11559](https://github.com/pydantic/pydantic/pull/11559)\n\n#### Packaging\n\n* Bump `pydantic-core` to v2.32.0 by [@Viicos](https://github.com/Viicos) in [#11567](https://github.com/pydantic/pydantic/pull/11567)\n\n### New Contributors\n\n* [@joren485](https://github.com/joren485) made their first contribution in [#11547](https://github.com/pydantic/pydantic/pull/11547)\n\n## v2.11.0b1 (2025-03-06)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0b1)\n\n### What's Changed\n\n#### New Features\n\n* Support unsubstituted type variables with both a default and a bound or constraints by [@FyZzyss](https://github.com/FyZzyss) in https://github.com/pydantic/pydantic/pull/10789\n* Add a `default_factory_takes_validated_data` property to `FieldInfo` by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11034\n* Raise a better error when a generic alias is used inside `type[]` by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11088\n* Properly support PEP 695 generics syntax by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11189\n* Properly support type variable defaults by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11332\n* Add support for validating v6, v7, v8 UUIDs by [@astei](https://github.com/astei) in https://github.com/pydantic/pydantic/pull/11436\n* Improve alias configuration APIs by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11468\n\n#### Changes\n\n* Rework `create_model` field definitions format by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11032\n* Raise a deprecation warning when a field is annotated as final with a default value by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11168\n* Deprecate accessing `model_fields` and `model_computed_fields` on instances by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11169\n* **Breaking Change:** Move core schema generation logic for path types inside the `GenerateSchema` class by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/10846\n* Remove Python 3.8 Support by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11258\n* Optimize calls to `get_type_ref` by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/10863\n* Disable `pydantic-core` core schema validation by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11271\n\n#### Performance\n\n* Only evaluate `FieldInfo` annotations if required during schema building by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/10769\n* Improve `__setattr__` performance of Pydantic models by caching setter functions by [@MarkusSintonen](https://github.com/MarkusSintonen) in https://github.com/pydantic/pydantic/pull/10868\n* Improve annotation application performance by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11186\n* Improve performance of `_typing_extra` module by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11255\n* Refactor and optimize schema cleaning logic by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11244\n* Create a single dictionary when creating a `CoreConfig` instance by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11384\n* Bump `pydantic-core` and thus use `SchemaValidator` and `SchemaSerializer` caching by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11402\n* Reuse cached core schemas for parametrized generic Pydantic models by [@MarkusSintonen](https://github.com/MarkusSintonen) in https://github.com/pydantic/pydantic/pull/11434\n\n#### Fixes\n\n* Improve `TypeAdapter` instance repr by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/10872\n* Use the correct frame when instantiating a parametrized `TypeAdapter` by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/10893\n* Infer final fields with a default value as class variables in the mypy plugin by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11121\n* Recursively unpack `Literal` values if using PEP 695 type aliases by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11114\n* Override `__subclasscheck__` on `ModelMetaclass` to avoid memory leak and performance issues by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11116\n* Remove unused `_extract_get_pydantic_json_schema()` parameter by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11155\n* Improve discriminated union error message for invalid union variants by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11161\n* Unpack PEP 695 type aliases if using the `Annotated` form by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11109\n* Add missing stacklevel in `deprecated_instance_property` warning by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11200\n* Copy `WithJsonSchema` schema to avoid sharing mutated data by [@thejcannon](https://github.com/thejcannon) in https://github.com/pydantic/pydantic/pull/11014\n* Do not cache parametrized models when in the process of parametrizing another model by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/10704\n* Add discriminated union related metadata entries to the `CoreMetadata` definition by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11216\n* Consolidate schema definitions logic in the `_Definitions` class by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11208\n* Support initializing root model fields with values of the `root` type in the mypy plugin by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11212\n* Fix various issues with dataclasses and `use_attribute_docstrings` by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11246\n* Only compute normalized decimal places if necessary in `decimal_places_validator` by [@misrasaurabh1](https://github.com/misrasaurabh1) in https://github.com/pydantic/pydantic/pull/11281\n* Add support for `validation_alias` in the mypy plugin by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11295\n* Fix JSON Schema reference collection with `\"examples\"` keys by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11305\n* Do not transform model serializer functions as class methods in the mypy plugin by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11298\n* Simplify `GenerateJsonSchema.literal_schema()` implementation by [@misrasaurabh1](https://github.com/misrasaurabh1) in https://github.com/pydantic/pydantic/pull/11321\n* Add additional allowed schemes for `ClickHouseDsn` by [@Maze21127](https://github.com/Maze21127) in https://github.com/pydantic/pydantic/pull/11319\n* Coerce decimal constraints to `Decimal` instances by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11350\n* Use the correct JSON Schema mode when handling function schemas by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11367\n* Improve exception message when encountering recursion errors during type evaluation by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11356\n* Always include `additionalProperties: True` for arbitrary dictionary schemas by [@austinyu](https://github.com/austinyu) in https://github.com/pydantic/pydantic/pull/11392\n* Expose `fallback` parameter in serialization methods by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11398\n* Fix path serialization behavior by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11416\n* Do not reuse validators and serializers during model rebuild by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11429\n* Collect model fields when rebuilding a model by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11388\n* Allow cached properties to be altered on frozen models by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11432\n* Fix tuple serialization for `Sequence` types by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11435\n* Fix: do not check for `__get_validators__` on classes where `__get_pydantic_core_schema__` is also defined by [@tlambert03](https://github.com/tlambert03) in https://github.com/pydantic/pydantic/pull/11444\n* Allow callable instances to be used as serializers by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11451\n* Improve error thrown when overriding field with a property by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11459\n* Fix JSON Schema generation with referenceable core schemas holding JSON metadata by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11475\n* Support strict specification on union member types by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11481\n* Implicitly set `validate_by_name` to `True` when `validate_by_alias` is `False` by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11503\n* Change type of `Any` when synthesizing `BaseSettings.__init__` signature in the mypy plugin by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11497\n* Support type variable defaults referencing other type variables by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11520\n* Fix `ValueError` on year zero by [@davidhewitt](https://github.com/davidhewitt) in https://github.com/pydantic/pydantic-core/pull/1583\n* `dataclass` `InitVar` shouldn't be required on serialization by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic-core/pull/1602\n\n#### Packaging\n\n* Add a `check_pydantic_core_version()` function by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11324\n* Remove `greenlet` development dependency by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11351\n* Use the `typing-inspection` library by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11479\n* Bump `pydantic-core` to `v2.31.1` by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11526\n\n## New Contributors\n\n* [@FyZzyss](https://github.com/FyZzyss) made their first contribution in https://github.com/pydantic/pydantic/pull/10789\n* [@tamird](https://github.com/tamird) made their first contribution in https://github.com/pydantic/pydantic/pull/10948\n* [@felixxm](https://github.com/felixxm) made their first contribution in https://github.com/pydantic/pydantic/pull/11077\n* [@alexprabhat99](https://github.com/alexprabhat99) made their first contribution in https://github.com/pydantic/pydantic/pull/11082\n* [@Kharianne](https://github.com/Kharianne) made their first contribution in https://github.com/pydantic/pydantic/pull/11111\n* [@mdaffad](https://github.com/mdaffad) made their first contribution in https://github.com/pydantic/pydantic/pull/11177\n* [@thejcannon](https://github.com/thejcannon) made their first contribution in https://github.com/pydantic/pydantic/pull/11014\n* [@thomasfrimannkoren](https://github.com/thomasfrimannkoren) made their first contribution in https://github.com/pydantic/pydantic/pull/11251\n* [@usernameMAI](https://github.com/usernameMAI) made their first contribution in https://github.com/pydantic/pydantic/pull/11275\n* [@ananiavito](https://github.com/ananiavito) made their first contribution in https://github.com/pydantic/pydantic/pull/11302\n* [@pawamoy](https://github.com/pawamoy) made their first contribution in https://github.com/pydantic/pydantic/pull/11311\n* [@Maze21127](https://github.com/Maze21127) made their first contribution in https://github.com/pydantic/pydantic/pull/11319\n* [@kauabh](https://github.com/kauabh) made their first contribution in https://github.com/pydantic/pydantic/pull/11369\n* [@jaceklaskowski](https://github.com/jaceklaskowski) made their first contribution in https://github.com/pydantic/pydantic/pull/11353\n* [@tmpbeing](https://github.com/tmpbeing) made their first contribution in https://github.com/pydantic/pydantic/pull/11375\n* [@petyosi](https://github.com/petyosi) made their first contribution in https://github.com/pydantic/pydantic/pull/11405\n* [@austinyu](https://github.com/austinyu) made their first contribution in https://github.com/pydantic/pydantic/pull/11392\n* [@mikeedjones](https://github.com/mikeedjones) made their first contribution in https://github.com/pydantic/pydantic/pull/11402\n* [@astei](https://github.com/astei) made their first contribution in https://github.com/pydantic/pydantic/pull/11436\n* [@dsayling](https://github.com/dsayling) made their first contribution in https://github.com/pydantic/pydantic/pull/11522\n* [@sobolevn](https://github.com/sobolevn) made their first contribution in https://github.com/pydantic/pydantic-core/pull/1645\n\n## v2.11.0a2 (2025-02-10)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0a2)\n\n### What's Changed\n\nPydantic v2.11 is a version strongly focused on build time performance of Pydantic models (and core schema generation in general).\nThis is another early alpha release, meant to collect early feedback from users having issues with core schema builds.\n\n#### Performance\n\n* Create a single dictionary when creating a `CoreConfig` instance by [@sydney-runkle](https://github.com/sydney-runkle) in [#11384](https://github.com/pydantic/pydantic/pull/11384)\n\n#### Fixes\n\n* Use the correct JSON Schema mode when handling function schemas by [@Viicos](https://github.com/Viicos) in [#11367](https://github.com/pydantic/pydantic/pull/11367)\n* Fix JSON Schema reference logic with `examples` keys by [@Viicos](https://github.com/Viicos) in [#11366](https://github.com/pydantic/pydantic/pull/11366)\n* Improve exception message when encountering recursion errors during type evaluation by [@Viicos](https://github.com/Viicos) in [#11356](https://github.com/pydantic/pydantic/pull/11356)\n* Always include `additionalProperties: True` for arbitrary dictionary schemas by [@austinyu](https://github.com/austinyu) in [#11392](https://github.com/pydantic/pydantic/pull/11392)\n* Expose `fallback` parameter in serialization methods by [@Viicos](https://github.com/Viicos) in [#11398](https://github.com/pydantic/pydantic/pull/11398)\n* Fix path serialization behavior by [@sydney-runkle](https://github.com/sydney-runkle) in [#11416](https://github.com/pydantic/pydantic/pull/11416)\n\n#### Packaging\n\n* Bump `ruff` from 0.9.2 to 0.9.5 by [@Viicos](https://github.com/Viicos) in [#11407](https://github.com/pydantic/pydantic/pull/11407)\n* Bump `pydantic-core` to v2.29.0 by [@mikeedjones](https://github.com/mikeedjones) in [#11402](https://github.com/pydantic/pydantic/pull/11402)\n* Use locally-built rust with symbols & pgo by [@davidhewitt](https://github.com/davidhewitt) in [#11403](https://github.com/pydantic/pydantic/pull/11403)\n\n### New Contributors\n\n* [@kauabh](https://github.com/kauabh) made their first contribution in [#11369](https://github.com/pydantic/pydantic/pull/11369)\n* [@jaceklaskowski](https://github.com/jaceklaskowski) made their first contribution in [#11353](https://github.com/pydantic/pydantic/pull/11353)\n* [@tmpbeing](https://github.com/tmpbeing) made their first contribution in [#11375](https://github.com/pydantic/pydantic/pull/11375)\n* [@petyosi](https://github.com/petyosi) made their first contribution in [#11405](https://github.com/pydantic/pydantic/pull/11405)\n* [@austinyu](https://github.com/austinyu) made their first contribution in [#11392](https://github.com/pydantic/pydantic/pull/11392)\n* [@mikeedjones](https://github.com/mikeedjones) made their first contribution in [#11402](https://github.com/pydantic/pydantic/pull/11402)\n\n## v2.11.0a1 (2025-01-30)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0a1)\n\n### What's Changed\n\nPydantic v2.11 is a version strongly focused on build time performance of Pydantic models (and core schema generation in general).\nThis is an early alpha release, meant to collect early feedback from users having issues with core schema builds.\n\n#### New Features\n\n* Support unsubstituted type variables with both a default and a bound or constraints by [@FyZzyss](https://github.com/FyZzyss) in [#10789](https://github.com/pydantic/pydantic/pull/10789)\n* Add a `default_factory_takes_validated_data` property to `FieldInfo` by [@Viicos](https://github.com/Viicos) in [#11034](https://github.com/pydantic/pydantic/pull/11034)\n* Raise a better error when a generic alias is used inside `type[]` by [@Viicos](https://github.com/Viicos) in [#11088](https://github.com/pydantic/pydantic/pull/11088)\n* Properly support PEP 695 generics syntax by [@Viicos](https://github.com/Viicos) in [#11189](https://github.com/pydantic/pydantic/pull/11189)\n* Properly support type variable defaults by [@Viicos](https://github.com/Viicos) in [#11332](https://github.com/pydantic/pydantic/pull/11332)\n\n#### Changes\n\n* Rework `create_model` field definitions format by [@Viicos](https://github.com/Viicos) in [#11032](https://github.com/pydantic/pydantic/pull/11032)\n* Raise a deprecation warning when a field is annotated as final with a default value by [@Viicos](https://github.com/Viicos) in [#11168](https://github.com/pydantic/pydantic/pull/11168)\n* Deprecate accessing `model_fields` and `model_computed_fields` on instances by [@Viicos](https://github.com/Viicos) in [#11169](https://github.com/pydantic/pydantic/pull/11169)\n* Move core schema generation logic for path types inside the `GenerateSchema` class by [@sydney-runkle](https://github.com/sydney-runkle) in [#10846](https://github.com/pydantic/pydantic/pull/10846)\n* Move `deque` schema gen to `GenerateSchema` class by [@sydney-runkle](https://github.com/sydney-runkle) in [#11239](https://github.com/pydantic/pydantic/pull/11239)\n* Move `Mapping` schema gen to `GenerateSchema` to complete removal of `prepare_annotations_for_known_type` workaround by [@sydney-runkle](https://github.com/sydney-runkle) in [#11247](https://github.com/pydantic/pydantic/pull/11247)\n* Remove Python 3.8 Support by [@sydney-runkle](https://github.com/sydney-runkle) in [#11258](https://github.com/pydantic/pydantic/pull/11258)\n* Disable `pydantic-core` core schema validation by [@sydney-runkle](https://github.com/sydney-runkle) in [#11271](https://github.com/pydantic/pydantic/pull/11271)\n\n#### Performance\n\n* Only evaluate `FieldInfo` annotations if required during schema building by [@Viicos](https://github.com/Viicos) in [#10769](https://github.com/pydantic/pydantic/pull/10769)\n* Optimize calls to `get_type_ref` by [@Viicos](https://github.com/Viicos) in [#10863](https://github.com/pydantic/pydantic/pull/10863)\n* Improve `__setattr__` performance of Pydantic models by caching setter functions by [@MarkusSintonen](https://github.com/MarkusSintonen) in [#10868](https://github.com/pydantic/pydantic/pull/10868)\n* Improve annotation application performance by [@Viicos](https://github.com/Viicos) in [#11186](https://github.com/pydantic/pydantic/pull/11186)\n* Improve performance of `_typing_extra` module by [@Viicos](https://github.com/Viicos) in [#11255](https://github.com/pydantic/pydantic/pull/11255)\n* Refactor and optimize schema cleaning logic by [@Viicos](https://github.com/Viicos) and [@MarkusSintonen](https://github.com/MarkusSintonen) in [#11244](https://github.com/pydantic/pydantic/pull/11244)\n\n#### Fixes\n\n* Add validation tests for `_internal/_validators.py` by [@tkasuz](https://github.com/tkasuz) in [#10763](https://github.com/pydantic/pydantic/pull/10763)\n* Improve `TypeAdapter` instance repr by [@sydney-runkle](https://github.com/sydney-runkle) in [#10872](https://github.com/pydantic/pydantic/pull/10872)\n* Revert \"ci: use locally built pydantic-core with debug symbols by [@sydney-runkle](https://github.com/sydney-runkle) in [#10942](https://github.com/pydantic/pydantic/pull/10942)\n* Re-enable all FastAPI tests by [@tamird](https://github.com/tamird) in [#10948](https://github.com/pydantic/pydantic/pull/10948)\n* Fix typo in HISTORY.md. by [@felixxm](https://github.com/felixxm) in [#11077](https://github.com/pydantic/pydantic/pull/11077)\n* Infer final fields with a default value as class variables in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11121](https://github.com/pydantic/pydantic/pull/11121)\n* Recursively unpack `Literal` values if using PEP 695 type aliases by [@Viicos](https://github.com/Viicos) in [#11114](https://github.com/pydantic/pydantic/pull/11114)\n* Override `__subclasscheck__` on `ModelMetaclass` to avoid memory leak and performance issues by [@Viicos](https://github.com/Viicos) in [#11116](https://github.com/pydantic/pydantic/pull/11116)\n* Remove unused `_extract_get_pydantic_json_schema()` parameter by [@Viicos](https://github.com/Viicos) in [#11155](https://github.com/pydantic/pydantic/pull/11155)\n* Add FastAPI and SQLModel to third-party tests by [@sydney-runkle](https://github.com/sydney-runkle) in [#11044](https://github.com/pydantic/pydantic/pull/11044)\n* Fix conditional expressions syntax for third-party tests by [@Viicos](https://github.com/Viicos) in [#11162](https://github.com/pydantic/pydantic/pull/11162)\n* Move FastAPI tests to third-party workflow by [@Viicos](https://github.com/Viicos) in [#11164](https://github.com/pydantic/pydantic/pull/11164)\n* Improve discriminated union error message for invalid union variants by [@Viicos](https://github.com/Viicos) in [#11161](https://github.com/pydantic/pydantic/pull/11161)\n* Unpack PEP 695 type aliases if using the `Annotated` form by [@Viicos](https://github.com/Viicos) in [#11109](https://github.com/pydantic/pydantic/pull/11109)\n* Include `openapi-python-client` check in issue creation for third-party failures, use `main` branch by [@sydney-runkle](https://github.com/sydney-runkle) in [#11182](https://github.com/pydantic/pydantic/pull/11182)\n* Add pandera third-party tests by [@Viicos](https://github.com/Viicos) in [#11193](https://github.com/pydantic/pydantic/pull/11193)\n* Add ODMantic third-party tests by [@sydney-runkle](https://github.com/sydney-runkle) in [#11197](https://github.com/pydantic/pydantic/pull/11197)\n* Add missing stacklevel in `deprecated_instance_property` warning by [@Viicos](https://github.com/Viicos) in [#11200](https://github.com/pydantic/pydantic/pull/11200)\n* Copy `WithJsonSchema` schema to avoid sharing mutated data by [@thejcannon](https://github.com/thejcannon) in [#11014](https://github.com/pydantic/pydantic/pull/11014)\n* Do not cache parametrized models when in the process of parametrizing another model by [@Viicos](https://github.com/Viicos) in [#10704](https://github.com/pydantic/pydantic/pull/10704)\n* Re-enable Beanie third-party tests by [@Viicos](https://github.com/Viicos) in [#11214](https://github.com/pydantic/pydantic/pull/11214)\n* Add discriminated union related metadata entries to the `CoreMetadata` definition by [@Viicos](https://github.com/Viicos) in [#11216](https://github.com/pydantic/pydantic/pull/11216)\n* Consolidate schema definitions logic in the `_Definitions` class by [@Viicos](https://github.com/Viicos) in [#11208](https://github.com/pydantic/pydantic/pull/11208)\n* Support initializing root model fields with values of the `root` type in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11212](https://github.com/pydantic/pydantic/pull/11212)\n* Fix various issues with dataclasses and `use_attribute_docstrings` by [@Viicos](https://github.com/Viicos) in [#11246](https://github.com/pydantic/pydantic/pull/11246)\n* Only compute normalized decimal places if necessary in `decimal_places_validator` by [@misrasaurabh1](https://github.com/misrasaurabh1) in [#11281](https://github.com/pydantic/pydantic/pull/11281)\n* Fix two misplaced sentences in validation errors documentation by [@ananiavito](https://github.com/ananiavito) in [#11302](https://github.com/pydantic/pydantic/pull/11302)\n* Fix mkdocstrings inventory example in documentation by [@pawamoy](https://github.com/pawamoy) in [#11311](https://github.com/pydantic/pydantic/pull/11311)\n* Add support for `validation_alias` in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11295](https://github.com/pydantic/pydantic/pull/11295)\n* Do not transform model serializer functions as class methods in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11298](https://github.com/pydantic/pydantic/pull/11298)\n* Simplify `GenerateJsonSchema.literal_schema()` implementation by [@misrasaurabh1](https://github.com/misrasaurabh1) in [#11321](https://github.com/pydantic/pydantic/pull/11321)\n* Add additional allowed schemes for `ClickHouseDsn` by [@Maze21127](https://github.com/Maze21127) in [#11319](https://github.com/pydantic/pydantic/pull/11319)\n* Coerce decimal constraints to `Decimal` instances by [@Viicos](https://github.com/Viicos) in [#11350](https://github.com/pydantic/pydantic/pull/11350)\n* Fix `ValueError` on year zero by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1583](https://github.com/pydantic/pydantic-core/pull/1583)\n\n#### Packaging\n\n* Bump dawidd6/action-download-artifact from 6 to 7 by [@dependabot](https://github.com/dependabot) in [#11018](https://github.com/pydantic/pydantic/pull/11018)\n* Re-enable memray related tests on Python 3.12+ by [@Viicos](https://github.com/Viicos) in [#11191](https://github.com/pydantic/pydantic/pull/11191)\n* Bump astral-sh/setup-uv to 5 by [@dependabot](https://github.com/dependabot) in [#11205](https://github.com/pydantic/pydantic/pull/11205)\n* Bump `ruff` to v0.9.0 by [@sydney-runkle](https://github.com/sydney-runkle) in [#11254](https://github.com/pydantic/pydantic/pull/11254)\n* Regular `uv.lock` deps update by [@sydney-runkle](https://github.com/sydney-runkle) in [#11333](https://github.com/pydantic/pydantic/pull/11333)\n* Add a `check_pydantic_core_version()` function by [@Viicos](https://github.com/Viicos) in [#11324](https://github.com/pydantic/pydantic/pull/11324)\n* Remove `greenlet` development dependency by [@Viicos](https://github.com/Viicos) in [#11351](https://github.com/pydantic/pydantic/pull/11351)\n* Bump `pydantic-core` to v2.28.0 by [@Viicos](https://github.com/Viicos) in [#11364](https://github.com/pydantic/pydantic/pull/11364)\n\n### New Contributors\n\n* [@FyZzyss](https://github.com/FyZzyss) made their first contribution in [#10789](https://github.com/pydantic/pydantic/pull/10789)\n* [@tamird](https://github.com/tamird) made their first contribution in [#10948](https://github.com/pydantic/pydantic/pull/10948)\n* [@felixxm](https://github.com/felixxm) made their first contribution in [#11077](https://github.com/pydantic/pydantic/pull/11077)\n* [@alexprabhat99](https://github.com/alexprabhat99) made their first contribution in [#11082](https://github.com/pydantic/pydantic/pull/11082)\n* [@Kharianne](https://github.com/Kharianne) made their first contribution in [#11111](https://github.com/pydantic/pydantic/pull/11111)\n* [@mdaffad](https://github.com/mdaffad) made their first contribution in [#11177](https://github.com/pydantic/pydantic/pull/11177)\n* [@thejcannon](https://github.com/thejcannon) made their first contribution in [#11014](https://github.com/pydantic/pydantic/pull/11014)\n* [@thomasfrimannkoren](https://github.com/thomasfrimannkoren) made their first contribution in [#11251](https://github.com/pydantic/pydantic/pull/11251)\n* [@usernameMAI](https://github.com/usernameMAI) made their first contribution in [#11275](https://github.com/pydantic/pydantic/pull/11275)\n* [@ananiavito](https://github.com/ananiavito) made their first contribution in [#11302](https://github.com/pydantic/pydantic/pull/11302)\n* [@pawamoy](https://github.com/pawamoy) made their first contribution in [#11311](https://github.com/pydantic/pydantic/pull/11311)\n* [@Maze21127](https://github.com/Maze21127) made their first contribution in [#11319](https://github.com/pydantic/pydantic/pull/11319)\n\n## v2.10.6 (2025-01-23)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.6)\n\n### What's Changed\n\n#### Fixes\n\n* Fix JSON Schema reference collection with `'examples'` keys by [@Viicos](https://github.com/Viicos) in [#11325](https://github.com/pydantic/pydantic/pull/11325)\n* Fix url python serialization by [@sydney-runkle](https://github.com/sydney-runkle) in [#11331](https://github.com/pydantic/pydantic/pull/11331)\n\n## v2.10.5 (2025-01-08)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.5)\n\n### What's Changed\n\n#### Fixes\n\n* Remove custom MRO implementation of Pydantic models by [@Viicos](https://github.com/Viicos) in [#11184](https://github.com/pydantic/pydantic/pull/11184)\n* Fix URL serialization for unions by [@sydney-runkle](https://github.com/sydney-runkle) in [#11233](https://github.com/pydantic/pydantic/pull/11233)\n\n## v2.10.4 (2024-12-18)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.4)\n\n### What's Changed\n\n#### Fixes\n\n* Fix for comparison of `AnyUrl` objects by [@alexprabhat99](https://github.com/alexprabhat99) in [#11082](https://github.com/pydantic/pydantic/pull/11082)\n* Properly fetch PEP 695 type params for functions, do not fetch annotations from signature by [@Viicos](https://github.com/Viicos) in [#11093](https://github.com/pydantic/pydantic/pull/11093)\n* Include JSON Schema input core schema in function schemas by [@Viicos](https://github.com/Viicos) in [#11085](https://github.com/pydantic/pydantic/pull/11085)\n* Add `len` to `_BaseUrl` to avoid TypeError by [@Kharianne](https://github.com/Kharianne) in [#11111](https://github.com/pydantic/pydantic/pull/11111)\n* Make sure the type reference is removed from the seen references by [@Viicos](https://github.com/Viicos) in [#11143](https://github.com/pydantic/pydantic/pull/11143)\n\n### New Contributors\n\n* [@FyZzyss](https://github.com/FyZzyss) made their first contribution in [#10789](https://github.com/pydantic/pydantic/pull/10789)\n* [@tamird](https://github.com/tamird) made their first contribution in [#10948](https://github.com/pydantic/pydantic/pull/10948)\n* [@felixxm](https://github.com/felixxm) made their first contribution in [#11077](https://github.com/pydantic/pydantic/pull/11077)\n* [@alexprabhat99](https://github.com/alexprabhat99) made their first contribution in [#11082](https://github.com/pydantic/pydantic/pull/11082)\n* [@Kharianne](https://github.com/Kharianne) made their first contribution in [#11111](https://github.com/pydantic/pydantic/pull/11111)\n\n#### Packaging\n\n* Bump `pydantic-core` to v2.27.2 by [@davidhewitt](https://github.com/davidhewitt) in [#11138](https://github.com/pydantic/pydantic/pull/11138)\n\n## v2.10.3 (2024-12-03)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.3)\n\n### What's Changed\n\n#### Fixes\n\n* Set fields when `defer_build` is set on Pydantic dataclasses by [@Viicos](https://github.com/Viicos) in [#10984](https://github.com/pydantic/pydantic/pull/10984)\n* Do not resolve the JSON Schema reference for `dict` core schema keys by [@Viicos](https://github.com/Viicos) in [#10989](https://github.com/pydantic/pydantic/pull/10989)\n* Use the globals of the function when evaluating the return type for `PlainSerializer` and `WrapSerializer` functions by [@Viicos](https://github.com/Viicos) in [#11008](https://github.com/pydantic/pydantic/pull/11008)\n* Fix host required enforcement for urls to be compatible with v2.9 behavior by [@sydney-runkle](https://github.com/sydney-runkle) in [#11027](https://github.com/pydantic/pydantic/pull/11027)\n* Add a `default_factory_takes_validated_data` property to `FieldInfo` by [@Viicos](https://github.com/Viicos) in [#11034](https://github.com/pydantic/pydantic/pull/11034)\n* Fix url json schema in `serialization` mode by [@sydney-runkle](https://github.com/sydney-runkle) in [#11035](https://github.com/pydantic/pydantic/pull/11035)\n\n## v2.10.2 (2024-11-25)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.2)\n\n### What's Changed\n\n#### Fixes\n\n* Only evaluate FieldInfo annotations if required during schema building by [@Viicos](https://github.com/Viicos) in [#10769](https://github.com/pydantic/pydantic/pull/10769)\n* Do not evaluate annotations for private fields by [@Viicos](https://github.com/Viicos) in [#10962](https://github.com/pydantic/pydantic/pull/10962)\n* Support serialization as any for `Secret` types and `Url` types by [@sydney-runkle](https://github.com/sydney-runkle) in [#10947](https://github.com/pydantic/pydantic/pull/10947)\n* Fix type hint of `Field.default` to be compatible with Python 3.8 and 3.9 by [@Viicos](https://github.com/Viicos) in [#10972](https://github.com/pydantic/pydantic/pull/10972)\n* Add hashing support for URL types by [@sydney-runkle](https://github.com/sydney-runkle) in [#10975](https://github.com/pydantic/pydantic/pull/10975)\n* Hide `BaseModel.__replace__` definition from type checkers by [@Viicos](https://github.com/Viicos) in [#10979](https://github.com/pydantic/pydantic/pull/10979)\n\n## v2.10.1 (2024-11-21)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.1)\n\n### What's Changed\n\n#### Fixes\n\n* Use the correct frame when instantiating a parametrized `TypeAdapter` by [@Viicos](https://github.com/Viicos) in [#10893](https://github.com/pydantic/pydantic/pull/10893)\n* Relax check for validated data in `default_factory` utils by [@sydney-runkle](https://github.com/sydney-runkle) in [#10909](https://github.com/pydantic/pydantic/pull/10909)\n* Fix type checking issue with `model_fields` and `model_computed_fields` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10911](https://github.com/pydantic/pydantic/pull/10911)\n* Use the parent configuration during schema generation for stdlib `dataclass`es by [@sydney-runkle](https://github.com/sydney-runkle) in [#10928](https://github.com/pydantic/pydantic/pull/10928)\n* Use the `globals` of the function when evaluating the return type of serializers and `computed_field`s by [@Viicos](https://github.com/Viicos) in [#10929](https://github.com/pydantic/pydantic/pull/10929)\n* Fix URL constraint application by [@sydney-runkle](https://github.com/sydney-runkle) in [#10922](https://github.com/pydantic/pydantic/pull/10922)\n* Fix URL equality with different validation methods by [@sydney-runkle](https://github.com/sydney-runkle) in [#10934](https://github.com/pydantic/pydantic/pull/10934)\n* Fix JSON schema title when specified as `''` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10936](https://github.com/pydantic/pydantic/pull/10936)\n* Fix `python` mode serialization for `complex` inference by [@sydney-runkle](https://github.com/sydney-runkle) in [pydantic-core#1549](https://github.com/pydantic/pydantic-core/pull/1549)\n\n#### Packaging\n\n* Bump `pydantic-core` version to `v2.27.1` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10938](https://github.com/pydantic/pydantic/pull/10938)\n\n### New Contributors\n\n## v2.10.0 (2024-11-20)\n\nThe code released in v2.10.0 is practically identical to that of v2.10.0b2.\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.0)\n\nSee the [v2.10 release blog post](https://pydantic.dev/articles/pydantic-v2-10-release) for the highlights!\n\n### What's Changed\n\n#### New Features\n\n* Support `fractions.Fraction` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10318](https://github.com/pydantic/pydantic/pull/10318)\n* Support `Hashable` for json validation by [@sydney-runkle](https://github.com/sydney-runkle) in [#10324](https://github.com/pydantic/pydantic/pull/10324)\n* Add a `SocketPath` type for `linux` systems by [@theunkn0wn1](https://github.com/theunkn0wn1) in [#10378](https://github.com/pydantic/pydantic/pull/10378)\n* Allow arbitrary refs in JSON schema `examples` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10417](https://github.com/pydantic/pydantic/pull/10417)\n* Support `defer_build` for Pydantic dataclasses by [@Viicos](https://github.com/Viicos) in [#10313](https://github.com/pydantic/pydantic/pull/10313)\n* Adding v1 / v2 incompatibility warning for nested v1 model by [@sydney-runkle](https://github.com/sydney-runkle) in [#10431](https://github.com/pydantic/pydantic/pull/10431)\n* Add support for unpacked `TypedDict` to type hint variadic keyword arguments with `@validate_call` by [@Viicos](https://github.com/Viicos) in [#10416](https://github.com/pydantic/pydantic/pull/10416)\n* Support compiled patterns in `protected_namespaces` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10522](https://github.com/pydantic/pydantic/pull/10522)\n* Add support for `propertyNames` in JSON schema by [@FlorianSW](https://github.com/FlorianSW) in [#10478](https://github.com/pydantic/pydantic/pull/10478)\n* Adding `__replace__` protocol for Python 3.13+ support by [@sydney-runkle](https://github.com/sydney-runkle) in [#10596](https://github.com/pydantic/pydantic/pull/10596)\n* Expose public `sort` method for JSON schema generation by [@sydney-runkle](https://github.com/sydney-runkle) in [#10595](https://github.com/pydantic/pydantic/pull/10595)\n* Add runtime validation of `@validate_call` callable argument by [@kc0506](https://github.com/kc0506) in [#10627](https://github.com/pydantic/pydantic/pull/10627)\n* Add `experimental_allow_partial` support by [@samuelcolvin](https://github.com/samuelcolvin) in [#10748](https://github.com/pydantic/pydantic/pull/10748)\n* Support default factories taking validated data as an argument by [@Viicos](https://github.com/Viicos) in [#10678](https://github.com/pydantic/pydantic/pull/10678)\n* Allow subclassing `ValidationError` and `PydanticCustomError` by [@Youssefares](https://github.com/Youssefares) in [pydantic/pydantic-core#1413](https://github.com/pydantic/pydantic-core/pull/1413)\n* Add `trailing-strings` support to `experimental_allow_partial` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10825](https://github.com/pydantic/pydantic/pull/10825)\n* Add `rebuild()` method for `TypeAdapter` and simplify `defer_build` patterns by [@sydney-runkle](https://github.com/sydney-runkle) in [#10537](https://github.com/pydantic/pydantic/pull/10537)\n* Improve `TypeAdapter` instance repr by [@sydney-runkle](https://github.com/sydney-runkle) in [#10872](https://github.com/pydantic/pydantic/pull/10872)\n\n#### Changes\n\n* Don't allow customization of `SchemaGenerator` until interface is more stable by [@sydney-runkle](https://github.com/sydney-runkle) in [#10303](https://github.com/pydantic/pydantic/pull/10303)\n* Cleanly `defer_build` on `TypeAdapters`, removing experimental flag by [@sydney-runkle](https://github.com/sydney-runkle) in [#10329](https://github.com/pydantic/pydantic/pull/10329)\n* Fix `mro` of generic subclass by [@kc0506](https://github.com/kc0506) in [#10100](https://github.com/pydantic/pydantic/pull/10100)\n* Strip whitespaces on JSON Schema title generation by [@sydney-runkle](https://github.com/sydney-runkle) in [#10404](https://github.com/pydantic/pydantic/pull/10404)\n* Use `b64decode` and `b64encode` for `Base64Bytes` type by [@sydney-runkle](https://github.com/sydney-runkle) in [#10486](https://github.com/pydantic/pydantic/pull/10486)\n* Relax protected namespace config default by [@sydney-runkle](https://github.com/sydney-runkle) in [#10441](https://github.com/pydantic/pydantic/pull/10441)\n* Revalidate parametrized generics if instance's origin is subclass of OG class by [@sydney-runkle](https://github.com/sydney-runkle) in [#10666](https://github.com/pydantic/pydantic/pull/10666)\n* Warn if configuration is specified on the `@dataclass` decorator and with the `__pydantic_config__` attribute by [@sydney-runkle](https://github.com/sydney-runkle) in [#10406](https://github.com/pydantic/pydantic/pull/10406)\n* Recommend against using `Ellipsis` (...) with `Field` by [@Viicos](https://github.com/Viicos) in [#10661](https://github.com/pydantic/pydantic/pull/10661)\n* Migrate to subclassing instead of annotated approach for pydantic url types by [@sydney-runkle](https://github.com/sydney-runkle) in [#10662](https://github.com/pydantic/pydantic/pull/10662)\n* Change JSON schema generation of `Literal`s and `Enums` by [@Viicos](https://github.com/Viicos) in [#10692](https://github.com/pydantic/pydantic/pull/10692)\n* Simplify unions involving `Any` or `Never` when replacing type variables by [@Viicos](https://github.com/Viicos) in [#10338](https://github.com/pydantic/pydantic/pull/10338)\n* Do not require padding when decoding `base64` bytes by [@bschoenmaeckers](https://github.com/bschoenmaeckers) in [pydantic/pydantic-core#1448](https://github.com/pydantic/pydantic-core/pull/1448)\n* Support dates all the way to 1BC by [@changhc](https://github.com/changhc) in [pydantic/speedate#77](https://github.com/pydantic/speedate/pull/77)\n\n#### Performance\n\n* Schema cleaning: skip unnecessary copies during schema walking by [@Viicos](https://github.com/Viicos) in [#10286](https://github.com/pydantic/pydantic/pull/10286)\n* Refactor namespace logic for annotations evaluation by [@Viicos](https://github.com/Viicos) in [#10530](https://github.com/pydantic/pydantic/pull/10530)\n* Improve email regexp on edge cases by [@AlekseyLobanov](https://github.com/AlekseyLobanov) in [#10601](https://github.com/pydantic/pydantic/pull/10601)\n* `CoreMetadata` refactor with an emphasis on documentation, schema build time performance, and reducing complexity by [@sydney-runkle](https://github.com/sydney-runkle) in [#10675](https://github.com/pydantic/pydantic/pull/10675)\n\n#### Packaging\n\n* Bump `pydantic-core` to `v2.27.0` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10825](https://github.com/pydantic/pydantic/pull/10825)\n* Replaced pdm with uv by [@frfahim](https://github.com/frfahim) in [#10727](https://github.com/pydantic/pydantic/pull/10727)\n\n#### Fixes\n\n* Remove guarding check on `computed_field` with `field_serializer` by [@nix010](https://github.com/nix010) in [#10390](https://github.com/pydantic/pydantic/pull/10390)\n* Fix `Predicate` issue in `v2.9.0` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10321](https://github.com/pydantic/pydantic/pull/10321)\n* Fixing `annotated-types` bound by [@sydney-runkle](https://github.com/sydney-runkle) in [#10327](https://github.com/pydantic/pydantic/pull/10327)\n* Turn `tzdata` install requirement into optional `timezone` dependency by [@jakob-keller](https://github.com/jakob-keller) in [#10331](https://github.com/pydantic/pydantic/pull/10331)\n* Use correct types namespace when building `namedtuple` core schemas by [@Viicos](https://github.com/Viicos) in [#10337](https://github.com/pydantic/pydantic/pull/10337)\n* Fix evaluation of stringified annotations during namespace inspection by [@Viicos](https://github.com/Viicos) in [#10347](https://github.com/pydantic/pydantic/pull/10347)\n* Fix `IncEx` type alias definition by [@Viicos](https://github.com/Viicos) in [#10339](https://github.com/pydantic/pydantic/pull/10339)\n* Do not error when trying to evaluate annotations of private attributes by [@Viicos](https://github.com/Viicos) in [#10358](https://github.com/pydantic/pydantic/pull/10358)\n* Fix nested type statement by [@kc0506](https://github.com/kc0506) in [#10369](https://github.com/pydantic/pydantic/pull/10369)\n* Improve typing of `ModelMetaclass.mro` by [@Viicos](https://github.com/Viicos) in [#10372](https://github.com/pydantic/pydantic/pull/10372)\n* Fix class access of deprecated `computed_field`s by [@Viicos](https://github.com/Viicos) in [#10391](https://github.com/pydantic/pydantic/pull/10391)\n* Make sure `inspect.iscoroutinefunction` works on coroutines decorated with `@validate_call` by [@MovisLi](https://github.com/MovisLi) in [#10374](https://github.com/pydantic/pydantic/pull/10374)\n* Fix `NameError` when using `validate_call` with PEP 695 on a class by [@kc0506](https://github.com/kc0506) in [#10380](https://github.com/pydantic/pydantic/pull/10380)\n* Fix `ZoneInfo` with various invalid types by [@sydney-runkle](https://github.com/sydney-runkle) in [#10408](https://github.com/pydantic/pydantic/pull/10408)\n* Fix `PydanticUserError` on empty `model_config` with annotations by [@cdwilson](https://github.com/cdwilson) in [#10412](https://github.com/pydantic/pydantic/pull/10412)\n* Fix variance issue in `_IncEx` type alias, only allow `True` by [@Viicos](https://github.com/Viicos) in [#10414](https://github.com/pydantic/pydantic/pull/10414)\n* Fix serialization schema generation when using `PlainValidator` by [@Viicos](https://github.com/Viicos) in [#10427](https://github.com/pydantic/pydantic/pull/10427)\n* Fix schema generation error when serialization schema holds references by [@Viicos](https://github.com/Viicos) in [#10444](https://github.com/pydantic/pydantic/pull/10444)\n* Inline references if possible when generating schema for `json_schema_input_type` by [@Viicos](https://github.com/Viicos) in [#10439](https://github.com/pydantic/pydantic/pull/10439)\n* Fix recursive arguments in `Representation` by [@Viicos](https://github.com/Viicos) in [#10480](https://github.com/pydantic/pydantic/pull/10480)\n* Fix representation for builtin function types by [@kschwab](https://github.com/kschwab) in [#10479](https://github.com/pydantic/pydantic/pull/10479)\n* Add python validators for decimal constraints (`max_digits` and `decimal_places`) by [@sydney-runkle](https://github.com/sydney-runkle) in [#10506](https://github.com/pydantic/pydantic/pull/10506)\n* Only fetch `__pydantic_core_schema__` from the current class during schema generation by [@Viicos](https://github.com/Viicos) in [#10518](https://github.com/pydantic/pydantic/pull/10518)\n* Fix `stacklevel` on deprecation warnings for `BaseModel` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10520](https://github.com/pydantic/pydantic/pull/10520)\n* Fix warning `stacklevel` in `BaseModel.__init__` by [@Viicos](https://github.com/Viicos) in [#10526](https://github.com/pydantic/pydantic/pull/10526)\n* Improve error handling for in-evaluable refs for discriminator application by [@sydney-runkle](https://github.com/sydney-runkle) in [#10440](https://github.com/pydantic/pydantic/pull/10440)\n* Change the signature of `ConfigWrapper.core_config` to take the title directly by [@Viicos](https://github.com/Viicos) in [#10562](https://github.com/pydantic/pydantic/pull/10562)\n* Do not use the previous config from the stack for dataclasses without config by [@Viicos](https://github.com/Viicos) in [#10576](https://github.com/pydantic/pydantic/pull/10576)\n* Fix serialization for IP types with `mode='python'` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10594](https://github.com/pydantic/pydantic/pull/10594)\n* Support constraint application for `Base64Etc` types by [@sydney-runkle](https://github.com/sydney-runkle) in [#10584](https://github.com/pydantic/pydantic/pull/10584)\n* Fix `validate_call` ignoring `Field` in `Annotated` by [@kc0506](https://github.com/kc0506) in [#10610](https://github.com/pydantic/pydantic/pull/10610)\n* Raise an error when `Self` is invalid by [@kc0506](https://github.com/kc0506) in [#10609](https://github.com/pydantic/pydantic/pull/10609)\n* Using `core_schema.InvalidSchema` instead of metadata injection + checks by [@sydney-runkle](https://github.com/sydney-runkle) in [#10523](https://github.com/pydantic/pydantic/pull/10523)\n* Tweak type alias logic by [@kc0506](https://github.com/kc0506) in [#10643](https://github.com/pydantic/pydantic/pull/10643)\n* Support usage of `type` with `typing.Self` and type aliases by [@kc0506](https://github.com/kc0506) in [#10621](https://github.com/pydantic/pydantic/pull/10621)\n* Use overloads for `Field` and `PrivateAttr` functions by [@Viicos](https://github.com/Viicos) in [#10651](https://github.com/pydantic/pydantic/pull/10651)\n* Clean up the `mypy` plugin implementation by [@Viicos](https://github.com/Viicos) in [#10669](https://github.com/pydantic/pydantic/pull/10669)\n* Properly check for `typing_extensions` variant of `TypeAliasType` by [@Daraan](https://github.com/Daraan) in [#10713](https://github.com/pydantic/pydantic/pull/10713)\n* Allow any mapping in `BaseModel.model_copy()` by [@Viicos](https://github.com/Viicos) in [#10751](https://github.com/pydantic/pydantic/pull/10751)\n* Fix `isinstance` behavior for urls by [@sydney-runkle](https://github.com/sydney-runkle) in [#10766](https://github.com/pydantic/pydantic/pull/10766)\n* Ensure `cached_property` can be set on Pydantic models by [@Viicos](https://github.com/Viicos) in [#10774](https://github.com/pydantic/pydantic/pull/10774)\n* Fix equality checks for primitives in literals by [@sydney-runkle](https://github.com/sydney-runkle) in [pydantic/pydantic-core#1459](https://github.com/pydantic/pydantic-core/pull/1459)\n* Properly enforce `host_required` for URLs by [@Viicos](https://github.com/Viicos) in [pydantic/pydantic-core#1488](https://github.com/pydantic/pydantic-core/pull/1488)\n* Fix when `coerce_numbers_to_str` enabled and string has invalid Unicode character by [@andrey-berenda](https://github.com/andrey-berenda) in [pydantic/pydantic-core#1515](https://github.com/pydantic/pydantic-core/pull/1515)\n* Fix serializing `complex` values in `Enum`s by [@changhc](https://github.com/changhc) in [pydantic/pydantic-core#1524](https://github.com/pydantic/pydantic-core/pull/1524)\n* Refactor `_typing_extra` module by [@Viicos](https://github.com/Viicos) in [#10725](https://github.com/pydantic/pydantic/pull/10725)\n* Support intuitive equality for urls by [@sydney-runkle](https://github.com/sydney-runkle) in [#10798](https://github.com/pydantic/pydantic/pull/10798)\n* Add `bytearray` to `TypeAdapter.validate_json` signature by [@samuelcolvin](https://github.com/samuelcolvin) in [#10802](https://github.com/pydantic/pydantic/pull/10802)\n* Ensure class access of method descriptors is performed when used as a default with `Field` by [@Viicos](https://github.com/Viicos) in [#10816](https://github.com/pydantic/pydantic/pull/10816)\n* Fix circular import with `validate_call` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10807](https://github.com/pydantic/pydantic/pull/10807)\n* Fix error when using type aliases referencing other type aliases by [@Viicos](https://github.com/Viicos) in [#10809](https://github.com/pydantic/pydantic/pull/10809)\n* Fix `IncEx` type alias to be compatible with mypy by [@Viicos](https://github.com/Viicos) in [#10813](https://github.com/pydantic/pydantic/pull/10813)\n* Make `__signature__` a lazy property, do not deepcopy defaults by [@Viicos](https://github.com/Viicos) in [#10818](https://github.com/pydantic/pydantic/pull/10818)\n* Make `__signature__` lazy for dataclasses, too by [@sydney-runkle](https://github.com/sydney-runkle) in [#10832](https://github.com/pydantic/pydantic/pull/10832)\n* Subclass all single host url classes from `AnyUrl` to preserve behavior from v2.9 by [@sydney-runkle](https://github.com/sydney-runkle) in [#10856](https://github.com/pydantic/pydantic/pull/10856)\n\n### New Contributors\n\n* [@jakob-keller](https://github.com/jakob-keller) made their first contribution in [#10331](https://github.com/pydantic/pydantic/pull/10331)\n* [@MovisLi](https://github.com/MovisLi) made their first contribution in [#10374](https://github.com/pydantic/pydantic/pull/10374)\n* [@joaopalmeiro](https://github.com/joaopalmeiro) made their first contribution in [#10405](https://github.com/pydantic/pydantic/pull/10405)\n* [@theunkn0wn1](https://github.com/theunkn0wn1) made their first contribution in [#10378](https://github.com/pydantic/pydantic/pull/10378)\n* [@cdwilson](https://github.com/cdwilson) made their first contribution in [#10412](https://github.com/pydantic/pydantic/pull/10412)\n* [@dlax](https://github.com/dlax) made their first contribution in [#10421](https://github.com/pydantic/pydantic/pull/10421)\n* [@kschwab](https://github.com/kschwab) made their first contribution in [#10479](https://github.com/pydantic/pydantic/pull/10479)\n* [@santibreo](https://github.com/santibreo) made their first contribution in [#10453](https://github.com/pydantic/pydantic/pull/10453)\n* [@FlorianSW](https://github.com/FlorianSW) made their first contribution in [#10478](https://github.com/pydantic/pydantic/pull/10478)\n* [@tkasuz](https://github.com/tkasuz) made their first contribution in [#10555](https://github.com/pydantic/pydantic/pull/10555)\n* [@AlekseyLobanov](https://github.com/AlekseyLobanov) made their first contribution in [#10601](https://github.com/pydantic/pydantic/pull/10601)\n* [@NiclasvanEyk](https://github.com/NiclasvanEyk) made their first contribution in [#10667](https://github.com/pydantic/pydantic/pull/10667)\n* [@mschoettle](https://github.com/mschoettle) made their first contribution in [#10677](https://github.com/pydantic/pydantic/pull/10677)\n* [@Daraan](https://github.com/Daraan) made their first contribution in [#10713](https://github.com/pydantic/pydantic/pull/10713)\n* [@k4nar](https://github.com/k4nar) made their first contribution in [#10736](https://github.com/pydantic/pydantic/pull/10736)\n* [@UriyaHarpeness](https://github.com/UriyaHarpeness) made their first contribution in [#10740](https://github.com/pydantic/pydantic/pull/10740)\n* [@frfahim](https://github.com/frfahim) made their first contribution in [#10727](https://github.com/pydantic/pydantic/pull/10727)\n\n## v2.10.0b2 (2024-11-13)\n\nPre-release, see [the GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.0b2) for details.\n\n## v2.10.0b1 (2024-11-06)\n\nPre-release, see [the GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.0b1) for details.\n\n\n... see [here](https://docs.pydantic.dev/changelog/#v0322-2019-08-17) for earlier changes.\n", + "description_content_type": "text/markdown", + "author_email": "Samuel Colvin , Eric Jolibois , Hasan Ramezani , Adrian Garcia Badaracco <1755071+adriangb@users.noreply.github.com>, Terrence Dorsey , David Montague , Serge Matveenko , Marcelo Trylesinski , Sydney Runkle , David Hewitt , Alex Hall , Victorien Plot ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Framework :: Hypothesis", + "Framework :: Pydantic", + "Intended Audience :: Developers", + "Intended Audience :: Information Technology", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Internet", + "Topic :: Software Development :: Libraries :: Python Modules" + ], + "requires_dist": [ + "annotated-types>=0.6.0", + "pydantic-core==2.46.5", + "typing-extensions>=4.14.1", + "typing-inspection>=0.4.2", + "email-validator>=2.0.0; extra == 'email'", + "tzdata; (python_version >= '3.9' and platform_system == 'Windows') and extra == 'timezone'" + ], + "requires_python": ">=3.9", + "project_url": [ + "Homepage, https://github.com/pydantic/pydantic", + "Documentation, https://docs.pydantic.dev", + "Funding, https://github.com/sponsors/samuelcolvin", + "Source, https://github.com/pydantic/pydantic", + "Changelog, https://docs.pydantic.dev/latest/changelog/" + ], + "provides_extra": [ + "email", + "timezone" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/2c/9b/59634b7ac631c63b2a37760eb6943af3e29573d6b59a4abc5e7f019d4cee/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "archive_info": { + "hashes": { + "sha256": "54d510bac3ee52247af28ed4bb18a1e799f040ac60fd2bf5ccd4c92f1fbe786f" + }, + "hash": "sha256=54d510bac3ee52247af28ed4bb18a1e799f040ac60fd2bf5ccd4c92f1fbe786f" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "pydantic_core", + "version": "2.46.5", + "summary": "Core functionality for Pydantic validation and serialization", + "description": "# pydantic-core\n\n[![CI](https://github.com/pydantic/pydantic-core/workflows/ci/badge.svg?event=push)](https://github.com/pydantic/pydantic-core/actions?query=event%3Apush+branch%3Amain+workflow%3Aci)\n[![Coverage](https://codecov.io/gh/pydantic/pydantic-core/branch/main/graph/badge.svg)](https://codecov.io/gh/pydantic/pydantic-core)\n[![pypi](https://img.shields.io/pypi/v/pydantic-core.svg)](https://pypi.python.org/pypi/pydantic-core)\n[![versions](https://img.shields.io/pypi/pyversions/pydantic-core.svg)](https://github.com/pydantic/pydantic-core)\n[![license](https://img.shields.io/github/license/pydantic/pydantic-core.svg)](https://github.com/pydantic/pydantic-core/blob/main/LICENSE)\n\nThis package provides the core functionality for [pydantic](https://docs.pydantic.dev) validation and serialization.\n\nPydantic-core is currently around 17x faster than pydantic V1.\nSee [`tests/benchmarks/`](./tests/benchmarks/) for details.\n\n## Example of direct usage\n\n*NOTE: You should not need to use pydantic-core directly; instead, use pydantic, which in turn uses pydantic-core.*\n\n```py\nfrom pydantic_core import SchemaValidator, ValidationError\n\n\nv = SchemaValidator(\n {\n 'type': 'typed-dict',\n 'fields': {\n 'name': {\n 'type': 'typed-dict-field',\n 'schema': {\n 'type': 'str',\n },\n },\n 'age': {\n 'type': 'typed-dict-field',\n 'schema': {\n 'type': 'int',\n 'ge': 18,\n },\n },\n 'is_developer': {\n 'type': 'typed-dict-field',\n 'schema': {\n 'type': 'default',\n 'schema': {'type': 'bool'},\n 'default': True,\n },\n },\n },\n }\n)\n\nr1 = v.validate_python({'name': 'Samuel', 'age': 35})\nassert r1 == {'name': 'Samuel', 'age': 35, 'is_developer': True}\n\n# pydantic-core can also validate JSON directly\nr2 = v.validate_json('{\"name\": \"Samuel\", \"age\": 35}')\nassert r1 == r2\n\ntry:\n v.validate_python({'name': 'Samuel', 'age': 11})\nexcept ValidationError as e:\n print(e)\n \"\"\"\n 1 validation error for model\n age\n Input should be greater than or equal to 18\n [type=greater_than_equal, context={ge: 18}, input_value=11, input_type=int]\n \"\"\"\n```\n\n## Getting Started\n\n### Prerequisites\n\nYou'll need:\n\n1. **[Rust](https://rustup.rs/)** - Rust stable (or nightly for coverage)\n2. **[uv](https://docs.astral.sh/uv/getting-started/installation/)** - Fast Python package manager (will install Python 3.9+ automatically)\n3. **[git](https://git-scm.com/)** - For version control\n4. **[make](https://www.gnu.org/software/make/)** - For running development commands (or use `nmake` on Windows)\n\n### Quick Start\n\n```bash\n# Clone the repository (or from your fork)\ngit clone git@github.com:pydantic/pydantic-core.git\ncd pydantic-core\n\n# Install all dependencies using uv, setup pre-commit hooks, and build the development version\nmake install\n```\n\nVerify your installation by running:\n\n```bash\nmake\n```\n\nThis runs a full development cycle: formatting, building, linting, and testing\n\n### Development Commands\n\nRun `make help` to see all available commands, or use these common ones:\n\n```bash\nmake build-dev # to build the package during development\nmake build-prod # to perform an optimised build for benchmarking\nmake test # to run the tests\nmake testcov # to run the tests and generate a coverage report\nmake lint # to run the linter\nmake format # to format python and rust code\nmake all # to run to run build-dev + format + lint + test\n```\n\n### Useful Resources\n\n* [`python/pydantic_core/_pydantic_core.pyi`](./python/pydantic_core/_pydantic_core.pyi) - Python API types\n* [`python/pydantic_core/core_schema.py`](./python/pydantic_core/core_schema.py) - Core schema definitions\n* [`tests/`](./tests) - Comprehensive usage examples\n\n## Profiling\n\nIt's possible to profile the code using the [`flamegraph` utility from `flamegraph-rs`](https://github.com/flamegraph-rs/flamegraph). (Tested on Linux.) You can install this with `cargo install flamegraph`.\n\nRun `make build-profiling` to install a release build with debugging symbols included (needed for profiling).\n\nOnce that is built, you can profile pytest benchmarks with (e.g.):\n\n```bash\nflamegraph -- pytest tests/benchmarks/test_micro_benchmarks.py -k test_list_of_ints_core_py --benchmark-enable\n```\n\nThe `flamegraph` command will produce an interactive SVG at `flamegraph.svg`.\n\n## Releasing\n\nTBC (needs to be integrated into `pydantic` repository release process).\n\n", + "description_content_type": "text/markdown; charset=UTF-8; variant=GFM", + "home_page": "https://github.com/pydantic/pydantic", + "author_email": "Samuel Colvin , Adrian Garcia Badaracco <1755071+adriangb@users.noreply.github.com>, David Montague , David Hewitt , Sydney Runkle , Victorien Plot ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 3 - Alpha", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Programming Language :: Python :: Implementation :: GraalPy", + "Programming Language :: Rust", + "Framework :: Pydantic", + "Intended Audience :: Developers", + "Intended Audience :: Information Technology", + "Operating System :: POSIX :: Linux", + "Operating System :: Microsoft :: Windows", + "Operating System :: MacOS", + "Typing :: Typed" + ], + "requires_dist": [ + "typing-extensions>=4.14.1" + ], + "requires_python": ">=3.9", + "project_url": [ + "Funding, https://github.com/sponsors/samuelcolvin", + "Homepage, https://github.com/pydantic", + "Source, https://github.com/pydantic/pydantic/tree/main/pydantic-core" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0" + }, + "hash": "sha256=f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "annotated-types", + "version": "0.8.0", + "summary": "Reusable constraint types to use with typing.Annotated", + "description": "# annotated-types\n\n[![CI](https://github.com/annotated-types/annotated-types/workflows/CI/badge.svg?event=push)](https://github.com/annotated-types/annotated-types/actions?query=event%3Apush+branch%3Amain+workflow%3ACI)\n[![pypi](https://img.shields.io/pypi/v/annotated-types.svg)](https://pypi.python.org/pypi/annotated-types)\n[![versions](https://img.shields.io/pypi/pyversions/annotated-types.svg)](https://github.com/annotated-types/annotated-types)\n[![license](https://img.shields.io/github/license/annotated-types/annotated-types.svg)](https://github.com/annotated-types/annotated-types/blob/main/LICENSE)\n\n[PEP-593](https://peps.python.org/pep-0593/) added `typing.Annotated` as a way of\nadding context-specific metadata to existing types, and specifies that\n`Annotated[T, x]` _should_ be treated as `T` by any tool or library without special\nlogic for `x`.\n\nThis package provides metadata objects which can be used to represent common\nconstraints such as upper and lower bounds on scalar values and collection sizes,\na `Predicate` marker for runtime checks, and\ndescriptions of how we intend these metadata to be interpreted. In some cases,\nwe also note alternative representations which do not require this package.\n\n## Install\n\n```bash\npip install annotated-types\n```\n\n## Examples\n\n```python\nfrom typing import Annotated\nfrom annotated_types import Gt, Len, Predicate\n\nclass MyClass:\n age: Annotated[int, Gt(18)] # Valid: 19, 20, ...\n # Invalid: 17, 18, \"19\", 19.0, ...\n factors: list[Annotated[int, Predicate(is_prime)]] # Valid: 2, 3, 5, 7, 11, ...\n # Invalid: 4, 8, -2, 5.0, \"prime\", ...\n\n my_list: Annotated[list[int], Len(0, 10)] # Valid: [], [10, 20, 30, 40, 50]\n # Invalid: (1, 2), [\"abc\"], [0] * 20\n```\n\n## Documentation\n\n_While `annotated-types` avoids runtime checks for performance, users should not\nconstruct invalid combinations such as `MultipleOf(\"non-numeric\")` or `Annotated[int, Len(3)]`.\nDownstream implementors may choose to raise an error, emit a warning, silently ignore\na metadata item, etc., if the metadata objects described below are used with an\nincompatible type - or for any other reason!_\n\n### Gt, Ge, Lt, Le\n\nExpress inclusive and/or exclusive bounds on orderable values - which may be numbers,\ndates, times, strings, sets, etc. Note that the boundary value need not be of the\nsame type that was annotated, so long as they can be compared: `Annotated[int, Gt(1.5)]`\nis fine, for example, and implies that the value is an integer x such that `x > 1.5`.\n\nWe suggest that implementors may also interpret `functools.partial(operator.le, 1.5)`\nas being equivalent to `Gt(1.5)`, for users who wish to avoid a runtime dependency on\nthe `annotated-types` package.\n\nTo be explicit, these types have the following meanings:\n\n* `Gt(x)` - value must be \"Greater Than\" `x` - equivalent to exclusive minimum\n* `Ge(x)` - value must be \"Greater than or Equal\" to `x` - equivalent to inclusive minimum\n* `Lt(x)` - value must be \"Less Than\" `x` - equivalent to exclusive maximum\n* `Le(x)` - value must be \"Less than or Equal\" to `x` - equivalent to inclusive maximum\n\n### Interval\n\n`Interval(gt, ge, lt, le)` allows you to specify an upper and lower bound with a single\nmetadata object. `None` attributes should be ignored, and non-`None` attributes\ntreated as per the single bounds above.\n\n### MultipleOf\n\n`MultipleOf(multiple_of=x)` might be interpreted in two ways:\n\n1. Python semantics, implying `value % multiple_of == 0`, or\n2. [JSONschema semantics](https://json-schema.org/draft/2020-12/json-schema-validation.html#rfc.section.6.2.1),\n where `int(value / multiple_of) == value / multiple_of`.\n\nWe encourage users to be aware of these two common interpretations and their\ndistinct behaviours, especially since very large or non-integer numbers make\nit easy to cause silent data corruption due to floating-point imprecision.\n\nWe encourage libraries to carefully document which interpretation they implement.\n\n### MinLen, MaxLen, Len\n\n`Len()` implies that `min_length <= len(value) <= max_length` - lower and upper bounds are inclusive.\n\nAs well as `Len()` which can optionally include upper and lower bounds, we also\nprovide `MinLen(x)` and `MaxLen(y)` which are equivalent to `Len(min_length=x)`\nand `Len(max_length=y)` respectively.\n\n`Len`, `MinLen`, and `MaxLen` may be used with any type which supports `len(value)`.\n\nExamples of usage:\n\n* `Annotated[list, MaxLen(10)]` (or `Annotated[list, Len(max_length=10)]`) - list must have a length of 10 or less\n* `Annotated[str, MaxLen(10)]` - string must have a length of 10 or less\n* `Annotated[list, MinLen(3)]` (or `Annotated[list, Len(min_length=3)]`) - list must have a length of 3 or more\n* `Annotated[list, Len(4, 6)]` - list must have a length of 4, 5, or 6\n* `Annotated[list, Len(8, 8)]` - list must have a length of exactly 8\n\n#### Changed in v0.4.0\n\n* `min_inclusive` has been renamed to `min_length`, no change in meaning\n* `max_exclusive` has been renamed to `max_length`, upper bound is now **inclusive** instead of **exclusive**\n* The recommendation that slices are interpreted as `Len` has been removed due to ambiguity and different semantic\n meaning of the upper bound in slices vs. `Len`\n\nSee [issue #23](https://github.com/annotated-types/annotated-types/issues/23) for discussion.\n\n### Timezone\n\n`Timezone` can be used with a `datetime` or a `time` to express which timezones\nare allowed. `Annotated[datetime, Timezone(None)]` must be a naive datetime.\n`Timezone[...]` ([literal ellipsis](https://docs.python.org/3/library/constants.html#Ellipsis))\nexpresses that any timezone-aware datetime is allowed. You may also pass a specific\ntimezone string or [`tzinfo`](https://docs.python.org/3/library/datetime.html#tzinfo-objects)\nobject such as `Timezone(timezone.utc)` or `Timezone(\"Africa/Abidjan\")` to express that you only\nallow a specific timezone, though we note that this is often a symptom of fragile design.\n\n#### Changed in v0.x.x\n\n* `Timezone` accepts [`tzinfo`](https://docs.python.org/3/library/datetime.html#tzinfo-objects) objects instead of\n `timezone`, extending compatibility to [`zoneinfo`](https://docs.python.org/3/library/zoneinfo.html) and third party libraries.\n\n### Unit\n\n`Unit(unit: str)` expresses that the annotated numeric value is the magnitude of\na quantity with the specified unit. For example, `Annotated[float, Unit(\"m/s\")]`\nwould be a float representing a velocity in meters per second.\n\nPlease note that `annotated_types` itself makes no attempt to parse or validate\nthe unit string in any way. That is left entirely to downstream libraries,\nsuch as [`pint`](https://pint.readthedocs.io) or\n[`astropy.units`](https://docs.astropy.org/en/stable/units/).\n\nAn example of how a library might use this metadata:\n\n```python\nfrom annotated_types import Unit\nfrom typing import Annotated, TypeVar, Callable, Any, get_origin, get_args\n\n# given a type annotated with a unit:\nMeters = Annotated[float, Unit(\"m\")]\n\n\n# you can cast the annotation to a specific unit type with any\n# callable that accepts a string and returns the desired type\nT = TypeVar(\"T\")\ndef cast_unit(tp: Any, unit_cls: Callable[[str], T]) -> T | None:\n if get_origin(tp) is Annotated:\n for arg in get_args(tp):\n if isinstance(arg, Unit):\n return unit_cls(arg.unit)\n return None\n\n\n# using `pint`\nimport pint\npint_unit = cast_unit(Meters, pint.Unit)\n\n\n# using `astropy.units`\nimport astropy.units as u\nastropy_unit = cast_unit(Meters, u.Unit)\n```\n\n### Predicate\n\n`Predicate(func: Callable)` expresses that `func(value)` is truthy for valid values.\nUsers should prefer the statically inspectable metadata above, but if you need\nthe full power and flexibility of arbitrary runtime predicates... here it is.\n\nFor some common constraints, we provide generic types:\n\n* `LowerCase = Annotated[T, Predicate(str.islower)]`\n* `UpperCase = Annotated[T, Predicate(str.isupper)]`\n* `IsDigit = Annotated[T, Predicate(str.isdigit)]`\n* `IsFinite = Annotated[T, Predicate(math.isfinite)]`\n* `IsNotFinite = Annotated[T, Predicate(Not(math.isfinite))]`\n* `IsNan = Annotated[T, Predicate(math.isnan)]`\n* `IsNotNan = Annotated[T, Predicate(Not(math.isnan))]`\n* `IsInfinite = Annotated[T, Predicate(math.isinf)]`\n* `IsNotInfinite = Annotated[T, Predicate(Not(math.isinf))]`\n\nso that you can write e.g. `x: IsFinite[float] = 2.0` instead of the longer\n(but exactly equivalent) `x: Annotated[float, Predicate(math.isfinite)] = 2.0`.\n\nSome libraries might have special logic to handle known or understandable predicates,\nfor example by checking for `str.isdigit` and using its presence to both call custom\nlogic to enforce digit-only strings, and customise some generated external schema.\nUsers are therefore encouraged to avoid indirection like `lambda s: s.lower()`, in\nfavor of introspectable methods such as `str.lower` or `re.compile(\"pattern\").search`.\n\nTo enable basic negation of commonly used predicates like `math.isnan` without introducing introspection that makes it impossible for implementers to introspect the predicate we provide a `Not` wrapper that simply negates the predicate in an introspectable manner. Several of the predicates listed above are created in this manner.\n\nWe do not specify what behaviour should be expected for predicates that raise\nan exception. For example `Annotated[int, Predicate(str.isdigit)]` might silently\nskip invalid constraints, or statically raise an error; or it might try calling it\nand then propagate or discard the resulting\n`TypeError: descriptor 'isdigit' for 'str' objects doesn't apply to a 'int' object`\nexception. We encourage libraries to document the behaviour they choose.\n\n### Doc\n\n`doc()` can be used to add documentation information in `Annotated`, for function and method parameters, variables, class attributes, return types, and any place where `Annotated` can be used.\n\nIt expects a value that can be statically analyzed, as the main use case is for static analysis, editors, documentation generators, and similar tools.\n\nIt returns a `DocInfo` class with a single attribute `documentation` containing the value passed to `doc()`.\n\nThis is the early adopter's alternative form of the [`typing-doc` proposal](https://github.com/tiangolo/fastapi/blob/typing-doc/typing_doc.md).\n\n### Integrating downstream types with `GroupedMetadata`\n\nImplementers may choose to provide a convenience wrapper that groups multiple pieces of metadata.\nThis can help reduce verbosity and cognitive overhead for users.\nFor example, an implementer like Pydantic might provide a `Field` or `Meta` type that accepts keyword arguments and transforms these into low-level metadata:\n\n```python\nfrom dataclasses import dataclass\nfrom typing import Iterator\nfrom annotated_types import GroupedMetadata, Ge\n\n@dataclass\nclass Field(GroupedMetadata):\n ge: int | None = None\n description: str | None = None\n\n def __iter__(self) -> Iterator[object]:\n # Iterating over a GroupedMetadata object should yield annotated-types\n # constraint metadata objects which describe it as fully as possible,\n # and may include other unknown objects too.\n if self.ge is not None:\n yield Ge(self.ge)\n if self.description is not None:\n yield Description(self.description)\n```\n\nLibraries consuming annotated-types constraints should check for `GroupedMetadata` and unpack it by iterating over the object and treating the results as if they had been \"unpacked\" in the `Annotated` type. The same logic should be applied to the [PEP 646 `Unpack` type](https://peps.python.org/pep-0646/), so that `Annotated[T, Field(...)]`, `Annotated[T, Unpack[Field(...)]]` and `Annotated[T, *Field(...)]` are all treated consistently.\n\nLibraries consuming annotated-types should also ignore any metadata they do not recongize that came from unpacking a `GroupedMetadata`, just like they ignore unrecognized metadata in `Annotated` itself.\n\nOur own `annotated_types.Interval` class is a `GroupedMetadata` which unpacks itself into `Gt`, `Lt`, etc., so this is not an abstract concern. Similarly, `annotated_types.Len` is a `GroupedMetadata` which unpacks itself into `MinLen` (optionally) and `MaxLen`.\n\n### Consuming metadata\n\nWe intend to not be prescriptive as to _how_ the metadata and constraints are used, but as an example of how one might parse constraints from types annotations see our [implementation in `test_main.py`](https://github.com/annotated-types/annotated-types/blob/f59cf6d1b5255a0fe359b93896759a180bec30ae/tests/test_main.py#L94-L103).\n\nIt is up to the implementer to determine how this metadata is used.\nYou could use the metadata for runtime type checking, for generating schemas or to generate example data, amongst other use cases.\n\n## Design & History\n\nThis package was designed at the PyCon 2022 sprints by the maintainers of Pydantic\nand Hypothesis, with the goal of making it as easy as possible for end-users to\nprovide more informative annotations for use by runtime libraries.\n\nIt is deliberately minimal, and following PEP-593 allows considerable downstream\ndiscretion in what (if anything!) they choose to support. Nonetheless, we expect\nthat staying simple and covering _only_ the most common use-cases will give users\nand maintainers the best experience we can. If you'd like more constraints for your\ntypes - follow our lead, by defining them and documenting them downstream!\n", + "description_content_type": "text/markdown", + "author_email": "Adrian Garcia Badaracco <1755071+adriangb@users.noreply.github.com>, Samuel Colvin , Zac Hatfield-Dodds ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 4 - Beta", + "Environment :: Console", + "Environment :: MacOS X", + "Intended Audience :: Developers", + "Intended Audience :: Information Technology", + "License :: OSI Approved :: MIT License", + "Operating System :: POSIX :: Linux", + "Operating System :: Unix", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Topic :: Software Development :: Libraries :: Python Modules", + "Typing :: Typed" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://github.com/annotated-types/annotated-types", + "Source, https://github.com/annotated-types/annotated-types", + "Changelog, https://github.com/annotated-types/annotated-types/releases" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/95/9c/c510029fc6ef33a6275cd2c5d3cecd6613dfd6aa401d57c54f1c18852ccf/setuptools-84.0.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670" + }, + "hash": "sha256=51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "setuptools", + "version": "84.0.0", + "dynamic": [ + "license-file" + ], + "summary": "Most extensible Python build backend with support for C/C++ extension modules", + "description": ".. |pypi-version| image:: https://img.shields.io/pypi/v/setuptools.svg\n :target: https://pypi.org/project/setuptools\n\n.. |py-version| image:: https://img.shields.io/pypi/pyversions/setuptools.svg\n\n.. |test-badge| image:: https://github.com/pypa/setuptools/actions/workflows/main.yml/badge.svg\n :target: https://github.com/pypa/setuptools/actions?query=workflow%3A%22tests%22\n :alt: tests\n\n.. |ruff-badge| image:: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v2.json\n :target: https://github.com/astral-sh/ruff\n :alt: Ruff\n\n.. |docs-badge| image:: https://img.shields.io/readthedocs/setuptools/latest.svg\n :target: https://setuptools.pypa.io\n\n.. |skeleton-badge| image:: https://img.shields.io/badge/skeleton-2026-informational\n :target: https://blog.jaraco.com/skeleton\n\n.. |codecov-badge| image:: https://img.shields.io/codecov/c/github/pypa/setuptools/master.svg?logo=codecov&logoColor=white\n :target: https://codecov.io/gh/pypa/setuptools\n\n.. |tidelift-badge| image:: https://tidelift.com/badges/github/pypa/setuptools?style=flat\n :target: https://tidelift.com/subscription/pkg/pypi-setuptools?utm_source=pypi-setuptools&utm_medium=readme\n\n.. |discord-badge| image:: https://img.shields.io/discord/803025117553754132\n :target: https://discord.com/channels/803025117553754132/815945031150993468\n :alt: Discord\n\n|pypi-version| |py-version| |test-badge| |ruff-badge| |docs-badge| |skeleton-badge| |codecov-badge| |discord-badge|\n\nSee the `Quickstart `_\nand the `User's Guide `_ for\ninstructions on how to use Setuptools.\n\nQuestions and comments should be directed to `GitHub Discussions\n`_.\nBug reports and especially tested patches may be\nsubmitted directly to the `bug tracker\n`_.\n\n\nCode of Conduct\n===============\n\nEveryone interacting in the setuptools project's codebases, issue trackers,\nchat rooms, and fora is expected to follow the\n`PSF Code of Conduct `_.\n\n\nFor Enterprise\n==============\n\nAvailable as part of the Tidelift Subscription.\n\nSetuptools and the maintainers of thousands of other packages are working with Tidelift to deliver one enterprise subscription that covers all of the open source you use.\n\n`Learn more `_.\n", + "description_content_type": "text/x-rst", + "keywords": [ + "CPAN", + "PyPI", + "distutils", + "eggs", + "package", + "management" + ], + "author_email": "Python Packaging Authority ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: System :: Archiving :: Packaging", + "Topic :: System :: Systems Administration", + "Topic :: Utilities" + ], + "requires_dist": [ + "pytest!=8.1.*,>=6; extra == \"test\"", + "virtualenv>=13.0.0; extra == \"test\"", + "wheel>=0.44.0; extra == \"test\"", + "pip>=19.1; extra == \"test\"", + "packaging>=24.2; extra == \"test\"", + "jaraco.envs>=2.2; extra == \"test\"", + "pytest-xdist>=3; extra == \"test\"", + "jaraco.path>=3.7.2; extra == \"test\"", + "build[virtualenv]>=1.0.3; extra == \"test\"", + "filelock>=3.4.0; extra == \"test\"", + "ini2toml[lite]>=0.14; extra == \"test\"", + "tomli-w>=1.0.0; extra == \"test\"", + "pytest-timeout; extra == \"test\"", + "pytest-perf; sys_platform != \"cygwin\" and extra == \"test\"", + "jaraco.develop>=7.21; (python_version >= \"3.9\" and sys_platform != \"cygwin\") and extra == \"test\"", + "pytest-home>=0.5; extra == \"test\"", + "pytest-subprocess; extra == \"test\"", + "pyproject-hooks!=1.1; extra == \"test\"", + "jaraco.test>=5.5; extra == \"test\"", + "sphinx>=3.5; extra == \"doc\"", + "jaraco.packaging>=9.3; extra == \"doc\"", + "rst.linker>=1.9; extra == \"doc\"", + "furo; extra == \"doc\"", + "sphinx-lint; extra == \"doc\"", + "jaraco.tidelift>=1.4; extra == \"doc\"", + "pygments-github-lexers==0.0.5; extra == \"doc\"", + "sphinx-favicon; extra == \"doc\"", + "sphinx-inline-tabs; extra == \"doc\"", + "sphinx-reredirects; extra == \"doc\"", + "sphinxcontrib-towncrier; extra == \"doc\"", + "sphinx-notfound-page<2,>=1; extra == \"doc\"", + "pyproject-hooks!=1.1; extra == \"doc\"", + "towncrier<24.7; extra == \"doc\"", + "packaging>=24.2; extra == \"core\"", + "more_itertools>=8.8; extra == \"core\"", + "jaraco.text>=3.7; extra == \"core\"", + "importlib_metadata>=6; python_version < \"3.10\" and extra == \"core\"", + "tomli>=2.0.1; python_version < \"3.11\" and extra == \"core\"", + "wheel>=0.43.0; extra == \"core\"", + "jaraco.functools>=4; extra == \"core\"", + "more_itertools; extra == \"core\"", + "pytest-checkdocs>=2.14; extra == \"check\"", + "pytest-ruff>=0.2.1; sys_platform != \"cygwin\" and extra == \"check\"", + "ruff>=0.13.0; sys_platform != \"cygwin\" and extra == \"check\"", + "pytest-cov; extra == \"cover\"", + "pytest-enabler>=3.4; extra == \"enabler\"", + "pytest-mypy>=1.0.1; platform_python_implementation != \"PyPy\" and extra == \"type\"", + "mypy==1.18.*; extra == \"type\"", + "importlib_metadata>=7.0.2; python_version < \"3.10\" and extra == \"type\"", + "jaraco.develop>=7.21; sys_platform != \"cygwin\" and extra == \"type\"" + ], + "requires_python": ">=3.10", + "project_url": [ + "Source, https://github.com/pypa/setuptools", + "Documentation, https://setuptools.pypa.io/", + "Changelog, https://setuptools.pypa.io/en/stable/history.html" + ], + "provides_extra": [ + "test", + "doc", + "ssl", + "certs", + "core", + "check", + "cover", + "enabler", + "type" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/4e/d6/1ec1b290f9e0fb067899b61e1d37a30c923068bad260b216dbe37a7d2967/starlette-1.7.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e" + }, + "hash": "sha256=67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "starlette", + "version": "1.7.0", + "summary": "The little ASGI library that shines.", + "description": "

\n \n \n \n \"starlette-logo\"\n \n

\n\n

\n ✨ The little ASGI framework that shines. ✨\n

\n\n---\n\n[![Build Status](https://github.com/Kludex/starlette/workflows/Test%20Suite/badge.svg)](https://github.com/Kludex/starlette/actions)\n[![Package version](https://badge.fury.io/py/starlette.svg)](https://pypi.python.org/pypi/starlette)\n[![Supported Python Version](https://img.shields.io/pypi/pyversions/starlette.svg?color=%2334D058)](https://pypi.org/project/starlette)\n[![Discord](https://img.shields.io/discord/1051468649518616576?logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2)](https://discord.gg/RxKUF5JuHs)\n\n---\n\n**Documentation**: https://starlette.dev\n\n**Source Code**: https://github.com/Kludex/starlette\n\n---\n\n# Starlette\n\nStarlette is a lightweight [ASGI][asgi] framework/toolkit,\nwhich is ideal for building async web services in Python.\n\nIt is production-ready, and gives you the following:\n\n* A lightweight, low-complexity HTTP web framework.\n* WebSocket support.\n* In-process background tasks.\n* Startup and shutdown events.\n* Test client built on `httpx2`.\n* CORS, GZip, Static Files, Streaming responses.\n* Session and Cookie support.\n* 100% test coverage.\n* 100% type annotated codebase.\n* Few hard dependencies.\n* Compatible with `asyncio` and `trio` backends.\n* Great overall performance [against independent benchmarks][techempower].\n\n## Installation\n\n```shell\n$ pip install starlette\n```\n\nYou'll also want to install an ASGI server, such as [uvicorn](https://uvicorn.dev) or any of the [other ASGI server implementations](https://asgi.readthedocs.io/en/latest/implementations.html#servers).\n\n```shell\n$ pip install uvicorn\n```\n\n## Example\n\n```python title=\"main.py\"\nfrom starlette.applications import Starlette\nfrom starlette.responses import JSONResponse\nfrom starlette.routing import Route\n\n\nasync def homepage(request):\n return JSONResponse({'hello': 'world'})\n\nroutes = [\n Route(\"/\", endpoint=homepage)\n]\n\napp = Starlette(debug=True, routes=routes)\n```\n\nThen run the application using Uvicorn:\n\n```shell\n$ uvicorn main:app\n```\n\n## Dependencies\n\nStarlette only requires `anyio`, and the following are optional:\n\n* [`httpx2`][httpx2] - Required if you want to use the `TestClient`.\n* [`jinja2`][jinja2] - Required if you want to use `Jinja2Templates`.\n* [`opentelemetry-api`][opentelemetry-api] - Required for `OpenTelemetryMiddleware`.\n* [`python-multipart`][python-multipart] - Required if you want to support form parsing, with `request.form()`.\n* [`itsdangerous`][itsdangerous] - Required for `SessionMiddleware` support.\n* [`pyyaml`][pyyaml] - Required for `SchemaGenerator` support.\n\nYou can install all of these with `pip install starlette[full]`.\n\n## Framework or Toolkit\n\nStarlette is designed to be used either as a complete framework, or as\nan ASGI toolkit. You can use any of its components independently.\n\n```python\nfrom starlette.responses import PlainTextResponse\n\n\nasync def app(scope, receive, send):\n assert scope['type'] == 'http'\n response = PlainTextResponse('Hello, world!')\n await response(scope, receive, send)\n```\n\nRun the `app` application in `example.py`:\n\n```shell\n$ uvicorn example:app\nINFO: Started server process [11509]\nINFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)\n```\n\nRun uvicorn with `--reload` to enable auto-reloading on code changes.\n\n## Modularity\n\nThe modularity that Starlette is designed on promotes building reusable\ncomponents that can be shared between any ASGI framework. This should enable\nan ecosystem of shared middleware and mountable applications.\n\nThe clean API separation also means it's easier to understand each component\nin isolation.\n\n---\n\n

Starlette is BSD licensed code.
Designed & crafted with care.

— ⭐️ —

\n\n[asgi]: https://asgi.readthedocs.io/en/latest/\n[httpx2]: https://pypi.org/project/httpx2/\n[jinja2]: https://jinja.palletsprojects.com/\n[opentelemetry-api]: https://opentelemetry.io/docs/languages/python/api/\n[python-multipart]: https://multipart.fastapiexpert.com/\n[itsdangerous]: https://itsdangerous.palletsprojects.com/\n[sqlalchemy]: https://www.sqlalchemy.org\n[pyyaml]: https://pyyaml.org/wiki/PyYAMLDocumentation\n[techempower]: https://github.com/TechEmpower/FrameworkBenchmarks\n", + "description_content_type": "text/markdown", + "author_email": "Tom Christie ", + "maintainer_email": "Marcelo Trylesinski ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.md" + ], + "classifier": [ + "Development Status :: 3 - Alpha", + "Environment :: Web Environment", + "Framework :: AnyIO", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Topic :: Internet :: WWW/HTTP" + ], + "requires_dist": [ + "anyio<5,>=4.0.0", + "typing-extensions>=4.10.0; python_version < '3.13'", + "httpx2>=2.0.0; extra == 'full'", + "httpx<0.29.0,>=0.27.0; extra == 'full'", + "itsdangerous; extra == 'full'", + "jinja2; extra == 'full'", + "opentelemetry-api; extra == 'full'", + "python-multipart>=0.0.18; extra == 'full'", + "pyyaml; extra == 'full'" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://github.com/Kludex/starlette", + "Documentation, https://starlette.dev/", + "Changelog, https://starlette.dev/release-notes/", + "Funding, https://github.com/sponsors/Kludex", + "Source, https://github.com/Kludex/starlette" + ], + "provides_extra": [ + "full" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/12/b8/4bd346e22b28902df4d651910f5242c28d84e4a5c2435ca5c3f797ed7e2e/anyio-4.15.1-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101" + }, + "hash": "sha256=6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "anyio", + "version": "4.15.1", + "dynamic": [ + "license-file" + ], + "summary": "High-level concurrency and networking framework on top of asyncio or Trio", + "description": ".. image:: https://github.com/agronholm/anyio/actions/workflows/test.yml/badge.svg\n :target: https://github.com/agronholm/anyio/actions/workflows/test.yml\n :alt: Build Status\n.. image:: https://coveralls.io/repos/github/agronholm/anyio/badge.svg?branch=master\n :target: https://coveralls.io/github/agronholm/anyio?branch=master\n :alt: Code Coverage\n.. image:: https://readthedocs.org/projects/anyio/badge/?version=latest\n :target: https://anyio.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation\n.. image:: https://badges.gitter.im/gitterHQ/gitter.svg\n :target: https://gitter.im/python-trio/AnyIO\n :alt: Gitter chat\n.. image:: https://tidelift.com/badges/package/pypi/anyio\n :target: https://tidelift.com/subscription/pkg/pypi-anyio\n :alt: Tidelift\n\nAnyIO is an asynchronous networking and concurrency library that works on top of either asyncio_ or\nTrio_. It implements Trio-like `structured concurrency`_ (SC) on top of asyncio and works in harmony\nwith the native SC of Trio itself.\n\nApplications and libraries written against AnyIO's API will run unmodified on either asyncio_ or\nTrio_. AnyIO can also be adopted into a library or application incrementally – bit by bit, no full\nrefactoring necessary. It will blend in with the native libraries of your chosen backend.\n\nTo find out why you might want to use AnyIO's APIs instead of asyncio's, you can read about it\n`here `_.\n\nDocumentation\n-------------\n\nView full documentation at: https://anyio.readthedocs.io/\n\nFeatures\n--------\n\nAnyIO offers the following functionality:\n\n* Task groups (nurseries_ in trio terminology)\n* High-level networking (TCP, UDP and UNIX sockets)\n\n * `Happy eyeballs`_ algorithm for TCP connections (more robust than that of asyncio on Python\n 3.8)\n * async/await style UDP sockets (unlike asyncio where you still have to use Transports and\n Protocols)\n\n* A versatile API for byte streams and object streams\n* Inter-task synchronization and communication (locks, conditions, events, semaphores, object\n streams and futures)\n* Worker threads\n* Subprocesses\n* Subinterpreter support for code parallelization (on Python 3.13 and later)\n* Asynchronous file I/O (using worker threads)\n* Signal handling\n* Asynchronous versions of the functools_ and itertools_ modules\n\nAnyIO also comes with its own pytest_ plugin which also supports asynchronous fixtures.\nIt even works with the popular Hypothesis_ library.\n\n.. _asyncio: https://docs.python.org/3/library/asyncio.html\n.. _Trio: https://github.com/python-trio/trio\n.. _structured concurrency: https://en.wikipedia.org/wiki/Structured_concurrency\n.. _nurseries: https://trio.readthedocs.io/en/stable/reference-core.html#nurseries-and-spawning\n.. _Happy eyeballs: https://en.wikipedia.org/wiki/Happy_Eyeballs\n.. _pytest: https://docs.pytest.org/en/latest/\n.. _functools: https://docs.python.org/3/library/functools.html\n.. _itertools: https://docs.python.org/3/library/itertools.html\n.. _Hypothesis: https://hypothesis.works/\n\nSecurity contact information\n----------------------------\n\nTo report a security vulnerability, please use the `Tidelift security contact`_.\nTidelift will coordinate the fix and disclosure.\n\n.. _Tidelift security contact: https://tidelift.com/security\n", + "description_content_type": "text/x-rst", + "author_email": "Alex Grönholm ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Framework :: AnyIO", + "Typing :: Typed", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Programming Language :: Python :: Free Threading :: 2 - Beta" + ], + "requires_dist": [ + "exceptiongroup>=1.0.2; python_version < \"3.11\"", + "idna>=2.8", + "typing_extensions>=4.16.0; python_version < \"3.15\"", + "trio>=0.32.0; extra == \"trio\"" + ], + "requires_python": ">=3.10", + "project_url": [ + "Documentation, https://anyio.readthedocs.io/en/latest/", + "Changelog, https://anyio.readthedocs.io/en/stable/versionhistory.html", + "Source code, https://github.com/agronholm/anyio", + "Issue tracker, https://github.com/agronholm/anyio/issues" + ], + "provides_extra": [ + "trio" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c" + }, + "hash": "sha256=ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "idna", + "version": "3.20", + "summary": "Internationalized Domain Names in Applications (IDNA)", + "description": "# Internationalized Domain Names in Applications (IDNA)\n\nSupport for [Internationalized Domain Names in Applications\n(IDNA)](https://tools.ietf.org/html/rfc5891) and [Unicode IDNA\nCompatibility Processing](https://unicode.org/reports/tr46/). It\nsupersedes the standard library's `encodings.idna`, which only\nimplements the 2003 specification, offering broader script coverage and\nlimiting domains with known security vulnerabilities.\n\n## Usage\n\nPackage may be installed from [PyPI](https://pypi.org/project/idna/) via\nthe typical methods (e.g. `python3 -m pip install idna`)\n\nFor typical usage, the `encode` and `decode` functions will take a\ndomain name argument and perform a conversion to ASCII-compatible encoding\n(known as A-labels), or to Unicode strings (known as U-labels)\nrespectively.\n\n```pycon\n>>> import idna\n>>> idna.encode('ドメイン.テスト')\nb'xn--eckwd4c7c.xn--zckzah'\n>>> print(idna.decode('xn--eckwd4c7c.xn--zckzah'))\nドメイン.テスト\n```\n\nConversions can be applied at a per-label basis using the `ulabel` or\n`alabel` functions for specialized use cases.\n\n\n### Compatibility Mapping (UTS #46)\n\nThis library provides support for [Unicode IDNA Compatibility\nProcessing](https://unicode.org/reports/tr46/) which normalizes input from\ndifferent potential ways a user may input a domain prior to performing the IDNA\nconversion operations. This functionality, known as a\n[mapping](https://tools.ietf.org/html/rfc5895), is considered by the\nspecification to be a local user-interface issue distinct from IDNA\nconversion functionality.\n\nFor example, \"Königsgäßchen\" is not a permissible label as capital letters\nare not allowed. UTS #46 will convert this into lower case prior to applying\nthe IDNA conversion.\n\n```pycon\n>>> import idna\n>>> idna.encode('Königsgäßchen')\n...\nidna.core.InvalidCodepoint: Codepoint U+004B at position 1 of 'Königsgäßchen' not allowed\n>>> idna.encode('Königsgäßchen', uts46=True)\nb'xn--knigsgchen-b4a3dun'\n>>> idna.decode('xn--knigsgchen-b4a3dun')\n'königsgäßchen'\n```\n\nWhen performing a decode operation for display purposes, `decode()`\naccepts a `display=True` argument that leaves any `xn--` label that\nfails to decode unchanged. This is useful for user interface display\nwhere a domain is in use, the A-label form can be presented when it\nis not a valid IDN.\n\n\n## Exceptions\n\nAll errors raised during conversion derive from the `idna.IDNAError`\nbase class. The more specific exceptions are:\n\n* `idna.IDNABidiError` — raised when a label contains an illegal\n combination of left-to-right and right-to-left characters.\n* `idna.InvalidCodepoint` — raised when a label contains a codepoint\n that is INVALID for IDNA.\n* `idna.InvalidCodepointContext` — raised when a CONTEXTO or CONTEXTJ\n codepoint appears in a position whose contextual requirements are\n not satisfied.\n\nExceptions carry machine-readable attributes so that applications do\nnot need to parse the message: `code` is a short, stable identifier\nfor the rule that failed (such as `disallowed_codepoint` or\n`label_too_long`); and, when the failure can be attributed to a\nparticular character, `text` (the label or domain being validated),\n`codepoint` (the offending codepoint as an integer) and `position`\nare set. \n\n\n## Command-line tool\n\nThe package supports command-line usage to convert domain names\nbetween their Unicode and ASCII-compatible forms. It can be run either\nas a module (`python3 -m idna`) or, once installed (such as with `uv\ntool` or `pipx`), via the `idna` script:\n\n```bash\n$ uv tool install idna\n$ idna xn--e1afmkfd.xn--p1ai\nпример.рф\n$ idna пример.рф\nxn--e1afmkfd.xn--p1ai\n```\n\nMode can be specified with `-e`/`--encode` or `-d`/`--decode`, otherwise\nit will be chosen automatically based on the first input. Multiple\ndomains can be supplied either as arguments or through standard input.\nUTS #46 mapping is applied by default, which lets the tool accept\ninputs that aren't strictly valid IDNA 2008 by normalising them first,\npass `--strict` to disable UTS #46.\n\nConversion failures are reported on stderr together with the\noffending input; processing continues with the remaining domains and\nthe tool exits with a non-zero status if any conversion failed.\n\n\n## Additional Notes\n\n* **Python version support**. This library supports Python 3.9 and higher.\n As this library serves as a low-level toolkit for a variety of\n applications, we strive to support all versions of Python that are\n not beyond end-of-life. Free-threaded Python is also supported,\n as the library holds no mutable global state the functions can be\n called concurrently from multiple threads.\n\n* **Unicode version**. The IDNA and UTS #46 lookup tables are generated\n from a specific Unicode release. Some Unicode data depends on the\n running Python's `unicodedata` module, so on an older Python a\n character new to Unicode may be rejected as unknown even if this\n library knows about it.\n\n* **Emoji**. It is an occasional request to support emoji domains in\n this library. Encoding of symbols like emoji is expressly prohibited by\n the IDNA technical standard, and emoji domains are broadly phased\n out across the domain industry due to associated security risks.\n\n* **Regenerating lookup tables**. The IDNA and UTS #46 functionality\n relies upon pre-calculated lookup tables, generated using the\n `idna-data` script in [`tools/`](tools/README.md).\n\n", + "description_content_type": "text/markdown", + "author_email": "Kim Davies ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.md" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Intended Audience :: System Administrators", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Internet :: Name Service (DNS)", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Utilities" + ], + "requires_dist": [ + "ruff >= 0.16.0 ; extra == \"all\"", + "mypy >= 1.11.2 ; extra == \"all\"", + "ty >= 0.0.37 ; extra == \"all\"", + "pytest >= 8.3.2 ; extra == \"all\"", + "hypothesis >= 6.141.1 ; extra == \"all\"", + "coverage >= 7.10.0 ; extra == \"all\"" + ], + "requires_python": ">=3.9", + "project_url": [ + "Changelog, https://github.com/kjd/idna/blob/master/HISTORY.md", + "Issue tracker, https://github.com/kjd/idna/issues", + "Source, https://github.com/kjd/idna" + ], + "provides_extra": [ + "all" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5" + }, + "hash": "sha256=e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "sympy", + "version": "1.14.0", + "dynamic": [ + "author", + "author-email", + "classifier", + "description", + "description-content-type", + "home-page", + "keywords", + "license", + "license-file", + "project-url", + "provides-extra", + "requires-dist", + "requires-python", + "summary" + ], + "summary": "Computer algebra system (CAS) in Python", + "description": "# SymPy\n\n[![pypi version](https://img.shields.io/pypi/v/sympy.svg)](https://pypi.python.org/pypi/sympy)\n[![Join the chat at https://gitter.im/sympy/sympy](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/sympy/sympy?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)\n[![Zenodo Badge](https://zenodo.org/badge/18918/sympy/sympy.svg)](https://zenodo.org/badge/latestdoi/18918/sympy/sympy)\n[![Downloads](https://pepy.tech/badge/sympy/month)](https://pepy.tech/project/sympy)\n[![GitHub Issues](https://img.shields.io/badge/issue_tracking-github-blue.svg)](https://github.com/sympy/sympy/issues)\n[![Git Tutorial](https://img.shields.io/badge/PR-Welcome-%23FF8300.svg?)](https://git-scm.com/book/en/v2/GitHub-Contributing-to-a-Project)\n[![Powered by NumFocus](https://img.shields.io/badge/powered%20by-NumFOCUS-orange.svg?style=flat&colorA=E1523D&colorB=007D8A)](https://numfocus.org)\n[![Commits since last release](https://img.shields.io/github/commits-since/sympy/sympy/latest.svg?longCache=true&style=flat-square&logo=git&logoColor=fff)](https://github.com/sympy/sympy/releases)\n\n[![SymPy Banner](https://github.com/sympy/sympy/raw/master/banner.svg)](https://sympy.org/)\n\n\nSee the [AUTHORS](AUTHORS) file for the list of authors.\n\nAnd many more people helped on the SymPy mailing list, reported bugs,\nhelped organize SymPy's participation in the Google Summer of Code, the\nGoogle Highly Open Participation Contest, Google Code-In, wrote and\nblogged about SymPy...\n\nLicense: New BSD License (see the [LICENSE](LICENSE) file for details) covers all\nfiles in the sympy repository unless stated otherwise.\n\nOur mailing list is at\n.\n\nWe have a community chat at [Gitter](https://gitter.im/sympy/sympy). Feel\nfree to ask us anything there. We have a very welcoming and helpful\ncommunity.\n\n## Download\n\nThe recommended installation method is through Anaconda,\n\n\nYou can also get the latest version of SymPy from\n\n\nTo get the git version do\n\n $ git clone https://github.com/sympy/sympy.git\n\nFor other options (tarballs, debs, etc.), see\n.\n\n## Documentation and Usage\n\nFor in-depth instructions on installation and building the\ndocumentation, see the [SymPy Documentation Style Guide](https://docs.sympy.org/dev/documentation-style-guide.html).\n\nEverything is at:\n\n\n\nYou can generate everything at the above site in your local copy of\nSymPy by:\n\n $ cd doc\n $ make html\n\nThen the docs will be in \\_build/html. If\nyou don't want to read that, here is a short usage:\n\nFrom this directory, start Python and:\n\n``` python\n>>> from sympy import Symbol, cos\n>>> x = Symbol('x')\n>>> e = 1/cos(x)\n>>> print(e.series(x, 0, 10))\n1 + x**2/2 + 5*x**4/24 + 61*x**6/720 + 277*x**8/8064 + O(x**10)\n```\n\nSymPy also comes with a console that is a simple wrapper around the\nclassic python console (or IPython when available) that loads the SymPy\nnamespace and executes some common commands for you.\n\nTo start it, issue:\n\n $ bin/isympy\n\nfrom this directory, if SymPy is not installed or simply:\n\n $ isympy\n\nif SymPy is installed.\n\n## Installation\n\nTo install SymPy using PyPI, run the following command:\n\n $ pip install sympy\n\nTo install SymPy using Anaconda, run the following command:\n\n $ conda install -c anaconda sympy\n\nTo install SymPy from GitHub source, first clone SymPy using `git`:\n\n $ git clone https://github.com/sympy/sympy.git\n\nThen, in the `sympy` repository that you cloned, simply run:\n\n $ pip install .\n\nSee for more information.\n\n## Contributing\n\nWe welcome contributions from anyone, even if you are new to open\nsource. Please read our [Introduction to Contributing](https://docs.sympy.org/dev/contributing/introduction-to-contributing.html)\npage and the [SymPy Documentation Style Guide](https://docs.sympy.org/dev/documentation-style-guide.html). If you\nare new and looking for some way to contribute, a good place to start is\nto look at the issues tagged [Easy to Fix](https://github.com/sympy/sympy/issues?q=is%3Aopen+is%3Aissue+label%3A%22Easy+to+Fix%22).\n\nPlease note that all participants in this project are expected to follow\nour Code of Conduct. By participating in this project you agree to abide\nby its terms. See [CODE\\_OF\\_CONDUCT.md](CODE_OF_CONDUCT.md).\n\n## Tests\n\nTo execute all tests, run:\n\n $./setup.py test\n\nin the current directory.\n\nFor the more fine-grained running of tests or doctests, use `bin/test`\nor respectively `bin/doctest`. The master branch is automatically tested\nby GitHub Actions.\n\nTo test pull requests, use\n[sympy-bot](https://github.com/sympy/sympy-bot).\n\n## Regenerate Experimental LaTeX Parser/Lexer\n\nThe parser and lexer were generated with the [ANTLR4](http://antlr4.org)\ntoolchain in `sympy/parsing/latex/_antlr` and checked into the repo.\nPresently, most users should not need to regenerate these files, but\nif you plan to work on this feature, you will need the `antlr4`\ncommand-line tool (and you must ensure that it is in your `PATH`).\nOne way to get it is:\n\n $ conda install -c conda-forge antlr=4.11.1\n\nAlternatively, follow the instructions on the ANTLR website and download\nthe `antlr-4.11.1-complete.jar`. Then export the `CLASSPATH` as instructed\nand instead of creating `antlr4` as an alias, make it an executable file\nwith the following contents:\n``` bash\n#!/bin/bash\njava -jar /usr/local/lib/antlr-4.11.1-complete.jar \"$@\"\n```\n\nAfter making changes to `sympy/parsing/latex/LaTeX.g4`, run:\n\n $ ./setup.py antlr\n\n## Clean\n\nTo clean everything (thus getting the same tree as in the repository):\n\n $ git clean -Xdf\n\nwhich will clear everything ignored by `.gitignore`, and:\n\n $ git clean -df\n\nto clear all untracked files. You can revert the most recent changes in\ngit with:\n\n $ git reset --hard\n\nWARNING: The above commands will all clear changes you may have made,\nand you will lose them forever. Be sure to check things with `git\nstatus`, `git diff`, `git clean -Xn`, and `git clean -n` before doing any\nof those.\n\n## Bugs\n\nOur issue tracker is at . Please\nreport any bugs that you find. Or, even better, fork the repository on\nGitHub and create a pull request. We welcome all changes, big or small,\nand we will help you make the pull request if you are new to git (just\nask on our mailing list or Gitter Channel). If you further have any queries, you can find answers\non Stack Overflow using the [sympy](https://stackoverflow.com/questions/tagged/sympy) tag.\n\n## Brief History\n\nSymPy was started by Ondřej Čertík in 2005, he wrote some code during\nthe summer, then he wrote some more code during summer 2006. In February\n2007, Fabian Pedregosa joined the project and helped fix many things,\ncontributed documentation, and made it alive again. 5 students (Mateusz\nPaprocki, Brian Jorgensen, Jason Gedge, Robert Schwarz, and Chris Wu)\nimproved SymPy incredibly during summer 2007 as part of the Google\nSummer of Code. Pearu Peterson joined the development during the summer\n2007 and he has made SymPy much more competitive by rewriting the core\nfrom scratch, which has made it from 10x to 100x faster. Jurjen N.E. Bos\nhas contributed pretty-printing and other patches. Fredrik Johansson has\nwritten mpmath and contributed a lot of patches.\n\nSymPy has participated in every Google Summer of Code since 2007. You\ncan see for\nfull details. Each year has improved SymPy by bounds. Most of SymPy's\ndevelopment has come from Google Summer of Code students.\n\nIn 2011, Ondřej Čertík stepped down as lead developer, with Aaron\nMeurer, who also started as a Google Summer of Code student, taking his\nplace. Ondřej Čertík is still active in the community but is too busy\nwith work and family to play a lead development role.\n\nSince then, a lot more people have joined the development and some\npeople have also left. You can see the full list in doc/src/aboutus.rst,\nor online at:\n\n\n\nThe git history goes back to 2007 when development moved from svn to hg.\nTo see the history before that point, look at\n.\n\nYou can use git to see the biggest developers. The command:\n\n $ git shortlog -ns\n\nwill show each developer, sorted by commits to the project. The command:\n\n $ git shortlog -ns --since=\"1 year\"\n\nwill show the top developers from the last year.\n\n## Citation\n\nTo cite SymPy in publications use\n\n> Meurer A, Smith CP, Paprocki M, Čertík O, Kirpichev SB, Rocklin M,\n> Kumar A, Ivanov S, Moore JK, Singh S, Rathnayake T, Vig S, Granger BE,\n> Muller RP, Bonazzi F, Gupta H, Vats S, Johansson F, Pedregosa F, Curry\n> MJ, Terrel AR, Roučka Š, Saboo A, Fernando I, Kulal S, Cimrman R,\n> Scopatz A. (2017) SymPy: symbolic computing in Python. *PeerJ Computer\n> Science* 3:e103 \n\nA BibTeX entry for LaTeX users is\n\n``` bibtex\n@article{10.7717/peerj-cs.103,\n title = {SymPy: symbolic computing in Python},\n author = {Meurer, Aaron and Smith, Christopher P. and Paprocki, Mateusz and \\v{C}ert\\'{i}k, Ond\\v{r}ej and Kirpichev, Sergey B. and Rocklin, Matthew and Kumar, Amit and Ivanov, Sergiu and Moore, Jason K. and Singh, Sartaj and Rathnayake, Thilina and Vig, Sean and Granger, Brian E. and Muller, Richard P. and Bonazzi, Francesco and Gupta, Harsh and Vats, Shivam and Johansson, Fredrik and Pedregosa, Fabian and Curry, Matthew J. and Terrel, Andy R. and Rou\\v{c}ka, \\v{S}t\\v{e}p\\'{a}n and Saboo, Ashutosh and Fernando, Isuru and Kulal, Sumith and Cimrman, Robert and Scopatz, Anthony},\n year = 2017,\n month = Jan,\n keywords = {Python, Computer algebra system, Symbolics},\n abstract = {\n SymPy is an open-source computer algebra system written in pure Python. It is built with a focus on extensibility and ease of use, through both interactive and programmatic applications. These characteristics have led SymPy to become a popular symbolic library for the scientific Python ecosystem. This paper presents the architecture of SymPy, a description of its features, and a discussion of select submodules. The supplementary material provides additional examples and further outlines details of the architecture and features of SymPy.\n },\n volume = 3,\n pages = {e103},\n journal = {PeerJ Computer Science},\n issn = {2376-5992},\n url = {https://doi.org/10.7717/peerj-cs.103},\n doi = {10.7717/peerj-cs.103}\n}\n```\n\nSymPy is BSD licensed, so you are free to use it whatever you like, be\nit academic, commercial, creating forks or derivatives, as long as you\ncopy the BSD statement if you redistribute it (see the LICENSE file for\ndetails). That said, although not required by the SymPy license, if it\nis convenient for you, please cite SymPy when using it in your work and\nalso consider contributing all your changes back, so that we can\nincorporate it and all of us will benefit in the end.\n", + "description_content_type": "text/markdown", + "keywords": [ + "Math", + "CAS" + ], + "home_page": "https://sympy.org", + "author": "SymPy development team", + "author_email": "sympy@googlegroups.com", + "license": "BSD", + "license_file": [ + "LICENSE", + "AUTHORS" + ], + "classifier": [ + "License :: OSI Approved :: BSD License", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Topic :: Scientific/Engineering", + "Topic :: Scientific/Engineering :: Mathematics", + "Topic :: Scientific/Engineering :: Physics", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy" + ], + "requires_dist": [ + "mpmath<1.4,>=1.1.0", + "pytest>=7.1.0; extra == \"dev\"", + "hypothesis>=6.70.0; extra == \"dev\"" + ], + "requires_python": ">=3.9", + "project_url": [ + "Source, https://github.com/sympy/sympy" + ], + "provides_extra": [ + "dev" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c" + }, + "hash": "sha256=a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.1", + "name": "mpmath", + "version": "1.3.0", + "summary": "Python library for arbitrary-precision floating-point arithmetic", + "description": "mpmath\n======\n\n|pypi version| |Build status| |Code coverage status| |Zenodo Badge|\n\n.. |pypi version| image:: https://img.shields.io/pypi/v/mpmath.svg\n :target: https://pypi.python.org/pypi/mpmath\n.. |Build status| image:: https://github.com/fredrik-johansson/mpmath/workflows/test/badge.svg\n :target: https://github.com/fredrik-johansson/mpmath/actions?workflow=test\n.. |Code coverage status| image:: https://codecov.io/gh/fredrik-johansson/mpmath/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/fredrik-johansson/mpmath\n.. |Zenodo Badge| image:: https://zenodo.org/badge/2934512.svg\n :target: https://zenodo.org/badge/latestdoi/2934512\n\nA Python library for arbitrary-precision floating-point arithmetic.\n\nWebsite: http://mpmath.org/\nMain author: Fredrik Johansson \n\nMpmath is free software released under the New BSD License (see the\nLICENSE file for details)\n\n0. History and credits\n----------------------\n\nThe following people (among others) have contributed major patches\nor new features to mpmath:\n\n* Pearu Peterson \n* Mario Pernici \n* Ondrej Certik \n* Vinzent Steinberg \n* Nimish Telang \n* Mike Taschuk \n* Case Van Horsen \n* Jorn Baayen \n* Chris Smith \n* Juan Arias de Reyna \n* Ioannis Tziakos \n* Aaron Meurer \n* Stefan Krastanov \n* Ken Allen \n* Timo Hartmann \n* Sergey B Kirpichev \n* Kris Kuhlman \n* Paul Masson \n* Michael Kagalenko \n* Jonathan Warner \n* Max Gaukler \n* Guillermo Navas-Palencia \n* Nike Dattani \n\nNumerous other people have contributed by reporting bugs,\nrequesting new features, or suggesting improvements to the\ndocumentation.\n\nFor a detailed changelog, including individual contributions,\nsee the CHANGES file.\n\nFredrik's work on mpmath during summer 2008 was sponsored by Google\nas part of the Google Summer of Code program.\n\nFredrik's work on mpmath during summer 2009 was sponsored by the\nAmerican Institute of Mathematics under the support of the National Science\nFoundation Grant No. 0757627 (FRG: L-functions and Modular Forms).\n\nAny opinions, findings, and conclusions or recommendations expressed in this\nmaterial are those of the author(s) and do not necessarily reflect the\nviews of the sponsors.\n\nCredit also goes to:\n\n* The authors of the GMP library and the Python wrapper\n gmpy, enabling mpmath to become much faster at\n high precision\n* The authors of MPFR, pari/gp, MPFUN, and other arbitrary-\n precision libraries, whose documentation has been helpful\n for implementing many of the algorithms in mpmath\n* Wikipedia contributors; Abramowitz & Stegun; Gradshteyn & Ryzhik;\n Wolfram Research for MathWorld and the Wolfram Functions site.\n These are the main references used for special functions\n implementations.\n* George Brandl for developing the Sphinx documentation tool\n used to build mpmath's documentation\n\nRelease history:\n\n* Version 1.3.0 released on March 7, 2023\n* Version 1.2.0 released on February 1, 2021\n* Version 1.1.0 released on December 11, 2018\n* Version 1.0.0 released on September 27, 2017\n* Version 0.19 released on June 10, 2014\n* Version 0.18 released on December 31, 2013\n* Version 0.17 released on February 1, 2011\n* Version 0.16 released on September 24, 2010\n* Version 0.15 released on June 6, 2010\n* Version 0.14 released on February 5, 2010\n* Version 0.13 released on August 13, 2009\n* Version 0.12 released on June 9, 2009\n* Version 0.11 released on January 26, 2009\n* Version 0.10 released on October 15, 2008\n* Version 0.9 released on August 23, 2008\n* Version 0.8 released on April 20, 2008\n* Version 0.7 released on March 12, 2008\n* Version 0.6 released on January 13, 2008\n* Version 0.5 released on November 24, 2007\n* Version 0.4 released on November 3, 2007\n* Version 0.3 released on October 5, 2007\n* Version 0.2 released on October 2, 2007\n* Version 0.1 released on September 27, 2007\n\n1. Download & installation\n--------------------------\n\nMpmath requires Python 2.7 or 3.5 (or later versions). It has been tested\nwith CPython 2.7, 3.5 through 3.7 and for PyPy.\n\nThe latest release of mpmath can be downloaded from the mpmath\nwebsite and from https://github.com/fredrik-johansson/mpmath/releases\n\nIt should also be available in the Python Package Index at\nhttps://pypi.python.org/pypi/mpmath\n\nTo install latest release of Mpmath with pip, simply run\n\n``pip install mpmath``\n\nOr unpack the mpmath archive and run\n\n``python setup.py install``\n\nMpmath can also be installed using\n\n``python -m easy_install mpmath``\n\nThe latest development code is available from\nhttps://github.com/fredrik-johansson/mpmath\n\nSee the main documentation for more detailed instructions.\n\n2. Running tests\n----------------\n\nThe unit tests in mpmath/tests/ can be run via the script\nruntests.py, but it is recommended to run them with py.test\n(https://pytest.org/), especially\nto generate more useful reports in case there are failures.\n\nYou may also want to check out the demo scripts in the demo\ndirectory.\n\nThe master branch is automatically tested by Travis CI.\n\n3. Documentation\n----------------\n\nDocumentation in reStructuredText format is available in the\ndoc directory included with the source package. These files\nare human-readable, but can be compiled to prettier HTML using\nthe build.py script (requires Sphinx, http://sphinx.pocoo.org/).\n\nSee setup.txt in the documentation for more information.\n\nThe most recent documentation is also available in HTML format:\n\nhttp://mpmath.org/doc/current/\n\n4. Known problems\n-----------------\n\nMpmath is a work in progress. Major issues include:\n\n* Some functions may return incorrect values when given extremely\n large arguments or arguments very close to singularities.\n\n* Directed rounding works for arithmetic operations. It is implemented\n heuristically for other operations, and their results may be off by one\n or two units in the last place (even if otherwise accurate).\n\n* Some IEEE 754 features are not available. Inifinities and NaN are\n partially supported; denormal rounding is currently not available\n at all.\n\n* The interface for switching precision and rounding is not finalized.\n The current method is not threadsafe.\n\n5. Help and bug reports\n-----------------------\n\nGeneral questions and comments can be sent to the mpmath mailinglist,\nmpmath@googlegroups.com\n\nYou can also report bugs and send patches to the mpmath issue tracker,\nhttps://github.com/fredrik-johansson/mpmath/issues\n", + "home_page": "http://mpmath.org/", + "author": "Fredrik Johansson", + "author_email": "fredrik.johansson@gmail.com", + "license": "BSD", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "License :: OSI Approved :: BSD License", + "Topic :: Scientific/Engineering :: Mathematics", + "Topic :: Software Development :: Libraries :: Python Modules", + "Programming Language :: Python", + "Programming Language :: Python :: 2", + "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.5", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy" + ], + "requires_dist": [ + "pytest (>=4.6) ; extra == 'develop'", + "pycodestyle ; extra == 'develop'", + "pytest-cov ; extra == 'develop'", + "codecov ; extra == 'develop'", + "wheel ; extra == 'develop'", + "sphinx ; extra == 'docs'", + "gmpy2 (>=2.1.0a4) ; (platform_python_implementation != \"PyPy\") and extra == 'gmpy'", + "pytest (>=4.6) ; extra == 'tests'" + ], + "project_url": [ + "Source, https://github.com/fredrik-johansson/mpmath", + "Tracker, https://github.com/fredrik-johansson/mpmath/issues", + "Documentation, http://mpmath.org/doc/current/" + ], + "provides_extra": [ + "develop", + "docs", + "gmpy", + "tests" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8" + }, + "hash": "sha256=481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "typing_extensions", + "version": "4.16.0", + "summary": "Backported and Experimental Type Hints for Python 3.9+", + "description": "# Typing Extensions\n\n[![Chat at https://gitter.im/python/typing](https://badges.gitter.im/python/typing.svg)](https://gitter.im/python/typing)\n\n[Documentation](https://typing-extensions.readthedocs.io/en/latest/#) –\n[PyPI](https://pypi.org/project/typing-extensions/)\n\n## Overview\n\nThe `typing_extensions` module serves two related purposes:\n\n- Enable use of new type system features on older Python versions. For example,\n `typing.TypeGuard` is new in Python 3.10, but `typing_extensions` allows\n users on previous Python versions to use it too.\n- Enable experimentation with new type system PEPs before they are accepted and\n added to the `typing` module.\n\n`typing_extensions` is treated specially by static type checkers such as\nmypy and pyright. Objects defined in `typing_extensions` are treated the same\nway as equivalent forms in `typing`.\n\n`typing_extensions` uses\n[Semantic Versioning](https://semver.org/). The\nmajor version will be incremented only for backwards-incompatible changes.\nTherefore, it's safe to depend\non `typing_extensions` like this: `typing_extensions ~=x.y`,\nwhere `x.y` is the first version that includes all features you need.\n[This](https://packaging.python.org/en/latest/specifications/version-specifiers/#compatible-release)\nis equivalent to `typing_extensions >=x.y, <(x+1)`. Do not depend on `~= x.y.z`\nunless you really know what you're doing; that defeats the purpose of\nsemantic versioning.\n\n## Included items\n\nSee [the documentation](https://typing-extensions.readthedocs.io/en/latest/#) for a\ncomplete listing of module contents.\n\n## Contributing\n\nSee [CONTRIBUTING.md](https://github.com/python/typing_extensions/blob/main/CONTRIBUTING.md)\nfor how to contribute to `typing_extensions`.\n\n", + "description_content_type": "text/markdown", + "keywords": [ + "annotations", + "backport", + "checker", + "checking", + "function", + "hinting", + "hints", + "type", + "typechecking", + "typehinting", + "typehints", + "typing" + ], + "author_email": "\"Guido van Rossum, Jukka Lehtosalo, Łukasz Langa, Michael Lee\" ", + "license_expression": "PSF-2.0", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Environment :: Console", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Topic :: Software Development" + ], + "requires_python": ">=3.9", + "project_url": [ + "Bug Tracker, https://github.com/python/typing_extensions/issues", + "Changes, https://github.com/python/typing_extensions/blob/main/CHANGELOG.md", + "Documentation, https://typing-extensions.readthedocs.io/", + "Home, https://github.com/python/typing_extensions", + "Q & A, https://github.com/python/typing/discussions", + "Repository, https://github.com/python/typing_extensions" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147" + }, + "hash": "sha256=65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "typing-inspection", + "version": "0.4.4", + "summary": "Runtime typing introspection tools", + "description": "# typing-inspection\n\n[![CI](https://img.shields.io/github/actions/workflow/status/pydantic/typing-inspection/ci.yml?branch=main&logo=github&label=CI)](https://github.com/pydantic/typing-inspection/actions?query=event%3Apush+branch%3Amain+workflow%3ACI)\n[![Coverage](https://coverage-badge.samuelcolvin.workers.dev/pydantic/typing-inspection.svg)](https://coverage-badge.samuelcolvin.workers.dev/redirect/pydantic/typing-inspection)\n[![PyPI](https://img.shields.io/pypi/v/typing-inspection.svg)](https://pypi.org/project/typing-inspection/)\n[![Versions](https://img.shields.io/pypi/pyversions/typing-inspection.svg)](https://github.com/pydantic/typing-inspection)\n[![License](https://img.shields.io/github/license/pydantic/typing-inspection.svg)](https://github.com/pydantic/typing-inspection/blob/main/LICENSE)\n[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)\n\n`typing-inspection` provides tools to inspect type annotations at runtime.\n\n## Installation\n\nFrom [PyPI](https://pypi.org/project/typing-inspection/):\n\n```bash\npip install typing-inspection\n```\n\nThe library can be imported from the `typing_inspection` module.\n", + "description_content_type": "text/markdown", + "author_email": "Victorien Plot ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Programming Language :: Python :: Implementation :: CPython", + "Topic :: Software Development :: Libraries :: Python Modules", + "Typing :: Typed" + ], + "requires_dist": [ + "typing-extensions>=4.15.0" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://github.com/pydantic/typing-inspection", + "Documentation, https://pydantic.github.io/typing-inspection/dev/", + "Source, https://github.com/pydantic/typing-inspection", + "Changelog, https://github.com/pydantic/typing-inspection/blob/main/HISTORY.md" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/7a/6d/db8b86e168fef0cf904737e275bccb683558088ef971e92d3b41ce980699/filelock-4.0.3-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "30cd166e2aee2c7534ce2c33c6367c4cd051b8368e20e2c4eb0c34f699bacfab" + }, + "hash": "sha256=30cd166e2aee2c7534ce2c33c6367c4cd051b8368e20e2c4eb0c34f699bacfab" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "filelock", + "version": "4.0.3", + "summary": "A platform independent file lock.", + "description": "# filelock\n\n[![PyPI](https://img.shields.io/pypi/v/filelock)](https://pypi.org/project/filelock/)\n[![Supported Python versions](https://img.shields.io/pypi/pyversions/filelock.svg)](https://pypi.org/project/filelock/)\n[![Documentation status](https://readthedocs.org/projects/py-filelock/badge/?version=latest)](https://py-filelock.readthedocs.io/en/latest/?badge=latest)\n[![Downloads](https://static.pepy.tech/badge/filelock/month)](https://pepy.tech/project/filelock)\n[![check](https://github.com/tox-dev/py-filelock/actions/workflows/check.yaml/badge.svg)](https://github.com/tox-dev/py-filelock/actions/workflows/check.yaml)\n\nFor more information checkout the [official documentation](https://py-filelock.readthedocs.io/en/latest/index.html).\n", + "description_content_type": "text/markdown", + "keywords": [ + "application", + "cache", + "directory", + "log", + "user" + ], + "maintainer_email": "Bernát Gábor ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Topic :: Internet", + "Topic :: Software Development :: Libraries", + "Topic :: System" + ], + "requires_python": ">=3.10", + "project_url": [ + "Documentation, https://py-filelock.readthedocs.io", + "Homepage, https://github.com/tox-dev/py-filelock", + "Source, https://github.com/tox-dev/py-filelock", + "Tracker, https://github.com/tox-dev/py-filelock/issues" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67" + }, + "hash": "sha256=85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "Jinja2", + "version": "3.1.6", + "summary": "A very fast and expressive template engine.", + "description": "# Jinja\n\nJinja is a fast, expressive, extensible templating engine. Special\nplaceholders in the template allow writing code similar to Python\nsyntax. Then the template is passed data to render the final document.\n\nIt includes:\n\n- Template inheritance and inclusion.\n- Define and import macros within templates.\n- HTML templates can use autoescaping to prevent XSS from untrusted\n user input.\n- A sandboxed environment can safely render untrusted templates.\n- AsyncIO support for generating templates and calling async\n functions.\n- I18N support with Babel.\n- Templates are compiled to optimized Python code just-in-time and\n cached, or can be compiled ahead-of-time.\n- Exceptions point to the correct line in templates to make debugging\n easier.\n- Extensible filters, tests, functions, and even syntax.\n\nJinja's philosophy is that while application logic belongs in Python if\npossible, it shouldn't make the template designer's job difficult by\nrestricting functionality too much.\n\n\n## In A Nutshell\n\n```jinja\n{% extends \"base.html\" %}\n{% block title %}Members{% endblock %}\n{% block content %}\n \n{% endblock %}\n```\n\n## Donate\n\nThe Pallets organization develops and supports Jinja and other popular\npackages. In order to grow the community of contributors and users, and\nallow the maintainers to devote more time to the projects, [please\ndonate today][].\n\n[please donate today]: https://palletsprojects.com/donate\n\n## Contributing\n\nSee our [detailed contributing documentation][contrib] for many ways to\ncontribute, including reporting issues, requesting features, asking or answering\nquestions, and making PRs.\n\n[contrib]: https://palletsprojects.com/contributing/\n\n", + "description_content_type": "text/markdown", + "maintainer_email": "Pallets ", + "license_file": [ + "LICENSE.txt" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Environment :: Web Environment", + "Intended Audience :: Developers", + "License :: OSI Approved :: BSD License", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Topic :: Internet :: WWW/HTTP :: Dynamic Content", + "Topic :: Text Processing :: Markup :: HTML", + "Typing :: Typed" + ], + "requires_dist": [ + "MarkupSafe>=2.0", + "Babel>=2.7 ; extra == \"i18n\"" + ], + "requires_python": ">=3.7", + "project_url": [ + "Changes, https://jinja.palletsprojects.com/changes/", + "Chat, https://discord.gg/pallets", + "Documentation, https://jinja.palletsprojects.com/", + "Donate, https://palletsprojects.com/donate", + "Source, https://github.com/pallets/jinja/" + ], + "provides_extra": [ + "i18n" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", + "archive_info": { + "hashes": { + "sha256": "457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97" + }, + "hash": "sha256=457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "MarkupSafe", + "version": "3.0.3", + "dynamic": [ + "license-file" + ], + "summary": "Safely add untrusted strings to HTML/XML markup.", + "description": "
\"\"
\n\n# MarkupSafe\n\nMarkupSafe implements a text object that escapes characters so it is\nsafe to use in HTML and XML. Characters that have special meanings are\nreplaced so that they display as the actual characters. This mitigates\ninjection attacks, meaning untrusted user input can safely be displayed\non a page.\n\n\n## Examples\n\n```pycon\n>>> from markupsafe import Markup, escape\n\n>>> # escape replaces special characters and wraps in Markup\n>>> escape(\"\")\nMarkup('<script>alert(document.cookie);</script>')\n\n>>> # wrap in Markup to mark text \"safe\" and prevent escaping\n>>> Markup(\"Hello\")\nMarkup('hello')\n\n>>> escape(Markup(\"Hello\"))\nMarkup('hello')\n\n>>> # Markup is a str subclass\n>>> # methods and operators escape their arguments\n>>> template = Markup(\"Hello {name}\")\n>>> template.format(name='\"World\"')\nMarkup('Hello "World"')\n```\n\n## Donate\n\nThe Pallets organization develops and supports MarkupSafe and other\npopular packages. In order to grow the community of contributors and\nusers, and allow the maintainers to devote more time to the projects,\n[please donate today][].\n\n[please donate today]: https://palletsprojects.com/donate\n\n## Contributing\n\nSee our [detailed contributing documentation][contrib] for many ways to\ncontribute, including reporting issues, requesting features, asking or answering\nquestions, and making PRs.\n\n[contrib]: https://palletsprojects.com/contributing/\n", + "description_content_type": "text/markdown", + "maintainer_email": "Pallets ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.txt" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Environment :: Web Environment", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Topic :: Internet :: WWW/HTTP :: Dynamic Content", + "Topic :: Text Processing :: Markup :: HTML", + "Typing :: Typed" + ], + "requires_python": ">=3.9", + "project_url": [ + "Donate, https://palletsprojects.com/donate", + "Documentation, https://markupsafe.palletsprojects.com/", + "Changes, https://markupsafe.palletsprojects.com/page/changes/", + "Source, https://github.com/pallets/markupsafe/", + "Chat, https://discord.gg/pallets" + ] + } + } + ], + "environment": { + "implementation_name": "cpython", + "implementation_version": "3.14.7", + "os_name": "posix", + "platform_machine": "x86_64", + "platform_release": "7.0.0-31-generic", + "platform_system": "Linux", + "platform_version": "#31~24.04.1-Ubuntu SMP PREEMPT_DYNAMIC Mon Aug 10 09:38:02 UTC 2", + "python_full_version": "3.14.7", + "platform_python_implementation": "CPython", + "python_version": "3.14", + "sys_platform": "linux" + } +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-acceptance/probe-results.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-acceptance/probe-results.json new file mode 100644 index 000000000..ec1bfc6d0 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-acceptance/probe-results.json @@ -0,0 +1,304 @@ +{ + "recorded_at": "2026-09-25T21:29:33.590478+00:00", + "status": "passed", + "core_status": "passed", + "adapter_status": "not selected", + "environment": { + "release": "2.14.0", + "torch": "2.14.0+cpu", + "build": "cpu", + "adapter": "none", + "python": "3.14", + "interpreter": "/tmp/pumas-torch-native-cpu-9u4lwjfg/launcher-data/managed-python/python/0800c1ab76812b8a0a424e27c9a0c6ff818175e26b32d40b165081b5e041a8c5/cpython-3.14.7-linux-x86_64-gnu/bin/python3.14", + "implementation": "cpython", + "platform": "Linux-7.0.0-31-generic-x86_64-with-glibc2.39", + "machine": "x86_64", + "artifacts": [ + { + "name": "torch", + "version": "2.14.0+cpu", + "url": "https://download-r2.pytorch.org/whl/cpu/torch-2.14.0%2Bcpu-cp314-cp314-manylinux_2_28_x86_64.whl", + "sha256": "f152f41dc5dc462afe0de780e451ebb47ea8b4451f8f919f9537aa8e2cbe1d7e" + }, + { + "name": "fastapi", + "version": "0.141.1", + "url": "https://files.pythonhosted.org/packages/cb/03/10388a42375ee7e4ac9b94eb2c5c569c8b5795e377e701c9ac3ad63de890/fastapi-0.141.1-py3-none-any.whl", + "sha256": "bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3" + }, + { + "name": "uvicorn", + "version": "0.54.0", + "url": "https://files.pythonhosted.org/packages/38/0c/b54a4fdd7f90a3af8b02ebc9ce6712c2c208b7926a2f7bad95c33ebbe943/uvicorn-0.54.0-py3-none-any.whl", + "sha256": "505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf" + }, + { + "name": "psutil", + "version": "7.2.2", + "url": "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", + "sha256": "076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9" + }, + { + "name": "pillow", + "version": "12.3.0", + "url": "https://files.pythonhosted.org/packages/5c/44/c85361f65dbe00eea8576ee467c768d25129989efb76e94f205e9ca9bb46/pillow-12.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", + "sha256": "251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b" + }, + { + "name": "safetensors", + "version": "0.8.0", + "url": "https://files.pythonhosted.org/packages/28/50/f203ff3a3ddfe19308efc83c5a3a29ed02bf786732ec35e68bf9162f3365/safetensors-0.8.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "sha256": "fd6f3f93c9a0a7cc2788ee63fb763353d4bd2e89b0751bc78fcf7dda00bea774" + }, + { + "name": "annotated-doc", + "version": "0.0.5", + "url": "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", + "sha256": "117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101" + }, + { + "name": "click", + "version": "8.5.0", + "url": "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", + "sha256": "255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360" + }, + { + "name": "fsspec", + "version": "2026.9.0", + "url": "https://files.pythonhosted.org/packages/6c/c0/a98505f18594f1bce828bb159cec0fcf9860562f1a2c85913409fc8f3d9e/fsspec-2026.9.0-py3-none-any.whl", + "sha256": "8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f" + }, + { + "name": "h11", + "version": "0.16.0", + "url": "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", + "sha256": "63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86" + }, + { + "name": "networkx", + "version": "3.7", + "url": "https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl", + "sha256": "e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0" + }, + { + "name": "pydantic", + "version": "2.13.5", + "url": "https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl", + "sha256": "346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73" + }, + { + "name": "pydantic-core", + "version": "2.46.5", + "url": "https://files.pythonhosted.org/packages/2c/9b/59634b7ac631c63b2a37760eb6943af3e29573d6b59a4abc5e7f019d4cee/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "sha256": "54d510bac3ee52247af28ed4bb18a1e799f040ac60fd2bf5ccd4c92f1fbe786f" + }, + { + "name": "annotated-types", + "version": "0.8.0", + "url": "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", + "sha256": "f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0" + }, + { + "name": "setuptools", + "version": "84.0.0", + "url": "https://files.pythonhosted.org/packages/95/9c/c510029fc6ef33a6275cd2c5d3cecd6613dfd6aa401d57c54f1c18852ccf/setuptools-84.0.0-py3-none-any.whl", + "sha256": "51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670" + }, + { + "name": "starlette", + "version": "1.7.0", + "url": "https://files.pythonhosted.org/packages/4e/d6/1ec1b290f9e0fb067899b61e1d37a30c923068bad260b216dbe37a7d2967/starlette-1.7.0-py3-none-any.whl", + "sha256": "67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e" + }, + { + "name": "anyio", + "version": "4.15.1", + "url": "https://files.pythonhosted.org/packages/12/b8/4bd346e22b28902df4d651910f5242c28d84e4a5c2435ca5c3f797ed7e2e/anyio-4.15.1-py3-none-any.whl", + "sha256": "6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101" + }, + { + "name": "idna", + "version": "3.20", + "url": "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl", + "sha256": "ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c" + }, + { + "name": "sympy", + "version": "1.14.0", + "url": "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", + "sha256": "e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5" + }, + { + "name": "mpmath", + "version": "1.3.0", + "url": "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", + "sha256": "a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c" + }, + { + "name": "typing-extensions", + "version": "4.16.0", + "url": "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", + "sha256": "481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8" + }, + { + "name": "typing-inspection", + "version": "0.4.4", + "url": "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", + "sha256": "65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147" + }, + { + "name": "filelock", + "version": "4.0.3", + "url": "https://files.pythonhosted.org/packages/7a/6d/db8b86e168fef0cf904737e275bccb683558088ef971e92d3b41ce980699/filelock-4.0.3-py3-none-any.whl", + "sha256": "30cd166e2aee2c7534ce2c33c6367c4cd051b8368e20e2c4eb0c34f699bacfab" + }, + { + "name": "jinja2", + "version": "3.1.6", + "url": "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", + "sha256": "85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67" + }, + { + "name": "markupsafe", + "version": "3.0.3", + "url": "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", + "sha256": "457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97" + } + ] + }, + "context": { + "python": "3.14.7 (main, Sep 1 2026, 14:18:09) [Clang 22.1.3 ]", + "executable": "/tmp/pumas-torch-native-cpu-9u4lwjfg/torch-versions/.torch-install-LJa7YI/runtime/venv/bin/python", + "platform": "Linux-7.0.0-31-generic-x86_64-with-glibc2.39", + "hardware": { + "cuda": null, + "hip": null, + "devices": [] + }, + "hardware_fingerprint": "494fb1d79639aecf4bb2b6043473616914037c874c14d9805f8e3f9d38b2c602", + "driver_version": null, + "runtime_files_sha256": { + "control_api.py": "ee5160f121a749d8d11cd929abfb9d98a1a109235dac3690c9e2118f9cca54d0", + "device_manager.py": "9ab6d63eb943989bc19f1fed89098aca27b168536fa2529734d1ee4f37585379", + "diffusion.py": "c4dadfc949c17a460f8fc8a446b03139da0c574b45b3f561403fdf83e495b6d3", + "flux2.py": "39f864e1e15ffb2b697bb95418d474cb98a760feca9acd48a74b5cf05642fea2", + "image_api.py": "bb39ac05aee7ea4d4357360accfa27ee261f58d1cd9cc35af28470012673a7ec", + "loaders/__init__.py": "80cec9242f95b73881b038b890a5d9465a14be86a631b2a0e1bf9efacac543fe", + "loaders/dllm_loader.py": "2c5656bce01a6d133925d02ca72606f8ae951d66186ac07d3fcb7fd5580b1a13", + "loaders/safetensors_loader.py": "661a000b791396067d253a27a26cb5905ae40ce8d50817ba54bc1afce803396f", + "loaders/sherry_loader.py": "360ac3f66c4438e3ffe3d9dc99ef2a27ae69efdd26f8d3564f638ae7802e5b3f", + "model_manager.py": "cfc049050f9003f87d622fe57da5c4ab4efb5105523fcbab926d8770d82be3f8", + "nunchaku_compat.py": "27b42f9cae80e474c0b2162e6bf572f822d525134bf2fc3bddd551c031bb5d70", + "openai_api.py": "a3c712e6307fe3b60d1b7acdcbeb9413b011eb370ad656f862ef9399f3342f8c", + "probe_runtime.py": "9b9e1d81087aefffdb383038724b471daeb0456814e5f2fa17e0b4da46255e25", + "resolve_runtime.py": "5e9b5b351e2a335587ae607f6c6a73de9ab4aed28ecde3b3768c3aee5037148d", + "serve.py": "88bf72ea3eac013dc7678bebe0e3b3053c141e8ec1222a210bd18b2a47601af4", + "validation.py": "f53cca26ddbddbc3c924ff07d32aaf9ced6061a7f1628379b4c0db2c9da7feb1" + }, + "interpreter_sha256": "241bf774a81580bb760adf960b48df7e6b23b1de026c9c912d4ca6be1a08241e", + "installed_distributions": { + "torch": "2.14.0+cpu", + "fastapi": "0.141.1", + "uvicorn": "0.54.0", + "psutil": "7.2.2", + "pillow": "12.3.0", + "safetensors": "0.8.0", + "annotated-doc": "0.0.5", + "click": "8.5.0", + "fsspec": "2026.9.0", + "h11": "0.16.0", + "networkx": "3.7", + "pydantic": "2.13.5", + "pydantic-core": "2.46.5", + "annotated-types": "0.8.0", + "setuptools": "84.0.0", + "starlette": "1.7.0", + "anyio": "4.15.1", + "idna": "3.20", + "sympy": "1.14.0", + "mpmath": "1.3.0", + "typing-extensions": "4.16.0", + "typing-inspection": "0.4.4", + "filelock": "4.0.3", + "jinja2": "3.1.6", + "markupsafe": "3.0.3" + }, + "all_installed_distributions": { + "annotated-doc": "0.0.5", + "annotated-types": "0.8.0", + "anyio": "4.15.1", + "click": "8.5.0", + "fastapi": "0.141.1", + "filelock": "4.0.3", + "fsspec": "2026.9.0", + "h11": "0.16.0", + "idna": "3.20", + "jinja2": "3.1.6", + "markupsafe": "3.0.3", + "mpmath": "1.3.0", + "networkx": "3.7", + "pillow": "12.3.0", + "pip": "26.2.1", + "psutil": "7.2.2", + "pydantic": "2.13.5", + "pydantic-core": "2.46.5", + "safetensors": "0.8.0", + "setuptools": "84.0.0", + "starlette": "1.7.0", + "sympy": "1.14.0", + "torch": "2.14.0+cpu", + "typing-extensions": "4.16.0", + "typing-inspection": "0.4.4", + "uvicorn": "0.54.0" + }, + "distributions_sha256": "fb628c6fb5305166cad9332e5cf97765df173d14d44b7a0296950ad749e0254e", + "resolution_sha256": "d02c2be2fea242cbabd9dc5d0408772167f847231fb3fb378046c44e5279d0b4", + "sidecar_sha256": "88bf72ea3eac013dc7678bebe0e3b3053c141e8ec1222a210bd18b2a47601af4" + }, + "capabilities": { + "torch_import": { + "status": "passed", + "version": "2.14.0+cpu" + }, + "cpu_tensor": { + "status": "passed" + }, + "cuda_tensor": { + "status": "unavailable", + "scope": "CUDA tensor operation", + "reason": "CUDA is not available" + }, + "sidecar_app": { + "status": "passed", + "health": { + "status": "ok", + "protocol": 3, + "capabilities": [ + "image_generation" + ] + }, + "scope": "in-process app construction and health endpoint" + }, + "flux2_klein": { + "status": "not selected", + "scope": "optional adapter" + }, + "nunchaku_z_image": { + "status": "not selected", + "scope": "optional adapter" + }, + "image_device": { + "status": "unavailable", + "scope": "adapter device requirement", + "reason": "No NVIDIA sm_120 CUDA device detected" + }, + "sidecar_startup": { + "status": "not tested", + "scope": "socket startup requires an explicit trial" + }, + "image_generation": { + "status": "not tested", + "scope": "no model loaded or inference performed" + } + } +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-acceptance/resolution.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-acceptance/resolution.json new file mode 100644 index 000000000..a34b68985 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-acceptance/resolution.json @@ -0,0 +1,163 @@ +{ + "release": "2.14.0", + "torch": "2.14.0+cpu", + "build": "cpu", + "adapter": "none", + "python": "3.14", + "interpreter": "/tmp/pumas-torch-native-cpu-9u4lwjfg/launcher-data/managed-python/python/0800c1ab76812b8a0a424e27c9a0c6ff818175e26b32d40b165081b5e041a8c5/cpython-3.14.7-linux-x86_64-gnu/bin/python3.14", + "implementation": "cpython", + "platform": "Linux-7.0.0-31-generic-x86_64-with-glibc2.39", + "machine": "x86_64", + "artifacts": [ + { + "name": "torch", + "version": "2.14.0+cpu", + "url": "https://download-r2.pytorch.org/whl/cpu/torch-2.14.0%2Bcpu-cp314-cp314-manylinux_2_28_x86_64.whl", + "sha256": "f152f41dc5dc462afe0de780e451ebb47ea8b4451f8f919f9537aa8e2cbe1d7e" + }, + { + "name": "fastapi", + "version": "0.141.1", + "url": "https://files.pythonhosted.org/packages/cb/03/10388a42375ee7e4ac9b94eb2c5c569c8b5795e377e701c9ac3ad63de890/fastapi-0.141.1-py3-none-any.whl", + "sha256": "bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3" + }, + { + "name": "uvicorn", + "version": "0.54.0", + "url": "https://files.pythonhosted.org/packages/38/0c/b54a4fdd7f90a3af8b02ebc9ce6712c2c208b7926a2f7bad95c33ebbe943/uvicorn-0.54.0-py3-none-any.whl", + "sha256": "505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf" + }, + { + "name": "psutil", + "version": "7.2.2", + "url": "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", + "sha256": "076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9" + }, + { + "name": "pillow", + "version": "12.3.0", + "url": "https://files.pythonhosted.org/packages/5c/44/c85361f65dbe00eea8576ee467c768d25129989efb76e94f205e9ca9bb46/pillow-12.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", + "sha256": "251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b" + }, + { + "name": "safetensors", + "version": "0.8.0", + "url": "https://files.pythonhosted.org/packages/28/50/f203ff3a3ddfe19308efc83c5a3a29ed02bf786732ec35e68bf9162f3365/safetensors-0.8.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "sha256": "fd6f3f93c9a0a7cc2788ee63fb763353d4bd2e89b0751bc78fcf7dda00bea774" + }, + { + "name": "annotated-doc", + "version": "0.0.5", + "url": "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", + "sha256": "117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101" + }, + { + "name": "click", + "version": "8.5.0", + "url": "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", + "sha256": "255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360" + }, + { + "name": "fsspec", + "version": "2026.9.0", + "url": "https://files.pythonhosted.org/packages/6c/c0/a98505f18594f1bce828bb159cec0fcf9860562f1a2c85913409fc8f3d9e/fsspec-2026.9.0-py3-none-any.whl", + "sha256": "8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f" + }, + { + "name": "h11", + "version": "0.16.0", + "url": "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", + "sha256": "63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86" + }, + { + "name": "networkx", + "version": "3.7", + "url": "https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl", + "sha256": "e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0" + }, + { + "name": "pydantic", + "version": "2.13.5", + "url": "https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl", + "sha256": "346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73" + }, + { + "name": "pydantic-core", + "version": "2.46.5", + "url": "https://files.pythonhosted.org/packages/2c/9b/59634b7ac631c63b2a37760eb6943af3e29573d6b59a4abc5e7f019d4cee/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "sha256": "54d510bac3ee52247af28ed4bb18a1e799f040ac60fd2bf5ccd4c92f1fbe786f" + }, + { + "name": "annotated-types", + "version": "0.8.0", + "url": "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", + "sha256": "f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0" + }, + { + "name": "setuptools", + "version": "84.0.0", + "url": "https://files.pythonhosted.org/packages/95/9c/c510029fc6ef33a6275cd2c5d3cecd6613dfd6aa401d57c54f1c18852ccf/setuptools-84.0.0-py3-none-any.whl", + "sha256": "51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670" + }, + { + "name": "starlette", + "version": "1.7.0", + "url": "https://files.pythonhosted.org/packages/4e/d6/1ec1b290f9e0fb067899b61e1d37a30c923068bad260b216dbe37a7d2967/starlette-1.7.0-py3-none-any.whl", + "sha256": "67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e" + }, + { + "name": "anyio", + "version": "4.15.1", + "url": "https://files.pythonhosted.org/packages/12/b8/4bd346e22b28902df4d651910f5242c28d84e4a5c2435ca5c3f797ed7e2e/anyio-4.15.1-py3-none-any.whl", + "sha256": "6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101" + }, + { + "name": "idna", + "version": "3.20", + "url": "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl", + "sha256": "ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c" + }, + { + "name": "sympy", + "version": "1.14.0", + "url": "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", + "sha256": "e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5" + }, + { + "name": "mpmath", + "version": "1.3.0", + "url": "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", + "sha256": "a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c" + }, + { + "name": "typing-extensions", + "version": "4.16.0", + "url": "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", + "sha256": "481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8" + }, + { + "name": "typing-inspection", + "version": "0.4.4", + "url": "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", + "sha256": "65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147" + }, + { + "name": "filelock", + "version": "4.0.3", + "url": "https://files.pythonhosted.org/packages/7a/6d/db8b86e168fef0cf904737e275bccb683558088ef971e92d3b41ce980699/filelock-4.0.3-py3-none-any.whl", + "sha256": "30cd166e2aee2c7534ce2c33c6367c4cd051b8368e20e2c4eb0c34f699bacfab" + }, + { + "name": "jinja2", + "version": "3.1.6", + "url": "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", + "sha256": "85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67" + }, + { + "name": "markupsafe", + "version": "3.0.3", + "url": "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", + "sha256": "457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97" + } + ] +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-acceptance/rpc.log b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-acceptance/rpc.log new file mode 100644 index 000000000..c2251a9fe --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-acceptance/rpc.log @@ -0,0 +1,27 @@ +2026-09-25T21:26:10.038820Z INFO Starting Pumas RPC Server +2026-09-25T21:26:10.038857Z INFO Launcher root configured +2026-09-25T21:26:10.313694Z INFO Created FTS5 table: model_search +2026-09-25T21:26:10.330817Z INFO Populated FTS5 table from models +2026-09-25T21:26:10.330950Z INFO Rebuilding model index +2026-09-25T21:26:10.331005Z INFO Rebuilt index with 0 models +2026-09-25T21:26:10.625388Z INFO IPC server listening on 127.0.0.1:45189 +2026-09-25T21:26:10.625521Z INFO IPC server started on port 45189 +2026-09-25T21:26:10.625675Z INFO Started watching model library at "/tmp/pumas-torch-native-cpu-9u4lwjfg/shared-resources/models" +2026-09-25T21:26:10.650125Z INFO Validation complete: 0 valid, 0 removed, 0 orphaned +2026-09-25T21:26:10.650140Z INFO ollama version manager initialized successfully +2026-09-25T21:26:10.673764Z INFO Validation complete: 0 valid, 0 removed, 0 orphaned +2026-09-25T21:26:10.673779Z INFO torch version manager initialized successfully +2026-09-25T21:26:10.697030Z INFO Validation complete: 0 valid, 0 removed, 0 orphaned +2026-09-25T21:26:10.697048Z INFO llama-cpp version manager initialized successfully +2026-09-25T21:26:10.697050Z INFO Initialized 3 version manager(s) +2026-09-25T21:26:10.697241Z INFO Size calculator initialized +2026-09-25T21:26:10.697321Z INFO Plugin loader initialized (0 plugins) +2026-09-25T21:26:10.794772Z INFO Server listening on 127.0.0.1:39815 with max 64 in-flight requests and 33554432 byte request bodies +RPC_PORT=39815 +2026-09-25T21:26:10.794804Z INFO RPC server running on 127.0.0.1:39815 +2026-09-25T21:26:16.164941Z INFO Fetched 69 releases from GitHub for pytorch/pytorch +2026-09-25T21:29:33.882873Z INFO Finalizing installation for v2.14.0 +2026-09-25T21:29:33.890173Z INFO Installation of v2.14.0 finalized +2026-09-25T21:29:36.683512Z INFO Set active version: v2.14.0 +2026-09-25T21:29:38.081229Z INFO Shutdown signal received, exiting +2026-09-25T21:29:38.082502Z WARN File watcher channel disconnected diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-acceptance/runtime.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-acceptance/runtime.json new file mode 100644 index 000000000..32177cfe7 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-acceptance/runtime.json @@ -0,0 +1,181 @@ +{ + "adapter": "none", + "artifacts": [ + { + "name": "torch", + "sha256": "f152f41dc5dc462afe0de780e451ebb47ea8b4451f8f919f9537aa8e2cbe1d7e", + "url": "https://download-r2.pytorch.org/whl/cpu/torch-2.14.0%2Bcpu-cp314-cp314-manylinux_2_28_x86_64.whl", + "version": "2.14.0+cpu" + }, + { + "name": "fastapi", + "sha256": "bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3", + "url": "https://files.pythonhosted.org/packages/cb/03/10388a42375ee7e4ac9b94eb2c5c569c8b5795e377e701c9ac3ad63de890/fastapi-0.141.1-py3-none-any.whl", + "version": "0.141.1" + }, + { + "name": "uvicorn", + "sha256": "505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf", + "url": "https://files.pythonhosted.org/packages/38/0c/b54a4fdd7f90a3af8b02ebc9ce6712c2c208b7926a2f7bad95c33ebbe943/uvicorn-0.54.0-py3-none-any.whl", + "version": "0.54.0" + }, + { + "name": "psutil", + "sha256": "076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9", + "url": "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", + "version": "7.2.2" + }, + { + "name": "pillow", + "sha256": "251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b", + "url": "https://files.pythonhosted.org/packages/5c/44/c85361f65dbe00eea8576ee467c768d25129989efb76e94f205e9ca9bb46/pillow-12.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", + "version": "12.3.0" + }, + { + "name": "safetensors", + "sha256": "fd6f3f93c9a0a7cc2788ee63fb763353d4bd2e89b0751bc78fcf7dda00bea774", + "url": "https://files.pythonhosted.org/packages/28/50/f203ff3a3ddfe19308efc83c5a3a29ed02bf786732ec35e68bf9162f3365/safetensors-0.8.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "version": "0.8.0" + }, + { + "name": "annotated-doc", + "sha256": "117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101", + "url": "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", + "version": "0.0.5" + }, + { + "name": "click", + "sha256": "255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360", + "url": "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", + "version": "8.5.0" + }, + { + "name": "fsspec", + "sha256": "8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f", + "url": "https://files.pythonhosted.org/packages/6c/c0/a98505f18594f1bce828bb159cec0fcf9860562f1a2c85913409fc8f3d9e/fsspec-2026.9.0-py3-none-any.whl", + "version": "2026.9.0" + }, + { + "name": "h11", + "sha256": "63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", + "url": "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", + "version": "0.16.0" + }, + { + "name": "networkx", + "sha256": "e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0", + "url": "https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl", + "version": "3.7" + }, + { + "name": "pydantic", + "sha256": "346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73", + "url": "https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl", + "version": "2.13.5" + }, + { + "name": "pydantic-core", + "sha256": "54d510bac3ee52247af28ed4bb18a1e799f040ac60fd2bf5ccd4c92f1fbe786f", + "url": "https://files.pythonhosted.org/packages/2c/9b/59634b7ac631c63b2a37760eb6943af3e29573d6b59a4abc5e7f019d4cee/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "version": "2.46.5" + }, + { + "name": "annotated-types", + "sha256": "f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0", + "url": "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", + "version": "0.8.0" + }, + { + "name": "setuptools", + "sha256": "51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670", + "url": "https://files.pythonhosted.org/packages/95/9c/c510029fc6ef33a6275cd2c5d3cecd6613dfd6aa401d57c54f1c18852ccf/setuptools-84.0.0-py3-none-any.whl", + "version": "84.0.0" + }, + { + "name": "starlette", + "sha256": "67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e", + "url": "https://files.pythonhosted.org/packages/4e/d6/1ec1b290f9e0fb067899b61e1d37a30c923068bad260b216dbe37a7d2967/starlette-1.7.0-py3-none-any.whl", + "version": "1.7.0" + }, + { + "name": "anyio", + "sha256": "6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101", + "url": "https://files.pythonhosted.org/packages/12/b8/4bd346e22b28902df4d651910f5242c28d84e4a5c2435ca5c3f797ed7e2e/anyio-4.15.1-py3-none-any.whl", + "version": "4.15.1" + }, + { + "name": "idna", + "sha256": "ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c", + "url": "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl", + "version": "3.20" + }, + { + "name": "sympy", + "sha256": "e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", + "url": "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", + "version": "1.14.0" + }, + { + "name": "mpmath", + "sha256": "a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", + "url": "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", + "version": "1.3.0" + }, + { + "name": "typing-extensions", + "sha256": "481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", + "url": "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", + "version": "4.16.0" + }, + { + "name": "typing-inspection", + "sha256": "65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147", + "url": "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", + "version": "0.4.4" + }, + { + "name": "filelock", + "sha256": "30cd166e2aee2c7534ce2c33c6367c4cd051b8368e20e2c4eb0c34f699bacfab", + "url": "https://files.pythonhosted.org/packages/7a/6d/db8b86e168fef0cf904737e275bccb683558088ef971e92d3b41ce980699/filelock-4.0.3-py3-none-any.whl", + "version": "4.0.3" + }, + { + "name": "jinja2", + "sha256": "85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", + "url": "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", + "version": "3.1.6" + }, + { + "name": "markupsafe", + "sha256": "457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", + "url": "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", + "version": "3.0.3" + } + ], + "build": "cpu", + "capabilities": [ + "image_generation" + ], + "managed_python": { + "distribution": { + "catalogKey": "cpython-3.14.7-linux-x86_64-gnu", + "implementation": "CPython", + "sourceUrl": "https://releases.astral.sh/github/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz", + "targetTriple": "x86_64-unknown-linux-gnu", + "version": "3.14.7" + }, + "executable": { + "path": "/tmp/pumas-torch-native-cpu-9u4lwjfg/launcher-data/managed-python/python/0800c1ab76812b8a0a424e27c9a0c6ff818175e26b32d40b165081b5e041a8c5/cpython-3.14.7-linux-x86_64-gnu/bin/python3.14", + "sha256": "241bf774a81580bb760adf960b48df7e6b23b1de026c9c912d4ca6be1a08241e" + }, + "provider": { + "archiveSha256": "89eadd7c76fc063887959510d5ba0ab1264dfd5f1143b925ddb73021a40acf16", + "name": "uv", + "version": "0.12.18" + } + }, + "protocol": 3, + "python": "python3.14", + "qualification": "not verified by Pumas", + "recipe_id": "upstream-preview-v2.14.0-cpu-python3.14-none" +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-restart-acceptance/README.md b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-restart-acceptance/README.md new file mode 100644 index 000000000..d8fe30ec6 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-restart-acceptance/README.md @@ -0,0 +1,35 @@ +# Linux Torch managed-runtime restart acceptance + +Manual native RPC run +[36223106097](https://github.com/MrScripty/Pumas-Library/actions/runs/36223106097) +on commit `07f7e9f6` passed v2.14.0 CPU/Core installation and restart on +Ubuntu 24.04 x86_64. The run discovered the requested release, resolved and +installed the exact official `torch-2.14.0+cpu` CPython 3.14 Linux wheel, and +retained 25 hashed artifacts for the core profile. A second backend reopened +the same launcher root, confirmed the persisted version and managed interpreter, +and ran a fresh CPU tensor operation (`sum([1, 4, 9]) == 14`, Torch +`2.14.0+cpu`, device `cpu`). The RPC probe passed, the protocol 3 sidecar trial +and generation-owned stop passed, and shutdown was graceful. + +The managed runtime used Pumas-provisioned CPython 3.14.7 from uv 0.12.18 with +host Python, pip, PyPy, and uv absent from the backend `PATH`. The +[acceptance result](acceptance.json) records both sessions and the compared +source, catalog, provider, executable path, and executable hash. The release-list +preflight found `v2.14.0` on its first attempt. The selected CPython archive and +license evidence are linked in the [Linux CPython license +report](../managed-python-license-collection/linux-x86_64-cpython-3.14.7/README.md). + +## Retained evidence + +- [Initial backend log](initial-backend-session.txt) and [restart backend log](restart-backend-session.txt) + record both process lifecycles. +- [Installed runtime](runtime.json), [resolution](resolution.json), + [pip resolution](pip-resolution.json), and [runtime probes](probe-results.json) + retain the exact official Torch wheel URL and SHA-256, all resolved dependency + artifacts, installed profile, and probes. +- The [full-archive manifest and raw CPython license files](../managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/) + record the license texts and hashes for this target. The selected install-only + archive identity remains in `runtime.json` and `acceptance.json`. + +This is CPU/Core RPC acceptance. It does not establish CUDA execution, +packaged desktop installation, or Tuldok image generation. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-restart-acceptance/acceptance.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-restart-acceptance/acceptance.json new file mode 100644 index 000000000..9e6051f86 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-restart-acceptance/acceptance.json @@ -0,0 +1,65 @@ +{ + "architecture": "x86_64", + "artifact_count": 25, + "build": "cpu", + "cleanup_safe": true, + "cpython_version": "3.14.7", + "distribution_catalog_key": "cpython-3.14.7-linux-x86_64-gnu", + "distribution_implementation": "CPython", + "distribution_source_url": "https://releases.astral.sh/github/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz", + "executable_path": "/tmp/pumas-torch-native-cpu-kkrybqey/launcher-data/managed-python/python/0800c1ab76812b8a0a424e27c9a0c6ff818175e26b32d40b165081b5e041a8c5/cpython-3.14.7-linux-x86_64-gnu/bin/python3.14", + "executable_sha256": "241bf774a81580bb760adf960b48df7e6b23b1de026c9c912d4ca6be1a08241e", + "platform": "linux", + "probe": "passed", + "provider": "uv", + "provider_archive_sha256": "89eadd7c76fc063887959510d5ba0ab1264dfd5f1143b925ddb73021a40acf16", + "provider_version": "0.12.18", + "python": "python3.14", + "release": "v2.14.0", + "restart": { + "active_version": "v2.14.0", + "cpu_operation": { + "device": "cpu", + "result": 14, + "version": "2.14.0+cpu" + }, + "interpreter": "persisted", + "managed_python": { + "cpython_version": "3.14.7", + "distribution_catalog_key": "cpython-3.14.7-linux-x86_64-gnu", + "distribution_implementation": "CPython", + "distribution_source_url": "https://releases.astral.sh/github/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz", + "executable_path": "/tmp/pumas-torch-native-cpu-kkrybqey/launcher-data/managed-python/python/0800c1ab76812b8a0a424e27c9a0c6ff818175e26b32d40b165081b5e041a8c5/cpython-3.14.7-linux-x86_64-gnu/bin/python3.14", + "executable_sha256": "241bf774a81580bb760adf960b48df7e6b23b1de026c9c912d4ca6be1a08241e", + "provider": "uv", + "provider_archive_sha256": "89eadd7c76fc063887959510d5ba0ab1264dfd5f1143b925ddb73021a40acf16", + "provider_version": "0.12.18", + "target": "x86_64-unknown-linux-gnu" + }, + "probe": "passed", + "profile_id": "torch-managed-python-acceptance", + "same_launcher_root": true, + "shutdown": "graceful", + "sidecar_generation": "1", + "sidecar_protocol": 3, + "stop_result": true, + "trial": "passed" + }, + "sidecar_generation": "1", + "sidecar_protocol": 3, + "stop_result": true, + "stopped": true, + "success": true, + "target": "x86_64-unknown-linux-gnu", + "trial": "passed", + "version_preflight": { + "attempts": [ + { + "number": 1, + "status": "requested_tag_found" + } + ], + "elapsed_seconds": 1.555, + "status": "passed" + } +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-restart-acceptance/initial-backend-session.txt b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-restart-acceptance/initial-backend-session.txt new file mode 100644 index 000000000..c39da829d --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-restart-acceptance/initial-backend-session.txt @@ -0,0 +1,27 @@ +2026-09-26T06:15:25.280888Z  INFO Starting Pumas RPC Server +2026-09-26T06:15:25.280959Z  INFO Launcher root configured +2026-09-26T06:15:25.335752Z  INFO Created FTS5 table: model_search +2026-09-26T06:15:25.337110Z  INFO Populated FTS5 table from models +2026-09-26T06:15:25.337408Z  INFO Rebuilding model index +2026-09-26T06:15:25.337527Z  INFO Rebuilt index with 0 models +2026-09-26T06:15:25.402276Z  INFO IPC server listening on 127.0.0.1:39165 +2026-09-26T06:15:25.402644Z  INFO IPC server started on port 39165 +2026-09-26T06:15:25.402980Z  INFO Started watching model library at "/tmp/pumas-torch-native-cpu-kkrybqey/shared-resources/models" +2026-09-26T06:15:25.427401Z  INFO Validation complete: 0 valid, 0 removed, 0 orphaned +2026-09-26T06:15:25.427474Z  INFO ollama version manager initialized successfully +2026-09-26T06:15:25.451565Z  INFO Validation complete: 0 valid, 0 removed, 0 orphaned +2026-09-26T06:15:25.451684Z  INFO torch version manager initialized successfully +2026-09-26T06:15:25.476992Z  INFO Validation complete: 0 valid, 0 removed, 0 orphaned +2026-09-26T06:15:25.477046Z  INFO llama-cpp version manager initialized successfully +2026-09-26T06:15:25.477065Z  INFO Initialized 3 version manager(s) +2026-09-26T06:15:25.477165Z  INFO Size calculator initialized +2026-09-26T06:15:25.477317Z  INFO Plugin loader initialized (0 plugins) +2026-09-26T06:15:25.592337Z  INFO Server listening on 127.0.0.1:37325 with max 64 in-flight requests and 33554432 byte request bodies +RPC_PORT=37325 +2026-09-26T06:15:25.592435Z  INFO RPC server running on 127.0.0.1:37325 +2026-09-26T06:15:27.116507Z  INFO Fetched 69 releases from GitHub for pytorch/pytorch +2026-09-26T06:16:25.578665Z  INFO Finalizing installation for v2.14.0 +2026-09-26T06:16:25.582323Z  INFO Installation of v2.14.0 finalized +2026-09-26T06:16:28.677401Z  INFO Set active version: v2.14.0 +2026-09-26T06:16:30.648528Z  INFO Shutdown signal received, exiting +2026-09-26T06:16:30.649156Z  WARN File watcher channel disconnected diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-restart-acceptance/pip-resolution.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-restart-acceptance/pip-resolution.json new file mode 100644 index 000000000..5205185b3 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-restart-acceptance/pip-resolution.json @@ -0,0 +1,2057 @@ +{ + "version": "1", + "pip_version": "26.2.1", + "install": [ + { + "download_info": { + "url": "https://download-r2.pytorch.org/whl/cpu/torch-2.14.0%2Bcpu-cp314-cp314-manylinux_2_28_x86_64.whl", + "archive_info": { + "hashes": { + "sha256": "f152f41dc5dc462afe0de780e451ebb47ea8b4451f8f919f9537aa8e2cbe1d7e" + }, + "hash": "sha256=f152f41dc5dc462afe0de780e451ebb47ea8b4451f8f919f9537aa8e2cbe1d7e" + } + }, + "is_direct": true, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.4", + "name": "torch", + "version": "2.14.0+cpu", + "summary": "Tensors and Dynamic neural networks in Python with strong GPU acceleration", + "description": "\n \n \n \"PyTorch\n\n\n--------------------------------------------------------------------------------\n\nPyTorch is a Python package that provides two high-level features:\n- Tensor computation (like NumPy) with strong GPU acceleration\n- Deep neural networks built on a tape-based autograd system\n\nYou can reuse your favorite Python packages such as NumPy, SciPy, and Cython to extend PyTorch when needed.\n\nOur trunk health (Continuous Integration signals) can be found at [hud.pytorch.org](https://hud.pytorch.org/ci/pytorch/pytorch/main).\n\n\n\n- [More About PyTorch](#more-about-pytorch)\n - [A GPU-Ready Tensor Library](#a-gpu-ready-tensor-library)\n - [Dynamic Neural Networks: Tape-Based Autograd](#dynamic-neural-networks-tape-based-autograd)\n - [Python First](#python-first)\n - [Imperative Experiences](#imperative-experiences)\n - [Fast and Lean](#fast-and-lean)\n - [Extensions Without Pain](#extensions-without-pain)\n- [Installation](#installation)\n - [Binaries](#binaries)\n - [NVIDIA Jetson Platforms](#nvidia-jetson-platforms)\n - [From Source](#from-source)\n - [Prerequisites](#prerequisites)\n - [NVIDIA CUDA Support](#nvidia-cuda-support)\n - [AMD ROCm Support](#amd-rocm-support)\n - [Intel GPU Support](#intel-gpu-support)\n - [Get the PyTorch Source](#get-the-pytorch-source)\n - [Install Dependencies](#install-dependencies)\n - [Install PyTorch](#install-pytorch)\n - [Adjust Build Options (Optional)](#adjust-build-options-optional)\n - [Docker Image](#docker-image)\n - [Using pre-built images](#using-pre-built-images)\n - [Building the image yourself](#building-the-image-yourself)\n - [Building the Documentation](#building-the-documentation)\n - [Troubleshooting CI Errors](#troubleshooting-ci-errors)\n - [Building a PDF](#building-a-pdf)\n - [Previous Versions](#previous-versions)\n- [Getting Started](#getting-started)\n- [Resources](#resources)\n- [Communication](#communication)\n- [Releases and Contributing](#releases-and-contributing)\n- [The Team](#the-team)\n- [License](#license)\n\n\n\n## More About PyTorch\n\n[Learn the basics of PyTorch](https://pytorch.org/tutorials/beginner/basics/intro.html)\n\nAt a granular level, PyTorch is a library that consists of the following components:\n\n| Component | Description |\n| ---- | --- |\n| [**torch**](https://pytorch.org/docs/stable/torch.html) | A Tensor library like NumPy, with strong GPU support |\n| [**torch.autograd**](https://pytorch.org/docs/stable/autograd.html) | A tape-based automatic differentiation library that supports all differentiable Tensor operations in torch |\n| [**torch.jit**](https://pytorch.org/docs/stable/jit.html) | A compilation stack (TorchScript) to create serializable and optimizable models from PyTorch code |\n| [**torch.nn**](https://pytorch.org/docs/stable/nn.html) | A neural networks library deeply integrated with autograd designed for maximum flexibility |\n| [**torch.multiprocessing**](https://pytorch.org/docs/stable/multiprocessing.html) | Python multiprocessing, but with magical memory sharing of torch Tensors across processes. Useful for data loading and Hogwild training |\n| [**torch.utils**](https://pytorch.org/docs/stable/data.html) | DataLoader and other utility functions for convenience |\n\nUsually, PyTorch is used either as:\n\n- A replacement for NumPy to use the power of GPUs.\n- A deep learning research platform that provides maximum flexibility and speed.\n\nElaborating Further:\n\n### A GPU-Ready Tensor Library\n\nIf you use NumPy, then you have used Tensors (a.k.a. ndarray).\n\n![Tensor illustration](https://github.com/pytorch/pytorch/raw/main/docs/source/_static/img/tensor_illustration.png)\n\nPyTorch provides Tensors that can live either on the CPU or the GPU and accelerates the\ncomputation by a huge amount.\n\nWe provide a wide variety of tensor routines to accelerate and fit your scientific computation needs\nsuch as slicing, indexing, mathematical operations, linear algebra, reductions.\nAnd they are fast!\n\n### Dynamic Neural Networks: Tape-Based Autograd\n\nPyTorch has a unique way of building neural networks: using and replaying a tape recorder.\n\nMost frameworks such as TensorFlow, Theano, Caffe, and CNTK have a static view of the world.\nOne has to build a neural network and reuse the same structure again and again.\nChanging the way the network behaves means that one has to start from scratch.\n\nWith PyTorch, we use a technique called reverse-mode auto-differentiation, which allows you to\nchange the way your network behaves arbitrarily with zero lag or overhead. Our inspiration comes\nfrom several research papers on this topic, as well as current and past work such as\n[torch-autograd](https://github.com/twitter/torch-autograd),\n[autograd](https://github.com/HIPS/autograd),\n[Chainer](https://chainer.org), etc.\n\nWhile this technique is not unique to PyTorch, it's one of the fastest implementations of it to date.\nYou get the best of speed and flexibility for your crazy research.\n\n![Dynamic graph](https://github.com/pytorch/pytorch/raw/main/docs/source/_static/img/dynamic_graph.gif)\n\n### Python First\n\nPyTorch is not a Python binding into a monolithic C++ framework.\nIt is built to be deeply integrated into Python.\nYou can use it naturally like you would use [NumPy](https://www.numpy.org/) / [SciPy](https://www.scipy.org/) / [scikit-learn](https://scikit-learn.org) etc.\nYou can write your new neural network layers in Python itself, using your favorite libraries\nand use packages such as [Cython](https://cython.org/) and [Numba](https://numba.pydata.org/).\nOur goal is to not reinvent the wheel where appropriate.\n\n### Imperative Experiences\n\nPyTorch is designed to be intuitive, linear in thought, and easy to use.\nWhen you execute a line of code, it gets executed. There isn't an asynchronous view of the world.\nWhen you drop into a debugger or receive error messages and stack traces, understanding them is straightforward.\nThe stack trace points to exactly where your code was defined.\nWe hope you never spend hours debugging your code because of bad stack traces or asynchronous and opaque execution engines.\n\n### Fast and Lean\n\nPyTorch has minimal framework overhead. We integrate acceleration libraries\nsuch as [Intel MKL](https://software.intel.com/mkl) and NVIDIA ([cuDNN](https://developer.nvidia.com/cudnn), [NCCL](https://developer.nvidia.com/nccl)) to maximize speed.\nAt the core, its CPU and GPU Tensor and neural network backends\nare mature and have been tested for years.\n\nHence, PyTorch is quite fast — whether you run small or large neural networks.\n\nThe memory usage in PyTorch is extremely efficient compared to Torch or some of the alternatives.\nWe've written custom memory allocators for the GPU to make sure that\nyour deep learning models are maximally memory efficient.\nThis enables you to train bigger deep learning models than before.\n\n### Extensions Without Pain\n\nWriting new neural network modules, or interfacing with PyTorch's Tensor API, was designed to be straightforward\nand with minimal abstractions.\n\nYou can write new neural network layers in Python using the torch API\n[or your favorite NumPy-based libraries such as SciPy](https://pytorch.org/tutorials/advanced/numpy_extensions_tutorial.html).\n\nIf you want to write your layers in C/C++, we provide a convenient extension API that is efficient and with minimal boilerplate.\nNo wrapper code needs to be written. You can see [a tutorial here](https://pytorch.org/tutorials/advanced/cpp_extension.html) and [an example here](https://github.com/pytorch/extension-cpp).\n\n\n## Installation\n\n### Binaries\nCommands to install binaries via Conda or pip wheels are on our website: [https://pytorch.org/get-started/locally/](https://pytorch.org/get-started/locally/)\n\n\n#### NVIDIA Jetson Platforms\n\nPython wheels for NVIDIA's Jetson Nano, Jetson TX1/TX2, Jetson Xavier NX/AGX, and Jetson AGX Orin are provided [here](https://forums.developer.nvidia.com/t/pytorch-for-jetson-version-1-10-now-available/72048) and the L4T container is published [here](https://catalog.ngc.nvidia.com/orgs/nvidia/containers/l4t-pytorch)\n\nThey require JetPack 4.2 and above, and [@dusty-nv](https://github.com/dusty-nv) and [@ptrblck](https://github.com/ptrblck) are maintaining them.\n\n\n### From Source\n\n#### Prerequisites\nIf you are installing from source, you will need:\n- Python 3.10 or later\n- A compiler that fully supports C++20, such as clang or gcc (gcc 11.3.0 or newer is required, on Linux)\n- Visual Studio or Visual Studio Build Tool (Windows only)\n- At least 10 GB of free disk space\n- 30-60 minutes for the initial build (subsequent rebuilds are much faster)\n\n\\* PyTorch CI uses Visual C++ BuildTools, which come with Visual Studio Enterprise,\nProfessional, or Community Editions. You can also install the build tools from\nhttps://visualstudio.microsoft.com/visual-cpp-build-tools/. The build tools *do not*\ncome with Visual Studio Code by default.\n\nAn example of environment setup is shown below:\n\n* Linux:\n\n```bash\n$ source /bin/activate\n$ conda create -y -n \n$ conda activate \n```\n* Windows:\n\n```bash\n$ source \\Scripts\\activate.bat\n$ conda create -y -n \n$ conda activate \n$ call \"C:\\Program Files\\Microsoft Visual Studio\\\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat\" x64\n```\n\nA conda environment is not required. You can also do a PyTorch build in a\nstandard virtual environment, e.g., created with tools like `uv`, provided\nyour system has installed all the necessary dependencies unavailable as pip\npackages (e.g., CUDA, MKL.)\n\n##### NVIDIA CUDA Support\nIf you want to compile with CUDA support, [select a supported version of CUDA from our support matrix](https://pytorch.org/get-started/locally/), then install the following:\n- [NVIDIA CUDA](https://developer.nvidia.com/cuda-downloads)\n- [NVIDIA cuDNN](https://developer.nvidia.com/cudnn) v9.0 or above\n- [Compiler](https://gist.github.com/ax3l/9489132) compatible with CUDA\n\nNote: You could refer to the [cuDNN Support Matrix](https://docs.nvidia.com/deeplearning/cudnn/backend/latest/reference/support-matrix.html) for cuDNN versions with the various supported CUDA, CUDA driver, and NVIDIA hardware.\n\nIf you want to disable CUDA support, export the environment variable `USE_CUDA=0`.\nOther potentially useful environment variables are documented in `cmake/EnvVarForwarding.cmake`. If\nCUDA is installed in a non-standard location, set PATH so that the nvcc you\nwant to use can be found (e.g., `export PATH=/usr/local/cuda-12.8/bin:$PATH`).\n\nIf you are building for NVIDIA's Jetson platforms (Jetson Nano, TX1, TX2, AGX Xavier), Instructions to install PyTorch for Jetson Nano are [available here](https://devtalk.nvidia.com/default/topic/1049071/jetson-nano/pytorch-for-jetson-nano/)\n\n##### AMD ROCm Support\nIf you want to compile with ROCm support, install\n- [AMD ROCm](https://rocm.docs.amd.com/en/latest/deploy/linux/quick_start.html) 4.0 and above installation\n- ROCm is currently supported only for Linux systems.\n\nBy default the build system expects ROCm to be installed in `/opt/rocm`. If ROCm is installed in a different directory, the `ROCM_PATH` environment variable must be set to the ROCm installation directory. The build system automatically detects the AMD GPU architecture. Optionally, the AMD GPU architecture can be explicitly set with the `PYTORCH_ROCM_ARCH` environment variable [AMD GPU architecture](https://rocm.docs.amd.com/projects/install-on-linux/en/latest/reference/system-requirements.html#supported-gpus)\n\nIf you want to disable ROCm support, export the environment variable `USE_ROCM=0`.\nOther potentially useful environment variables are documented in `cmake/EnvVarForwarding.cmake`.\n\n##### Intel GPU Support\nIf you want to compile with Intel GPU support, follow these\n- [PyTorch Prerequisites for Intel GPUs](https://www.intel.com/content/www/us/en/developer/articles/tool/pytorch-prerequisites-for-intel-gpu.html) instructions.\n- Intel GPU is supported for Linux and Windows.\n\nIf you want to disable Intel GPU support, export the environment variable `USE_XPU=0`.\nOther potentially useful environment variables are documented in `cmake/EnvVarForwarding.cmake`.\n\n#### Get the PyTorch Source\n\n```bash\ngit clone https://github.com/pytorch/pytorch\ncd pytorch\n# if you are updating an existing checkout\ngit submodule sync\ngit submodule update --init --recursive\n```\n\n#### Install Dependencies\n\n**Common**\n\n```bash\n# Run this command from the PyTorch directory after cloning the source code using the “Get the PyTorch Source“ section above\npip install --group dev\n```\n\n**On Linux**\n\n```bash\npip install mkl-static mkl-include\n# CUDA only: Add LAPACK support for the GPU if needed\n# magma installation: run with active conda environment. specify CUDA version to install\n.ci/docker/common/install_magma_conda.sh 12.4\n\n# (optional) If using torch.compile with inductor/triton, install the matching version of triton\n# Run from the pytorch directory after cloning\n# For Intel GPU support, please explicitly `export USE_XPU=1` before running command.\nmake triton\n```\n\n**On Windows**\n\n```bash\npip install mkl-static mkl-include\n# Add these packages if torch.distributed is needed.\n# Distributed package support on Windows is a prototype feature and is subject to changes.\nconda install -c conda-forge libuv=1.51\n```\n\n#### Install PyTorch\n\n**On Linux**\n\nIf you're compiling for AMD ROCm then first run this command:\n\n```bash\n# Only run this if you're compiling for ROCm\npython tools/amd_build/build_amd.py\n```\n\nInstall PyTorch\n\n```bash\n# the CMake prefix for conda environment\nexport CMAKE_PREFIX_PATH=\"${CONDA_PREFIX:-'$(dirname $(which conda))/../'}:${CMAKE_PREFIX_PATH}\"\npython -m pip install --no-build-isolation -v -e .\n\n# the CMake prefix for non-conda environment, e.g. Python venv\n# call following after activating the venv\nexport CMAKE_PREFIX_PATH=\"${VIRTUAL_ENV}:${CMAKE_PREFIX_PATH}\"\n```\n\n**On macOS**\n\n```bash\npython -m pip install --no-build-isolation -v -e .\n```\n\n**On Windows**\n\nIf you want to build legacy python code, please refer to [Building on legacy code and CUDA](https://github.com/pytorch/pytorch/blob/main/CONTRIBUTING.md#building-on-legacy-code-and-cuda)\n\n**CPU-only builds**\n\nIn this mode PyTorch computations will run on your CPU, not your GPU.\n\n```cmd\npython -m pip install --no-build-isolation -v -e .\n```\n\nNote on OpenMP: The desired OpenMP implementation is Intel OpenMP (iomp). In order to link against iomp, you'll need to manually download the library and set up the building environment by tweaking `CMAKE_INCLUDE_PATH` and `LIB`. The instruction [here](https://docs.pytorch.org/docs/main/notes/windows.html#building-from-source) is an example for setting up both MKL and Intel OpenMP. Without these configurations for CMake, Microsoft Visual C OpenMP runtime (vcomp) will be used.\n\n**CUDA based build**\n\nIn this mode PyTorch computations will leverage your GPU via CUDA for faster number crunching\n\n[NVTX](https://docs.nvidia.com/gameworks/content/gameworkslibrary/nvtx/nvidia_tools_extension_library_nvtx.htm) is needed to build PyTorch with CUDA.\nNVTX is a part of CUDA distributive, where it is called \"Nsight Compute\". To install it onto an already installed CUDA run CUDA installation once again and check the corresponding checkbox.\nMake sure that CUDA with Nsight Compute is installed after Visual Studio.\n\nCurrently, VS 2017 / 2019, and Ninja are supported as the generator of CMake. If `ninja.exe` is detected in `PATH`, then Ninja will be used as the default generator, otherwise, it will use VS 2017 / 2019.\n
If Ninja is selected as the generator, the latest MSVC will get selected as the underlying toolchain.\n\nAdditional libraries such as\n[Magma](https://developer.nvidia.com/magma), [oneDNN, a.k.a. MKLDNN or DNNL](https://github.com/oneapi-src/oneDNN), and [Sccache](https://github.com/mozilla/sccache) are often needed. Please refer to the [installation-helper](https://github.com/pytorch/pytorch/tree/main/.ci/pytorch/win-test-helpers/installation-helpers) to install them.\n\nYou can refer to the [build_pytorch.bat](https://github.com/pytorch/pytorch/blob/main/.ci/pytorch/win-test-helpers/build_pytorch.bat) script for some other environment variables configurations\n\n```cmd\ncmd\n\n:: Set the environment variables after you have downloaded and unzipped the mkl package,\n:: else CMake would throw an error as `Could NOT find OpenMP`.\nset CMAKE_INCLUDE_PATH={Your directory}\\mkl\\include\nset LIB={Your directory}\\mkl\\lib;%LIB%\n\n:: Read the content in the previous section carefully before you proceed.\n:: [Optional] If you want to override the underlying toolset used by Ninja and Visual Studio with CUDA, please run the following script block.\n:: \"Visual Studio 2019 Developer Command Prompt\" will be run automatically.\n:: Make sure you have CMake >= 3.12 before you do this when you use the Visual Studio generator.\nset CMAKE_GENERATOR_TOOLSET_VERSION=14.27\nset DISTUTILS_USE_SDK=1\nfor /f \"usebackq tokens=*\" %i in (`\"%ProgramFiles(x86)%\\Microsoft Visual Studio\\Installer\\vswhere.exe\" -version [15^,17^) -products * -latest -property installationPath`) do call \"%i\\VC\\Auxiliary\\Build\\vcvarsall.bat\" x64 -vcvars_ver=%CMAKE_GENERATOR_TOOLSET_VERSION%\n\n:: [Optional] If you want to override the CUDA host compiler\nset CUDAHOSTCXX=C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.27.29110\\bin\\HostX64\\x64\\cl.exe\n\npython -m pip install --no-build-isolation -v -e .\n```\n\n**Intel GPU builds**\n\nIn this mode PyTorch with Intel GPU support will be built.\n\nPlease make sure [the common prerequisites](#prerequisites) as well as [the prerequisites for Intel GPU](#intel-gpu-support) are properly installed and the environment variables are configured prior to starting the build. For build tool support, `Visual Studio 2022` is required.\n\nThen PyTorch can be built with the command:\n\n```cmd\n:: CMD Commands:\n:: Set the CMAKE_PREFIX_PATH to help find corresponding packages\n:: %CONDA_PREFIX% only works after `conda activate custom_env`\n\nif defined CMAKE_PREFIX_PATH (\n set \"CMAKE_PREFIX_PATH=%CONDA_PREFIX%\\Library;%CMAKE_PREFIX_PATH%\"\n) else (\n set \"CMAKE_PREFIX_PATH=%CONDA_PREFIX%\\Library\"\n)\n\npython -m pip install --no-build-isolation -v -e .\n```\n\n##### Adjust Build Options (Optional)\n\nYou can adjust the configuration of CMake variables through environment variables, which the\nbuild forwards to CMake (see [`cmake/EnvVarForwarding.cmake`](./cmake/EnvVarForwarding.cmake) for\nthe full list). For example, pointing the build at a specific Conda prefix, CuDNN, or BLAS:\n\nOn Linux\n\n```bash\nexport CMAKE_PREFIX_PATH=\"${CONDA_PREFIX:-'$(dirname $(which conda))/../'}:${CMAKE_PREFIX_PATH}\"\nspin develop\n```\n\nOn macOS\n\n```bash\nexport CMAKE_PREFIX_PATH=\"${CONDA_PREFIX:-'$(dirname $(which conda))/../'}:${CMAKE_PREFIX_PATH}\"\nMACOSX_DEPLOYMENT_TARGET=11.0 spin develop\n```\n\nAfter a first `spin develop`, you can inspect or adjust the CMake cache interactively with\n`ccmake build` (or `cmake-gui build`) and rebuild with `spin develop`; your edits persist, because\nreconfiguration does not use `--fresh` and environment variables only seed cache entries that are\nnot already set. The corollary: once a variable is in the cache, changing its environment variable\nno longer affects it -- edit the cache directly (or delete `build/CMakeCache.txt`) to change it.\nThe build type and compiler are the exception; the build always re-applies them.\n\n### Docker Image\n\n#### Using pre-built images\n\nYou can also pull a pre-built docker image from Docker Hub and run with docker v23.0+\n\n```bash\ndocker run --gpus all --rm -ti --ipc=host pytorch/pytorch:latest\n```\n\nPlease note that PyTorch uses shared memory to share data between processes, so if torch multiprocessing is used (e.g.\nfor multithreaded data loaders) the default shared memory segment size that container runs with is not enough, and you\nshould increase shared memory size either with `--ipc=host` or `--shm-size` command line options to `nvidia-docker run`.\n\n#### Building the image yourself\n\n**NOTE:** Must be built with a Docker version >= 23.0\n\nThe Dockerfile is supplied to build images with CUDA 12.6 support and cuDNN v9.\nYou can pass `PYTHON_VERSION=x.y` make variable to specify which Python version is to be used by Miniconda, or leave it\nunset to use the default, as the Dockerfile uses system Python.\n\n```bash\nmake -f docker.Makefile\n# images are tagged as docker.io/${your_docker_username}/pytorch\n```\n\nYou can also pass the `CMAKE_VARS=\"...\"` environment variable to specify additional CMake variables to be passed to CMake during the build.\nSee [`cmake/EnvVarForwarding.cmake`](./cmake/EnvVarForwarding.cmake) for the list of available variables.\n\n```bash\nmake -f docker.Makefile\n```\n\n### Building the Documentation\n\nTo build documentation in various formats, you will need [Sphinx](https://www.sphinx-doc.org)\nand the `pytorch_sphinx_theme2`.\n\nBefore you build the documentation locally, ensure `torch` is\ninstalled in your environment. For small fixes, you can install the\nnightly version as described in [Getting Started](https://pytorch.org/get-started/locally/).\n\nFor more complex fixes, such as adding a new module and docstrings for\nthe new module, you might need to install torch [from source](#from-source).\nSee [Docstring Guidelines](https://github.com/pytorch/pytorch/wiki/Docstring-Guidelines)\nfor docstring conventions.\n\n```bash\ncd docs/\npip install -r requirements.txt\nmake html\nmake serve\n```\n\nRun `make` to get a list of all available output formats.\n\nIf you get a katex error run `npm install katex`. If it persists, try\n`npm install -g katex`\n\n> [!NOTE]\n> If you see a numpy incompatibility error, run:\n> ```\n> pip install 'numpy<2'\n> ```\n\n\n#### Troubleshooting CI Errors\nYour build may show errors you didn't have locally - here's how to find the errors relevant to the docs.\n\nIf the build has any errors, you will see something like this on the PR:\n\n\"Monosnap\n\nAny doc-related errors will occur in jobs that include \"doc\" somewhere in the title. It doesn't look like any of these jobs are relevant to our docs.\n\n\nLet's take a look anyway. Click on the job to see the logs:\n\n\"Monosnap\n\nAnd we can be sure that this job does not involve docs.\n\nLooking at this build, we can see these jobs are relevant to our docs - and they didn't have any errors:\n\n\"Check\n\nYou might also see a comment on the PR like this:\n\n\"PR\n\nWe can see that some of these issues are relevant to our docs.\n\nOpen the logs by clicking on the `gh` link:\n\n\"View\n\nAnd here we can see there is a doc-related error:\n\n\"Doc\n\nYou can always find the relevant doc builds by going to the `Checks` tab on your PR, and scrolling down to `pull`.\n\n\"checks\"\n\nYou can either click through or toggle the accordion to see all of the jobs here, where you can see the docs jobs highlighted:\n\n\"jobs\"\n\nIf you click through, you'll see the doc jobs at the bottom, like this:\n\n\"View\n\n\n#### Building a PDF\n\nTo compile a PDF of all PyTorch documentation, ensure you have\n`texlive` and LaTeX installed. On macOS, you can install them using:\n\n```\nbrew install --cask mactex\n```\n\nTo create the PDF:\n\n1. Run:\n\n ```\n make latexpdf\n ```\n\n This will generate the necessary files in the `build/latex` directory.\n\n2. Navigate to this directory and execute:\n\n ```\n make LATEXOPTS=\"-interaction=nonstopmode\"\n ```\n\n This will produce a `pytorch.pdf` with the desired content. Run this\n command one more time so that it generates the correct table\n of contents and index.\n\n> [!NOTE]\n> To view the Table of Contents, switch to the **Table of Contents**\n> view in your PDF viewer.\n\n\n### Previous Versions\n\nInstallation instructions and binaries for previous PyTorch versions may be found\non [our website](https://pytorch.org/get-started/previous-versions).\n\n\n## Getting Started\n\nPointers to get you started:\n- [Tutorials: get you started with understanding and using PyTorch](https://pytorch.org/tutorials/)\n- [Examples: easy to understand PyTorch code across all domains](https://github.com/pytorch/examples)\n- [The API Reference](https://pytorch.org/docs/)\n- [Glossary](https://github.com/pytorch/pytorch/blob/main/GLOSSARY.md)\n\n## Resources\n\n* [PyTorch.org](https://pytorch.org/)\n* [PyTorch Tutorials](https://pytorch.org/tutorials/)\n* [PyTorch Examples](https://github.com/pytorch/examples)\n* [PyTorch Models](https://pytorch.org/hub/)\n* [Intro to Deep Learning with PyTorch from Udacity](https://www.udacity.com/course/deep-learning-pytorch--ud188)\n* [Intro to Machine Learning with PyTorch from Udacity](https://www.udacity.com/course/intro-to-machine-learning-nanodegree--nd229)\n* [Deep Neural Networks with PyTorch from Coursera](https://www.coursera.org/learn/deep-neural-networks-with-pytorch)\n* [PyTorch Twitter](https://twitter.com/PyTorch)\n* [PyTorch Blog](https://pytorch.org/blog/)\n* [PyTorch YouTube](https://www.youtube.com/channel/UCWXI5YeOsh03QvJ59PMaXFw)\n\n## Communication\n* Forums: Discuss implementations, research, etc. https://discuss.pytorch.org\n* GitHub Issues: Bug reports, feature requests, install issues, RFCs, thoughts, etc.\n* Slack: The [PyTorch Slack](https://pytorch.slack.com/) hosts a primary audience of moderate to experienced PyTorch users and developers for general chat, online discussions, collaboration, etc. If you are a beginner looking for help, the primary medium is [PyTorch Forums](https://discuss.pytorch.org). If you need a slack invite, please fill this form: https://goo.gl/forms/PP1AGvNHpSaJP8to1\n* Newsletter: No-noise, a one-way email newsletter with important announcements about PyTorch. You can sign-up here: https://eepurl.com/cbG0rv\n* Facebook Page: Important announcements about PyTorch. https://www.facebook.com/pytorch\n* For brand guidelines, please visit our website at [pytorch.org](https://pytorch.org/)\n\n## Releases and Contributing\n\nTypically, PyTorch has three minor releases a year. Please let us know if you encounter a bug by [filing an issue](https://github.com/pytorch/pytorch/issues).\n\nWe appreciate all contributions. If you are planning to contribute back bug-fixes, please do so without any further discussion.\n\nIf you plan to contribute new features, utility functions, or extensions to the core, please first open an issue and discuss the feature with us.\nSending a PR without discussion might end up resulting in a rejected PR because we might be taking the core in a different direction than you might be aware of.\n\nTo learn more about making a contribution to PyTorch, please see our [Contribution page](CONTRIBUTING.md). For more information about PyTorch releases, see [Release page](RELEASE.md).\n\n## The Team\n\nPyTorch is a community-driven project with several skillful engineers and researchers contributing to it.\n\nPyTorch is currently maintained by [Soumith Chintala](https://soumith.ch), [Gregory Chanan](https://github.com/gchanan), [Dmytro Dzhulgakov](https://github.com/dzhulgakov), [Edward Yang](https://github.com/ezyang), [Alban Desmaison](https://github.com/albanD), [Piotr Bialecki](https://github.com/ptrblck) and [Nikita Shulga](https://github.com/malfet) with major contributions coming from hundreds of talented individuals in various forms and means.\nA non-exhaustive but growing list needs to mention: [Trevor Killeen](https://github.com/killeent), [Sasank Chilamkurthy](https://github.com/chsasank), [Sergey Zagoruyko](https://github.com/szagoruyko), [Adam Lerer](https://github.com/adamlerer), [Francisco Massa](https://github.com/fmassa), [Alykhan Tejani](https://github.com/alykhantejani), [Luca Antiga](https://github.com/lantiga), [Alban Desmaison](https://github.com/albanD), [Andreas Koepf](https://github.com/andreaskoepf), [James Bradbury](https://github.com/jekbradbury), [Zeming Lin](https://github.com/ebetica), [Yuandong Tian](https://github.com/yuandong-tian), [Guillaume Lample](https://github.com/glample), [Marat Dukhan](https://github.com/Maratyszcza), [Natalia Gimelshein](https://github.com/ngimel), [Christian Sarofeen](https://github.com/csarofeen), [Martin Raison](https://github.com/martinraison), [Edward Yang](https://github.com/ezyang), [Zachary Devito](https://github.com/zdevito). \n\nNote: This project is unrelated to [hughperkins/pytorch](https://github.com/hughperkins/pytorch) with the same name. Hugh is a valuable contributor to the Torch community and has helped with many things Torch and PyTorch.\n\n## License\n\nPyTorch has a BSD-style license, as found in the [LICENSE](LICENSE) file.\n", + "description_content_type": "text/markdown", + "keywords": [ + "pytorch", + "machine learning" + ], + "author_email": "PyTorch Team ", + "license_expression": "Apache-2.0 AND Apache-2.0 WITH LLVM-exception AND BSD-2-Clause AND BSD-3-Clause AND BSL-1.0 AND MIT", + "license_file": [ + "LICENSE", + "third_party/FP16/LICENSE", + "third_party/FXdiv/LICENSE", + "third_party/NNPACK/LICENSE", + "third_party/NVTX/LICENSE.txt", + "third_party/NVTX/docs/LICENSE.txt", + "third_party/NVTX/python/LICENSE.txt", + "third_party/NVTX/rust/LICENSE", + "third_party/VulkanMemoryAllocator/LICENSE.txt", + "third_party/XNNPACK/LICENSE", + "third_party/aiter/3rdparty/composable_kernel/LICENSE", + "third_party/aiter/LICENSE", + "third_party/benchmark/LICENSE", + "third_party/composable_kernel/LICENSE", + "third_party/cpp-httplib/LICENSE", + "third_party/cpuinfo/LICENSE", + "third_party/cpuinfo/deps/clog/LICENSE", + "third_party/cudnn_frontend/LICENSE.txt", + "third_party/cutlass/LICENSE.txt", + "third_party/cutlass/python/LICENSE.txt", + "third_party/fbgemm/LICENSE", + "third_party/fbgemm/external/composable_kernel/LICENSE", + "third_party/fbgemm/external/cpuinfo/LICENSE", + "third_party/fbgemm/external/cpuinfo/deps/clog/LICENSE", + "third_party/fbgemm/external/cutlass/LICENSE.txt", + "third_party/fbgemm/external/cutlass/python/LICENSE.txt", + "third_party/fbgemm/external/googletest/LICENSE", + "third_party/fbgemm/external/hipify_torch/LICENSE.txt", + "third_party/fbgemm/fbgemm_gpu/experimental/hstu/LICENSE", + "third_party/fbgemm/fbgemm_gpu/src/quantize_ops/mx/LICENSE", + "third_party/fbgemm/fbgemm_gpu/test/quantize/mx/LICENSE", + "third_party/flash-attention/LICENSE", + "third_party/flash-attention/csrc/composable_kernel/LICENSE", + "third_party/flash-attention/csrc/cutlass/LICENSE.txt", + "third_party/flash-attention/csrc/cutlass/python/LICENSE.txt", + "third_party/flash-attention/flash_attn/cute/LICENSE", + "third_party/flash-attention/third_party/aiter/3rdparty/composable_kernel/LICENSE", + "third_party/flash-attention/third_party/aiter/LICENSE", + "third_party/flatbuffers/LICENSE", + "third_party/flatbuffers/dart/LICENSE", + "third_party/flatbuffers/swift/LICENSE", + "third_party/fmt/LICENSE", + "third_party/gemmlowp/gemmlowp/LICENSE", + "third_party/gloo/LICENSE", + "third_party/googletest/LICENSE", + "third_party/ideep/LICENSE", + "third_party/ideep/mkl-dnn/LICENSE", + "third_party/ideep/mkl-dnn/third_party/gtest/LICENSE", + "third_party/ideep/mkl-dnn/third_party/opencl/LICENSE", + "third_party/kineto/LICENSE", + "third_party/kineto/libkineto/third_party/dynolog_headers/LICENSE", + "third_party/kineto/libkineto/third_party/fmt/LICENSE", + "third_party/kineto/libkineto/third_party/googletest/LICENSE", + "third_party/llvm-openmp/LICENSE.txt", + "third_party/mimalloc/LICENSE", + "third_party/miniz-3.0.2/LICENSE", + "third_party/mslk/LICENSE", + "third_party/mslk/external/composable_kernel/LICENSE", + "third_party/mslk/external/cutlass/LICENSE.txt", + "third_party/mslk/external/cutlass/python/LICENSE.txt", + "third_party/mslk/external/googletest/LICENSE", + "third_party/mslk/external/hipify_torch/LICENSE.txt", + "third_party/mslk/mslk/attention/flash_attn/LICENSE", + "third_party/onnx/LICENSE", + "third_party/onnx/third_party/pybind11/LICENSE", + "third_party/perfetto/LICENSE", + "third_party/protobuf/LICENSE", + "third_party/protobuf/third_party/benchmark/LICENSE", + "third_party/protobuf/third_party/googletest/LICENSE", + "third_party/protobuf/third_party/googletest/googlemock/LICENSE", + "third_party/protobuf/third_party/googletest/googlemock/scripts/generator/LICENSE", + "third_party/protobuf/third_party/googletest/googletest/LICENSE", + "third_party/protobuf/third_party/utf8_range/LICENSE", + "third_party/psimd/LICENSE", + "third_party/pthreadpool/LICENSE", + "third_party/pybind11/LICENSE", + "third_party/python-peachpy/LICENSE.rst", + "third_party/sleef/LICENSE.txt", + "third_party/tensorpipe/LICENSE.txt", + "third_party/tensorpipe/third_party/googletest/LICENSE", + "third_party/tensorpipe/third_party/googletest/googlemock/LICENSE", + "third_party/tensorpipe/third_party/googletest/googlemock/scripts/generator/LICENSE", + "third_party/tensorpipe/third_party/googletest/googletest/LICENSE", + "third_party/tensorpipe/third_party/libnop/LICENSE", + "third_party/tensorpipe/third_party/libuv/LICENSE", + "third_party/tensorpipe/third_party/pybind11/LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Intended Audience :: Education", + "Intended Audience :: Science/Research", + "Topic :: Scientific/Engineering", + "Topic :: Scientific/Engineering :: Mathematics", + "Topic :: Scientific/Engineering :: Artificial Intelligence", + "Topic :: Software Development", + "Topic :: Software Development :: Libraries", + "Topic :: Software Development :: Libraries :: Python Modules", + "Programming Language :: C++", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15" + ], + "requires_dist": [ + "filelock", + "typing-extensions>=4.10.0", + "setuptools>=77.0.3", + "sympy>=1.13.3", + "networkx>=2.5.1", + "jinja2", + "fsspec>=0.8.5", + "optree>=0.13.0; extra == \"optree\"", + "opt-einsum>=3.3; extra == \"opt-einsum\"", + "pyyaml; extra == \"pyyaml\"" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://pytorch.org", + "Repository, https://github.com/pytorch/pytorch", + "Documentation, https://pytorch.org/docs", + "Issue Tracker, https://github.com/pytorch/pytorch/issues", + "Forum, https://discuss.pytorch.org" + ], + "provides_extra": [ + "optree", + "opt-einsum", + "pyyaml" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/cb/03/10388a42375ee7e4ac9b94eb2c5c569c8b5795e377e701c9ac3ad63de890/fastapi-0.141.1-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3" + }, + "hash": "sha256=bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.4", + "name": "fastapi", + "version": "0.141.1", + "summary": "FastAPI framework, high performance, easy to learn, fast to code, ready for production", + "description": "

\n \"FastAPI\"\n

\n

\n FastAPI framework, high performance, easy to learn, fast to code, ready for production\n

\n

\n\n \"Test\"\n\n\n \"Coverage\"\n\n\n \"Package\n\n\n \"Supported\n\n

\n\n---\n\n**Documentation**: [https://fastapi.tiangolo.com](https://fastapi.tiangolo.com)\n\n**Source Code**: [https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi)\n\n---\n\nFastAPI is a modern, fast (high-performance), web framework for building APIs with Python based on standard Python type hints.\n\nThe key features are:\n\n* **Fast**: Very high performance, on par with **NodeJS** and **Go** (thanks to Starlette and Pydantic). [One of the fastest Python frameworks available](#performance).\n* **Fast to code**: Increase the speed to develop features by about 200% to 300%. *\n* **Fewer bugs**: Reduce about 40% of human (developer) induced errors. *\n* **Intuitive**: Great editor support. Completion everywhere. Less time debugging.\n* **Easy**: Designed to be easy to use and learn. Less time reading docs.\n* **Short**: Minimize code duplication. Multiple features from each parameter declaration. Fewer bugs.\n* **Robust**: Get production-ready code. With automatic interactive documentation.\n* **Standards-based**: Based on (and fully compatible with) the open standards for APIs: [OpenAPI](https://github.com/OAI/OpenAPI-Specification) (previously known as Swagger) and [JSON Schema](https://json-schema.org/).\n\n* estimation based on tests conducted by an internal development team, building production applications.\n\n## Sponsors\n\n\n### Keystone Sponsor\n\n\n\n### Gold Sponsors\n\n\n\n\n\n\n\n\n\n\n### Silver Sponsors\n\n\n\n\n\n\n\n\n\n\n[Other sponsors](https://fastapi.tiangolo.com/fastapi-people/#sponsors)\n\n## Opinions\n\n\n\n
\n\n\"_[...] I'm using **FastAPI** a ton these days. [...] I'm actually planning to use it for all of my team's **ML services at Microsoft**. Some of them are getting integrated into the core **Windows** product and some **Office** products._\"\n\n
Kabir Khan - Microsoft (ref)
\n\n---\n\n\"_We adopted the **FastAPI** library to spawn a **REST** server that can be queried to obtain **predictions**. [for Ludwig]_\"\n\n
Piero Molino, Yaroslav Dudin, and Sai Sumanth Miryala - Uber (ref)
\n\n---\n\n\"_**Netflix** is pleased to announce the open-source release of our **crisis management** orchestration framework: **Dispatch**! [built with **FastAPI**]_\"\n\n
Kevin Glisson, Marc Vilanova, Forest Monsen - Netflix (ref)
\n\n---\n\n\"_If anyone is looking to build a production Python API, I would highly recommend **FastAPI**. It is **beautifully designed**, **simple to use** and **highly scalable**, it has become a **key component** in our API first development strategy and is driving many automations and services such as our Virtual TAC Engineer._\"\n\n
Deon Pillsbury - Cisco (ref)
\n\n---\n\n
\n\n## FastAPI Conf\n\n[**FastAPI Conf '26**](https://fastapiconf.com) is happening on **October 28, 2026** in **Amsterdam, NL**. All about FastAPI, right from the source. 🎤\n\n\"FastAPI\n\n## FastAPI mini documentary\n\nThere's a [FastAPI mini documentary](https://www.youtube.com/watch?v=mpR8ngthqiE) released at the end of 2025, you can watch it online:\n\n\"FastAPI\n\n## **Typer**, the FastAPI of CLIs\n\n\n\nIf you are building a CLI app to be used in the terminal instead of a web API, check out [**Typer**](https://typer.tiangolo.com/).\n\n**Typer** is FastAPI's little sibling. And it's intended to be the **FastAPI of CLIs**. ⌨️ 🚀\n\n## Requirements\n\nFastAPI stands on the shoulders of giants:\n\n* [Starlette](https://starlette.dev/) for the web parts.\n* [Pydantic](https://pydantic.dev/docs/) for the data parts.\n\n## Installation\n\nFirst, [install `uv`](https://docs.astral.sh/uv/getting-started/installation/), and then add FastAPI to your project:\n\n
\n\n```console\n$ uv add \"fastapi[standard]\"\n\n---> 100%\n```\n\n
\n\n**Note**: Make sure you put `\"fastapi[standard]\"` in quotes to ensure it works in all terminals.\n\nIf you prefer to use `pip`, install `fastapi[standard]` inside a virtual environment. See the [installation guide](tutorial/#install-fastapi) for the alternative steps.\n\n## Example\n\n### Create it\n\nCreate a file `main.py` with:\n\n```Python\nfrom fastapi import FastAPI\n\napp = FastAPI()\n\n\n@app.get(\"/\")\ndef read_root():\n return {\"Hello\": \"World\"}\n\n\n@app.get(\"/items/{item_id}\")\ndef read_item(item_id: int, q: str | None = None):\n return {\"item_id\": item_id, \"q\": q}\n```\n\n
\nOr use async def...\n\nIf your code uses `async` / `await`, use `async def`:\n\n```Python hl_lines=\"7 12\"\nfrom fastapi import FastAPI\n\napp = FastAPI()\n\n\n@app.get(\"/\")\nasync def read_root():\n return {\"Hello\": \"World\"}\n\n\n@app.get(\"/items/{item_id}\")\nasync def read_item(item_id: int, q: str | None = None):\n return {\"item_id\": item_id, \"q\": q}\n```\n\n**Note**:\n\nIf you don't know, check the _\"In a hurry?\"_ section about [`async` and `await` in the docs](https://fastapi.tiangolo.com/async/#in-a-hurry).\n\n
\n\n### Run it\n\nRun the server with:\n\n
\n\n```console\n$ uv run fastapi dev\n\n ╭────────── FastAPI CLI - Development mode ───────────╮\n │ │\n │ Serving at: http://127.0.0.1:8000 │\n │ │\n │ API docs: http://127.0.0.1:8000/docs │\n │ │\n │ Running in development mode, for production use: │\n │ │\n │ fastapi run │\n │ │\n ╰─────────────────────────────────────────────────────╯\n\nINFO: Will watch for changes in these directories: ['/home/user/code/awesomeapp']\nINFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)\nINFO: Started reloader process [2248755] using WatchFiles\nINFO: Started server process [2248757]\nINFO: Waiting for application startup.\nINFO: Application startup complete.\n```\n\n
\n\n
\nAbout the command fastapi dev...\n\nThe command `fastapi dev` reads your `main.py` file automatically, detects the **FastAPI** app in it, and starts a server using [Uvicorn](https://uvicorn.dev).\n\nBy default, `fastapi dev` will start with auto-reload enabled for local development.\n\nYou can read more about it in the [FastAPI CLI docs](https://fastapi.tiangolo.com/fastapi-cli/).\n\n
\n\n### Check it\n\nOpen your browser at [http://127.0.0.1:8000/items/5?q=somequery](http://127.0.0.1:8000/items/5?q=somequery).\n\nYou will see the JSON response as:\n\n```JSON\n{\"item_id\": 5, \"q\": \"somequery\"}\n```\n\nYou already created an API that:\n\n* Receives HTTP requests in the _paths_ `/` and `/items/{item_id}`.\n* Both _paths_ take `GET` operations (also known as HTTP _methods_).\n* The _path_ `/items/{item_id}` has a _path parameter_ `item_id` that should be an `int`.\n* The _path_ `/items/{item_id}` has an optional `str` _query parameter_ `q`.\n\n### Interactive API docs\n\nNow go to [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs).\n\nYou will see the automatic interactive API documentation (provided by [Swagger UI](https://github.com/swagger-api/swagger-ui)):\n\n![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png)\n\n### Alternative API docs\n\nAnd now, go to [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc).\n\nYou will see the alternative automatic documentation (provided by [ReDoc](https://github.com/Redocly/redoc)):\n\n![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png)\n\n## Example upgrade\n\nNow modify the file `main.py` to receive a body from a `PUT` request.\n\nDeclare the body using standard Python types, thanks to Pydantic.\n\n```Python hl_lines=\"2 7-10 23-25\"\nfrom fastapi import FastAPI\nfrom pydantic import BaseModel\n\napp = FastAPI()\n\n\nclass Item(BaseModel):\n name: str\n price: float\n is_offer: bool | None = None\n\n\n@app.get(\"/\")\ndef read_root():\n return {\"Hello\": \"World\"}\n\n\n@app.get(\"/items/{item_id}\")\ndef read_item(item_id: int, q: str | None = None):\n return {\"item_id\": item_id, \"q\": q}\n\n\n@app.put(\"/items/{item_id}\")\ndef update_item(item_id: int, item: Item):\n return {\"item_name\": item.name, \"item_id\": item_id}\n```\n\nThe `fastapi dev` server should reload automatically.\n\n### Interactive API docs upgrade\n\nNow go to [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs).\n\n* The interactive API documentation will be automatically updated, including the new body:\n\n![Swagger UI](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png)\n\n* Click on the button \"Try it out\", it allows you to fill the parameters and directly interact with the API:\n\n![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-04-swagger-03.png)\n\n* Then click on the \"Execute\" button, the user interface will communicate with your API, send the parameters, get the results and show them on the screen:\n\n![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-05-swagger-04.png)\n\n### Alternative API docs upgrade\n\nAnd now, go to [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc).\n\n* The alternative documentation will also reflect the new query parameter and body:\n\n![ReDoc](https://fastapi.tiangolo.com/img/index/index-06-redoc-02.png)\n\n### Recap\n\nIn summary, you declare **once** the types of parameters, body, etc. as function parameters.\n\nYou do that with standard modern Python types.\n\nYou don't have to learn a new syntax, the methods or classes of a specific library, etc.\n\nJust standard **Python**.\n\nFor example, for an `int`:\n\n```Python\nitem_id: int\n```\n\nor for a more complex `Item` model:\n\n```Python\nitem: Item\n```\n\n...and with that single declaration you get:\n\n* Editor support, including:\n * Completion.\n * Type checks.\n* Validation of data:\n * Automatic and clear errors when the data is invalid.\n * Validation even for deeply nested JSON objects.\n* Conversion of input data: coming from the network to Python data and types. Reading from:\n * JSON.\n * Path parameters.\n * Query parameters.\n * Cookies.\n * Headers.\n * Forms.\n * Files.\n* Conversion of output data: converting from Python data and types to network data (as JSON):\n * Convert Python types (`str`, `int`, `float`, `bool`, `list`, etc).\n * `datetime` objects.\n * `UUID` objects.\n * Database models.\n * ...and many more.\n* Automatic interactive API documentation, including 2 alternative user interfaces:\n * Swagger UI.\n * ReDoc.\n\n---\n\nComing back to the previous code example, **FastAPI** will:\n\n* Validate that there is an `item_id` in the path for `GET` and `PUT` requests.\n* Validate that the `item_id` is of type `int` for `GET` and `PUT` requests.\n * If it is not, the client will see a useful, clear error.\n* Check if there is an optional query parameter named `q` (as in `http://127.0.0.1:8000/items/foo?q=somequery`) for `GET` requests.\n * As the `q` parameter is declared with `= None`, it is optional.\n * Without the `None` it would be required (as is the body in the case with `PUT`).\n* For `PUT` requests to `/items/{item_id}`, read the body as JSON:\n * Check that it has a required attribute `name` that should be a `str`.\n * Check that it has a required attribute `price` that has to be a `float`.\n * Check that it has an optional attribute `is_offer`, that should be a `bool`, if present.\n * All this would also work for deeply nested JSON objects.\n* Convert from and to JSON automatically.\n* Document everything with OpenAPI, that can be used by:\n * Interactive documentation systems.\n * Automatic client code generation systems, for many languages.\n* Provide 2 interactive documentation web interfaces directly.\n\n---\n\nWe just scratched the surface, but you already get the idea of how it all works.\n\nTry changing the line with:\n\n```Python\n return {\"item_name\": item.name, \"item_id\": item_id}\n```\n\n...from:\n\n```Python\n ... \"item_name\": item.name ...\n```\n\n...to:\n\n```Python\n ... \"item_price\": item.price ...\n```\n\n...and see how your editor will auto-complete the attributes and know their types:\n\n![editor support](https://fastapi.tiangolo.com/img/vscode-completion.png)\n\nFor a more complete example including more features, see the Tutorial - User Guide.\n\n**Spoiler alert**: the tutorial - user guide includes:\n\n* Declaration of **parameters** from other different places such as: **headers**, **cookies**, **form fields** and **files**.\n* How to set **validation constraints** such as `maximum_length` or `regex`.\n* A very powerful and easy to use **Dependency Injection** system.\n* Security and authentication, including support for **OAuth2** with **JWT tokens** and **HTTP Basic** auth.\n* More advanced (but equally easy) techniques for declaring **deeply nested JSON models** (thanks to Pydantic).\n* **GraphQL** integration with [Strawberry](https://strawberry.rocks) and other libraries.\n* Many extra features (thanks to Starlette) such as:\n * **WebSockets**\n * extremely easy tests based on HTTPX and `pytest`\n * **CORS**\n * **Cookie Sessions**\n * ...and more.\n\n### Deploy your app (optional)\n\nYou can optionally deploy your FastAPI app to [FastAPI Cloud](https://fastapicloud.com) with a single command. 🚀\n\n
\n\n```console\n$ uv run fastapi deploy\n\nDeploying to FastAPI Cloud...\n\n✅ Deployment successful!\n\n🐔 Ready the chicken! Your app is ready at https://myapp.fastapicloud.dev\n```\n\n
\n\nThe CLI will automatically detect your FastAPI application and deploy it to the cloud. If you are not logged in, your browser will open to complete the authentication process.\n\nThat's it! Now you can access your app at that URL. ✨\n\n#### About FastAPI Cloud\n\n**[FastAPI Cloud](https://fastapicloud.com)** is built by the same author and team behind **FastAPI**.\n\nIt streamlines the process of **building**, **deploying**, and **accessing** an API with minimal effort.\n\nIt brings the same **developer experience** of building apps with FastAPI to **deploying** them to the cloud. 🎉\n\nFastAPI Cloud is the primary sponsor and funding provider for the *FastAPI and friends* open source projects. ✨\n\n#### Deploy to other cloud providers\n\nFastAPI is open source and based on standards. You can deploy FastAPI apps to any cloud provider you choose.\n\nFollow your cloud provider's guides to deploy FastAPI apps with them. 🤓\n\n## Performance\n\nIndependent TechEmpower benchmarks show **FastAPI** applications running under Uvicorn as [one of the fastest Python frameworks available](https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7), only below Starlette and Uvicorn themselves (used internally by FastAPI). (*)\n\nTo understand more about it, see the section [Benchmarks](https://fastapi.tiangolo.com/benchmarks/).\n\n## Dependencies\n\nFastAPI depends on Pydantic and Starlette.\n\n### `standard` Dependencies\n\nWhen you install FastAPI with `uv add \"fastapi[standard]\"` it comes with the `standard` group of optional dependencies:\n\nUsed by Pydantic:\n\n* [`email-validator`](https://github.com/JoshData/python-email-validator) - for email validation.\n\nUsed by Starlette:\n\n* [`httpx`](https://www.python-httpx.org) - Required if you want to use the `TestClient`.\n* [`jinja2`](https://jinja.palletsprojects.com) - Required if you want to use the default template configuration.\n* [`python-multipart`](https://github.com/Kludex/python-multipart) - Required if you want to support form \"parsing\", with `request.form()`.\n\nUsed by FastAPI:\n\n* [`uvicorn`](https://uvicorn.dev) - for the server that loads and serves your application. This includes `uvicorn[standard]`, which includes some dependencies (e.g. `uvloop`) needed for high performance serving.\n* `fastapi-cli[standard]` - to provide the `fastapi` command.\n * This includes `fastapi-cloud-cli`, which allows you to deploy your FastAPI application to [FastAPI Cloud](https://fastapicloud.com).\n\n### Without `standard` Dependencies\n\nIf you don't want to include the `standard` optional dependencies, you can install with `uv add fastapi` instead of `uv add \"fastapi[standard]\"`.\n\n### Without `fastapi-cloud-cli`\n\nIf you want to install FastAPI with the standard dependencies but without the `fastapi-cloud-cli`, you can install with `uv add \"fastapi[standard-no-fastapi-cloud-cli]\"`.\n\n### Additional Optional Dependencies\n\nThere are some additional dependencies you might want to install.\n\nAdditional optional Pydantic dependencies:\n\n* [`pydantic-settings`](https://pydantic.dev/docs/validation/latest/concepts/pydantic_settings/) - for settings management.\n* [`pydantic-extra-types`](https://github.com/pydantic/pydantic-extra-types) - for extra types to be used with Pydantic.\n\nAdditional optional FastAPI dependencies:\n\n* [`orjson`](https://github.com/ijl/orjson) - Required if you want to use `ORJSONResponse`.\n* [`ujson`](https://github.com/ultrajson/ultrajson) - Required if you want to use `UJSONResponse`.\n\n## License\n\nThis project is licensed under the terms of the MIT license.\n", + "description_content_type": "text/markdown", + "author_email": "=?utf-8?q?Sebasti=C3=A1n_Ram=C3=ADrez?= ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Intended Audience :: Information Technology", + "Intended Audience :: System Administrators", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python", + "Topic :: Internet", + "Topic :: Software Development :: Libraries :: Application Frameworks", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Software Development :: Libraries", + "Topic :: Software Development", + "Typing :: Typed", + "Development Status :: 4 - Beta", + "Environment :: Web Environment", + "Framework :: AsyncIO", + "Framework :: FastAPI", + "Framework :: Pydantic", + "Framework :: Pydantic :: 2", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Topic :: Internet :: WWW/HTTP :: HTTP Servers", + "Topic :: Internet :: WWW/HTTP" + ], + "requires_dist": [ + "starlette>=0.46.0", + "pydantic>=2.9.0", + "typing-extensions>=4.8.0", + "typing-inspection>=0.4.2", + "annotated-doc>=0.0.2", + "fastapi-cli[standard]>=0.0.32; extra == \"standard\"", + "fastar>=0.9.0; extra == \"standard\"", + "httpx<1.0.0,>=0.23.0; extra == \"standard\"", + "jinja2>=3.1.5; extra == \"standard\"", + "python-multipart>=0.0.18; extra == \"standard\"", + "email-validator>=2.0.0; extra == \"standard\"", + "uvicorn[standard]>=0.12.0; extra == \"standard\"", + "pydantic-settings>=2.0.0; extra == \"standard\"", + "pydantic-extra-types>=2.0.0; extra == \"standard\"", + "fastapi-cli[standard-no-fastapi-cloud-cli]>=0.0.32; extra == \"standard-no-fastapi-cloud-cli\"", + "httpx<1.0.0,>=0.23.0; extra == \"standard-no-fastapi-cloud-cli\"", + "jinja2>=3.1.5; extra == \"standard-no-fastapi-cloud-cli\"", + "python-multipart>=0.0.18; extra == \"standard-no-fastapi-cloud-cli\"", + "email-validator>=2.0.0; extra == \"standard-no-fastapi-cloud-cli\"", + "uvicorn[standard]>=0.12.0; extra == \"standard-no-fastapi-cloud-cli\"", + "pydantic-settings>=2.0.0; extra == \"standard-no-fastapi-cloud-cli\"", + "pydantic-extra-types>=2.0.0; extra == \"standard-no-fastapi-cloud-cli\"", + "fastapi-cli[standard]>=0.0.32; extra == \"all\"", + "httpx<1.0.0,>=0.23.0; extra == \"all\"", + "jinja2>=3.1.5; extra == \"all\"", + "python-multipart>=0.0.18; extra == \"all\"", + "itsdangerous>=1.1.0; extra == \"all\"", + "pyyaml>=5.3.1; extra == \"all\"", + "email-validator>=2.0.0; extra == \"all\"", + "uvicorn[standard]>=0.12.0; extra == \"all\"", + "pydantic-settings>=2.0.0; extra == \"all\"", + "pydantic-extra-types>=2.0.0; extra == \"all\"" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://github.com/fastapi/fastapi", + "Documentation, https://fastapi.tiangolo.com/", + "Repository, https://github.com/fastapi/fastapi", + "Issues, https://github.com/fastapi/fastapi/issues", + "Changelog, https://fastapi.tiangolo.com/release-notes/" + ], + "provides_extra": [ + "standard", + "standard-no-fastapi-cloud-cli", + "all" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/38/0c/b54a4fdd7f90a3af8b02ebc9ce6712c2c208b7926a2f7bad95c33ebbe943/uvicorn-0.54.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf" + }, + "hash": "sha256=505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.5", + "name": "uvicorn", + "version": "0.54.0", + "summary": "The lightning-fast ASGI server.", + "description": "

\n uvicorn\n

\n\n

\nAn ASGI web server, for Python.\n

\n\n---\n\n[![Build Status](https://github.com/Kludex/uvicorn/workflows/Test%20Suite/badge.svg)](https://github.com/Kludex/uvicorn/actions)\n[![Package version](https://badge.fury.io/py/uvicorn.svg)](https://pypi.python.org/pypi/uvicorn)\n[![Supported Python Version](https://img.shields.io/pypi/pyversions/uvicorn.svg?color=%2334D058)](https://pypi.org/project/uvicorn)\n[![Discord](https://img.shields.io/discord/1051468649518616576?logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2)](https://discord.gg/RxKUF5JuHs)\n\n---\n\n**Documentation**: [https://uvicorn.dev](https://uvicorn.dev)\n\n**Source Code**: [https://www.github.com/Kludex/uvicorn](https://www.github.com/Kludex/uvicorn)\n\n---\n\nUvicorn is an ASGI web server implementation for Python.\n\nUntil recently Python has lacked a minimal low-level server/application interface for\nasync frameworks. The [ASGI specification][asgi] fills this gap, and means we're now able to\nstart building a common set of tooling usable across all async frameworks.\n\nUvicorn currently supports HTTP/1.1, HTTP/2 and WebSockets.\n\n## Quickstart\n\nInstall using `pip`:\n\n```shell\n$ pip install uvicorn\n```\n\nThis will install uvicorn with minimal (pure Python) dependencies.\n\n```shell\n$ pip install 'uvicorn[standard]'\n```\n\nThis will install uvicorn with \"Cython-based\" dependencies (where possible) and other \"optional extras\".\n\nIn this context, \"Cython-based\" means the following:\n\n- the event loop `uvloop` will be installed and used if possible.\n- the http protocol will be handled by `httptools` if possible.\n\nMoreover, \"optional extras\" means that:\n\n- the websocket protocol will be handled by `websockets` (should you want to use `wsproto` you'd need to install it manually) if possible.\n- the `--reload` flag in development mode will use `watchfiles`.\n- `python-dotenv` will be installed should you want to use the `--env-file` option.\n- `PyYAML` will be installed to allow you to provide a `.yaml` file to `--log-config`, if desired.\n\nCreate an application, in `example.py`:\n\n```python\nasync def app(scope, receive, send):\n assert scope['type'] == 'http'\n\n await send({\n 'type': 'http.response.start',\n 'status': 200,\n 'headers': [\n (b'content-type', b'text/plain'),\n ],\n })\n await send({\n 'type': 'http.response.body',\n 'body': b'Hello, world!',\n })\n```\n\nRun the server:\n\n```shell\n$ uvicorn example:app\n```\n\n---\n\n## Why ASGI?\n\nMost well established Python Web frameworks started out as WSGI-based frameworks.\n\nWSGI applications are a single, synchronous callable that takes a request and returns a response.\nThis doesn’t allow for long-lived connections, like you get with long-poll HTTP or WebSocket connections,\nwhich WSGI doesn't support well.\n\nHaving an async concurrency model also allows for options such as lightweight background tasks,\nand can be less of a limiting factor for endpoints that have long periods being blocked on network\nI/O such as dealing with slow HTTP requests.\n\n---\n\n## Alternative ASGI servers\n\nA strength of the ASGI protocol is that it decouples the server implementation\nfrom the application framework. This allows for an ecosystem of interoperating\nwebservers and application frameworks.\n\n### Daphne\n\nThe first ASGI server implementation, originally developed to power Django Channels, is [the Daphne webserver][daphne].\n\nIt is run widely in production, and supports HTTP/1.1, HTTP/2, and WebSockets.\n\nAny of the example applications given here can equally well be run using `daphne` instead.\n\n```\n$ pip install daphne\n$ daphne app:App\n```\n\n### Hypercorn\n\n[Hypercorn][hypercorn] was initially part of the Quart web framework, before\nbeing separated out into a standalone ASGI server.\n\nHypercorn supports HTTP/1.1, HTTP/2, and WebSockets.\n\nIt also supports [the excellent `trio` async framework][trio], as an alternative to `asyncio`.\n\n```\n$ pip install hypercorn\n$ hypercorn app:App\n```\n\n### Mangum\n\n[Mangum][mangum] is an adapter for using ASGI applications with AWS Lambda & API Gateway.\n\n### Granian\n\n[Granian][granian] is an ASGI compatible Rust HTTP server which supports HTTP/2, TLS and WebSockets.\n\n---\n\n

Uvicorn is BSD licensed code.
Designed & crafted with care.

— 🦄 —

\n\n[asgi]: https://asgi.readthedocs.io/en/latest/\n[daphne]: https://github.com/django/daphne\n[hypercorn]: https://github.com/pgjones/hypercorn\n[trio]: https://trio.readthedocs.io\n[mangum]: https://github.com/jordaneremieff/mangum\n[granian]: https://github.com/emmett-framework/granian\n", + "description_content_type": "text/markdown", + "author_email": "Tom Christie ", + "maintainer_email": "Marcelo Trylesinski ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.md" + ], + "classifier": [ + "Development Status :: 4 - Beta", + "Environment :: Web Environment", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Internet :: WWW/HTTP" + ], + "requires_dist": [ + "click>=7.0", + "h11>=0.8", + "typing-extensions>=4.0; python_version < '3.11'", + "httptools>=0.8.0; extra == 'standard'", + "python-dotenv>=0.13; extra == 'standard'", + "pyyaml>=5.1; extra == 'standard'", + "uvloop>=0.15.1; (sys_platform != 'win32' and (sys_platform != 'cygwin' and platform_python_implementation != 'PyPy')) and extra == 'standard'", + "watchfiles>=0.20; extra == 'standard'", + "websockets>=13.0; extra == 'standard'" + ], + "requires_python": ">=3.10", + "project_url": [ + "Changelog, https://uvicorn.dev/release-notes", + "Funding, https://github.com/sponsors/Kludex", + "Homepage, https://uvicorn.dev/", + "Source, https://github.com/Kludex/uvicorn" + ], + "provides_extra": [ + "standard" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", + "archive_info": { + "hashes": { + "sha256": "076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9" + }, + "hash": "sha256=076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "psutil", + "version": "7.2.2", + "platform": [ + "Platform Independent" + ], + "summary": "Cross-platform lib for process and system monitoring.", + "description": "| |downloads| |stars| |forks| |contributors| |packages|\n| |version| |license| |stackoverflow| |twitter| |tidelift|\n| |github-actions-wheels| |github-actions-bsd|\n\n.. |downloads| image:: https://img.shields.io/pypi/dm/psutil.svg\n :target: https://clickpy.clickhouse.com/dashboard/psutil\n :alt: Downloads\n\n.. |stars| image:: https://img.shields.io/github/stars/giampaolo/psutil.svg\n :target: https://github.com/giampaolo/psutil/stargazers\n :alt: Github stars\n\n.. |forks| image:: https://img.shields.io/github/forks/giampaolo/psutil.svg\n :target: https://github.com/giampaolo/psutil/network/members\n :alt: Github forks\n\n.. |contributors| image:: https://img.shields.io/github/contributors/giampaolo/psutil.svg\n :target: https://github.com/giampaolo/psutil/graphs/contributors\n :alt: Contributors\n\n.. |stackoverflow| image:: https://img.shields.io/badge/stackoverflow-Ask%20questions-blue.svg\n :target: https://stackoverflow.com/questions/tagged/psutil\n :alt: Stackoverflow\n\n.. |github-actions-wheels| image:: https://img.shields.io/github/actions/workflow/status/giampaolo/psutil/.github/workflows/build.yml.svg?label=Linux%2C%20macOS%2C%20Windows\n :target: https://github.com/giampaolo/psutil/actions?query=workflow%3Abuild\n :alt: Linux, macOS, Windows\n\n.. |github-actions-bsd| image:: https://img.shields.io/github/actions/workflow/status/giampaolo/psutil/.github/workflows/bsd.yml.svg?label=FreeBSD,%20NetBSD,%20OpenBSD\n :target: https://github.com/giampaolo/psutil/actions?query=workflow%3Absd-tests\n :alt: FreeBSD, NetBSD, OpenBSD\n\n.. |version| image:: https://img.shields.io/pypi/v/psutil.svg?label=pypi\n :target: https://pypi.org/project/psutil\n :alt: Latest version\n\n.. |packages| image:: https://repology.org/badge/tiny-repos/python:psutil.svg\n :target: https://repology.org/metapackage/python:psutil/versions\n :alt: Binary packages\n\n.. |license| image:: https://img.shields.io/pypi/l/psutil.svg\n :target: https://github.com/giampaolo/psutil/blob/master/LICENSE\n :alt: License\n\n.. |twitter| image:: https://img.shields.io/twitter/follow/grodola?style=flat\n :target: https://twitter.com/grodola\n :alt: Twitter Follow\n\n.. |tidelift| image:: https://tidelift.com/badges/github/giampaolo/psutil?style=flat\n :target: https://tidelift.com/subscription/pkg/pypi-psutil?utm_source=pypi-psutil&utm_medium=referral&utm_campaign=readme\n :alt: Tidelift\n\n-----\n\nQuick links\n===========\n\n- `Home page `_\n- `Install `_\n- `Documentation `_\n- `Download `_\n- `Forum `_\n- `StackOverflow `_\n- `Blog `_\n- `What's new `_\n\n\nSummary\n=======\n\npsutil (process and system utilities) is a cross-platform library for\nretrieving information on **running processes** and **system utilization**\n(CPU, memory, disks, network, sensors) in Python.\nIt is useful mainly for **system monitoring**, **profiling and limiting process\nresources** and **management of running processes**.\nIt implements many functionalities offered by classic UNIX command line tools\nsuch as *ps, top, iotop, lsof, netstat, ifconfig, free* and others.\npsutil currently supports the following platforms:\n\n- **Linux**\n- **Windows**\n- **macOS**\n- **FreeBSD, OpenBSD**, **NetBSD**\n- **Sun Solaris**\n- **AIX**\n\nSupported Python versions are cPython 3.6+ and `PyPy `__.\nLatest psutil version supporting Python 2.7 is\n`psutil 6.1.1 `__.\n\nExample usages\n==============\n\nThis represents pretty much the whole psutil API.\n\nCPU\n---\n\n.. code-block:: python\n\n >>> import psutil\n >>>\n >>> psutil.cpu_times()\n scputimes(user=3961.46, nice=169.729, system=2150.659, idle=16900.540, iowait=629.59, irq=0.0, softirq=19.42, steal=0.0, guest=0, guest_nice=0.0)\n >>>\n >>> for x in range(3):\n ... psutil.cpu_percent(interval=1)\n ...\n 4.0\n 5.9\n 3.8\n >>>\n >>> for x in range(3):\n ... psutil.cpu_percent(interval=1, percpu=True)\n ...\n [4.0, 6.9, 3.7, 9.2]\n [7.0, 8.5, 2.4, 2.1]\n [1.2, 9.0, 9.9, 7.2]\n >>>\n >>> for x in range(3):\n ... psutil.cpu_times_percent(interval=1, percpu=False)\n ...\n scputimes(user=1.5, nice=0.0, system=0.5, idle=96.5, iowait=1.5, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)\n scputimes(user=1.0, nice=0.0, system=0.0, idle=99.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)\n scputimes(user=2.0, nice=0.0, system=0.0, idle=98.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)\n >>>\n >>> psutil.cpu_count()\n 4\n >>> psutil.cpu_count(logical=False)\n 2\n >>>\n >>> psutil.cpu_stats()\n scpustats(ctx_switches=20455687, interrupts=6598984, soft_interrupts=2134212, syscalls=0)\n >>>\n >>> psutil.cpu_freq()\n scpufreq(current=931.42925, min=800.0, max=3500.0)\n >>>\n >>> psutil.getloadavg() # also on Windows (emulated)\n (3.14, 3.89, 4.67)\n\nMemory\n------\n\n.. code-block:: python\n\n >>> psutil.virtual_memory()\n svmem(total=10367352832, available=6472179712, percent=37.6, used=8186245120, free=2181107712, active=4748992512, inactive=2758115328, buffers=790724608, cached=3500347392, shared=787554304)\n >>> psutil.swap_memory()\n sswap(total=2097147904, used=296128512, free=1801019392, percent=14.1, sin=304193536, sout=677842944)\n >>>\n\nDisks\n-----\n\n.. code-block:: python\n\n >>> psutil.disk_partitions()\n [sdiskpart(device='/dev/sda1', mountpoint='/', fstype='ext4', opts='rw,nosuid'),\n sdiskpart(device='/dev/sda2', mountpoint='/home', fstype='ext', opts='rw')]\n >>>\n >>> psutil.disk_usage('/')\n sdiskusage(total=21378641920, used=4809781248, free=15482871808, percent=22.5)\n >>>\n >>> psutil.disk_io_counters(perdisk=False)\n sdiskio(read_count=719566, write_count=1082197, read_bytes=18626220032, write_bytes=24081764352, read_time=5023392, write_time=63199568, read_merged_count=619166, write_merged_count=812396, busy_time=4523412)\n >>>\n\nNetwork\n-------\n\n.. code-block:: python\n\n >>> psutil.net_io_counters(pernic=True)\n {'eth0': netio(bytes_sent=485291293, bytes_recv=6004858642, packets_sent=3251564, packets_recv=4787798, errin=0, errout=0, dropin=0, dropout=0),\n 'lo': netio(bytes_sent=2838627, bytes_recv=2838627, packets_sent=30567, packets_recv=30567, errin=0, errout=0, dropin=0, dropout=0)}\n >>>\n >>> psutil.net_connections(kind='tcp')\n [sconn(fd=115, family=, type=, laddr=addr(ip='10.0.0.1', port=48776), raddr=addr(ip='93.186.135.91', port=80), status='ESTABLISHED', pid=1254),\n sconn(fd=117, family=, type=, laddr=addr(ip='10.0.0.1', port=43761), raddr=addr(ip='72.14.234.100', port=80), status='CLOSING', pid=2987),\n ...]\n >>>\n >>> psutil.net_if_addrs()\n {'lo': [snicaddr(family=, address='127.0.0.1', netmask='255.0.0.0', broadcast='127.0.0.1', ptp=None),\n snicaddr(family=, address='::1', netmask='ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', broadcast=None, ptp=None),\n snicaddr(family=, address='00:00:00:00:00:00', netmask=None, broadcast='00:00:00:00:00:00', ptp=None)],\n 'wlan0': [snicaddr(family=, address='192.168.1.3', netmask='255.255.255.0', broadcast='192.168.1.255', ptp=None),\n snicaddr(family=, address='fe80::c685:8ff:fe45:641%wlan0', netmask='ffff:ffff:ffff:ffff::', broadcast=None, ptp=None),\n snicaddr(family=, address='c4:85:08:45:06:41', netmask=None, broadcast='ff:ff:ff:ff:ff:ff', ptp=None)]}\n >>>\n >>> psutil.net_if_stats()\n {'lo': snicstats(isup=True, duplex=, speed=0, mtu=65536, flags='up,loopback,running'),\n 'wlan0': snicstats(isup=True, duplex=, speed=100, mtu=1500, flags='up,broadcast,running,multicast')}\n >>>\n\nSensors\n-------\n\n.. code-block:: python\n\n >>> import psutil\n >>> psutil.sensors_temperatures()\n {'acpitz': [shwtemp(label='', current=47.0, high=103.0, critical=103.0)],\n 'asus': [shwtemp(label='', current=47.0, high=None, critical=None)],\n 'coretemp': [shwtemp(label='Physical id 0', current=52.0, high=100.0, critical=100.0),\n shwtemp(label='Core 0', current=45.0, high=100.0, critical=100.0)]}\n >>>\n >>> psutil.sensors_fans()\n {'asus': [sfan(label='cpu_fan', current=3200)]}\n >>>\n >>> psutil.sensors_battery()\n sbattery(percent=93, secsleft=16628, power_plugged=False)\n >>>\n\nOther system info\n-----------------\n\n.. code-block:: python\n\n >>> import psutil\n >>> psutil.users()\n [suser(name='giampaolo', terminal='pts/2', host='localhost', started=1340737536.0, pid=1352),\n suser(name='giampaolo', terminal='pts/3', host='localhost', started=1340737792.0, pid=1788)]\n >>>\n >>> psutil.boot_time()\n 1365519115.0\n >>>\n\nProcess management\n------------------\n\n.. code-block:: python\n\n >>> import psutil\n >>> psutil.pids()\n [1, 2, 3, 4, 5, 6, 7, 46, 48, 50, 51, 178, 182, 222, 223, 224, 268, 1215,\n 1216, 1220, 1221, 1243, 1244, 1301, 1601, 2237, 2355, 2637, 2774, 3932,\n 4176, 4177, 4185, 4187, 4189, 4225, 4243, 4245, 4263, 4282, 4306, 4311,\n 4312, 4313, 4314, 4337, 4339, 4357, 4358, 4363, 4383, 4395, 4408, 4433,\n 4443, 4445, 4446, 5167, 5234, 5235, 5252, 5318, 5424, 5644, 6987, 7054,\n 7055, 7071]\n >>>\n >>> p = psutil.Process(7055)\n >>> p\n psutil.Process(pid=7055, name='python3', status='running', started='09:04:44')\n >>> p.pid\n 7055\n >>> p.name()\n 'python3'\n >>> p.exe()\n '/usr/bin/python3'\n >>> p.cwd()\n '/home/giampaolo'\n >>> p.cmdline()\n ['/usr/bin/python3', 'main.py']\n >>>\n >>> p.ppid()\n 7054\n >>> p.parent()\n psutil.Process(pid=4699, name='bash', status='sleeping', started='09:06:44')\n >>> p.parents()\n [psutil.Process(pid=4699, name='bash', started='09:06:44'),\n psutil.Process(pid=4689, name='gnome-terminal-server', status='sleeping', started='0:06:44'),\n psutil.Process(pid=1, name='systemd', status='sleeping', started='05:56:55')]\n >>> p.children(recursive=True)\n [psutil.Process(pid=29835, name='python3', status='sleeping', started='11:45:38'),\n psutil.Process(pid=29836, name='python3', status='waking', started='11:43:39')]\n >>>\n >>> p.status()\n 'running'\n >>> p.create_time()\n 1267551141.5019531\n >>> p.terminal()\n '/dev/pts/0'\n >>>\n >>> p.username()\n 'giampaolo'\n >>> p.uids()\n puids(real=1000, effective=1000, saved=1000)\n >>> p.gids()\n pgids(real=1000, effective=1000, saved=1000)\n >>>\n >>> p.cpu_times()\n pcputimes(user=1.02, system=0.31, children_user=0.32, children_system=0.1, iowait=0.0)\n >>> p.cpu_percent(interval=1.0)\n 12.1\n >>> p.cpu_affinity()\n [0, 1, 2, 3]\n >>> p.cpu_affinity([0, 1]) # set\n >>> p.cpu_num()\n 1\n >>>\n >>> p.memory_info()\n pmem(rss=10915840, vms=67608576, shared=3313664, text=2310144, lib=0, data=7262208, dirty=0)\n >>> p.memory_full_info() # \"real\" USS memory usage (Linux, macOS, Win only)\n pfullmem(rss=10199040, vms=52133888, shared=3887104, text=2867200, lib=0, data=5967872, dirty=0, uss=6545408, pss=6872064, swap=0)\n >>> p.memory_percent()\n 0.7823\n >>> p.memory_maps()\n [pmmap_grouped(path='/lib/x8664-linux-gnu/libutil-2.15.so', rss=32768, size=2125824, pss=32768, shared_clean=0, shared_dirty=0, private_clean=20480, private_dirty=12288, referenced=32768, anonymous=12288, swap=0),\n pmmap_grouped(path='/lib/x8664-linux-gnu/libc-2.15.so', rss=3821568, size=3842048, pss=3821568, shared_clean=0, shared_dirty=0, private_clean=0, private_dirty=3821568, referenced=3575808, anonymous=3821568, swap=0),\n pmmap_grouped(path='[heap]', rss=32768, size=139264, pss=32768, shared_clean=0, shared_dirty=0, private_clean=0, private_dirty=32768, referenced=32768, anonymous=32768, swap=0),\n pmmap_grouped(path='[stack]', rss=2465792, size=2494464, pss=2465792, shared_clean=0, shared_dirty=0, private_clean=0, private_dirty=2465792, referenced=2277376, anonymous=2465792, swap=0),\n ...]\n >>>\n >>> p.io_counters()\n pio(read_count=478001, write_count=59371, read_bytes=700416, write_bytes=69632, read_chars=456232, write_chars=517543)\n >>>\n >>> p.open_files()\n [popenfile(path='/home/giampaolo/monit.py', fd=3, position=0, mode='r', flags=32768),\n popenfile(path='/var/log/monit.log', fd=4, position=235542, mode='a', flags=33793)]\n >>>\n >>> p.net_connections(kind='tcp')\n [pconn(fd=115, family=, type=, laddr=addr(ip='10.0.0.1', port=48776), raddr=addr(ip='93.186.135.91', port=80), status='ESTABLISHED'),\n pconn(fd=117, family=, type=, laddr=addr(ip='10.0.0.1', port=43761), raddr=addr(ip='72.14.234.100', port=80), status='CLOSING')]\n >>>\n >>> p.threads()\n [pthread(id=5234, user_time=22.5, system_time=9.2891),\n pthread(id=5237, user_time=0.0707, system_time=1.1)]\n >>>\n >>> p.num_threads()\n 4\n >>> p.num_fds()\n 8\n >>> p.num_ctx_switches()\n pctxsw(voluntary=78, involuntary=19)\n >>>\n >>> p.nice()\n 0\n >>> p.nice(10) # set\n >>>\n >>> p.ionice(psutil.IOPRIO_CLASS_IDLE) # IO priority (Win and Linux only)\n >>> p.ionice()\n pionice(ioclass=, value=0)\n >>>\n >>> p.rlimit(psutil.RLIMIT_NOFILE, (5, 5)) # set resource limits (Linux only)\n >>> p.rlimit(psutil.RLIMIT_NOFILE)\n (5, 5)\n >>>\n >>> p.environ()\n {'LC_PAPER': 'it_IT.UTF-8', 'SHELL': '/bin/bash', 'GREP_OPTIONS': '--color=auto',\n 'XDG_CONFIG_DIRS': '/etc/xdg/xdg-ubuntu:/usr/share/upstart/xdg:/etc/xdg',\n ...}\n >>>\n >>> p.as_dict()\n {'status': 'running', 'num_ctx_switches': pctxsw(voluntary=63, involuntary=1), 'pid': 5457, ...}\n >>> p.is_running()\n True\n >>> p.suspend()\n >>> p.resume()\n >>>\n >>> p.terminate()\n >>> p.kill()\n >>> p.wait(timeout=3)\n \n >>>\n >>> psutil.test()\n USER PID %CPU %MEM VSZ RSS TTY START TIME COMMAND\n root 1 0.0 0.0 24584 2240 Jun17 00:00 init\n root 2 0.0 0.0 0 0 Jun17 00:00 kthreadd\n ...\n giampaolo 31475 0.0 0.0 20760 3024 /dev/pts/0 Jun19 00:00 python2.4\n giampaolo 31721 0.0 2.2 773060 181896 00:04 10:30 chrome\n root 31763 0.0 0.0 0 0 00:05 00:00 kworker/0:1\n >>>\n\nFurther process APIs\n--------------------\n\n.. code-block:: python\n\n >>> import psutil\n >>> for proc in psutil.process_iter(['pid', 'name']):\n ... print(proc.info)\n ...\n {'pid': 1, 'name': 'systemd'}\n {'pid': 2, 'name': 'kthreadd'}\n {'pid': 3, 'name': 'ksoftirqd/0'}\n ...\n >>>\n >>> psutil.pid_exists(3)\n True\n >>>\n >>> def on_terminate(proc):\n ... print(\"process {} terminated\".format(proc))\n ...\n >>> # waits for multiple processes to terminate\n >>> gone, alive = psutil.wait_procs(procs_list, timeout=3, callback=on_terminate)\n >>>\n\nHeap info\n---------\n\n.. code-block:: python\n\n >>> import psutil\n >>> psutil.heap_info()\n pheap(heap_used=5177792, mmap_used=819200)\n >>> psutil.heap_trim()\n\nSee also `psleak `__\n\nWindows services\n----------------\n\n.. code-block:: python\n\n >>> list(psutil.win_service_iter())\n [,\n ,\n ,\n ,\n ...]\n >>> s = psutil.win_service_get('alg')\n >>> s.as_dict()\n {'binpath': 'C:\\\\Windows\\\\System32\\\\alg.exe',\n 'description': 'Provides support for 3rd party protocol plug-ins for Internet Connection Sharing',\n 'display_name': 'Application Layer Gateway Service',\n 'name': 'alg',\n 'pid': None,\n 'start_type': 'manual',\n 'status': 'stopped',\n 'username': 'NT AUTHORITY\\\\LocalService'}\n\nProjects using psutil\n=====================\n\nHere's some I find particularly interesting:\n\n- https://github.com/giampaolo/psleak\n- https://github.com/google/grr\n- https://github.com/facebook/osquery/\n- https://github.com/nicolargo/glances\n- https://github.com/aristocratos/bpytop\n- https://github.com/Jahaja/psdash\n- https://github.com/ajenti/ajenti\n- https://github.com/home-assistant/home-assistant/\n\nPortings\n========\n\n- Go: https://github.com/shirou/gopsutil\n- C: https://github.com/hamon-in/cpslib\n- Rust: https://github.com/rust-psutil/rust-psutil\n- Nim: https://github.com/johnscillieri/psutil-nim\n\n\n\n", + "description_content_type": "text/x-rst", + "keywords": [ + "ps", + "top", + "kill", + "free", + "lsof", + "netstat", + "nice", + "tty", + "ionice", + "uptime", + "taskmgr", + "process", + "df", + "iotop", + "iostat", + "ifconfig", + "taskset", + "who", + "pidof", + "pmap", + "smem", + "pstree", + "monitoring", + "ulimit", + "prlimit", + "smem", + "performance", + "metrics", + "agent", + "observability" + ], + "home_page": "https://github.com/giampaolo/psutil", + "author": "Giampaolo Rodola", + "author_email": "g.rodola@gmail.com", + "license": "BSD-3-Clause", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Environment :: Console", + "Intended Audience :: Developers", + "Intended Audience :: Information Technology", + "Intended Audience :: System Administrators", + "Operating System :: MacOS :: MacOS X", + "Operating System :: Microsoft :: Windows :: Windows 10", + "Operating System :: Microsoft :: Windows :: Windows 11", + "Operating System :: Microsoft :: Windows :: Windows 7", + "Operating System :: Microsoft :: Windows :: Windows 8", + "Operating System :: Microsoft :: Windows :: Windows 8.1", + "Operating System :: Microsoft :: Windows :: Windows Server 2003", + "Operating System :: Microsoft :: Windows :: Windows Server 2008", + "Operating System :: Microsoft :: Windows :: Windows Vista", + "Operating System :: Microsoft :: Windows", + "Operating System :: Microsoft", + "Operating System :: OS Independent", + "Operating System :: POSIX :: AIX", + "Operating System :: POSIX :: BSD :: FreeBSD", + "Operating System :: POSIX :: BSD :: NetBSD", + "Operating System :: POSIX :: BSD :: OpenBSD", + "Operating System :: POSIX :: BSD", + "Operating System :: POSIX :: Linux", + "Operating System :: POSIX :: SunOS/Solaris", + "Operating System :: POSIX", + "Programming Language :: C", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Programming Language :: Python", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Software Development :: Libraries", + "Topic :: System :: Benchmark", + "Topic :: System :: Hardware", + "Topic :: System :: Monitoring", + "Topic :: System :: Networking :: Monitoring :: Hardware Watchdog", + "Topic :: System :: Networking :: Monitoring", + "Topic :: System :: Networking", + "Topic :: System :: Operating System", + "Topic :: System :: Systems Administration", + "Topic :: Utilities" + ], + "requires_dist": [ + "psleak ; extra == 'dev'", + "pytest ; extra == 'dev'", + "pytest-instafail ; extra == 'dev'", + "pytest-xdist ; extra == 'dev'", + "setuptools ; extra == 'dev'", + "abi3audit ; extra == 'dev'", + "black ; extra == 'dev'", + "check-manifest ; extra == 'dev'", + "coverage ; extra == 'dev'", + "packaging ; extra == 'dev'", + "pylint ; extra == 'dev'", + "pyperf ; extra == 'dev'", + "pypinfo ; extra == 'dev'", + "pytest-cov ; extra == 'dev'", + "requests ; extra == 'dev'", + "rstcheck ; extra == 'dev'", + "ruff ; extra == 'dev'", + "sphinx ; extra == 'dev'", + "sphinx-rtd-theme ; extra == 'dev'", + "toml-sort ; extra == 'dev'", + "twine ; extra == 'dev'", + "validate-pyproject[all] ; extra == 'dev'", + "virtualenv ; extra == 'dev'", + "vulture ; extra == 'dev'", + "wheel ; extra == 'dev'", + "colorama ; (os_name == \"nt\") and extra == 'dev'", + "pyreadline3 ; (os_name == \"nt\") and extra == 'dev'", + "pywin32 ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'dev'", + "wheel ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'dev'", + "wmi ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'dev'", + "psleak ; extra == 'test'", + "pytest ; extra == 'test'", + "pytest-instafail ; extra == 'test'", + "pytest-xdist ; extra == 'test'", + "setuptools ; extra == 'test'", + "pywin32 ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'test'", + "wheel ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'test'", + "wmi ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'test'" + ], + "requires_python": ">=3.6", + "provides_extra": [ + "dev", + "test" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/5c/44/c85361f65dbe00eea8576ee467c768d25129989efb76e94f205e9ca9bb46/pillow-12.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", + "archive_info": { + "hashes": { + "sha256": "251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b" + }, + "hash": "sha256=251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.4", + "name": "pillow", + "version": "12.3.0", + "dynamic": [ + "license-file" + ], + "summary": "Python Imaging Library (fork)", + "description": "

\n \"Pillow\n

\n\n# Pillow\n\n## Python Imaging Library (Fork)\n\nPillow is the friendly PIL fork by [Jeffrey 'Alex' Clark and\ncontributors](https://github.com/python-pillow/Pillow/graphs/contributors).\nPIL is the Python Imaging Library by Fredrik Lundh and contributors.\nDevelopment is supported by:\n- [Tidelift](https://tidelift.com/subscription/pkg/pypi-pillow?utm_source=pypi-pillow&utm_medium=readme&utm_campaign=enterprise) (since 2018)\n- [Thanks.dev](https://thanks.dev) (since 2023)\n- [GitHub Sponsors](https://github.com/sponsors/python-pillow) (since 2026)\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
docs\n \n
tests\n \n \n \n \n \n \n \n \n
package\n \n \n \n \n \n
social\n \n \n
\n\n## Overview\n\nThe Python Imaging Library adds image processing capabilities to your Python interpreter.\n\nThis library provides extensive file format support, an efficient internal representation, and fairly powerful image processing capabilities.\n\nThe core image library is designed for fast access to data stored in a few basic pixel formats. It should provide a solid foundation for a general image processing tool.\n\n## More information\n\n- [Documentation](https://pillow.readthedocs.io/)\n - [Installation](https://pillow.readthedocs.io/en/latest/installation/basic-installation.html)\n - [Handbook](https://pillow.readthedocs.io/en/latest/handbook/index.html)\n- [Contribute](https://github.com/python-pillow/Pillow/blob/main/.github/CONTRIBUTING.md)\n - [Issues](https://github.com/python-pillow/Pillow/issues)\n - [Pull requests](https://github.com/python-pillow/Pillow/pulls)\n- [Release notes](https://pillow.readthedocs.io/en/stable/releasenotes/index.html)\n- [Changelog](https://github.com/python-pillow/Pillow/releases)\n - [Pre-fork](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst#pre-fork)\n\n## Report a vulnerability\n\nTo report sensitive vulnerability information, report it [privately on GitHub](https://github.com/python-pillow/Pillow/security/advisories/new).\n\nIf you cannot use GitHub, use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure.\n\nDO NOT report sensitive vulnerability information in public.\n", + "description_content_type": "text/markdown", + "keywords": [ + "Imaging" + ], + "author_email": "Jeffrey 'Alex' Clark ", + "license_expression": "MIT-CMU", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 6 - Mature", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Multimedia :: Graphics", + "Topic :: Multimedia :: Graphics :: Capture :: Digital Camera", + "Topic :: Multimedia :: Graphics :: Capture :: Screen Capture", + "Topic :: Multimedia :: Graphics :: Graphics Conversion", + "Topic :: Multimedia :: Graphics :: Viewers", + "Typing :: Typed" + ], + "requires_dist": [ + "furo; extra == \"docs\"", + "olefile; extra == \"docs\"", + "sphinx>=8.2; extra == \"docs\"", + "sphinx-autobuild; extra == \"docs\"", + "sphinx-copybutton; extra == \"docs\"", + "sphinx-inline-tabs; extra == \"docs\"", + "sphinxext-opengraph; extra == \"docs\"", + "olefile; extra == \"fpx\"", + "olefile; extra == \"mic\"", + "arro3-compute; extra == \"test-arrow\"", + "arro3-core; extra == \"test-arrow\"", + "nanoarrow; extra == \"test-arrow\"", + "pyarrow; extra == \"test-arrow\"", + "coverage>=7.4.2; extra == \"tests\"", + "defusedxml; extra == \"tests\"", + "markdown2; extra == \"tests\"", + "olefile; extra == \"tests\"", + "packaging; extra == \"tests\"", + "pytest; extra == \"tests\"", + "pytest-cov; extra == \"tests\"", + "pytest-timeout; extra == \"tests\"", + "pytest-xdist; extra == \"tests\"", + "setuptools; extra == \"tests\"", + "trove-classifiers>=2024.10.12; extra == \"tests\"", + "defusedxml; extra == \"xmp\"" + ], + "requires_python": ">=3.10", + "project_url": [ + "Release notes, https://pillow.readthedocs.io/en/stable/releasenotes/index.html", + "Changelog, https://github.com/python-pillow/Pillow/releases", + "Documentation, https://pillow.readthedocs.io", + "Funding, https://tidelift.com/subscription/pkg/pypi-pillow?utm_source=pypi-pillow&utm_medium=pypi", + "Homepage, https://python-pillow.github.io", + "Mastodon, https://fosstodon.org/@pillow", + "Source, https://github.com/python-pillow/Pillow" + ], + "provides_extra": [ + "docs", + "fpx", + "mic", + "test-arrow", + "tests", + "xmp" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/28/50/f203ff3a3ddfe19308efc83c5a3a29ed02bf786732ec35e68bf9162f3365/safetensors-0.8.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "archive_info": { + "hashes": { + "sha256": "fd6f3f93c9a0a7cc2788ee63fb763353d4bd2e89b0751bc78fcf7dda00bea774" + }, + "hash": "sha256=fd6f3f93c9a0a7cc2788ee63fb763353d4bd2e89b0751bc78fcf7dda00bea774" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.4", + "name": "safetensors", + "version": "0.8.0", + "description": "## Installation\n\n```\npip install safetensors\n```\n\n\n## Usage\n\n### Numpy\n\n```python\nfrom safetensors.numpy import save_file, load_file\nimport numpy as np\n\ntensors = {\n \"a\": np.zeros((2, 2)),\n \"b\": np.zeros((2, 3), dtype=np.uint8)\n}\n\nsave_file(tensors, \"./model.safetensors\")\n\n\n# Now loading\nloaded = load_file(\"./model.safetensors\")\n```\n\n### Torch\n\n```python\nfrom safetensors.torch import save_file, load_file\nimport torch\n\ntensors = {\n \"a\": torch.zeros((2, 2)),\n \"b\": torch.zeros((2, 3), dtype=torch.uint8)\n}\n\nsave_file(tensors, \"./model.safetensors\")\n\n\n# Now loading\nloaded = load_file(\"./model.safetensors\")\n```\n\n### Developing\n\n```\n# inside ./safetensors/bindings/python\npip install .[dev]\n```\nShould be enough to install this library locally.\n\n### Testing\n\n```\n# inside ./safetensors/bindings/python\npip install .[dev]\npytest -sv tests/\n```\n\n", + "description_content_type": "text/markdown; charset=UTF-8; variant=GFM", + "author_email": "Nicolas Patry , Luc Georges , Daniël De Kok ", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Intended Audience :: Education", + "Intended Audience :: Science/Research", + "License :: OSI Approved :: Apache Software License", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Topic :: Scientific/Engineering :: Artificial Intelligence", + "Typing :: Typed" + ], + "requires_dist": [ + "safetensors[torch] ; extra == 'all'", + "safetensors[numpy] ; extra == 'all'", + "safetensors[jax] ; extra == 'all'", + "safetensors[paddlepaddle] ; extra == 'all'", + "safetensors[convert] ; extra == 'all'", + "safetensors[quality] ; extra == 'all'", + "safetensors[testing] ; extra == 'all'", + "safetensors[torch] ; extra == 'convert'", + "huggingface-hub>=1.4 ; extra == 'convert'", + "safetensors[all] ; extra == 'dev'", + "safetensors[pinned-tf] ; extra == 'dev'", + "safetensors[numpy] ; extra == 'jax'", + "flax>=0.6.3 ; extra == 'jax'", + "jax>=0.3.25 ; extra == 'jax'", + "jaxlib>=0.3.25 ; extra == 'jax'", + "mlx>=0.0.9 ; extra == 'mlx'", + "numpy>=1.24.6 ; extra == 'numpy'", + "safetensors[numpy] ; extra == 'paddlepaddle'", + "paddlepaddle>=2.4.1 ; extra == 'paddlepaddle'", + "safetensors[numpy] ; extra == 'pinned-tf'", + "tensorflow==2.18.0 ; extra == 'pinned-tf'", + "ruff ; extra == 'quality'", + "safetensors[numpy] ; extra == 'tensorflow'", + "tensorflow>=2.11.0 ; extra == 'tensorflow'", + "safetensors[numpy] ; extra == 'testing'", + "h5py>=3.7.0 ; extra == 'testing'", + "setuptools-rust>=1.12.0 ; extra == 'testing'", + "pytest>=9.0 ; extra == 'testing'", + "pytest-benchmark>=5.2 ; extra == 'testing'", + "hypothesis>=6.70.2 ; extra == 'testing'", + "fsspec>=2024.6.0 ; extra == 'testing'", + "s3fs>=2024.6.0 ; extra == 'testing'", + "safetensors[numpy] ; extra == 'tf-nightly'", + "tf-nightly ; extra == 'tf-nightly'", + "safetensors[numpy] ; extra == 'torch'", + "torch>=2.4 ; extra == 'torch'" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://github.com/huggingface/safetensors", + "Source, https://github.com/huggingface/safetensors" + ], + "provides_extra": [ + "all", + "convert", + "dev", + "jax", + "mlx", + "numpy", + "paddlepaddle", + "pinned-tf", + "quality", + "tensorflow", + "testing", + "tf-nightly", + "torch" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101" + }, + "hash": "sha256=117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "annotated-doc", + "version": "0.0.5", + "summary": "Document parameters, class attributes, return types, and variables inline, with Annotated.", + "description": "# Annotated Doc\n\nDocument parameters, class attributes, return types, and variables inline, with `Annotated`.\n\n\n \"Test\"\n\n\n \"Coverage\"\n\n\n \"Package\n\n\n \"Supported\n\n\n## Installation\n\n```bash\npip install annotated-doc\n```\n\nOr with `uv`:\n\n```Python\nuv add annotated-doc\n```\n\n## Usage\n\nImport `Doc` and pass a single literal string with the documentation for the specific parameter, class attribute, return type, or variable.\n\nFor example, to document a parameter `name` in a function `hi` you could do:\n\n```Python\nfrom typing import Annotated\n\nfrom annotated_doc import Doc\n\ndef hi(name: Annotated[str, Doc(\"Who to say hi to\")]) -> None:\n print(f\"Hi, {name}!\")\n```\n\nYou can also use it to document class attributes:\n\n```Python\nfrom typing import Annotated\n\nfrom annotated_doc import Doc\n\nclass User:\n name: Annotated[str, Doc(\"The user's name\")]\n age: Annotated[int, Doc(\"The user's age\")]\n```\n\nThe same way, you could document return types and variables, or anything that could have a type annotation with `Annotated`.\n\n## Who Uses This\n\n`annotated-doc` was made for:\n\n* [FastAPI](https://fastapi.tiangolo.com/)\n* [Typer](https://typer.tiangolo.com/)\n* [SQLModel](https://sqlmodel.tiangolo.com/)\n* [Asyncer](https://asyncer.tiangolo.com/)\n\n`annotated-doc` is supported by [griffe-typingdoc](https://github.com/mkdocstrings/griffe-typingdoc), which powers reference documentation like the one in the [FastAPI Reference](https://fastapi.tiangolo.com/reference/).\n\n## Reasons not to use `annotated-doc`\n\nYou are already comfortable with one of the existing docstring formats, like:\n\n* Sphinx\n* numpydoc\n* Google\n* Keras\n\nYour team is already comfortable using them.\n\nYou prefer having the documentation about parameters all together in a docstring, separated from the code defining them.\n\nYou care about a specific set of users, using one specific editor, and that editor already has support for the specific docstring format you use.\n\n## Reasons to use `annotated-doc`\n\n* No micro-syntax to learn for newcomers, it’s **just Python** syntax.\n* **Editing** would be already fully supported by default by any editor (current or future) supporting Python syntax, including syntax errors, syntax highlighting, etc.\n* **Rendering** would be relatively straightforward to implement by static tools (tools that don't need runtime execution), as the information can be extracted from the AST they normally already create.\n* **Deduplication of information**: the name of a parameter would be defined in a single place, not duplicated inside of a docstring.\n* **Elimination** of the possibility of having **inconsistencies** when removing a parameter or class variable and **forgetting to remove** its documentation.\n* **Minimization** of the probability of adding a new parameter or class variable and **forgetting to add its documentation**.\n* **Elimination** of the possibility of having **inconsistencies** between the **name** of a parameter in the **signature** and the name in the docstring when it is renamed.\n* **Access** to the documentation string for each symbol at **runtime**, including existing (older) Python versions.\n* A more formalized way to document other symbols, like type aliases, that could use Annotated.\n* **Support** for apps using FastAPI, Typer and others.\n* **AI Accessibility**: AI tools will have an easier way understanding each parameter as the distance from documentation to parameter is much closer.\n\n## History\n\nI ([@tiangolo](https://github.com/tiangolo)) originally wanted for this to be part of the Python standard library (in [PEP 727](https://peps.python.org/pep-0727/)), but the proposal was withdrawn as there was a fair amount of negative feedback and opposition.\n\nThe conclusion was that this was better done as an external effort, in a third-party library.\n\nSo, here it is, with a simpler approach, as a third-party library, in a way that can be used by others, starting with FastAPI and friends.\n\n## License\n\nThis project is licensed under the terms of the MIT license.\n", + "description_content_type": "text/markdown", + "author_email": "=?utf-8?q?Sebasti=C3=A1n_Ram=C3=ADrez?= ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Intended Audience :: Information Technology", + "Intended Audience :: System Administrators", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python", + "Topic :: Internet", + "Topic :: Software Development :: Libraries :: Application Frameworks", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Software Development :: Libraries", + "Topic :: Software Development", + "Typing :: Typed", + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14" + ], + "requires_python": ">=3.9", + "project_url": [ + "Homepage, https://github.com/fastapi/annotated-doc", + "Documentation, https://github.com/fastapi/annotated-doc", + "Repository, https://github.com/fastapi/annotated-doc", + "Issues, https://github.com/fastapi/annotated-doc/issues", + "Changelog, https://github.com/fastapi/annotated-doc/release-notes.md" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360" + }, + "hash": "sha256=255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "click", + "version": "8.5.0", + "summary": "Composable command line interface toolkit", + "description": "
\"\"
\n\n# Click\n\nClick is a Python package for creating beautiful command line interfaces\nin a composable way with as little code as necessary. It's the \"Command\nLine Interface Creation Kit\". It's highly configurable but comes with\nsensible defaults out of the box.\n\nIt aims to make the process of writing command line tools quick and fun\nwhile also preventing any frustration caused by the inability to\nimplement an intended CLI API.\n\nClick in three points:\n\n- Arbitrary nesting of commands\n- Automatic help page generation\n- Supports lazy loading of subcommands at runtime\n\n\n## A Simple Example\n\n```python\nimport click\n\n@click.command()\n@click.option(\"--count\", default=1, help=\"Number of greetings.\")\n@click.option(\"--name\", prompt=\"Your name\", help=\"The person to greet.\")\ndef hello(count, name):\n \"\"\"Simple program that greets NAME for a total of COUNT times.\"\"\"\n for _ in range(count):\n click.echo(f\"Hello, {name}!\")\n\nif __name__ == '__main__':\n hello()\n```\n\n```\n$ python hello.py --count=3\nYour name: Click\nHello, Click!\nHello, Click!\nHello, Click!\n```\n\n\n## Donate\n\nThe Pallets organization develops and supports Click and other popular\npackages. In order to grow the community of contributors and users, and\nallow the maintainers to devote more time to the projects, [please\ndonate today][].\n\n[please donate today]: https://palletsprojects.com/donate\n\n## Contributing\n\nSee our [detailed contributing documentation][contrib] for many ways to\ncontribute, including reporting issues, requesting features, asking or answering\nquestions, and making PRs.\n\n[contrib]: https://palletsprojects.com/contributing/\n\n", + "description_content_type": "text/markdown", + "maintainer_email": "Pallets ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.txt" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Typing :: Typed" + ], + "requires_python": ">=3.10", + "project_url": [ + "Changes, https://click.palletsprojects.com/page/changes/", + "Chat, https://discord.gg/pallets", + "Documentation, https://click.palletsprojects.com/", + "Donate, https://palletsprojects.com/donate", + "Source, https://github.com/pallets/click/" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/6c/c0/a98505f18594f1bce828bb159cec0fcf9860562f1a2c85913409fc8f3d9e/fsspec-2026.9.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f" + }, + "hash": "sha256=8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "fsspec", + "version": "2026.9.0", + "summary": "File-system specification", + "description": "# filesystem_spec\n\n[![PyPI version](https://badge.fury.io/py/fsspec.svg)](https://pypi.python.org/pypi/fsspec/)\n[![Anaconda-Server Badge](https://anaconda.org/conda-forge/fsspec/badges/version.svg)](https://anaconda.org/conda-forge/fsspec)\n![Build](https://github.com/fsspec/filesystem_spec/workflows/CI/badge.svg)\n[![Docs](https://readthedocs.org/projects/filesystem-spec/badge/?version=latest)](https://filesystem-spec.readthedocs.io/en/latest/?badge=latest)\n\nA specification for pythonic filesystems.\n\n## Install\n\n```bash\npip install fsspec\n```\n\nwould install the base fsspec. Various optionally supported features might require specification of custom\nextra require, e.g. `pip install fsspec[ssh]` will install dependencies for `ssh` backends support.\nUse `pip install fsspec[full]` for installation of all known extra dependencies.\n\nUp-to-date package also provided through conda-forge distribution:\n\n```bash\nconda install -c conda-forge fsspec\n```\n\n\n## Purpose\n\nTo produce a template or specification for a file-system interface, that specific implementations should follow,\nso that applications making use of them can rely on a common behaviour and not have to worry about the specific\ninternal implementation decisions with any given backend. Many such implementations are included in this package,\nor in sister projects such as `s3fs` and `gcsfs`.\n\nIn addition, if this is well-designed, then additional functionality, such as a key-value store or FUSE\nmounting of the file-system implementation may be available for all implementations \"for free\".\n\n## Documentation\n\nPlease refer to [RTD](https://filesystem-spec.readthedocs.io/en/latest/?badge=latest)\n\n## Develop\n\nfsspec uses GitHub Actions for CI. Environment files can be found\nin the \"ci/\" directory. Note that the main environment is called \"py38\",\nbut it is expected that the version of python installed be adjustable at\nCI runtime. For local use, pick a version suitable for you.\n\n```bash\n# For a new environment (mamba / conda).\nmamba create -n fsspec -c conda-forge python=3.10 -y\nconda activate fsspec\n\n# Standard dev install with docs and tests.\npip install -e \".[dev,doc,test]\"\n\n# Full tests except for downstream\npip install s3fs\npip uninstall s3fs\npip install -e .[dev,doc,test_full]\npip install s3fs --no-deps\npytest -v\n\n# Downstream tests.\nsh install_s3fs.sh\n# Windows powershell.\ninstall_s3fs.sh\n```\n\n### Testing\n\nTests can be run in the dev environment, if activated, via ``pytest fsspec``.\n\nThe full fsspec suite requires a system-level docker, docker-compose, and fuse\ninstallation. If only making changes to one backend implementation, it is\nnot generally necessary to run all tests locally.\n\nIt is expected that contributors ensure that any change to fsspec does not\ncause issues or regressions for either other fsspec-related packages such\nas gcsfs and s3fs, nor for downstream users of fsspec. The \"downstream\" CI\nrun and corresponding environment file run a set of tests from the dask\ntest suite, and very minimal tests against pandas and zarr from the\ntest_downstream.py module in this repo.\n\n### Code Formatting\n\nfsspec uses [Black](https://black.readthedocs.io/en/stable) to ensure\na consistent code format throughout the project.\nRun ``black fsspec`` from the root of the filesystem_spec repository to\nauto-format your code. Additionally, many editors have plugins that will apply\n``black`` as you edit files. ``black`` is included in the ``tox`` environments.\n\nOptionally, you may wish to setup [pre-commit hooks](https://pre-commit.com) to\nautomatically run ``black`` when you make a git commit.\nRun ``pre-commit install --install-hooks`` from the root of the\nfilesystem_spec repository to setup pre-commit hooks. ``black`` will now be run\nbefore you commit, reformatting any changed files. You can format without\ncommitting via ``pre-commit run`` or skip these checks with ``git commit\n--no-verify``.\n\n## Support\n\nWork on this repository is supported in part by:\n\n\"Anaconda, Inc. - Advancing AI through open source.\"\n\n\"anaconda\n", + "description_content_type": "text/markdown", + "keywords": [ + "file" + ], + "maintainer_email": "Martin Durant ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14" + ], + "requires_dist": [ + "adlfs; extra == 'abfs'", + "adlfs; extra == 'adl'", + "pyarrow>=1; extra == 'arrow'", + "dask; extra == 'dask'", + "distributed; extra == 'dask'", + "pre-commit; extra == 'dev'", + "ruff>=0.5; extra == 'dev'", + "numpydoc; extra == 'doc'", + "sphinx; extra == 'doc'", + "sphinx-design; extra == 'doc'", + "sphinx-rtd-theme; extra == 'doc'", + "yarl; extra == 'doc'", + "dropbox; extra == 'dropbox'", + "dropboxdrivefs; extra == 'dropbox'", + "requests; extra == 'dropbox'", + "adlfs; extra == 'full'", + "aiohttp!=4.0.0a0,!=4.0.0a1; extra == 'full'", + "dask; extra == 'full'", + "distributed; extra == 'full'", + "dropbox; extra == 'full'", + "dropboxdrivefs; extra == 'full'", + "fusepy; extra == 'full'", + "gcsfs>=2026.4.0; extra == 'full'", + "libarchive-c; extra == 'full'", + "ocifs; extra == 'full'", + "panel; extra == 'full'", + "paramiko; extra == 'full'", + "pyarrow>=1; extra == 'full'", + "pygit2; extra == 'full'", + "requests; extra == 'full'", + "s3fs>=2026.6.0; extra == 'full'", + "smbprotocol; extra == 'full'", + "tqdm; extra == 'full'", + "fusepy; extra == 'fuse'", + "gcsfs>=2026.4.0; extra == 'gcs'", + "pygit2; extra == 'git'", + "requests; extra == 'github'", + "gcsfs>=2026.4.0; extra == 'gs'", + "panel; extra == 'gui'", + "pyarrow>=1; extra == 'hdfs'", + "aiohttp!=4.0.0a0,!=4.0.0a1; extra == 'http'", + "libarchive-c; extra == 'libarchive'", + "ocifs; extra == 'oci'", + "s3fs>=2026.6.0; extra == 's3'", + "paramiko; extra == 'sftp'", + "smbprotocol; extra == 'smb'", + "paramiko; extra == 'ssh'", + "aiohttp!=4.0.0a0,!=4.0.0a1; extra == 'test'", + "numpy; extra == 'test'", + "pytest; extra == 'test'", + "pytest-asyncio!=0.22.0; extra == 'test'", + "pytest-benchmark; extra == 'test'", + "pytest-cov; extra == 'test'", + "pytest-mock; extra == 'test'", + "pytest-recording; extra == 'test'", + "pytest-rerunfailures; extra == 'test'", + "requests; extra == 'test'", + "aiobotocore<3.0.0,>=2.5.4; extra == 'test-downstream'", + "dask[dataframe,test]; extra == 'test-downstream'", + "moto[server]<5,>4; extra == 'test-downstream'", + "pytest-timeout; extra == 'test-downstream'", + "xarray; extra == 'test-downstream'", + "zarr; extra == 'test-downstream'", + "adlfs; extra == 'test-full'", + "aiohttp!=4.0.0a0,!=4.0.0a1; extra == 'test-full'", + "backports-zstd; (python_version < '3.14') and extra == 'test-full'", + "cloudpickle; extra == 'test-full'", + "dask; extra == 'test-full'", + "distributed; extra == 'test-full'", + "dropbox; extra == 'test-full'", + "dropboxdrivefs; extra == 'test-full'", + "fastparquet; extra == 'test-full'", + "fusepy; extra == 'test-full'", + "gcsfs>=2026.4.0; extra == 'test-full'", + "jinja2; extra == 'test-full'", + "kerchunk; extra == 'test-full'", + "libarchive-c; extra == 'test-full'", + "lz4; extra == 'test-full'", + "notebook; extra == 'test-full'", + "numpy; extra == 'test-full'", + "ocifs; extra == 'test-full'", + "pandas<3.0.0; extra == 'test-full'", + "panel; extra == 'test-full'", + "paramiko; extra == 'test-full'", + "pyarrow>=1; extra == 'test-full'", + "pyftpdlib; extra == 'test-full'", + "pygit2; extra == 'test-full'", + "pytest; extra == 'test-full'", + "pytest-asyncio!=0.22.0; extra == 'test-full'", + "pytest-benchmark; extra == 'test-full'", + "pytest-cov; extra == 'test-full'", + "pytest-mock; extra == 'test-full'", + "pytest-recording; extra == 'test-full'", + "pytest-rerunfailures; extra == 'test-full'", + "python-snappy; extra == 'test-full'", + "requests; extra == 'test-full'", + "s3fs>=2026.6.0; extra == 'test-full'", + "smbprotocol; extra == 'test-full'", + "tqdm; extra == 'test-full'", + "urllib3; extra == 'test-full'", + "zarr<3.2.0; extra == 'test-full'", + "zstandard; (python_version < '3.14') and extra == 'test-full'", + "tqdm; extra == 'tqdm'" + ], + "requires_python": ">=3.10", + "project_url": [ + "Changelog, https://filesystem-spec.readthedocs.io/en/latest/changelog.html", + "Documentation, https://filesystem-spec.readthedocs.io/en/latest/", + "Homepage, https://github.com/fsspec/filesystem_spec" + ], + "provides_extra": [ + "abfs", + "adl", + "arrow", + "dask", + "dev", + "doc", + "dropbox", + "entrypoints", + "full", + "fuse", + "gcs", + "git", + "github", + "gs", + "gui", + "hdfs", + "http", + "libarchive", + "oci", + "s3", + "sftp", + "smb", + "ssh", + "test", + "test-downstream", + "test-full", + "tqdm" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86" + }, + "hash": "sha256=63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "h11", + "version": "0.16.0", + "dynamic": [ + "author", + "author-email", + "classifier", + "description", + "home-page", + "license", + "license-file", + "requires-python", + "summary" + ], + "summary": "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1", + "description": "h11\n===\n\n.. image:: https://travis-ci.org/python-hyper/h11.svg?branch=master\n :target: https://travis-ci.org/python-hyper/h11\n :alt: Automated test status\n\n.. image:: https://codecov.io/gh/python-hyper/h11/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/python-hyper/h11\n :alt: Test coverage\n\n.. image:: https://readthedocs.org/projects/h11/badge/?version=latest\n :target: http://h11.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation Status\n\nThis is a little HTTP/1.1 library written from scratch in Python,\nheavily inspired by `hyper-h2 `_.\n\nIt's a \"bring-your-own-I/O\" library; h11 contains no IO code\nwhatsoever. This means you can hook h11 up to your favorite network\nAPI, and that could be anything you want: synchronous, threaded,\nasynchronous, or your own implementation of `RFC 6214\n`_ -- h11 won't judge you.\n(Compare this to the current state of the art, where every time a `new\nnetwork API `_ comes along then someone\ngets to start over reimplementing the entire HTTP protocol from\nscratch.) Cory Benfield made an `excellent blog post describing the\nbenefits of this approach\n`_, or if you like video\nthen here's his `PyCon 2016 talk on the same theme\n`_.\n\nThis also means that h11 is not immediately useful out of the box:\nit's a toolkit for building programs that speak HTTP, not something\nthat could directly replace ``requests`` or ``twisted.web`` or\nwhatever. But h11 makes it much easier to implement something like\n``requests`` or ``twisted.web``.\n\nAt a high level, working with h11 goes like this:\n\n1) First, create an ``h11.Connection`` object to track the state of a\n single HTTP/1.1 connection.\n\n2) When you read data off the network, pass it to\n ``conn.receive_data(...)``; you'll get back a list of objects\n representing high-level HTTP \"events\".\n\n3) When you want to send a high-level HTTP event, create the\n corresponding \"event\" object and pass it to ``conn.send(...)``;\n this will give you back some bytes that you can then push out\n through the network.\n\nFor example, a client might instantiate and then send a\n``h11.Request`` object, then zero or more ``h11.Data`` objects for the\nrequest body (e.g., if this is a POST), and then a\n``h11.EndOfMessage`` to indicate the end of the message. Then the\nserver would then send back a ``h11.Response``, some ``h11.Data``, and\nits own ``h11.EndOfMessage``. If either side violates the protocol,\nyou'll get a ``h11.ProtocolError`` exception.\n\nh11 is suitable for implementing both servers and clients, and has a\npleasantly symmetric API: the events you send as a client are exactly\nthe ones that you receive as a server and vice-versa.\n\n`Here's an example of a tiny HTTP client\n`_\n\nIt also has `a fine manual `_.\n\nFAQ\n---\n\n*Whyyyyy?*\n\nI wanted to play with HTTP in `Curio\n`__ and `Trio\n`__, which at the time didn't have any\nHTTP libraries. So I thought, no big deal, Python has, like, a dozen\ndifferent implementations of HTTP, surely I can find one that's\nreusable. I didn't find one, but I did find Cory's call-to-arms\nblog-post. So I figured, well, fine, if I have to implement HTTP from\nscratch, at least I can make sure no-one *else* has to ever again.\n\n*Should I use it?*\n\nMaybe. You should be aware that it's a very young project. But, it's\nfeature complete and has an exhaustive test-suite and complete docs,\nso the next step is for people to try using it and see how it goes\n:-). If you do then please let us know -- if nothing else we'll want\nto talk to you before making any incompatible changes!\n\n*What are the features/limitations?*\n\nRoughly speaking, it's trying to be a robust, complete, and non-hacky\nimplementation of the first \"chapter\" of the HTTP/1.1 spec: `RFC 7230:\nHTTP/1.1 Message Syntax and Routing\n`_. That is, it mostly focuses on\nimplementing HTTP at the level of taking bytes on and off the wire,\nand the headers related to that, and tries to be anal about spec\nconformance. It doesn't know about higher-level concerns like URL\nrouting, conditional GETs, cross-origin cookie policies, or content\nnegotiation. But it does know how to take care of framing,\ncross-version differences in keep-alive handling, and the \"obsolete\nline folding\" rule, so you can focus your energies on the hard /\ninteresting parts for your application, and it tries to support the\nfull specification in the sense that any useful HTTP/1.1 conformant\napplication should be able to use h11.\n\nIt's pure Python, and has no dependencies outside of the standard\nlibrary.\n\nIt has a test suite with 100.0% coverage for both statements and\nbranches.\n\nCurrently it supports Python 3 (testing on 3.8-3.12) and PyPy 3.\nThe last Python 2-compatible version was h11 0.11.x.\n(Originally it had a Cython wrapper for `http-parser\n`_ and a beautiful nested state\nmachine implemented with ``yield from`` to postprocess the output. But\nI had to take these out -- the new *parser* needs fewer lines-of-code\nthan the old *parser wrapper*, is written in pure Python, uses no\nexotic language syntax, and has more features. It's sad, really; that\nold state machine was really slick. I just need a few sentences here\nto mourn that.)\n\nI don't know how fast it is. I haven't benchmarked or profiled it yet,\nso it's probably got a few pointless hot spots, and I've been trying\nto err on the side of simplicity and robustness instead of\nmicro-optimization. But at the architectural level I tried hard to\navoid fundamentally bad decisions, e.g., I believe that all the\nparsing algorithms remain linear-time even in the face of pathological\ninput like slowloris, and there are no byte-by-byte loops. (I also\nbelieve that it maintains bounded memory usage in the face of\narbitrary/pathological input.)\n\nThe whole library is ~800 lines-of-code. You can read and understand\nthe whole thing in less than an hour. Most of the energy invested in\nthis so far has been spent on trying to keep things simple by\nminimizing special-cases and ad hoc state manipulation; even though it\nis now quite small and simple, I'm still annoyed that I haven't\nfigured out how to make it even smaller and simpler. (Unfortunately,\nHTTP does not lend itself to simplicity.)\n\nThe API is ~feature complete and I don't expect the general outlines\nto change much, but you can't judge an API's ergonomics until you\nactually document and use it, so I'd expect some changes in the\ndetails.\n\n*How do I try it?*\n\n.. code-block:: sh\n\n $ pip install h11\n $ git clone git@github.com:python-hyper/h11\n $ cd h11/examples\n $ python basic-client.py\n\nand go from there.\n\n*License?*\n\nMIT\n\n*Code of conduct?*\n\nContributors are requested to follow our `code of conduct\n`_ in\nall project spaces.\n", + "home_page": "https://github.com/python-hyper/h11", + "author": "Nathaniel J. Smith", + "author_email": "njs@pobox.com", + "license": "MIT", + "license_file": [ + "LICENSE.txt" + ], + "classifier": [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Topic :: Internet :: WWW/HTTP", + "Topic :: System :: Networking" + ], + "requires_python": ">=3.8" + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0" + }, + "hash": "sha256=e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "networkx", + "version": "3.7", + "dynamic": [ + "license-file" + ], + "platform": [ + "Linux", + "Mac OSX", + "Windows", + "Unix" + ], + "summary": "Python package for creating and manipulating graphs and networks", + "description": "NetworkX\n========\n\n\n.. image::\n https://github.com/networkx/networkx/actions/workflows/test.yml/badge.svg?branch=main\n :target: https://github.com/networkx/networkx/actions/workflows/test.yml\n\n.. image::\n https://img.shields.io/pypi/v/networkx.svg?\n :target: https://pypi.python.org/pypi/networkx\n\n.. image::\n https://img.shields.io/pypi/l/networkx.svg?\n :target: https://github.com/networkx/networkx/blob/main/LICENSE.txt\n\n.. image::\n https://img.shields.io/pypi/pyversions/networkx.svg?\n :target: https://pypi.python.org/pypi/networkx\n\n.. image::\n https://insights.linuxfoundation.org/api/badge/health-score?project=networkx\n :target: https://insights.linuxfoundation.org/project/networkx\n\n\nNetworkX is a Python package for the creation, manipulation,\nand study of the structure, dynamics, and functions\nof complex networks.\n\n- **Website (including documentation):** https://networkx.org\n- **Mailing list:** https://groups.google.com/forum/#!forum/networkx-discuss\n- **Source:** https://github.com/networkx/networkx\n- **Bug reports:** https://github.com/networkx/networkx/issues\n- **Report a security vulnerability:** https://tidelift.com/security\n- **Tutorial:** https://networkx.org/documentation/latest/tutorial.html\n- **GitHub Discussions:** https://github.com/networkx/networkx/discussions\n- **Discord (Scientific Python) invite link:** https://discord.com/invite/vur45CbwMz\n- **NetworkX meetings calendar (open to all):** https://scientific-python.org/calendars/networkx.ics\n\nSimple example\n--------------\n\nFind the shortest path between two nodes in an undirected graph:\n\n.. code:: pycon\n\n >>> import networkx as nx\n >>> G = nx.Graph()\n >>> G.add_edge(\"A\", \"B\", weight=4)\n >>> G.add_edge(\"B\", \"D\", weight=2)\n >>> G.add_edge(\"A\", \"C\", weight=3)\n >>> G.add_edge(\"C\", \"D\", weight=4)\n >>> nx.shortest_path(G, \"A\", \"D\", weight=\"weight\")\n ['A', 'B', 'D']\n\nInstall\n-------\n\nInstall the latest released version of NetworkX:\n\n.. code:: shell\n\n $ pip install networkx\n\nInstall with all optional dependencies:\n\n.. code:: shell\n\n $ pip install networkx[default]\n\nFor additional details,\nplease see the `installation guide `_.\n\nBugs\n----\n\nPlease report any bugs that you find `here `_.\nOr, even better, fork the repository on `GitHub `_\nand create a pull request (PR). We welcome all changes, big or small, and we\nwill help you make the PR if you are new to `git` (just ask on the issue and/or\nsee the `contributor guide `_).\n\nLicense\n-------\n\nReleased under the `3-clause BSD license `_::\n\n Copyright (c) 2004-2026, NetworkX Developers\n Aric Hagberg \n Dan Schult \n Pieter Swart \n", + "description_content_type": "text/x-rst", + "keywords": [ + "Networks", + "Graph Theory", + "Mathematics", + "network", + "graph", + "discrete mathematics", + "math" + ], + "author_email": "Aric Hagberg ", + "maintainer_email": "NetworkX Developers ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.txt" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Intended Audience :: Science/Research", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Programming Language :: Python :: 3 :: Only", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Scientific/Engineering :: Bio-Informatics", + "Topic :: Scientific/Engineering :: Information Analysis", + "Topic :: Scientific/Engineering :: Mathematics", + "Topic :: Scientific/Engineering :: Physics" + ], + "requires_dist": [ + "asv>=0.6.5; extra == \"benchmarking\"", + "py-rattler<0.22,>=0.21; extra == \"benchmarking\"", + "virtualenv; extra == \"benchmarking\"", + "numpy>=2.2; extra == \"default\"", + "scipy>=1.15; extra == \"default\"", + "matplotlib>=3.10; extra == \"default\"", + "pandas>=2.3; extra == \"default\"", + "pre-commit>=4.1; extra == \"developer\"", + "mypy>=1.15; extra == \"developer\"", + "sphinx>=8.0; extra == \"doc\"", + "pydata-sphinx-theme>=0.16; extra == \"doc\"", + "sphinx-gallery>=0.18; extra == \"doc\"", + "numpydoc>=1.8.0; extra == \"doc\"", + "pillow>=10; extra == \"doc\"", + "texext>=0.6.7; extra == \"doc\"", + "myst-nb>=1.1; extra == \"doc\"", + "intersphinx-registry; extra == \"doc\"", + "osmnx>=2.0.0; extra == \"example\"", + "momepy>=0.7.2; extra == \"example\"", + "contextily>=1.6; extra == \"example\"", + "seaborn>=0.13; extra == \"example\"", + "cairocffi>=1.7; extra == \"example\"", + "igraph>=0.11; extra == \"example\"", + "scikit-learn>=1.6; extra == \"example\"", + "iplotx>=0.9.0; extra == \"example\"", + "hiveplotlib>=0.28; extra == \"example\"", + "lxml>=4.6; extra == \"extra\"", + "pygraphviz>=2.0; extra == \"extra\"", + "pydot>=3.0.1; extra == \"extra\"", + "sympy>=1.10; extra == \"extra\"", + "build>=0.10; extra == \"release\"", + "twine>=4.0; extra == \"release\"", + "wheel>=0.40; extra == \"release\"", + "changelist==0.5; extra == \"release\"", + "pytest>=7.2; extra == \"test\"", + "pytest-cov>=4.0; extra == \"test\"", + "pytest-xdist>=3.0; extra == \"test\"", + "pytest-mpl; extra == \"test-extras\"", + "pytest-randomly; extra == \"test-extras\"" + ], + "requires_python": "!=3.14.1,>=3.12", + "project_url": [ + "Homepage, https://networkx.org/", + "Bug Tracker, https://github.com/networkx/networkx/issues", + "Documentation, https://networkx.org/documentation/stable/", + "Source Code, https://github.com/networkx/networkx" + ], + "provides_extra": [ + "benchmarking", + "default", + "developer", + "doc", + "example", + "extra", + "release", + "test", + "test-extras" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73" + }, + "hash": "sha256=346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "pydantic", + "version": "2.13.5", + "summary": "Data validation using Python type hints", + "description": "# Pydantic Validation\n\n[![CI](https://img.shields.io/github/actions/workflow/status/pydantic/pydantic/ci.yml?branch=main&logo=github&label=CI)](https://github.com/pydantic/pydantic/actions?query=event%3Apush+branch%3Amain+workflow%3ACI)\n[![Coverage](https://coverage-badge.samuelcolvin.workers.dev/pydantic/pydantic.svg)](https://coverage-badge.samuelcolvin.workers.dev/redirect/pydantic/pydantic)\n[![pypi](https://img.shields.io/pypi/v/pydantic.svg)](https://pypi.python.org/pypi/pydantic)\n[![CondaForge](https://img.shields.io/conda/v/conda-forge/pydantic.svg)](https://anaconda.org/conda-forge/pydantic)\n[![downloads](https://static.pepy.tech/badge/pydantic/month)](https://pepy.tech/project/pydantic)\n[![versions](https://img.shields.io/pypi/pyversions/pydantic.svg)](https://github.com/pydantic/pydantic)\n[![license](https://img.shields.io/github/license/pydantic/pydantic.svg)](https://github.com/pydantic/pydantic/blob/main/LICENSE)\n[![Pydantic v2](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/pydantic/pydantic/main/docs/badge/v2.json)](https://docs.pydantic.dev/latest/contributing/#badges)\n[![llms.txt](https://img.shields.io/badge/llms.txt-green)](https://docs.pydantic.dev/latest/llms.txt)\n\nData validation using Python type hints.\n\nFast and extensible, Pydantic plays nicely with your linters/IDE/brain.\nDefine how data should be in pure, canonical Python 3.9+; validate it with Pydantic.\n\n## Pydantic Logfire :fire:\n\nWe've launched Pydantic Logfire to help you monitor your applications.\n[Learn more](https://pydantic.dev/logfire/?utm_source=pydantic_validation)\n\n## Pydantic V1.10 vs. V2\n\nPydantic V2 is a ground-up rewrite that offers many new features, performance improvements, and some breaking changes compared to Pydantic V1.\n\nIf you're using Pydantic V1 you may want to look at the\n[pydantic V1.10 Documentation](https://docs.pydantic.dev/) or,\n[`1.10.X-fixes` git branch](https://github.com/pydantic/pydantic/tree/1.10.X-fixes). Pydantic V2 also ships with the latest version of Pydantic V1 built in so that you can incrementally upgrade your code base and projects: `from pydantic import v1 as pydantic_v1`.\n\n## Help\n\nSee [documentation](https://docs.pydantic.dev/) for more details.\n\n## Installation\n\nInstall using `pip install -U pydantic` or `conda install pydantic -c conda-forge`.\nFor more installation options to make Pydantic even faster,\nsee the [Install](https://docs.pydantic.dev/install/) section in the documentation.\n\n## A Simple Example\n\n```python\nfrom datetime import datetime\nfrom typing import Optional\nfrom pydantic import BaseModel\n\nclass User(BaseModel):\n id: int\n name: str = 'John Doe'\n signup_ts: Optional[datetime] = None\n friends: list[int] = []\n\nexternal_data = {'id': '123', 'signup_ts': '2017-06-01 12:22', 'friends': [1, '2', b'3']}\nuser = User(**external_data)\nprint(user)\n#> User id=123 name='John Doe' signup_ts=datetime.datetime(2017, 6, 1, 12, 22) friends=[1, 2, 3]\nprint(user.id)\n#> 123\n```\n\n## Contributing\n\nFor guidance on setting up a development environment and how to make a\ncontribution to Pydantic, see\n[Contributing to Pydantic](https://docs.pydantic.dev/contributing/).\n\n## Reporting a Security Vulnerability\n\nSee our [security policy](https://github.com/pydantic/pydantic/security/policy).\n\n## Changelog\n\n\n\n\n\n## v2.13.5 (2026-08-28)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.5)\n\n### What's Changed\n\n#### Fixes\n\n* Allow reuse of validators when plugins are set by [@Viicos](https://github.com/Viicos) in [#13535](https://github.com/pydantic/pydantic/pull/13535)\n* Fix missing GC traversal on some `pydantic-core` struct fields by [@Viicos](https://github.com/Viicos) in [#13624](https://github.com/pydantic/pydantic/pull/13624)\n* Fix missing GC traversal in `pydantic-core` for `GeneralFieldsSerializer` by [@Viicos](https://github.com/Viicos) in [#13629](https://github.com/pydantic/pydantic/pull/13629)\n* Count validated model fields once in smart unions by [@tamird](https://github.com/tamird) in [#13731](https://github.com/pydantic/pydantic/pull/13731)\n\n## v2.13.4 (2026-05-06)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.4)\n\n### What's Changed\n\n#### Packaging\n\n* Bump libc from 0.2.155 to 0.2.185 by [@Viicos](https://github.com/Viicos) in [#13109](https://github.com/pydantic/pydantic/pull/13109)\n* Adapt `pydantic-core` linker flags on macOS by [@washingtoneg](https://github.com/washingtoneg) and [@Viicos](https://github.com/Viicos) in [#13147](https://github.com/pydantic/pydantic/pull/13147)\n\n#### Fixes\n\n* Preserve `RootModel` core metadata by [@Viicos](https://github.com/Viicos) in [#13129](https://github.com/pydantic/pydantic/pull/13129)\n\n## v2.13.3 (2026-04-20)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.3)\n\n### What's Changed\n\n#### Fixes\n\n* Handle `AttributeError` subclasses with `from_attributes` by [@Viicos](https://github.com/Viicos) in [#13096](https://github.com/pydantic/pydantic/pull/13096)\n\n## v2.13.2 (2026-04-17)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.2)\n\n### What's Changed\n\n#### Fixes\n\n* Fix `ValidationInfo.field_name` missing with `model_validate_json()` by [@Viicos](https://github.com/Viicos) in [#13084](https://github.com/pydantic/pydantic/pull/13084)\n\n## v2.13.1 (2026-04-15)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.1)\n\n### What's Changed\n\n#### Fixes\n\n* Fix `ValidationInfo.data` missing with `model_validate_json()` by [@davidhewitt](https://github.com/davidhewitt) in [#13079](https://github.com/pydantic/pydantic/pull/13079)\n\n## v2.13.0 (2026-04-13)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.0)\n\nThe highlights of the v2.13 release are available in the [blog post](https://pydantic.dev/articles/pydantic-v2-13-release).\nSeveral minor changes (considered non-breaking changes according to our [versioning policy](https://pydantic.dev/docs/validation/2.13/get-started/version-policy/#pydantic-v2))\nare also included in this release. Make sure to look into them before upgrading.\n\nThis release contains the updated `pydantic.v1` namespace, matching version 1.10.26 which includes support for Python 3.14.\n\n### What's Changed\n\nSee the beta releases for all changes sinces 2.12.\n\n#### New Features\n\n* Allow default factories of private attributes to take validated model data by [@Viicos](https://github.com/Viicos) in [#13013](https://github.com/pydantic/pydantic/pull/13013)\n\n#### Changes\n\n* Warn when serializing fixed length tuples with too few items by [@arvindsaripalli](https://github.com/arvindsaripalli) in [#13016](https://github.com/pydantic/pydantic/pull/13016)\n\n#### Fixes\n\n* Change type of `Any` when synthesizing `_build_sources` for `BaseSettings.__init__()` signature in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#13049](https://github.com/pydantic/pydantic/pull/13049)\n* Fix model equality when using runtime `extra` configuration by [@Viicos](https://github.com/Viicos) in [#13062](https://github.com/pydantic/pydantic/pull/13062)\n\n#### Packaging\n\n* Add zizmor for GitHub Actions workflow linting by [@Viicos](https://github.com/Viicos) in [#13039](https://github.com/pydantic/pydantic/pull/13039)\n* Update jiter to v0.14.0 to fix a segmentation fault on musl Linux by [@Viicos](https://github.com/Viicos) in [#13064](https://github.com/pydantic/pydantic/pull/13064)\n\n### New Contributors\n\n* [@arvindsaripalli](https://github.com/arvindsaripalli) made their first contribution in [#13016](https://github.com/pydantic/pydantic/pull/13016)\n\n## v2.13.0b3 (2026-03-31)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.0b3)\n\n### What's Changed\n\n#### New Features\n\n* Add `ascii_only` option to `StringConstraints` by [@ai-man-codes](https://github.com/ai-man-codes) in [#12907](https://github.com/pydantic/pydantic/pull/12907)\n* Support `exclude_if` in computed fields by [@andresliszt](https://github.com/andresliszt) in [#12748](https://github.com/pydantic/pydantic/pull/12748)\n* Push down constraints in unions involving `MISSING` sentinel by [@Viicos](https://github.com/Viicos) in [#12908](https://github.com/pydantic/pydantic/pull/12908)\n\n#### Changes\n\n* Track extra fields set after init in `model_fields_set` by [@navalprakhar](https://github.com/navalprakhar) in [#12817](https://github.com/pydantic/pydantic/pull/12817)\n* Do not include annotations that are not part of named tuple fields by [@galuszkak](https://github.com/galuszkak) in [#12951](https://github.com/pydantic/pydantic/pull/12951)\n* No longer fall back to trying all union members when the variant selected by discriminator fails to serialize by [@navalprakhar](https://github.com/navalprakhar) in [#12825](https://github.com/pydantic/pydantic/pull/12825)\n\n#### Fixes\n\n* Support discriminator metadata outside union type alias by [@Viicos](https://github.com/Viicos) in [#12785](https://github.com/pydantic/pydantic/pull/12785)\n* Respect `extras_schema` when only `extra_fields_behavior` is set on the config in JSON Schema generation for typed dictionaries by [@Viicos](https://github.com/Viicos) in [#12810](https://github.com/pydantic/pydantic/pull/12810)\n* Ensure `__pydantic_private__` is set in `model_construct()` with user-defined `model_post_init()` by [@nightcityblade](https://github.com/nightcityblade) in [#12816](https://github.com/pydantic/pydantic/pull/12816)\n* Handle all schema generation errors in `InstanceOf` by [@Viicos](https://github.com/Viicos) in [#12705](https://github.com/pydantic/pydantic/pull/12705)\n* Allow dynamic models created with `create_model()` to be used as annotations in the Mypy plugin by [@Br1an67](https://github.com/Br1an67) in [#12879](https://github.com/pydantic/pydantic/pull/12879)\n* Check for `PlaceholderNode` in Mypy plugin by [@Viicos](https://github.com/Viicos) in [#12929](https://github.com/pydantic/pydantic/pull/12929)\n* Try other branches in smart union in case of omit errors by [@mikeedjones](https://github.com/mikeedjones) in [#12758](https://github.com/pydantic/pydantic/pull/12758)\n* Patch unset attributes with `MISSING` during model serialization with `exclude_unset` by [@davidhewitt](https://github.com/davidhewitt) in [#12905](https://github.com/pydantic/pydantic/pull/12905)\n* Ensure custom `__init__()` is called when using `model_validate_strings()` by [@siewcapital](https://github.com/siewcapital) in [#12897](https://github.com/pydantic/pydantic/pull/12897)\n\n#### Packaging\n\n* Add riscv64 build target for manylinux by [@boosterl](https://github.com/boosterl) in [#12723](https://github.com/pydantic/pydantic/pull/12723)\n\n### New Contributors\n\n* [@kelsonbrito50](https://github.com/kelsonbrito50) made their first contribution in [#12860](https://github.com/pydantic/pydantic/pull/12860)\n* [@boosterl](https://github.com/boosterl) made their first contribution in [#12723](https://github.com/pydantic/pydantic/pull/12723)\n* [@adityagiri3600](https://github.com/adityagiri3600) made their first contribution in [#12868](https://github.com/pydantic/pydantic/pull/12868)\n* [@navalprakhar](https://github.com/navalprakhar) made their first contribution in [#12817](https://github.com/pydantic/pydantic/pull/12817)\n* [@Br1an67](https://github.com/Br1an67) made their first contribution in [#12879](https://github.com/pydantic/pydantic/pull/12879)\n* [@rmorshea](https://github.com/rmorshea) made their first contribution in [#12910](https://github.com/pydantic/pydantic/pull/12910)\n* [@N3XT3R1337](https://github.com/N3XT3R1337) made their first contribution in [#12922](https://github.com/pydantic/pydantic/pull/12922)\n* [@ai-man-codes](https://github.com/ai-man-codes) made their first contribution in [#12907](https://github.com/pydantic/pydantic/pull/12907)\n* [@Yume05-dev](https://github.com/Yume05-dev) made their first contribution in [#12953](https://github.com/pydantic/pydantic/pull/12953)\n* [@galuszkak](https://github.com/galuszkak) made their first contribution in [#12951](https://github.com/pydantic/pydantic/pull/12951)\n* [@siewcapital](https://github.com/siewcapital) made their first contribution in [#12897](https://github.com/pydantic/pydantic/pull/12897)\n\n## v2.13.0b2 (2026-02-24)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.0b2)\n\n### What's Changed\n\n#### Fixes\n\n* Fix backported V1 namespace by [@Viicos](https://github.com/Viicos) in [#12855](https://github.com/pydantic/pydantic/pull/12855)\n* Allow any type form to be used in `validate_as()` by [@bledden](https://github.com/bledden) in [#12846](https://github.com/pydantic/pydantic/pull/12846)\n* Fix walrus operator precedence in `UrlConstraints.__get_pydantic_core_schema__()` by [@bysiber](https://github.com/bysiber) in [#12826](https://github.com/pydantic/pydantic/pull/12826)\n\n### New Contributors\n\n* [@bledden](https://github.com/bledden) made their first contribution in [#12846](https://github.com/pydantic/pydantic/pull/12846)\n* [@bysiber](https://github.com/bysiber) made their first contribution in [#12827](https://github.com/pydantic/pydantic/pull/12827)\n\n## v2.13.0b1 (2026-02-23)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.0b1)\n\nThis is the first beta release of the 2.13 version, mainly providing bug fixes and performance improvements\nfor validation and serialization.\n\nNotable changes include:\n\n* Add a new `polymorphic_serialization` option, solving issues with `serialize_as_any` introduced in 2.12.\n* Latest V1.10.26 release under the `pydantic.v1` namespace. This version includes support for Python 3.14.\n* The [`pydantic-core`](https://github.com/pydantic/pydantic-core/) repository was merged inside the main `pydantic` one.\n\n### What's Changed\n\n#### New Features\n\n* Add `polymorphic_serialization` option by [@davidhewitt](https://github.com/davidhewitt) in [#12518](https://github.com/pydantic/pydantic/pull/12518)\n* Support Root models with `Literal` root types as discriminator field types by [@YassinNouh21](https://github.com/YassinNouh21) in [#12680](https://github.com/pydantic/pydantic/pull/12680)\n\n#### Changes\n\n* Migrate `pydantic-core` CI by [@Viicos](https://github.com/Viicos) in [#12752](https://github.com/pydantic/pydantic/pull/12752)\n* Import `pydantic-core` into pydantic by [@davidhewitt](https://github.com/davidhewitt) in [#12481](https://github.com/pydantic/pydantic/pull/12481)\n* Backport V1 changes up to v1.10.26 by [@Viicos](https://github.com/Viicos) in [#12663](https://github.com/pydantic/pydantic/pull/12663)\n* Use the `complex()` constructor unconditionally when validating `complex` Python data by [@tanmaymunjal](https://github.com/tanmaymunjal) in [#12498](https://github.com/pydantic/pydantic/pull/12498)\n* Add support for three-tuple input for `Decimal` by [@tanmaymunjal](https://github.com/tanmaymunjal) in [#12500](https://github.com/pydantic/pydantic/pull/12500)\n* Align `@field_serializer` logic with `@field_validator` by [@Viicos](https://github.com/Viicos) in [#12577](https://github.com/pydantic/pydantic/pull/12577)\n* Make `PydanticUserError` a `RuntimeError` instead of a `TypeError` by [@poliakovva](https://github.com/poliakovva) in [#12579](https://github.com/pydantic/pydantic/pull/12579)\n* Remove redundant serialization attempts in nested unions by [@davidhewitt](https://github.com/davidhewitt) in [#12604](https://github.com/pydantic/pydantic/pull/12604)\n* Copy `root` value when making root model shallow copies by [@YassinNouh21](https://github.com/YassinNouh21) in [#12679](https://github.com/pydantic/pydantic/pull/12679)\n* Ensure deterministic JSON schema defaults by sorting sets by [@drshvik](https://github.com/drshvik) in [#12760](https://github.com/pydantic/pydantic/pull/12760)\n\n#### Performance\n\n* Refactor `DecoratorInfos.build()` implementation by [@Viicos](https://github.com/Viicos) in [#12536](https://github.com/pydantic/pydantic/pull/12536)\n* Cache compiled regex in `pydantic-core` by [@Viicos](https://github.com/Viicos) in [#12549](https://github.com/pydantic/pydantic/pull/12549)\n* Optimize creation of `Literal` validators by [@davidhewitt](https://github.com/davidhewitt) in [#12569](https://github.com/pydantic/pydantic/pull/12569)\n* Optimize implementation of `LookupKey` by [@davidhewitt](https://github.com/davidhewitt) in [#12571](https://github.com/pydantic/pydantic/pull/12571)\n* Use python strings for field names by [@davidhewitt](https://github.com/davidhewitt) in [#12631](https://github.com/pydantic/pydantic/pull/12631)\n* Optimize datetime formatting code by [@davidhewitt](https://github.com/davidhewitt) in [#12626](https://github.com/pydantic/pydantic/pull/12626)\n* Validate JSON model data by iteration by [@davidhewitt](https://github.com/davidhewitt) in [#12550](https://github.com/pydantic/pydantic/pull/12550)\n* Optimize annotations evaluation of Pydantic models by [@Viicos](https://github.com/Viicos) in [#12681](https://github.com/pydantic/pydantic/pull/12681)\n* Optimize `FieldInfo._copy()` by [@Viicos](https://github.com/Viicos) in [#12727](https://github.com/pydantic/pydantic/pull/12727)\n\n#### Fixes\n\n* Fix `FieldInfo` rebuilding when parameterizing generic models with an `Annotated` type by [@Viicos](https://github.com/Viicos) in [#12463](https://github.com/pydantic/pydantic/pull/12463)\n* Fix nested model schema deduplication in JSON schema generation by [@marwan-alloreview](https://github.com/marwan-alloreview) in [#12494](https://github.com/pydantic/pydantic/pull/12494)\n* Fix `InitVar` being ignored when using with the `pydantic.Field()` function by [@Viicos](https://github.com/Viicos) in [#12495](https://github.com/pydantic/pydantic/pull/12495)\n* Fix support for enums with `NamedTuple` as values by [@Viicos](https://github.com/Viicos) in [#12506](https://github.com/pydantic/pydantic/pull/12506)\n* Do not delete mock validator/serializer in `rebuild_dataclass()` by [@Viicos](https://github.com/Viicos) in [#12513](https://github.com/pydantic/pydantic/pull/12513)\n* Require test suite to pass with free threading, switch back to global generic types cache by [@davidhewitt](https://github.com/davidhewitt) in [#12537](https://github.com/pydantic/pydantic/pull/12537)\n* Refactor `__pydantic_extra__` annotation handling by [@Viicos](https://github.com/Viicos) in [#12563](https://github.com/pydantic/pydantic/pull/12563)\n* Do not add claim of UUID \"safety\" provision by [@davidhewitt](https://github.com/davidhewitt) in [#12567](https://github.com/pydantic/pydantic/pull/12567)\n* Use Python hash to perform lookup in tagged union serializer by [@davidhewitt](https://github.com/davidhewitt) in [#12594](https://github.com/pydantic/pydantic/pull/12594)\n* Do not emit serialization warning `MISSING` sentinel is present in a nested model by [@Viicos](https://github.com/Viicos) in [#12635](https://github.com/pydantic/pydantic/pull/12635)\n* Do not eagerly evaluate annotations in signature logic by [@Viicos](https://github.com/Viicos) in [#12660](https://github.com/pydantic/pydantic/pull/12660)\n* Fix serialization of typed dict unions when `exclude_none` is set by [@davidhewitt](https://github.com/davidhewitt) in [#12677](https://github.com/pydantic/pydantic/pull/12677)\n* Do not reuse prebuilt serializers/validators on rebuilds by [@lmmx](https://github.com/lmmx) in [#12689](https://github.com/pydantic/pydantic/pull/12689)\n* Fix type annotation of `field_definitions` in `create_model()` by [@lehmann-hqs](https://github.com/lehmann-hqs) in [#12734](https://github.com/pydantic/pydantic/pull/12734)\n* Fix incorrect dataclass constructor signature when overriding class `kw_only` with `Field()` by [@jfadia](https://github.com/jfadia) in [#12741](https://github.com/pydantic/pydantic/pull/12741)\n* Use `typing.Union` when replacing types under Python 3.14 by [@Viicos](https://github.com/Viicos) in [#12733](https://github.com/pydantic/pydantic/pull/12733)\n* Improve ImportString error when internal imports fail by [@tsembp](https://github.com/tsembp) in [#12740](https://github.com/pydantic/pydantic/pull/12740)\n* Fix serializing complex numbers with negative zero imaginary part by [@lhnwrk](https://github.com/lhnwrk) in [#12770](https://github.com/pydantic/pydantic/pull/12770)\n* Preserve custom docstrings on stdlib dataclasses in JSON schema by [@nightcityblade](https://github.com/nightcityblade) in [#12815](https://github.com/pydantic/pydantic/pull/12815)\n\n#### Packaging\n\n* Bump Rust url dependency from 2.5.4 to 2.5.7 in `pydantic-core` by [@dependabot](https://github.com/dependabot)[bot] in [#12508](https://github.com/pydantic/pydantic/pull/12508)\n* Bump Rust minimum version to 1.88, use edition 2024 by [@davidhewitt](https://github.com/davidhewitt) and [@Viicos](https://github.com/Viicos) in [#12551](https://github.com/pydantic/pydantic/pull/12551) and [#12752](https://github.com/pydantic/pydantic/pull/12752)\n* Bump PyO3 to 0.28, jiter to 0.13 by [@davidhewitt](https://github.com/davidhewitt) in [#12767](https://github.com/pydantic/pydantic/pull/12767)\n\n### New Contributors\n\n* [@marwan-alloreview](https://github.com/marwan-alloreview) made their first contribution in [#12494](https://github.com/pydantic/pydantic/pull/12494)\n* [@tanmaymunjal](https://github.com/tanmaymunjal) made their first contribution in [#12498](https://github.com/pydantic/pydantic/pull/12498)\n* [@poliakovva](https://github.com/poliakovva) made their first contribution in [#12579](https://github.com/pydantic/pydantic/pull/12579)\n* [@lehmann-hqs](https://github.com/lehmann-hqs) made their first contribution in [#12734](https://github.com/pydantic/pydantic/pull/12734)\n* [@jfadia](https://github.com/jfadia) made their first contribution in [#12741](https://github.com/pydantic/pydantic/pull/12741)\n* [@tsembp](https://github.com/tsembp) made their first contribution in [#12740](https://github.com/pydantic/pydantic/pull/12740)\n* [@drshvik](https://github.com/drshvik) made their first contribution in [#12760](https://github.com/pydantic/pydantic/pull/12760)\n* [@lhnwrk](https://github.com/lhnwrk) made their first contribution in [#12770](https://github.com/pydantic/pydantic/pull/12770)\n* [@nightcityblade](https://github.com/nightcityblade) made their first contribution in [#12815](https://github.com/pydantic/pydantic/pull/12811)\n\n## v2.12.5 (2025-11-26)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.5)\n\nThis is the fifth 2.12 patch release, addressing an issue with the `MISSING` sentinel and providing several documentation improvements.\n\nThe next 2.13 minor release will be published in a couple weeks, and will include a new *polymorphic serialization* feature addressing\nthe remaining unexpected changes to the *serialize as any* behavior.\n\n* Fix pickle error when using `model_construct()` on a model with `MISSING` as a default value by [@ornariece](https://github.com/ornariece) in [#12522](https://github.com/pydantic/pydantic/pull/12522).\n* Several updates to the documentation by [@Viicos](https://github.com/Viicos).\n\n## v2.12.4 (2025-11-05)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.4)\n\nThis is the fourth 2.12 patch release, fixing more regressions, and reverting a change in the `build()` method\nof the [`AnyUrl` and Dsn types](https://docs.pydantic.dev/latest/api/networks/).\n\nThis patch release also fixes an issue with the serialization of IP address types, when `serialize_as_any` is used. The next patch release\nwill try to address the remaining issues with *serialize as any* behavior by introducing a new *polymorphic serialization* feature, that\nshould be used in most cases in place of *serialize as any*.\n\n* Fix issue with forward references in parent `TypedDict` classes by [@Viicos](https://github.com/Viicos) in [#12427](https://github.com/pydantic/pydantic/pull/12427).\n\n This issue is only relevant on Python 3.14 and greater.\n\n* Exclude fields with `exclude_if` from JSON Schema required fields by [@Viicos](https://github.com/Viicos) in [#12430](https://github.com/pydantic/pydantic/pull/12430)\n* Revert URL percent-encoding of credentials in the `build()` method\n of the [`AnyUrl` and Dsn types](https://docs.pydantic.dev/latest/api/networks/) by [@davidhewitt](https://github.com/davidhewitt) in\n [pydantic-core#1833](https://github.com/pydantic/pydantic-core/pull/1833).\n\n This was initially considered as a bugfix, but caused regressions and as such was fully reverted. The next release will include\n an opt-in option to percent-encode components of the URL.\n\n* Add type inference for IP address types by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1868](https://github.com/pydantic/pydantic-core/pull/1868).\n\n The 2.12 changes to the `serialize_as_any` behavior made it so that IP address types could not properly serialize to JSON.\n\n* Avoid getting default values from defaultdict by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1853](https://github.com/pydantic/pydantic-core/pull/1853).\n\n This fixes a subtle regression in the validation behavior of the [`collections.defaultdict`](https://docs.python.org/3/library/collections.html#collections.defaultdict)\n type.\n\n* Fix issue with field serializers on nested typed dictionaries by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1879](https://github.com/pydantic/pydantic-core/pull/1879).\n* Add more `pydantic-core` builds for the three-threaded version of Python 3.14 by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1864](https://github.com/pydantic/pydantic-core/pull/1864).\n\n## v2.12.3 (2025-10-17)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.3)\n\n### What's Changed\n\nThis is the third 2.12 patch release, fixing issues related to the `FieldInfo` class, and reverting a change to the supported\n[*after* model validator](https://docs.pydantic.dev/latest/concepts/validators/#model-validators) function signatures.\n\n* Raise a warning when an invalid after model validator function signature is raised by [@Viicos](https://github.com/Viicos) in [#12414](https://github.com/pydantic/pydantic/pull/12414).\n Starting in 2.12.0, using class methods for *after* model validators raised an error, but the error wasn't raised concistently. We decided\n to emit a deprecation warning instead.\n* Add [`FieldInfo.asdict()`](https://docs.pydantic.dev/latest/api/fields/#pydantic.fields.FieldInfo.asdict) method, improve documentation around `FieldInfo` by [@Viicos](https://github.com/Viicos) in [#12411](https://github.com/pydantic/pydantic/pull/12411).\n This also add back support for mutations on `FieldInfo` classes, that are reused as `Annotated` metadata. **However**, note that this is still\n *not* a supported pattern. Instead, please refer to the [added example](https://docs.pydantic.dev/latest/examples/dynamic_models/) in the documentation.\n\nThe [blog post](https://pydantic.dev/articles/pydantic-v2-12-release#changes) section on changes was also updated to document the changes related to `serialize_as_any`.\n\n## v2.12.2 (2025-10-14)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.2)\n\n### What's Changed\n\n#### Fixes\n\n* Release a new `pydantic-core` version, as a corrupted CPython 3.10 `manylinux2014_aarch64` wheel got uploaded ([pydantic-core#1843](https://github.com/pydantic/pydantic-core/pull/1843)).\n* Fix issue with recursive generic models with a parent model class by [@Viicos](https://github.com/Viicos) in [#12398](https://github.com/pydantic/pydantic/pull/12398)\n\n## v2.12.1 (2025-10-13)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.1)\n\n### What's Changed\n\nThis is the first 2.12 patch release, addressing most (but not all yet) regressions from the initial 2.12.0 release.\n\n#### Fixes\n\n* Do not evaluate annotations when inspecting validators and serializers by [@Viicos](https://github.com/Viicos) in [#12355](https://github.com/pydantic/pydantic/pull/12355)\n* Make sure `None` is converted as `NoneType` in Python 3.14 by [@Viicos](https://github.com/Viicos) in [#12370](https://github.com/pydantic/pydantic/pull/12370)\n* Backport V1 runtime warning when using Python 3.14 by [@Viicos](https://github.com/Viicos) in [#12367](https://github.com/pydantic/pydantic/pull/12367)\n* Fix error message for invalid validator signatures by [@Viicos](https://github.com/Viicos) in [#12366](https://github.com/pydantic/pydantic/pull/12366)\n* Populate field name in `ValidationInfo` for validation of default value by [@Viicos](https://github.com/Viicos) in [pydantic-core#1826](https://github.com/pydantic/pydantic-core/pull/1826)\n* Encode credentials in `MultiHostUrl` builder by [@willswire](https://github.com/willswire) in [pydantic-core#1829](https://github.com/pydantic/pydantic-core/pull/1829)\n* Respect field serializers when using `serialize_as_any` serialization flag by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1829](https://github.com/pydantic/pydantic-core/pull/1829)\n* Fix various `RootModel` serialization issues by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1836](https://github.com/pydantic/pydantic-core/pull/1836)\n\n### New Contributors\n\n* [@willswire](https://github.com/willswire) made their first contribution in [pydantic-core#1829](https://github.com/pydantic/pydantic-core/pull/1829)\n\n## v2.12.0 (2025-10-07)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.0)\n\nThis is the final 2.12 release. It features the work of 20 external contributors and provides useful new features, along with initial Python 3.14 support.\nSeveral minor changes (considered non-breaking changes according to our [versioning policy](https://docs.pydantic.dev/2.12/version-policy/#pydantic-v2))\nare also included in this release. Make sure to look into them before upgrading.\n\n**Note that Pydantic V1 is not compatible with Python 3.14 and greater**.\n\n### What's Changed\n\nSee the beta releases for all changes sinces 2.11.\n\n#### New Features\n\n* Add `extra` parameter to the validate functions by [@anvilpete](https://github.com/anvilpete) in [#12233](https://github.com/pydantic/pydantic/pull/12233)\n* Add `exclude_computed_fields` serialization option by [@Viicos](https://github.com/Viicos) in [#12334](https://github.com/pydantic/pydantic/pull/12334)\n* Add `preverse_empty_path` URL options by [@Viicos](https://github.com/Viicos) in [#12336](https://github.com/pydantic/pydantic/pull/12336)\n* Add `union_format` parameter to JSON Schema generation by [@Viicos](https://github.com/Viicos) in [#12147](https://github.com/pydantic/pydantic/pull/12147)\n* Add `__qualname__` parameter for `create_model` by [@Atry](https://github.com/Atry) in [#12001](https://github.com/pydantic/pydantic/pull/12001)\n\n#### Fixes\n\n* Do not try to infer name from lambda definitions in pipelines API by [@Viicos](https://github.com/Viicos) in [#12289](https://github.com/pydantic/pydantic/pull/12289)\n* Use proper namespace for functions in `TypeAdapter` by [@Viicos](https://github.com/Viicos) in [#12324](https://github.com/pydantic/pydantic/pull/12324)\n* Use `Any` for context type annotation in `TypeAdapter` by [@inducer](https://github.com/inducer) in [#12279](https://github.com/pydantic/pydantic/pull/12279)\n* Expose `FieldInfo` in `pydantic.fields.__all__` by [@Viicos](https://github.com/Viicos) in [#12339](https://github.com/pydantic/pydantic/pull/12339)\n* Respect `validation_alias` in `@validate_call` by [@Viicos](https://github.com/Viicos) in [#12340](https://github.com/pydantic/pydantic/pull/12340)\n* Use `Any` as context annotation in plugin API by [@Viicos](https://github.com/Viicos) in [#12341](https://github.com/pydantic/pydantic/pull/12341)\n* Use proper `stacklevel` in warnings when possible by [@Viicos](https://github.com/Viicos) in [#12342](https://github.com/pydantic/pydantic/pull/12342)\n\n#### Packaging\n\n* Update V1 copy to v1.10.24 by [@Viicos](https://github.com/Viicos) in [#12338](https://github.com/pydantic/pydantic/pull/12338)\n\n### New Contributors\n\n* [@anvilpete](https://github.com/anvilpete) made their first contribution in [#12233](https://github.com/pydantic/pydantic/pull/12233)\n* [@JonathanWindell](https://github.com/JonathanWindell) made their first contribution in [#12327](https://github.com/pydantic/pydantic/pull/12327)\n* [@inducer](https://github.com/inducer) made their first contribution in [#12279](https://github.com/pydantic/pydantic/pull/12279)\n* [@Atry](https://github.com/Atry) made their first contribution in [#12001](https://github.com/pydantic/pydantic/pull/12001)\n\n## v2.12.0b1 (2025-10-03)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.0b1)\n\nThis is the first beta release of the upcoming 2.12 release.\n\n### What's Changed\n\n#### New Features\n\n* Add support for `exclude_if` at the field level by [@andresliszt](https://github.com/andresliszt) in [#12141](https://github.com/pydantic/pydantic/pull/12141)\n* Add `ValidateAs` annotation helper by [@Viicos](https://github.com/Viicos) in [#11942](https://github.com/pydantic/pydantic/pull/11942)\n* Add configuration options for validation and JSON serialization of temporal types by [@ollz272](https://github.com/ollz272) in [#12068](https://github.com/pydantic/pydantic/pull/12068)\n* Add support for PEP 728 by [@Viicos](https://github.com/Viicos) in [#12179](https://github.com/pydantic/pydantic/pull/12179)\n* Add field name in serialization error by [@NicolasPllr1](https://github.com/NicolasPllr1) in [pydantic-core#1799](https://github.com/pydantic/pydantic-core/pull/1799)\n* Add option to preserve empty URL paths by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1789](https://github.com/pydantic/pydantic-core/pull/1789)\n\n#### Changes\n\n* Raise error if an incompatible `pydantic-core` version is installed by [@Viicos](https://github.com/Viicos) in [#12196](https://github.com/pydantic/pydantic/pull/12196)\n* Remove runtime warning for experimental features by [@Viicos](https://github.com/Viicos) in [#12265](https://github.com/pydantic/pydantic/pull/12265)\n* Warn if registering virtual subclasses on Pydantic models by [@Viicos](https://github.com/Viicos) in [#11669](https://github.com/pydantic/pydantic/pull/11669)\n\n#### Fixes\n\n* Fix `__getattr__()` behavior on Pydantic models when a property raised an `AttributeError` and extra values are present by [@raspuchin](https://github.com/raspuchin) in [#12106](https://github.com/pydantic/pydantic/pull/12106)\n* Add test to prevent regression with Pydantic models used as annotated metadata by [@Viicos](https://github.com/Viicos) in [#12133](https://github.com/pydantic/pydantic/pull/12133)\n* Allow to use property setters on Pydantic dataclasses with `validate_assignment` set by [@Viicos](https://github.com/Viicos) in [#12173](https://github.com/pydantic/pydantic/pull/12173)\n* Fix mypy v2 plugin for upcoming mypy release by [@cdce8p](https://github.com/cdce8p) in [#12209](https://github.com/pydantic/pydantic/pull/12209)\n* Respect custom title in functions JSON Schema by [@Viicos](https://github.com/Viicos) in [#11892](https://github.com/pydantic/pydantic/pull/11892)\n* Fix `ImportString` JSON serialization for objects with a `name` attribute by [@chr1sj0nes](https://github.com/chr1sj0nes) in [#12219](https://github.com/pydantic/pydantic/pull/12219)\n* Do not error on fields overridden by methods in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#12290](https://github.com/pydantic/pydantic/pull/12290)\n\n#### Packaging\n\n* Bump `pydantic-core` to v2.40.1 by [@Viicos](https://github.com/Viicos) in [#12314](https://github.com/pydantic/pydantic/pull/12314)\n\n### New Contributors\n\n* [@raspuchin](https://github.com/raspuchin) made their first contribution in [#12106](https://github.com/pydantic/pydantic/pull/12106)\n* [@chr1sj0nes](https://github.com/chr1sj0nes) made their first contribution in [#12219](https://github.com/pydantic/pydantic/pull/12219)\n\n## v2.12.0a1 (2025-07-26)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.0a1)\n\nThis is the first alpha release of the upcoming 2.12 release, which adds initial support for Python 3.14.\n\n### What's Changed\n\n#### New Features\n\n* Add `__pydantic_on_complete__()` hook that is called once model is fully ready to be used by [@DouweM](https://github.com/DouweM) in [#11762](https://github.com/pydantic/pydantic/pull/11762)\n* Add initial support for Python 3.14 by [@Viicos](https://github.com/Viicos) in [#11991](https://github.com/pydantic/pydantic/pull/11991)\n* Add regex patterns to JSON schema for `Decimal` type by [@Dima-Bulavenko](https://github.com/Dima-Bulavenko) in [#11987](https://github.com/pydantic/pydantic/pull/11987)\n* Add support for `doc` attribute on dataclass fields by [@Viicos](https://github.com/Viicos) in [#12077](https://github.com/pydantic/pydantic/pull/12077)\n* Add experimental `MISSING` sentinel by [@Viicos](https://github.com/Viicos) in [#11883](https://github.com/pydantic/pydantic/pull/11883)\n\n#### Changes\n\n* Allow config and bases to be specified together in `create_model()` by [@Viicos](https://github.com/Viicos) in [#11714](https://github.com/pydantic/pydantic/pull/11714)\n* Move some field logic out of the `GenerateSchema` class by [@Viicos](https://github.com/Viicos) in [#11733](https://github.com/pydantic/pydantic/pull/11733)\n* Always make use of `inspect.getsourcelines()` for docstring extraction on Python 3.13 and greater by [@Viicos](https://github.com/Viicos) in [#11829](https://github.com/pydantic/pydantic/pull/11829)\n* Only support the latest Mypy version by [@Viicos](https://github.com/Viicos) in [#11832](https://github.com/pydantic/pydantic/pull/11832)\n* Do not implicitly convert after model validators to class methods by [@Viicos](https://github.com/Viicos) in [#11957](https://github.com/pydantic/pydantic/pull/11957)\n* Refactor `FieldInfo` creation implementation by [@Viicos](https://github.com/Viicos) in [#11898](https://github.com/pydantic/pydantic/pull/11898)\n* Make `Secret` covariant by [@bluenote10](https://github.com/bluenote10) in [#12008](https://github.com/pydantic/pydantic/pull/12008)\n* Emit warning when field-specific metadata is used in invalid contexts by [@Viicos](https://github.com/Viicos) in [#12028](https://github.com/pydantic/pydantic/pull/12028)\n\n#### Fixes\n\n* Properly fetch plain serializer function when serializing default value in JSON Schema by [@Viicos](https://github.com/Viicos) in [#11721](https://github.com/pydantic/pydantic/pull/11721)\n* Remove generics cache workaround by [@Viicos](https://github.com/Viicos) in [#11755](https://github.com/pydantic/pydantic/pull/11755)\n* Remove coercion of decimal constraints by [@Viicos](https://github.com/Viicos) in [#11772](https://github.com/pydantic/pydantic/pull/11772)\n* Fix crash when expanding root type in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11735](https://github.com/pydantic/pydantic/pull/11735)\n* Only mark model as complete once all fields are complete by [@DouweM](https://github.com/DouweM) in [#11759](https://github.com/pydantic/pydantic/pull/11759)\n* Do not provide `field_name` in validator core schemas by [@DouweM](https://github.com/DouweM) in [#11761](https://github.com/pydantic/pydantic/pull/11761)\n* Fix issue with recursive generic models by [@Viicos](https://github.com/Viicos) in [#11775](https://github.com/pydantic/pydantic/pull/11775)\n* Fix qualified name comparison of private attributes during namespace inspection by [@karta9821](https://github.com/karta9821) in [#11803](https://github.com/pydantic/pydantic/pull/11803)\n* Make sure Pydantic dataclasses with slots and `validate_assignment` can be unpickled by [@Viicos](https://github.com/Viicos) in [#11769](https://github.com/pydantic/pydantic/pull/11769)\n* Traverse `function-before` schemas during schema gathering by [@Viicos](https://github.com/Viicos) in [#11801](https://github.com/pydantic/pydantic/pull/11801)\n* Fix check for stdlib dataclasses by [@Viicos](https://github.com/Viicos) in [#11822](https://github.com/pydantic/pydantic/pull/11822)\n* Check if `FieldInfo` is complete after applying type variable map by [@Viicos](https://github.com/Viicos) in [#11855](https://github.com/pydantic/pydantic/pull/11855)\n* Do not delete mock validator/serializer in `model_rebuild()` by [@Viicos](https://github.com/Viicos) in [#11890](https://github.com/pydantic/pydantic/pull/11890)\n* Rebuild dataclass fields before schema generation by [@Viicos](https://github.com/Viicos) in [#11949](https://github.com/pydantic/pydantic/pull/11949)\n* Always store the original field assignment on `FieldInfo` by [@Viicos](https://github.com/Viicos) in [#11946](https://github.com/pydantic/pydantic/pull/11946)\n* Do not use deprecated methods as default field values by [@Viicos](https://github.com/Viicos) in [#11914](https://github.com/pydantic/pydantic/pull/11914)\n* Allow callable discriminator to be applied on PEP 695 type aliases by [@Viicos](https://github.com/Viicos) in [#11941](https://github.com/pydantic/pydantic/pull/11941)\n* Suppress core schema generation warning when using `SkipValidation` by [@ygsh0816](https://github.com/ygsh0816) in [#12002](https://github.com/pydantic/pydantic/pull/12002)\n* Do not emit typechecking error for invalid `Field()` default with `validate_default` set to `True` by [@Viicos](https://github.com/Viicos) in [#11988](https://github.com/pydantic/pydantic/pull/11988)\n* Refactor logic to support Pydantic's `Field()` function in dataclasses by [@Viicos](https://github.com/Viicos) in [#12051](https://github.com/pydantic/pydantic/pull/12051)\n\n#### Packaging\n\n* Update project metadata to use PEP 639 by [@Viicos](https://github.com/Viicos) in [#11694](https://github.com/pydantic/pydantic/pull/11694)\n* Bump `mkdocs-llmstxt` to v0.2.0 by [@Viicos](https://github.com/Viicos) in [#11725](https://github.com/pydantic/pydantic/pull/11725)\n* Bump `pydantic-core` to v2.35.1 by [@Viicos](https://github.com/Viicos) in [#11963](https://github.com/pydantic/pydantic/pull/11963)\n* Bump dawidd6/action-download-artifact from 10 to 11 by [@dependabot](https://github.com/dependabot)[bot] in [#12033](https://github.com/pydantic/pydantic/pull/12033)\n* Bump astral-sh/setup-uv from 5 to 6 by [@dependabot](https://github.com/dependabot)[bot] in [#11826](https://github.com/pydantic/pydantic/pull/11826)\n* Update mypy to 1.17.0 by [@Viicos](https://github.com/Viicos) in [#12076](https://github.com/pydantic/pydantic/pull/12076)\n\n### New Contributors\n\n* [@parth-paradkar](https://github.com/parth-paradkar) made their first contribution in [#11695](https://github.com/pydantic/pydantic/pull/11695)\n* [@dqkqd](https://github.com/dqkqd) made their first contribution in [#11739](https://github.com/pydantic/pydantic/pull/11739)\n* [@fhightower](https://github.com/fhightower) made their first contribution in [#11722](https://github.com/pydantic/pydantic/pull/11722)\n* [@gbaian10](https://github.com/gbaian10) made their first contribution in [#11766](https://github.com/pydantic/pydantic/pull/11766)\n* [@DouweM](https://github.com/DouweM) made their first contribution in [#11759](https://github.com/pydantic/pydantic/pull/11759)\n* [@bowenliang123](https://github.com/bowenliang123) made their first contribution in [#11719](https://github.com/pydantic/pydantic/pull/11719)\n* [@rawwar](https://github.com/rawwar) made their first contribution in [#11799](https://github.com/pydantic/pydantic/pull/11799)\n* [@karta9821](https://github.com/karta9821) made their first contribution in [#11803](https://github.com/pydantic/pydantic/pull/11803)\n* [@jinnovation](https://github.com/jinnovation) made their first contribution in [#11834](https://github.com/pydantic/pydantic/pull/11834)\n* [@zmievsa](https://github.com/zmievsa) made their first contribution in [#11861](https://github.com/pydantic/pydantic/pull/11861)\n* [@Otto-AA](https://github.com/Otto-AA) made their first contribution in [#11860](https://github.com/pydantic/pydantic/pull/11860)\n* [@ygsh0816](https://github.com/ygsh0816) made their first contribution in [#12002](https://github.com/pydantic/pydantic/pull/12002)\n* [@lukland](https://github.com/lukland) made their first contribution in [#12015](https://github.com/pydantic/pydantic/pull/12015)\n* [@Dima-Bulavenko](https://github.com/Dima-Bulavenko) made their first contribution in [#11987](https://github.com/pydantic/pydantic/pull/11987)\n* [@GSemikozov](https://github.com/GSemikozov) made their first contribution in [#12050](https://github.com/pydantic/pydantic/pull/12050)\n* [@hannah-heywa](https://github.com/hannah-heywa) made their first contribution in [#12082](https://github.com/pydantic/pydantic/pull/12082)\n\n## v2.11.10 (2025-10-04)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.10)\n\n### What's Changed\n\n#### Fixes\n\n* Backport v1.10.24 changes by [@Viicos](https://github.com/Viicos)\n\n## v2.11.9 (2025-09-13)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.9)\n\n### What's Changed\n\n#### Fixes\n\n* Backport v1.10.23 changes by [@Viicos](https://github.com/Viicos)\n\n## v2.11.8 (2025-09-13)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.8)\n\n### What's Changed\n\n#### Fixes\n\n* Fix mypy plugin for mypy 1.18 by [@cdce8p](https://github.com/cdce8p) in [#12209](https://github.com/pydantic/pydantic/pull/12209)\n\n## v2.11.7 (2025-06-14)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.7)\n\n### What's Changed\n\n#### Fixes\n\n* Copy `FieldInfo` instance if necessary during `FieldInfo` build by [@Viicos](https://github.com/Viicos) in [#11898](https://github.com/pydantic/pydantic/pull/11898)\n\n## v2.11.6 (2025-06-13)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.6)\n\n### What's Changed\n\n#### Fixes\n\n* Rebuild dataclass fields before schema generation by [@Viicos](https://github.com/Viicos) in [#11949](https://github.com/pydantic/pydantic/pull/11949)\n* Always store the original field assignment on `FieldInfo` by [@Viicos](https://github.com/Viicos) in [#11946](https://github.com/pydantic/pydantic/pull/11946)\n\n## v2.11.5 (2025-05-22)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.5)\n\n### What's Changed\n\n#### Fixes\n\n* Check if `FieldInfo` is complete after applying type variable map by [@Viicos](https://github.com/Viicos) in [#11855](https://github.com/pydantic/pydantic/pull/11855)\n* Do not delete mock validator/serializer in `model_rebuild()` by [@Viicos](https://github.com/Viicos) in [#11890](https://github.com/pydantic/pydantic/pull/11890)\n* Do not duplicate metadata on model rebuild by [@Viicos](https://github.com/Viicos) in [#11902](https://github.com/pydantic/pydantic/pull/11902)\n\n## v2.11.4 (2025-04-29)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.4)\n\n### What's Changed\n\n#### Changes\n\n* Allow config and bases to be specified together in `create_model()` by [@Viicos](https://github.com/Viicos) in [#11714](https://github.com/pydantic/pydantic/pull/11714).\n This change was backported as it was previously possible (although not meant to be supported)\n to provide `model_config` as a field, which would make it possible to provide both configuration\n and bases.\n\n#### Fixes\n\n* Remove generics cache workaround by [@Viicos](https://github.com/Viicos) in [#11755](https://github.com/pydantic/pydantic/pull/11755)\n* Remove coercion of decimal constraints by [@Viicos](https://github.com/Viicos) in [#11772](https://github.com/pydantic/pydantic/pull/11772)\n* Fix crash when expanding root type in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11735](https://github.com/pydantic/pydantic/pull/11735)\n* Fix issue with recursive generic models by [@Viicos](https://github.com/Viicos) in [#11775](https://github.com/pydantic/pydantic/pull/11775)\n* Traverse `function-before` schemas during schema gathering by [@Viicos](https://github.com/Viicos) in [#11801](https://github.com/pydantic/pydantic/pull/11801)\n\n#### Packaging\n\n* Bump `mkdocs-llmstxt` to v0.2.0 by [@Viicos](https://github.com/Viicos) in [#11725](https://github.com/pydantic/pydantic/pull/11725)\n\n## v2.11.3 (2025-04-08)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.3)\n\n### What's Changed\n\n#### Fixes\n\n* Preserve field description when rebuilding model fields by [@Viicos](https://github.com/Viicos) in [#11698](https://github.com/pydantic/pydantic/pull/11698)\n\n#### Packaging\n\n* Update V1 copy to v1.10.21 by [@Viicos](https://github.com/Viicos) in [#11706](https://github.com/pydantic/pydantic/pull/11706)\n\n## v2.11.2 (2025-04-03)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.2)\n\n### What's Changed\n\n#### Fixes\n\n* Bump `pydantic-core` to v2.33.1 by [@Viicos](https://github.com/Viicos) in [#11678](https://github.com/pydantic/pydantic/pull/11678)\n* Make sure `__pydantic_private__` exists before setting private attributes by [@Viicos](https://github.com/Viicos) in [#11666](https://github.com/pydantic/pydantic/pull/11666)\n* Do not override `FieldInfo._complete` when using field from parent class by [@Viicos](https://github.com/Viicos) in [#11668](https://github.com/pydantic/pydantic/pull/11668)\n* Provide the available definitions when applying discriminated unions by [@Viicos](https://github.com/Viicos) in [#11670](https://github.com/pydantic/pydantic/pull/11670)\n* Do not expand root type in the mypy plugin for variables by [@Viicos](https://github.com/Viicos) in [#11676](https://github.com/pydantic/pydantic/pull/11676)\n* Mention the attribute name in model fields deprecation message by [@Viicos](https://github.com/Viicos) in [#11674](https://github.com/pydantic/pydantic/pull/11674)\n* Properly validate parameterized mappings by [@Viicos](https://github.com/Viicos) in [#11658](https://github.com/pydantic/pydantic/pull/11658)\n\n## v2.11.1 (2025-03-28)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.1)\n\n### What's Changed\n\n#### Fixes\n\n* Do not override `'definitions-ref'` schemas containing serialization schemas or metadata by [@Viicos](https://github.com/Viicos) in [#11644](https://github.com/pydantic/pydantic/pull/11644)\n\n## v2.11.0 (2025-03-27)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0)\n\n### What's Changed\n\nPydantic v2.11 is a version strongly focused on build time performance of Pydantic models (and core schema generation in general).\nSee the [blog post](https://pydantic.dev/articles/pydantic-v2-11-release) for more details.\n\n#### New Features\n\n* Add `encoded_string()` method to the URL types by [@YassinNouh21](https://github.com/YassinNouh21) in [#11580](https://github.com/pydantic/pydantic/pull/11580)\n* Add support for `defer_build` with `@validate_call` decorator by [@Viicos](https://github.com/Viicos) in [#11584](https://github.com/pydantic/pydantic/pull/11584)\n* Allow `@with_config` decorator to be used with keyword arguments by [@Viicos](https://github.com/Viicos) in [#11608](https://github.com/pydantic/pydantic/pull/11608)\n* Simplify customization of default value inclusion in JSON Schema generation by [@Viicos](https://github.com/Viicos) in [#11634](https://github.com/pydantic/pydantic/pull/11634)\n* Add `generate_arguments_schema()` function by [@Viicos](https://github.com/Viicos) in [#11572](https://github.com/pydantic/pydantic/pull/11572)\n\n#### Fixes\n\n* Allow generic typed dictionaries to be used for unpacked variadic keyword parameters by [@Viicos](https://github.com/Viicos) in [#11571](https://github.com/pydantic/pydantic/pull/11571)\n* Fix runtime error when computing model string representation involving cached properties and self-referenced models by [@Viicos](https://github.com/Viicos) in [#11579](https://github.com/pydantic/pydantic/pull/11579)\n* Preserve other steps when using the ellipsis in the pipeline API by [@Viicos](https://github.com/Viicos) in [#11626](https://github.com/pydantic/pydantic/pull/11626)\n* Fix deferred discriminator application logic by [@Viicos](https://github.com/Viicos) in [#11591](https://github.com/pydantic/pydantic/pull/11591)\n\n#### Packaging\n\n* Bump `pydantic-core` to v2.33.0 by [@Viicos](https://github.com/Viicos) in [#11631](https://github.com/pydantic/pydantic/pull/11631)\n\n### New Contributors\n\n* [@cmenon12](https://github.com/cmenon12) made their first contribution in [#11562](https://github.com/pydantic/pydantic/pull/11562)\n* [@Jeukoh](https://github.com/Jeukoh) made their first contribution in [#11611](https://github.com/pydantic/pydantic/pull/11611)\n\n## v2.11.0b2 (2025-03-17)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0b2)\n\n### What's Changed\n\n#### New Features\n\n* Add experimental support for free threading by [@Viicos](https://github.com/Viicos) in [#11516](https://github.com/pydantic/pydantic/pull/11516)\n\n#### Fixes\n\n* Fix `NotRequired` qualifier not taken into account in stringified annotation by [@Viicos](https://github.com/Viicos) in [#11559](https://github.com/pydantic/pydantic/pull/11559)\n\n#### Packaging\n\n* Bump `pydantic-core` to v2.32.0 by [@Viicos](https://github.com/Viicos) in [#11567](https://github.com/pydantic/pydantic/pull/11567)\n\n### New Contributors\n\n* [@joren485](https://github.com/joren485) made their first contribution in [#11547](https://github.com/pydantic/pydantic/pull/11547)\n\n## v2.11.0b1 (2025-03-06)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0b1)\n\n### What's Changed\n\n#### New Features\n\n* Support unsubstituted type variables with both a default and a bound or constraints by [@FyZzyss](https://github.com/FyZzyss) in https://github.com/pydantic/pydantic/pull/10789\n* Add a `default_factory_takes_validated_data` property to `FieldInfo` by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11034\n* Raise a better error when a generic alias is used inside `type[]` by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11088\n* Properly support PEP 695 generics syntax by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11189\n* Properly support type variable defaults by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11332\n* Add support for validating v6, v7, v8 UUIDs by [@astei](https://github.com/astei) in https://github.com/pydantic/pydantic/pull/11436\n* Improve alias configuration APIs by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11468\n\n#### Changes\n\n* Rework `create_model` field definitions format by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11032\n* Raise a deprecation warning when a field is annotated as final with a default value by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11168\n* Deprecate accessing `model_fields` and `model_computed_fields` on instances by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11169\n* **Breaking Change:** Move core schema generation logic for path types inside the `GenerateSchema` class by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/10846\n* Remove Python 3.8 Support by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11258\n* Optimize calls to `get_type_ref` by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/10863\n* Disable `pydantic-core` core schema validation by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11271\n\n#### Performance\n\n* Only evaluate `FieldInfo` annotations if required during schema building by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/10769\n* Improve `__setattr__` performance of Pydantic models by caching setter functions by [@MarkusSintonen](https://github.com/MarkusSintonen) in https://github.com/pydantic/pydantic/pull/10868\n* Improve annotation application performance by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11186\n* Improve performance of `_typing_extra` module by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11255\n* Refactor and optimize schema cleaning logic by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11244\n* Create a single dictionary when creating a `CoreConfig` instance by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11384\n* Bump `pydantic-core` and thus use `SchemaValidator` and `SchemaSerializer` caching by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11402\n* Reuse cached core schemas for parametrized generic Pydantic models by [@MarkusSintonen](https://github.com/MarkusSintonen) in https://github.com/pydantic/pydantic/pull/11434\n\n#### Fixes\n\n* Improve `TypeAdapter` instance repr by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/10872\n* Use the correct frame when instantiating a parametrized `TypeAdapter` by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/10893\n* Infer final fields with a default value as class variables in the mypy plugin by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11121\n* Recursively unpack `Literal` values if using PEP 695 type aliases by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11114\n* Override `__subclasscheck__` on `ModelMetaclass` to avoid memory leak and performance issues by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11116\n* Remove unused `_extract_get_pydantic_json_schema()` parameter by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11155\n* Improve discriminated union error message for invalid union variants by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11161\n* Unpack PEP 695 type aliases if using the `Annotated` form by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11109\n* Add missing stacklevel in `deprecated_instance_property` warning by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11200\n* Copy `WithJsonSchema` schema to avoid sharing mutated data by [@thejcannon](https://github.com/thejcannon) in https://github.com/pydantic/pydantic/pull/11014\n* Do not cache parametrized models when in the process of parametrizing another model by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/10704\n* Add discriminated union related metadata entries to the `CoreMetadata` definition by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11216\n* Consolidate schema definitions logic in the `_Definitions` class by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11208\n* Support initializing root model fields with values of the `root` type in the mypy plugin by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11212\n* Fix various issues with dataclasses and `use_attribute_docstrings` by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11246\n* Only compute normalized decimal places if necessary in `decimal_places_validator` by [@misrasaurabh1](https://github.com/misrasaurabh1) in https://github.com/pydantic/pydantic/pull/11281\n* Add support for `validation_alias` in the mypy plugin by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11295\n* Fix JSON Schema reference collection with `\"examples\"` keys by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11305\n* Do not transform model serializer functions as class methods in the mypy plugin by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11298\n* Simplify `GenerateJsonSchema.literal_schema()` implementation by [@misrasaurabh1](https://github.com/misrasaurabh1) in https://github.com/pydantic/pydantic/pull/11321\n* Add additional allowed schemes for `ClickHouseDsn` by [@Maze21127](https://github.com/Maze21127) in https://github.com/pydantic/pydantic/pull/11319\n* Coerce decimal constraints to `Decimal` instances by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11350\n* Use the correct JSON Schema mode when handling function schemas by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11367\n* Improve exception message when encountering recursion errors during type evaluation by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11356\n* Always include `additionalProperties: True` for arbitrary dictionary schemas by [@austinyu](https://github.com/austinyu) in https://github.com/pydantic/pydantic/pull/11392\n* Expose `fallback` parameter in serialization methods by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11398\n* Fix path serialization behavior by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11416\n* Do not reuse validators and serializers during model rebuild by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11429\n* Collect model fields when rebuilding a model by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11388\n* Allow cached properties to be altered on frozen models by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11432\n* Fix tuple serialization for `Sequence` types by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11435\n* Fix: do not check for `__get_validators__` on classes where `__get_pydantic_core_schema__` is also defined by [@tlambert03](https://github.com/tlambert03) in https://github.com/pydantic/pydantic/pull/11444\n* Allow callable instances to be used as serializers by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11451\n* Improve error thrown when overriding field with a property by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11459\n* Fix JSON Schema generation with referenceable core schemas holding JSON metadata by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11475\n* Support strict specification on union member types by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11481\n* Implicitly set `validate_by_name` to `True` when `validate_by_alias` is `False` by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11503\n* Change type of `Any` when synthesizing `BaseSettings.__init__` signature in the mypy plugin by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11497\n* Support type variable defaults referencing other type variables by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11520\n* Fix `ValueError` on year zero by [@davidhewitt](https://github.com/davidhewitt) in https://github.com/pydantic/pydantic-core/pull/1583\n* `dataclass` `InitVar` shouldn't be required on serialization by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic-core/pull/1602\n\n#### Packaging\n\n* Add a `check_pydantic_core_version()` function by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11324\n* Remove `greenlet` development dependency by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11351\n* Use the `typing-inspection` library by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11479\n* Bump `pydantic-core` to `v2.31.1` by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11526\n\n## New Contributors\n\n* [@FyZzyss](https://github.com/FyZzyss) made their first contribution in https://github.com/pydantic/pydantic/pull/10789\n* [@tamird](https://github.com/tamird) made their first contribution in https://github.com/pydantic/pydantic/pull/10948\n* [@felixxm](https://github.com/felixxm) made their first contribution in https://github.com/pydantic/pydantic/pull/11077\n* [@alexprabhat99](https://github.com/alexprabhat99) made their first contribution in https://github.com/pydantic/pydantic/pull/11082\n* [@Kharianne](https://github.com/Kharianne) made their first contribution in https://github.com/pydantic/pydantic/pull/11111\n* [@mdaffad](https://github.com/mdaffad) made their first contribution in https://github.com/pydantic/pydantic/pull/11177\n* [@thejcannon](https://github.com/thejcannon) made their first contribution in https://github.com/pydantic/pydantic/pull/11014\n* [@thomasfrimannkoren](https://github.com/thomasfrimannkoren) made their first contribution in https://github.com/pydantic/pydantic/pull/11251\n* [@usernameMAI](https://github.com/usernameMAI) made their first contribution in https://github.com/pydantic/pydantic/pull/11275\n* [@ananiavito](https://github.com/ananiavito) made their first contribution in https://github.com/pydantic/pydantic/pull/11302\n* [@pawamoy](https://github.com/pawamoy) made their first contribution in https://github.com/pydantic/pydantic/pull/11311\n* [@Maze21127](https://github.com/Maze21127) made their first contribution in https://github.com/pydantic/pydantic/pull/11319\n* [@kauabh](https://github.com/kauabh) made their first contribution in https://github.com/pydantic/pydantic/pull/11369\n* [@jaceklaskowski](https://github.com/jaceklaskowski) made their first contribution in https://github.com/pydantic/pydantic/pull/11353\n* [@tmpbeing](https://github.com/tmpbeing) made their first contribution in https://github.com/pydantic/pydantic/pull/11375\n* [@petyosi](https://github.com/petyosi) made their first contribution in https://github.com/pydantic/pydantic/pull/11405\n* [@austinyu](https://github.com/austinyu) made their first contribution in https://github.com/pydantic/pydantic/pull/11392\n* [@mikeedjones](https://github.com/mikeedjones) made their first contribution in https://github.com/pydantic/pydantic/pull/11402\n* [@astei](https://github.com/astei) made their first contribution in https://github.com/pydantic/pydantic/pull/11436\n* [@dsayling](https://github.com/dsayling) made their first contribution in https://github.com/pydantic/pydantic/pull/11522\n* [@sobolevn](https://github.com/sobolevn) made their first contribution in https://github.com/pydantic/pydantic-core/pull/1645\n\n## v2.11.0a2 (2025-02-10)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0a2)\n\n### What's Changed\n\nPydantic v2.11 is a version strongly focused on build time performance of Pydantic models (and core schema generation in general).\nThis is another early alpha release, meant to collect early feedback from users having issues with core schema builds.\n\n#### Performance\n\n* Create a single dictionary when creating a `CoreConfig` instance by [@sydney-runkle](https://github.com/sydney-runkle) in [#11384](https://github.com/pydantic/pydantic/pull/11384)\n\n#### Fixes\n\n* Use the correct JSON Schema mode when handling function schemas by [@Viicos](https://github.com/Viicos) in [#11367](https://github.com/pydantic/pydantic/pull/11367)\n* Fix JSON Schema reference logic with `examples` keys by [@Viicos](https://github.com/Viicos) in [#11366](https://github.com/pydantic/pydantic/pull/11366)\n* Improve exception message when encountering recursion errors during type evaluation by [@Viicos](https://github.com/Viicos) in [#11356](https://github.com/pydantic/pydantic/pull/11356)\n* Always include `additionalProperties: True` for arbitrary dictionary schemas by [@austinyu](https://github.com/austinyu) in [#11392](https://github.com/pydantic/pydantic/pull/11392)\n* Expose `fallback` parameter in serialization methods by [@Viicos](https://github.com/Viicos) in [#11398](https://github.com/pydantic/pydantic/pull/11398)\n* Fix path serialization behavior by [@sydney-runkle](https://github.com/sydney-runkle) in [#11416](https://github.com/pydantic/pydantic/pull/11416)\n\n#### Packaging\n\n* Bump `ruff` from 0.9.2 to 0.9.5 by [@Viicos](https://github.com/Viicos) in [#11407](https://github.com/pydantic/pydantic/pull/11407)\n* Bump `pydantic-core` to v2.29.0 by [@mikeedjones](https://github.com/mikeedjones) in [#11402](https://github.com/pydantic/pydantic/pull/11402)\n* Use locally-built rust with symbols & pgo by [@davidhewitt](https://github.com/davidhewitt) in [#11403](https://github.com/pydantic/pydantic/pull/11403)\n\n### New Contributors\n\n* [@kauabh](https://github.com/kauabh) made their first contribution in [#11369](https://github.com/pydantic/pydantic/pull/11369)\n* [@jaceklaskowski](https://github.com/jaceklaskowski) made their first contribution in [#11353](https://github.com/pydantic/pydantic/pull/11353)\n* [@tmpbeing](https://github.com/tmpbeing) made their first contribution in [#11375](https://github.com/pydantic/pydantic/pull/11375)\n* [@petyosi](https://github.com/petyosi) made their first contribution in [#11405](https://github.com/pydantic/pydantic/pull/11405)\n* [@austinyu](https://github.com/austinyu) made their first contribution in [#11392](https://github.com/pydantic/pydantic/pull/11392)\n* [@mikeedjones](https://github.com/mikeedjones) made their first contribution in [#11402](https://github.com/pydantic/pydantic/pull/11402)\n\n## v2.11.0a1 (2025-01-30)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0a1)\n\n### What's Changed\n\nPydantic v2.11 is a version strongly focused on build time performance of Pydantic models (and core schema generation in general).\nThis is an early alpha release, meant to collect early feedback from users having issues with core schema builds.\n\n#### New Features\n\n* Support unsubstituted type variables with both a default and a bound or constraints by [@FyZzyss](https://github.com/FyZzyss) in [#10789](https://github.com/pydantic/pydantic/pull/10789)\n* Add a `default_factory_takes_validated_data` property to `FieldInfo` by [@Viicos](https://github.com/Viicos) in [#11034](https://github.com/pydantic/pydantic/pull/11034)\n* Raise a better error when a generic alias is used inside `type[]` by [@Viicos](https://github.com/Viicos) in [#11088](https://github.com/pydantic/pydantic/pull/11088)\n* Properly support PEP 695 generics syntax by [@Viicos](https://github.com/Viicos) in [#11189](https://github.com/pydantic/pydantic/pull/11189)\n* Properly support type variable defaults by [@Viicos](https://github.com/Viicos) in [#11332](https://github.com/pydantic/pydantic/pull/11332)\n\n#### Changes\n\n* Rework `create_model` field definitions format by [@Viicos](https://github.com/Viicos) in [#11032](https://github.com/pydantic/pydantic/pull/11032)\n* Raise a deprecation warning when a field is annotated as final with a default value by [@Viicos](https://github.com/Viicos) in [#11168](https://github.com/pydantic/pydantic/pull/11168)\n* Deprecate accessing `model_fields` and `model_computed_fields` on instances by [@Viicos](https://github.com/Viicos) in [#11169](https://github.com/pydantic/pydantic/pull/11169)\n* Move core schema generation logic for path types inside the `GenerateSchema` class by [@sydney-runkle](https://github.com/sydney-runkle) in [#10846](https://github.com/pydantic/pydantic/pull/10846)\n* Move `deque` schema gen to `GenerateSchema` class by [@sydney-runkle](https://github.com/sydney-runkle) in [#11239](https://github.com/pydantic/pydantic/pull/11239)\n* Move `Mapping` schema gen to `GenerateSchema` to complete removal of `prepare_annotations_for_known_type` workaround by [@sydney-runkle](https://github.com/sydney-runkle) in [#11247](https://github.com/pydantic/pydantic/pull/11247)\n* Remove Python 3.8 Support by [@sydney-runkle](https://github.com/sydney-runkle) in [#11258](https://github.com/pydantic/pydantic/pull/11258)\n* Disable `pydantic-core` core schema validation by [@sydney-runkle](https://github.com/sydney-runkle) in [#11271](https://github.com/pydantic/pydantic/pull/11271)\n\n#### Performance\n\n* Only evaluate `FieldInfo` annotations if required during schema building by [@Viicos](https://github.com/Viicos) in [#10769](https://github.com/pydantic/pydantic/pull/10769)\n* Optimize calls to `get_type_ref` by [@Viicos](https://github.com/Viicos) in [#10863](https://github.com/pydantic/pydantic/pull/10863)\n* Improve `__setattr__` performance of Pydantic models by caching setter functions by [@MarkusSintonen](https://github.com/MarkusSintonen) in [#10868](https://github.com/pydantic/pydantic/pull/10868)\n* Improve annotation application performance by [@Viicos](https://github.com/Viicos) in [#11186](https://github.com/pydantic/pydantic/pull/11186)\n* Improve performance of `_typing_extra` module by [@Viicos](https://github.com/Viicos) in [#11255](https://github.com/pydantic/pydantic/pull/11255)\n* Refactor and optimize schema cleaning logic by [@Viicos](https://github.com/Viicos) and [@MarkusSintonen](https://github.com/MarkusSintonen) in [#11244](https://github.com/pydantic/pydantic/pull/11244)\n\n#### Fixes\n\n* Add validation tests for `_internal/_validators.py` by [@tkasuz](https://github.com/tkasuz) in [#10763](https://github.com/pydantic/pydantic/pull/10763)\n* Improve `TypeAdapter` instance repr by [@sydney-runkle](https://github.com/sydney-runkle) in [#10872](https://github.com/pydantic/pydantic/pull/10872)\n* Revert \"ci: use locally built pydantic-core with debug symbols by [@sydney-runkle](https://github.com/sydney-runkle) in [#10942](https://github.com/pydantic/pydantic/pull/10942)\n* Re-enable all FastAPI tests by [@tamird](https://github.com/tamird) in [#10948](https://github.com/pydantic/pydantic/pull/10948)\n* Fix typo in HISTORY.md. by [@felixxm](https://github.com/felixxm) in [#11077](https://github.com/pydantic/pydantic/pull/11077)\n* Infer final fields with a default value as class variables in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11121](https://github.com/pydantic/pydantic/pull/11121)\n* Recursively unpack `Literal` values if using PEP 695 type aliases by [@Viicos](https://github.com/Viicos) in [#11114](https://github.com/pydantic/pydantic/pull/11114)\n* Override `__subclasscheck__` on `ModelMetaclass` to avoid memory leak and performance issues by [@Viicos](https://github.com/Viicos) in [#11116](https://github.com/pydantic/pydantic/pull/11116)\n* Remove unused `_extract_get_pydantic_json_schema()` parameter by [@Viicos](https://github.com/Viicos) in [#11155](https://github.com/pydantic/pydantic/pull/11155)\n* Add FastAPI and SQLModel to third-party tests by [@sydney-runkle](https://github.com/sydney-runkle) in [#11044](https://github.com/pydantic/pydantic/pull/11044)\n* Fix conditional expressions syntax for third-party tests by [@Viicos](https://github.com/Viicos) in [#11162](https://github.com/pydantic/pydantic/pull/11162)\n* Move FastAPI tests to third-party workflow by [@Viicos](https://github.com/Viicos) in [#11164](https://github.com/pydantic/pydantic/pull/11164)\n* Improve discriminated union error message for invalid union variants by [@Viicos](https://github.com/Viicos) in [#11161](https://github.com/pydantic/pydantic/pull/11161)\n* Unpack PEP 695 type aliases if using the `Annotated` form by [@Viicos](https://github.com/Viicos) in [#11109](https://github.com/pydantic/pydantic/pull/11109)\n* Include `openapi-python-client` check in issue creation for third-party failures, use `main` branch by [@sydney-runkle](https://github.com/sydney-runkle) in [#11182](https://github.com/pydantic/pydantic/pull/11182)\n* Add pandera third-party tests by [@Viicos](https://github.com/Viicos) in [#11193](https://github.com/pydantic/pydantic/pull/11193)\n* Add ODMantic third-party tests by [@sydney-runkle](https://github.com/sydney-runkle) in [#11197](https://github.com/pydantic/pydantic/pull/11197)\n* Add missing stacklevel in `deprecated_instance_property` warning by [@Viicos](https://github.com/Viicos) in [#11200](https://github.com/pydantic/pydantic/pull/11200)\n* Copy `WithJsonSchema` schema to avoid sharing mutated data by [@thejcannon](https://github.com/thejcannon) in [#11014](https://github.com/pydantic/pydantic/pull/11014)\n* Do not cache parametrized models when in the process of parametrizing another model by [@Viicos](https://github.com/Viicos) in [#10704](https://github.com/pydantic/pydantic/pull/10704)\n* Re-enable Beanie third-party tests by [@Viicos](https://github.com/Viicos) in [#11214](https://github.com/pydantic/pydantic/pull/11214)\n* Add discriminated union related metadata entries to the `CoreMetadata` definition by [@Viicos](https://github.com/Viicos) in [#11216](https://github.com/pydantic/pydantic/pull/11216)\n* Consolidate schema definitions logic in the `_Definitions` class by [@Viicos](https://github.com/Viicos) in [#11208](https://github.com/pydantic/pydantic/pull/11208)\n* Support initializing root model fields with values of the `root` type in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11212](https://github.com/pydantic/pydantic/pull/11212)\n* Fix various issues with dataclasses and `use_attribute_docstrings` by [@Viicos](https://github.com/Viicos) in [#11246](https://github.com/pydantic/pydantic/pull/11246)\n* Only compute normalized decimal places if necessary in `decimal_places_validator` by [@misrasaurabh1](https://github.com/misrasaurabh1) in [#11281](https://github.com/pydantic/pydantic/pull/11281)\n* Fix two misplaced sentences in validation errors documentation by [@ananiavito](https://github.com/ananiavito) in [#11302](https://github.com/pydantic/pydantic/pull/11302)\n* Fix mkdocstrings inventory example in documentation by [@pawamoy](https://github.com/pawamoy) in [#11311](https://github.com/pydantic/pydantic/pull/11311)\n* Add support for `validation_alias` in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11295](https://github.com/pydantic/pydantic/pull/11295)\n* Do not transform model serializer functions as class methods in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11298](https://github.com/pydantic/pydantic/pull/11298)\n* Simplify `GenerateJsonSchema.literal_schema()` implementation by [@misrasaurabh1](https://github.com/misrasaurabh1) in [#11321](https://github.com/pydantic/pydantic/pull/11321)\n* Add additional allowed schemes for `ClickHouseDsn` by [@Maze21127](https://github.com/Maze21127) in [#11319](https://github.com/pydantic/pydantic/pull/11319)\n* Coerce decimal constraints to `Decimal` instances by [@Viicos](https://github.com/Viicos) in [#11350](https://github.com/pydantic/pydantic/pull/11350)\n* Fix `ValueError` on year zero by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1583](https://github.com/pydantic/pydantic-core/pull/1583)\n\n#### Packaging\n\n* Bump dawidd6/action-download-artifact from 6 to 7 by [@dependabot](https://github.com/dependabot) in [#11018](https://github.com/pydantic/pydantic/pull/11018)\n* Re-enable memray related tests on Python 3.12+ by [@Viicos](https://github.com/Viicos) in [#11191](https://github.com/pydantic/pydantic/pull/11191)\n* Bump astral-sh/setup-uv to 5 by [@dependabot](https://github.com/dependabot) in [#11205](https://github.com/pydantic/pydantic/pull/11205)\n* Bump `ruff` to v0.9.0 by [@sydney-runkle](https://github.com/sydney-runkle) in [#11254](https://github.com/pydantic/pydantic/pull/11254)\n* Regular `uv.lock` deps update by [@sydney-runkle](https://github.com/sydney-runkle) in [#11333](https://github.com/pydantic/pydantic/pull/11333)\n* Add a `check_pydantic_core_version()` function by [@Viicos](https://github.com/Viicos) in [#11324](https://github.com/pydantic/pydantic/pull/11324)\n* Remove `greenlet` development dependency by [@Viicos](https://github.com/Viicos) in [#11351](https://github.com/pydantic/pydantic/pull/11351)\n* Bump `pydantic-core` to v2.28.0 by [@Viicos](https://github.com/Viicos) in [#11364](https://github.com/pydantic/pydantic/pull/11364)\n\n### New Contributors\n\n* [@FyZzyss](https://github.com/FyZzyss) made their first contribution in [#10789](https://github.com/pydantic/pydantic/pull/10789)\n* [@tamird](https://github.com/tamird) made their first contribution in [#10948](https://github.com/pydantic/pydantic/pull/10948)\n* [@felixxm](https://github.com/felixxm) made their first contribution in [#11077](https://github.com/pydantic/pydantic/pull/11077)\n* [@alexprabhat99](https://github.com/alexprabhat99) made their first contribution in [#11082](https://github.com/pydantic/pydantic/pull/11082)\n* [@Kharianne](https://github.com/Kharianne) made their first contribution in [#11111](https://github.com/pydantic/pydantic/pull/11111)\n* [@mdaffad](https://github.com/mdaffad) made their first contribution in [#11177](https://github.com/pydantic/pydantic/pull/11177)\n* [@thejcannon](https://github.com/thejcannon) made their first contribution in [#11014](https://github.com/pydantic/pydantic/pull/11014)\n* [@thomasfrimannkoren](https://github.com/thomasfrimannkoren) made their first contribution in [#11251](https://github.com/pydantic/pydantic/pull/11251)\n* [@usernameMAI](https://github.com/usernameMAI) made their first contribution in [#11275](https://github.com/pydantic/pydantic/pull/11275)\n* [@ananiavito](https://github.com/ananiavito) made their first contribution in [#11302](https://github.com/pydantic/pydantic/pull/11302)\n* [@pawamoy](https://github.com/pawamoy) made their first contribution in [#11311](https://github.com/pydantic/pydantic/pull/11311)\n* [@Maze21127](https://github.com/Maze21127) made their first contribution in [#11319](https://github.com/pydantic/pydantic/pull/11319)\n\n## v2.10.6 (2025-01-23)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.6)\n\n### What's Changed\n\n#### Fixes\n\n* Fix JSON Schema reference collection with `'examples'` keys by [@Viicos](https://github.com/Viicos) in [#11325](https://github.com/pydantic/pydantic/pull/11325)\n* Fix url python serialization by [@sydney-runkle](https://github.com/sydney-runkle) in [#11331](https://github.com/pydantic/pydantic/pull/11331)\n\n## v2.10.5 (2025-01-08)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.5)\n\n### What's Changed\n\n#### Fixes\n\n* Remove custom MRO implementation of Pydantic models by [@Viicos](https://github.com/Viicos) in [#11184](https://github.com/pydantic/pydantic/pull/11184)\n* Fix URL serialization for unions by [@sydney-runkle](https://github.com/sydney-runkle) in [#11233](https://github.com/pydantic/pydantic/pull/11233)\n\n## v2.10.4 (2024-12-18)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.4)\n\n### What's Changed\n\n#### Fixes\n\n* Fix for comparison of `AnyUrl` objects by [@alexprabhat99](https://github.com/alexprabhat99) in [#11082](https://github.com/pydantic/pydantic/pull/11082)\n* Properly fetch PEP 695 type params for functions, do not fetch annotations from signature by [@Viicos](https://github.com/Viicos) in [#11093](https://github.com/pydantic/pydantic/pull/11093)\n* Include JSON Schema input core schema in function schemas by [@Viicos](https://github.com/Viicos) in [#11085](https://github.com/pydantic/pydantic/pull/11085)\n* Add `len` to `_BaseUrl` to avoid TypeError by [@Kharianne](https://github.com/Kharianne) in [#11111](https://github.com/pydantic/pydantic/pull/11111)\n* Make sure the type reference is removed from the seen references by [@Viicos](https://github.com/Viicos) in [#11143](https://github.com/pydantic/pydantic/pull/11143)\n\n### New Contributors\n\n* [@FyZzyss](https://github.com/FyZzyss) made their first contribution in [#10789](https://github.com/pydantic/pydantic/pull/10789)\n* [@tamird](https://github.com/tamird) made their first contribution in [#10948](https://github.com/pydantic/pydantic/pull/10948)\n* [@felixxm](https://github.com/felixxm) made their first contribution in [#11077](https://github.com/pydantic/pydantic/pull/11077)\n* [@alexprabhat99](https://github.com/alexprabhat99) made their first contribution in [#11082](https://github.com/pydantic/pydantic/pull/11082)\n* [@Kharianne](https://github.com/Kharianne) made their first contribution in [#11111](https://github.com/pydantic/pydantic/pull/11111)\n\n#### Packaging\n\n* Bump `pydantic-core` to v2.27.2 by [@davidhewitt](https://github.com/davidhewitt) in [#11138](https://github.com/pydantic/pydantic/pull/11138)\n\n## v2.10.3 (2024-12-03)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.3)\n\n### What's Changed\n\n#### Fixes\n\n* Set fields when `defer_build` is set on Pydantic dataclasses by [@Viicos](https://github.com/Viicos) in [#10984](https://github.com/pydantic/pydantic/pull/10984)\n* Do not resolve the JSON Schema reference for `dict` core schema keys by [@Viicos](https://github.com/Viicos) in [#10989](https://github.com/pydantic/pydantic/pull/10989)\n* Use the globals of the function when evaluating the return type for `PlainSerializer` and `WrapSerializer` functions by [@Viicos](https://github.com/Viicos) in [#11008](https://github.com/pydantic/pydantic/pull/11008)\n* Fix host required enforcement for urls to be compatible with v2.9 behavior by [@sydney-runkle](https://github.com/sydney-runkle) in [#11027](https://github.com/pydantic/pydantic/pull/11027)\n* Add a `default_factory_takes_validated_data` property to `FieldInfo` by [@Viicos](https://github.com/Viicos) in [#11034](https://github.com/pydantic/pydantic/pull/11034)\n* Fix url json schema in `serialization` mode by [@sydney-runkle](https://github.com/sydney-runkle) in [#11035](https://github.com/pydantic/pydantic/pull/11035)\n\n## v2.10.2 (2024-11-25)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.2)\n\n### What's Changed\n\n#### Fixes\n\n* Only evaluate FieldInfo annotations if required during schema building by [@Viicos](https://github.com/Viicos) in [#10769](https://github.com/pydantic/pydantic/pull/10769)\n* Do not evaluate annotations for private fields by [@Viicos](https://github.com/Viicos) in [#10962](https://github.com/pydantic/pydantic/pull/10962)\n* Support serialization as any for `Secret` types and `Url` types by [@sydney-runkle](https://github.com/sydney-runkle) in [#10947](https://github.com/pydantic/pydantic/pull/10947)\n* Fix type hint of `Field.default` to be compatible with Python 3.8 and 3.9 by [@Viicos](https://github.com/Viicos) in [#10972](https://github.com/pydantic/pydantic/pull/10972)\n* Add hashing support for URL types by [@sydney-runkle](https://github.com/sydney-runkle) in [#10975](https://github.com/pydantic/pydantic/pull/10975)\n* Hide `BaseModel.__replace__` definition from type checkers by [@Viicos](https://github.com/Viicos) in [#10979](https://github.com/pydantic/pydantic/pull/10979)\n\n## v2.10.1 (2024-11-21)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.1)\n\n### What's Changed\n\n#### Fixes\n\n* Use the correct frame when instantiating a parametrized `TypeAdapter` by [@Viicos](https://github.com/Viicos) in [#10893](https://github.com/pydantic/pydantic/pull/10893)\n* Relax check for validated data in `default_factory` utils by [@sydney-runkle](https://github.com/sydney-runkle) in [#10909](https://github.com/pydantic/pydantic/pull/10909)\n* Fix type checking issue with `model_fields` and `model_computed_fields` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10911](https://github.com/pydantic/pydantic/pull/10911)\n* Use the parent configuration during schema generation for stdlib `dataclass`es by [@sydney-runkle](https://github.com/sydney-runkle) in [#10928](https://github.com/pydantic/pydantic/pull/10928)\n* Use the `globals` of the function when evaluating the return type of serializers and `computed_field`s by [@Viicos](https://github.com/Viicos) in [#10929](https://github.com/pydantic/pydantic/pull/10929)\n* Fix URL constraint application by [@sydney-runkle](https://github.com/sydney-runkle) in [#10922](https://github.com/pydantic/pydantic/pull/10922)\n* Fix URL equality with different validation methods by [@sydney-runkle](https://github.com/sydney-runkle) in [#10934](https://github.com/pydantic/pydantic/pull/10934)\n* Fix JSON schema title when specified as `''` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10936](https://github.com/pydantic/pydantic/pull/10936)\n* Fix `python` mode serialization for `complex` inference by [@sydney-runkle](https://github.com/sydney-runkle) in [pydantic-core#1549](https://github.com/pydantic/pydantic-core/pull/1549)\n\n#### Packaging\n\n* Bump `pydantic-core` version to `v2.27.1` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10938](https://github.com/pydantic/pydantic/pull/10938)\n\n### New Contributors\n\n## v2.10.0 (2024-11-20)\n\nThe code released in v2.10.0 is practically identical to that of v2.10.0b2.\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.0)\n\nSee the [v2.10 release blog post](https://pydantic.dev/articles/pydantic-v2-10-release) for the highlights!\n\n### What's Changed\n\n#### New Features\n\n* Support `fractions.Fraction` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10318](https://github.com/pydantic/pydantic/pull/10318)\n* Support `Hashable` for json validation by [@sydney-runkle](https://github.com/sydney-runkle) in [#10324](https://github.com/pydantic/pydantic/pull/10324)\n* Add a `SocketPath` type for `linux` systems by [@theunkn0wn1](https://github.com/theunkn0wn1) in [#10378](https://github.com/pydantic/pydantic/pull/10378)\n* Allow arbitrary refs in JSON schema `examples` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10417](https://github.com/pydantic/pydantic/pull/10417)\n* Support `defer_build` for Pydantic dataclasses by [@Viicos](https://github.com/Viicos) in [#10313](https://github.com/pydantic/pydantic/pull/10313)\n* Adding v1 / v2 incompatibility warning for nested v1 model by [@sydney-runkle](https://github.com/sydney-runkle) in [#10431](https://github.com/pydantic/pydantic/pull/10431)\n* Add support for unpacked `TypedDict` to type hint variadic keyword arguments with `@validate_call` by [@Viicos](https://github.com/Viicos) in [#10416](https://github.com/pydantic/pydantic/pull/10416)\n* Support compiled patterns in `protected_namespaces` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10522](https://github.com/pydantic/pydantic/pull/10522)\n* Add support for `propertyNames` in JSON schema by [@FlorianSW](https://github.com/FlorianSW) in [#10478](https://github.com/pydantic/pydantic/pull/10478)\n* Adding `__replace__` protocol for Python 3.13+ support by [@sydney-runkle](https://github.com/sydney-runkle) in [#10596](https://github.com/pydantic/pydantic/pull/10596)\n* Expose public `sort` method for JSON schema generation by [@sydney-runkle](https://github.com/sydney-runkle) in [#10595](https://github.com/pydantic/pydantic/pull/10595)\n* Add runtime validation of `@validate_call` callable argument by [@kc0506](https://github.com/kc0506) in [#10627](https://github.com/pydantic/pydantic/pull/10627)\n* Add `experimental_allow_partial` support by [@samuelcolvin](https://github.com/samuelcolvin) in [#10748](https://github.com/pydantic/pydantic/pull/10748)\n* Support default factories taking validated data as an argument by [@Viicos](https://github.com/Viicos) in [#10678](https://github.com/pydantic/pydantic/pull/10678)\n* Allow subclassing `ValidationError` and `PydanticCustomError` by [@Youssefares](https://github.com/Youssefares) in [pydantic/pydantic-core#1413](https://github.com/pydantic/pydantic-core/pull/1413)\n* Add `trailing-strings` support to `experimental_allow_partial` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10825](https://github.com/pydantic/pydantic/pull/10825)\n* Add `rebuild()` method for `TypeAdapter` and simplify `defer_build` patterns by [@sydney-runkle](https://github.com/sydney-runkle) in [#10537](https://github.com/pydantic/pydantic/pull/10537)\n* Improve `TypeAdapter` instance repr by [@sydney-runkle](https://github.com/sydney-runkle) in [#10872](https://github.com/pydantic/pydantic/pull/10872)\n\n#### Changes\n\n* Don't allow customization of `SchemaGenerator` until interface is more stable by [@sydney-runkle](https://github.com/sydney-runkle) in [#10303](https://github.com/pydantic/pydantic/pull/10303)\n* Cleanly `defer_build` on `TypeAdapters`, removing experimental flag by [@sydney-runkle](https://github.com/sydney-runkle) in [#10329](https://github.com/pydantic/pydantic/pull/10329)\n* Fix `mro` of generic subclass by [@kc0506](https://github.com/kc0506) in [#10100](https://github.com/pydantic/pydantic/pull/10100)\n* Strip whitespaces on JSON Schema title generation by [@sydney-runkle](https://github.com/sydney-runkle) in [#10404](https://github.com/pydantic/pydantic/pull/10404)\n* Use `b64decode` and `b64encode` for `Base64Bytes` type by [@sydney-runkle](https://github.com/sydney-runkle) in [#10486](https://github.com/pydantic/pydantic/pull/10486)\n* Relax protected namespace config default by [@sydney-runkle](https://github.com/sydney-runkle) in [#10441](https://github.com/pydantic/pydantic/pull/10441)\n* Revalidate parametrized generics if instance's origin is subclass of OG class by [@sydney-runkle](https://github.com/sydney-runkle) in [#10666](https://github.com/pydantic/pydantic/pull/10666)\n* Warn if configuration is specified on the `@dataclass` decorator and with the `__pydantic_config__` attribute by [@sydney-runkle](https://github.com/sydney-runkle) in [#10406](https://github.com/pydantic/pydantic/pull/10406)\n* Recommend against using `Ellipsis` (...) with `Field` by [@Viicos](https://github.com/Viicos) in [#10661](https://github.com/pydantic/pydantic/pull/10661)\n* Migrate to subclassing instead of annotated approach for pydantic url types by [@sydney-runkle](https://github.com/sydney-runkle) in [#10662](https://github.com/pydantic/pydantic/pull/10662)\n* Change JSON schema generation of `Literal`s and `Enums` by [@Viicos](https://github.com/Viicos) in [#10692](https://github.com/pydantic/pydantic/pull/10692)\n* Simplify unions involving `Any` or `Never` when replacing type variables by [@Viicos](https://github.com/Viicos) in [#10338](https://github.com/pydantic/pydantic/pull/10338)\n* Do not require padding when decoding `base64` bytes by [@bschoenmaeckers](https://github.com/bschoenmaeckers) in [pydantic/pydantic-core#1448](https://github.com/pydantic/pydantic-core/pull/1448)\n* Support dates all the way to 1BC by [@changhc](https://github.com/changhc) in [pydantic/speedate#77](https://github.com/pydantic/speedate/pull/77)\n\n#### Performance\n\n* Schema cleaning: skip unnecessary copies during schema walking by [@Viicos](https://github.com/Viicos) in [#10286](https://github.com/pydantic/pydantic/pull/10286)\n* Refactor namespace logic for annotations evaluation by [@Viicos](https://github.com/Viicos) in [#10530](https://github.com/pydantic/pydantic/pull/10530)\n* Improve email regexp on edge cases by [@AlekseyLobanov](https://github.com/AlekseyLobanov) in [#10601](https://github.com/pydantic/pydantic/pull/10601)\n* `CoreMetadata` refactor with an emphasis on documentation, schema build time performance, and reducing complexity by [@sydney-runkle](https://github.com/sydney-runkle) in [#10675](https://github.com/pydantic/pydantic/pull/10675)\n\n#### Packaging\n\n* Bump `pydantic-core` to `v2.27.0` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10825](https://github.com/pydantic/pydantic/pull/10825)\n* Replaced pdm with uv by [@frfahim](https://github.com/frfahim) in [#10727](https://github.com/pydantic/pydantic/pull/10727)\n\n#### Fixes\n\n* Remove guarding check on `computed_field` with `field_serializer` by [@nix010](https://github.com/nix010) in [#10390](https://github.com/pydantic/pydantic/pull/10390)\n* Fix `Predicate` issue in `v2.9.0` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10321](https://github.com/pydantic/pydantic/pull/10321)\n* Fixing `annotated-types` bound by [@sydney-runkle](https://github.com/sydney-runkle) in [#10327](https://github.com/pydantic/pydantic/pull/10327)\n* Turn `tzdata` install requirement into optional `timezone` dependency by [@jakob-keller](https://github.com/jakob-keller) in [#10331](https://github.com/pydantic/pydantic/pull/10331)\n* Use correct types namespace when building `namedtuple` core schemas by [@Viicos](https://github.com/Viicos) in [#10337](https://github.com/pydantic/pydantic/pull/10337)\n* Fix evaluation of stringified annotations during namespace inspection by [@Viicos](https://github.com/Viicos) in [#10347](https://github.com/pydantic/pydantic/pull/10347)\n* Fix `IncEx` type alias definition by [@Viicos](https://github.com/Viicos) in [#10339](https://github.com/pydantic/pydantic/pull/10339)\n* Do not error when trying to evaluate annotations of private attributes by [@Viicos](https://github.com/Viicos) in [#10358](https://github.com/pydantic/pydantic/pull/10358)\n* Fix nested type statement by [@kc0506](https://github.com/kc0506) in [#10369](https://github.com/pydantic/pydantic/pull/10369)\n* Improve typing of `ModelMetaclass.mro` by [@Viicos](https://github.com/Viicos) in [#10372](https://github.com/pydantic/pydantic/pull/10372)\n* Fix class access of deprecated `computed_field`s by [@Viicos](https://github.com/Viicos) in [#10391](https://github.com/pydantic/pydantic/pull/10391)\n* Make sure `inspect.iscoroutinefunction` works on coroutines decorated with `@validate_call` by [@MovisLi](https://github.com/MovisLi) in [#10374](https://github.com/pydantic/pydantic/pull/10374)\n* Fix `NameError` when using `validate_call` with PEP 695 on a class by [@kc0506](https://github.com/kc0506) in [#10380](https://github.com/pydantic/pydantic/pull/10380)\n* Fix `ZoneInfo` with various invalid types by [@sydney-runkle](https://github.com/sydney-runkle) in [#10408](https://github.com/pydantic/pydantic/pull/10408)\n* Fix `PydanticUserError` on empty `model_config` with annotations by [@cdwilson](https://github.com/cdwilson) in [#10412](https://github.com/pydantic/pydantic/pull/10412)\n* Fix variance issue in `_IncEx` type alias, only allow `True` by [@Viicos](https://github.com/Viicos) in [#10414](https://github.com/pydantic/pydantic/pull/10414)\n* Fix serialization schema generation when using `PlainValidator` by [@Viicos](https://github.com/Viicos) in [#10427](https://github.com/pydantic/pydantic/pull/10427)\n* Fix schema generation error when serialization schema holds references by [@Viicos](https://github.com/Viicos) in [#10444](https://github.com/pydantic/pydantic/pull/10444)\n* Inline references if possible when generating schema for `json_schema_input_type` by [@Viicos](https://github.com/Viicos) in [#10439](https://github.com/pydantic/pydantic/pull/10439)\n* Fix recursive arguments in `Representation` by [@Viicos](https://github.com/Viicos) in [#10480](https://github.com/pydantic/pydantic/pull/10480)\n* Fix representation for builtin function types by [@kschwab](https://github.com/kschwab) in [#10479](https://github.com/pydantic/pydantic/pull/10479)\n* Add python validators for decimal constraints (`max_digits` and `decimal_places`) by [@sydney-runkle](https://github.com/sydney-runkle) in [#10506](https://github.com/pydantic/pydantic/pull/10506)\n* Only fetch `__pydantic_core_schema__` from the current class during schema generation by [@Viicos](https://github.com/Viicos) in [#10518](https://github.com/pydantic/pydantic/pull/10518)\n* Fix `stacklevel` on deprecation warnings for `BaseModel` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10520](https://github.com/pydantic/pydantic/pull/10520)\n* Fix warning `stacklevel` in `BaseModel.__init__` by [@Viicos](https://github.com/Viicos) in [#10526](https://github.com/pydantic/pydantic/pull/10526)\n* Improve error handling for in-evaluable refs for discriminator application by [@sydney-runkle](https://github.com/sydney-runkle) in [#10440](https://github.com/pydantic/pydantic/pull/10440)\n* Change the signature of `ConfigWrapper.core_config` to take the title directly by [@Viicos](https://github.com/Viicos) in [#10562](https://github.com/pydantic/pydantic/pull/10562)\n* Do not use the previous config from the stack for dataclasses without config by [@Viicos](https://github.com/Viicos) in [#10576](https://github.com/pydantic/pydantic/pull/10576)\n* Fix serialization for IP types with `mode='python'` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10594](https://github.com/pydantic/pydantic/pull/10594)\n* Support constraint application for `Base64Etc` types by [@sydney-runkle](https://github.com/sydney-runkle) in [#10584](https://github.com/pydantic/pydantic/pull/10584)\n* Fix `validate_call` ignoring `Field` in `Annotated` by [@kc0506](https://github.com/kc0506) in [#10610](https://github.com/pydantic/pydantic/pull/10610)\n* Raise an error when `Self` is invalid by [@kc0506](https://github.com/kc0506) in [#10609](https://github.com/pydantic/pydantic/pull/10609)\n* Using `core_schema.InvalidSchema` instead of metadata injection + checks by [@sydney-runkle](https://github.com/sydney-runkle) in [#10523](https://github.com/pydantic/pydantic/pull/10523)\n* Tweak type alias logic by [@kc0506](https://github.com/kc0506) in [#10643](https://github.com/pydantic/pydantic/pull/10643)\n* Support usage of `type` with `typing.Self` and type aliases by [@kc0506](https://github.com/kc0506) in [#10621](https://github.com/pydantic/pydantic/pull/10621)\n* Use overloads for `Field` and `PrivateAttr` functions by [@Viicos](https://github.com/Viicos) in [#10651](https://github.com/pydantic/pydantic/pull/10651)\n* Clean up the `mypy` plugin implementation by [@Viicos](https://github.com/Viicos) in [#10669](https://github.com/pydantic/pydantic/pull/10669)\n* Properly check for `typing_extensions` variant of `TypeAliasType` by [@Daraan](https://github.com/Daraan) in [#10713](https://github.com/pydantic/pydantic/pull/10713)\n* Allow any mapping in `BaseModel.model_copy()` by [@Viicos](https://github.com/Viicos) in [#10751](https://github.com/pydantic/pydantic/pull/10751)\n* Fix `isinstance` behavior for urls by [@sydney-runkle](https://github.com/sydney-runkle) in [#10766](https://github.com/pydantic/pydantic/pull/10766)\n* Ensure `cached_property` can be set on Pydantic models by [@Viicos](https://github.com/Viicos) in [#10774](https://github.com/pydantic/pydantic/pull/10774)\n* Fix equality checks for primitives in literals by [@sydney-runkle](https://github.com/sydney-runkle) in [pydantic/pydantic-core#1459](https://github.com/pydantic/pydantic-core/pull/1459)\n* Properly enforce `host_required` for URLs by [@Viicos](https://github.com/Viicos) in [pydantic/pydantic-core#1488](https://github.com/pydantic/pydantic-core/pull/1488)\n* Fix when `coerce_numbers_to_str` enabled and string has invalid Unicode character by [@andrey-berenda](https://github.com/andrey-berenda) in [pydantic/pydantic-core#1515](https://github.com/pydantic/pydantic-core/pull/1515)\n* Fix serializing `complex` values in `Enum`s by [@changhc](https://github.com/changhc) in [pydantic/pydantic-core#1524](https://github.com/pydantic/pydantic-core/pull/1524)\n* Refactor `_typing_extra` module by [@Viicos](https://github.com/Viicos) in [#10725](https://github.com/pydantic/pydantic/pull/10725)\n* Support intuitive equality for urls by [@sydney-runkle](https://github.com/sydney-runkle) in [#10798](https://github.com/pydantic/pydantic/pull/10798)\n* Add `bytearray` to `TypeAdapter.validate_json` signature by [@samuelcolvin](https://github.com/samuelcolvin) in [#10802](https://github.com/pydantic/pydantic/pull/10802)\n* Ensure class access of method descriptors is performed when used as a default with `Field` by [@Viicos](https://github.com/Viicos) in [#10816](https://github.com/pydantic/pydantic/pull/10816)\n* Fix circular import with `validate_call` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10807](https://github.com/pydantic/pydantic/pull/10807)\n* Fix error when using type aliases referencing other type aliases by [@Viicos](https://github.com/Viicos) in [#10809](https://github.com/pydantic/pydantic/pull/10809)\n* Fix `IncEx` type alias to be compatible with mypy by [@Viicos](https://github.com/Viicos) in [#10813](https://github.com/pydantic/pydantic/pull/10813)\n* Make `__signature__` a lazy property, do not deepcopy defaults by [@Viicos](https://github.com/Viicos) in [#10818](https://github.com/pydantic/pydantic/pull/10818)\n* Make `__signature__` lazy for dataclasses, too by [@sydney-runkle](https://github.com/sydney-runkle) in [#10832](https://github.com/pydantic/pydantic/pull/10832)\n* Subclass all single host url classes from `AnyUrl` to preserve behavior from v2.9 by [@sydney-runkle](https://github.com/sydney-runkle) in [#10856](https://github.com/pydantic/pydantic/pull/10856)\n\n### New Contributors\n\n* [@jakob-keller](https://github.com/jakob-keller) made their first contribution in [#10331](https://github.com/pydantic/pydantic/pull/10331)\n* [@MovisLi](https://github.com/MovisLi) made their first contribution in [#10374](https://github.com/pydantic/pydantic/pull/10374)\n* [@joaopalmeiro](https://github.com/joaopalmeiro) made their first contribution in [#10405](https://github.com/pydantic/pydantic/pull/10405)\n* [@theunkn0wn1](https://github.com/theunkn0wn1) made their first contribution in [#10378](https://github.com/pydantic/pydantic/pull/10378)\n* [@cdwilson](https://github.com/cdwilson) made their first contribution in [#10412](https://github.com/pydantic/pydantic/pull/10412)\n* [@dlax](https://github.com/dlax) made their first contribution in [#10421](https://github.com/pydantic/pydantic/pull/10421)\n* [@kschwab](https://github.com/kschwab) made their first contribution in [#10479](https://github.com/pydantic/pydantic/pull/10479)\n* [@santibreo](https://github.com/santibreo) made their first contribution in [#10453](https://github.com/pydantic/pydantic/pull/10453)\n* [@FlorianSW](https://github.com/FlorianSW) made their first contribution in [#10478](https://github.com/pydantic/pydantic/pull/10478)\n* [@tkasuz](https://github.com/tkasuz) made their first contribution in [#10555](https://github.com/pydantic/pydantic/pull/10555)\n* [@AlekseyLobanov](https://github.com/AlekseyLobanov) made their first contribution in [#10601](https://github.com/pydantic/pydantic/pull/10601)\n* [@NiclasvanEyk](https://github.com/NiclasvanEyk) made their first contribution in [#10667](https://github.com/pydantic/pydantic/pull/10667)\n* [@mschoettle](https://github.com/mschoettle) made their first contribution in [#10677](https://github.com/pydantic/pydantic/pull/10677)\n* [@Daraan](https://github.com/Daraan) made their first contribution in [#10713](https://github.com/pydantic/pydantic/pull/10713)\n* [@k4nar](https://github.com/k4nar) made their first contribution in [#10736](https://github.com/pydantic/pydantic/pull/10736)\n* [@UriyaHarpeness](https://github.com/UriyaHarpeness) made their first contribution in [#10740](https://github.com/pydantic/pydantic/pull/10740)\n* [@frfahim](https://github.com/frfahim) made their first contribution in [#10727](https://github.com/pydantic/pydantic/pull/10727)\n\n## v2.10.0b2 (2024-11-13)\n\nPre-release, see [the GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.0b2) for details.\n\n## v2.10.0b1 (2024-11-06)\n\nPre-release, see [the GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.0b1) for details.\n\n\n... see [here](https://docs.pydantic.dev/changelog/#v0322-2019-08-17) for earlier changes.\n", + "description_content_type": "text/markdown", + "author_email": "Samuel Colvin , Eric Jolibois , Hasan Ramezani , Adrian Garcia Badaracco <1755071+adriangb@users.noreply.github.com>, Terrence Dorsey , David Montague , Serge Matveenko , Marcelo Trylesinski , Sydney Runkle , David Hewitt , Alex Hall , Victorien Plot ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Framework :: Hypothesis", + "Framework :: Pydantic", + "Intended Audience :: Developers", + "Intended Audience :: Information Technology", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Internet", + "Topic :: Software Development :: Libraries :: Python Modules" + ], + "requires_dist": [ + "annotated-types>=0.6.0", + "pydantic-core==2.46.5", + "typing-extensions>=4.14.1", + "typing-inspection>=0.4.2", + "email-validator>=2.0.0; extra == 'email'", + "tzdata; (python_version >= '3.9' and platform_system == 'Windows') and extra == 'timezone'" + ], + "requires_python": ">=3.9", + "project_url": [ + "Homepage, https://github.com/pydantic/pydantic", + "Documentation, https://docs.pydantic.dev", + "Funding, https://github.com/sponsors/samuelcolvin", + "Source, https://github.com/pydantic/pydantic", + "Changelog, https://docs.pydantic.dev/latest/changelog/" + ], + "provides_extra": [ + "email", + "timezone" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/2c/9b/59634b7ac631c63b2a37760eb6943af3e29573d6b59a4abc5e7f019d4cee/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "archive_info": { + "hashes": { + "sha256": "54d510bac3ee52247af28ed4bb18a1e799f040ac60fd2bf5ccd4c92f1fbe786f" + }, + "hash": "sha256=54d510bac3ee52247af28ed4bb18a1e799f040ac60fd2bf5ccd4c92f1fbe786f" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "pydantic_core", + "version": "2.46.5", + "summary": "Core functionality for Pydantic validation and serialization", + "description": "# pydantic-core\n\n[![CI](https://github.com/pydantic/pydantic-core/workflows/ci/badge.svg?event=push)](https://github.com/pydantic/pydantic-core/actions?query=event%3Apush+branch%3Amain+workflow%3Aci)\n[![Coverage](https://codecov.io/gh/pydantic/pydantic-core/branch/main/graph/badge.svg)](https://codecov.io/gh/pydantic/pydantic-core)\n[![pypi](https://img.shields.io/pypi/v/pydantic-core.svg)](https://pypi.python.org/pypi/pydantic-core)\n[![versions](https://img.shields.io/pypi/pyversions/pydantic-core.svg)](https://github.com/pydantic/pydantic-core)\n[![license](https://img.shields.io/github/license/pydantic/pydantic-core.svg)](https://github.com/pydantic/pydantic-core/blob/main/LICENSE)\n\nThis package provides the core functionality for [pydantic](https://docs.pydantic.dev) validation and serialization.\n\nPydantic-core is currently around 17x faster than pydantic V1.\nSee [`tests/benchmarks/`](./tests/benchmarks/) for details.\n\n## Example of direct usage\n\n*NOTE: You should not need to use pydantic-core directly; instead, use pydantic, which in turn uses pydantic-core.*\n\n```py\nfrom pydantic_core import SchemaValidator, ValidationError\n\n\nv = SchemaValidator(\n {\n 'type': 'typed-dict',\n 'fields': {\n 'name': {\n 'type': 'typed-dict-field',\n 'schema': {\n 'type': 'str',\n },\n },\n 'age': {\n 'type': 'typed-dict-field',\n 'schema': {\n 'type': 'int',\n 'ge': 18,\n },\n },\n 'is_developer': {\n 'type': 'typed-dict-field',\n 'schema': {\n 'type': 'default',\n 'schema': {'type': 'bool'},\n 'default': True,\n },\n },\n },\n }\n)\n\nr1 = v.validate_python({'name': 'Samuel', 'age': 35})\nassert r1 == {'name': 'Samuel', 'age': 35, 'is_developer': True}\n\n# pydantic-core can also validate JSON directly\nr2 = v.validate_json('{\"name\": \"Samuel\", \"age\": 35}')\nassert r1 == r2\n\ntry:\n v.validate_python({'name': 'Samuel', 'age': 11})\nexcept ValidationError as e:\n print(e)\n \"\"\"\n 1 validation error for model\n age\n Input should be greater than or equal to 18\n [type=greater_than_equal, context={ge: 18}, input_value=11, input_type=int]\n \"\"\"\n```\n\n## Getting Started\n\n### Prerequisites\n\nYou'll need:\n\n1. **[Rust](https://rustup.rs/)** - Rust stable (or nightly for coverage)\n2. **[uv](https://docs.astral.sh/uv/getting-started/installation/)** - Fast Python package manager (will install Python 3.9+ automatically)\n3. **[git](https://git-scm.com/)** - For version control\n4. **[make](https://www.gnu.org/software/make/)** - For running development commands (or use `nmake` on Windows)\n\n### Quick Start\n\n```bash\n# Clone the repository (or from your fork)\ngit clone git@github.com:pydantic/pydantic-core.git\ncd pydantic-core\n\n# Install all dependencies using uv, setup pre-commit hooks, and build the development version\nmake install\n```\n\nVerify your installation by running:\n\n```bash\nmake\n```\n\nThis runs a full development cycle: formatting, building, linting, and testing\n\n### Development Commands\n\nRun `make help` to see all available commands, or use these common ones:\n\n```bash\nmake build-dev # to build the package during development\nmake build-prod # to perform an optimised build for benchmarking\nmake test # to run the tests\nmake testcov # to run the tests and generate a coverage report\nmake lint # to run the linter\nmake format # to format python and rust code\nmake all # to run to run build-dev + format + lint + test\n```\n\n### Useful Resources\n\n* [`python/pydantic_core/_pydantic_core.pyi`](./python/pydantic_core/_pydantic_core.pyi) - Python API types\n* [`python/pydantic_core/core_schema.py`](./python/pydantic_core/core_schema.py) - Core schema definitions\n* [`tests/`](./tests) - Comprehensive usage examples\n\n## Profiling\n\nIt's possible to profile the code using the [`flamegraph` utility from `flamegraph-rs`](https://github.com/flamegraph-rs/flamegraph). (Tested on Linux.) You can install this with `cargo install flamegraph`.\n\nRun `make build-profiling` to install a release build with debugging symbols included (needed for profiling).\n\nOnce that is built, you can profile pytest benchmarks with (e.g.):\n\n```bash\nflamegraph -- pytest tests/benchmarks/test_micro_benchmarks.py -k test_list_of_ints_core_py --benchmark-enable\n```\n\nThe `flamegraph` command will produce an interactive SVG at `flamegraph.svg`.\n\n## Releasing\n\nTBC (needs to be integrated into `pydantic` repository release process).\n\n", + "description_content_type": "text/markdown; charset=UTF-8; variant=GFM", + "home_page": "https://github.com/pydantic/pydantic", + "author_email": "Samuel Colvin , Adrian Garcia Badaracco <1755071+adriangb@users.noreply.github.com>, David Montague , David Hewitt , Sydney Runkle , Victorien Plot ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 3 - Alpha", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Programming Language :: Python :: Implementation :: GraalPy", + "Programming Language :: Rust", + "Framework :: Pydantic", + "Intended Audience :: Developers", + "Intended Audience :: Information Technology", + "Operating System :: POSIX :: Linux", + "Operating System :: Microsoft :: Windows", + "Operating System :: MacOS", + "Typing :: Typed" + ], + "requires_dist": [ + "typing-extensions>=4.14.1" + ], + "requires_python": ">=3.9", + "project_url": [ + "Funding, https://github.com/sponsors/samuelcolvin", + "Homepage, https://github.com/pydantic", + "Source, https://github.com/pydantic/pydantic/tree/main/pydantic-core" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0" + }, + "hash": "sha256=f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "annotated-types", + "version": "0.8.0", + "summary": "Reusable constraint types to use with typing.Annotated", + "description": "# annotated-types\n\n[![CI](https://github.com/annotated-types/annotated-types/workflows/CI/badge.svg?event=push)](https://github.com/annotated-types/annotated-types/actions?query=event%3Apush+branch%3Amain+workflow%3ACI)\n[![pypi](https://img.shields.io/pypi/v/annotated-types.svg)](https://pypi.python.org/pypi/annotated-types)\n[![versions](https://img.shields.io/pypi/pyversions/annotated-types.svg)](https://github.com/annotated-types/annotated-types)\n[![license](https://img.shields.io/github/license/annotated-types/annotated-types.svg)](https://github.com/annotated-types/annotated-types/blob/main/LICENSE)\n\n[PEP-593](https://peps.python.org/pep-0593/) added `typing.Annotated` as a way of\nadding context-specific metadata to existing types, and specifies that\n`Annotated[T, x]` _should_ be treated as `T` by any tool or library without special\nlogic for `x`.\n\nThis package provides metadata objects which can be used to represent common\nconstraints such as upper and lower bounds on scalar values and collection sizes,\na `Predicate` marker for runtime checks, and\ndescriptions of how we intend these metadata to be interpreted. In some cases,\nwe also note alternative representations which do not require this package.\n\n## Install\n\n```bash\npip install annotated-types\n```\n\n## Examples\n\n```python\nfrom typing import Annotated\nfrom annotated_types import Gt, Len, Predicate\n\nclass MyClass:\n age: Annotated[int, Gt(18)] # Valid: 19, 20, ...\n # Invalid: 17, 18, \"19\", 19.0, ...\n factors: list[Annotated[int, Predicate(is_prime)]] # Valid: 2, 3, 5, 7, 11, ...\n # Invalid: 4, 8, -2, 5.0, \"prime\", ...\n\n my_list: Annotated[list[int], Len(0, 10)] # Valid: [], [10, 20, 30, 40, 50]\n # Invalid: (1, 2), [\"abc\"], [0] * 20\n```\n\n## Documentation\n\n_While `annotated-types` avoids runtime checks for performance, users should not\nconstruct invalid combinations such as `MultipleOf(\"non-numeric\")` or `Annotated[int, Len(3)]`.\nDownstream implementors may choose to raise an error, emit a warning, silently ignore\na metadata item, etc., if the metadata objects described below are used with an\nincompatible type - or for any other reason!_\n\n### Gt, Ge, Lt, Le\n\nExpress inclusive and/or exclusive bounds on orderable values - which may be numbers,\ndates, times, strings, sets, etc. Note that the boundary value need not be of the\nsame type that was annotated, so long as they can be compared: `Annotated[int, Gt(1.5)]`\nis fine, for example, and implies that the value is an integer x such that `x > 1.5`.\n\nWe suggest that implementors may also interpret `functools.partial(operator.le, 1.5)`\nas being equivalent to `Gt(1.5)`, for users who wish to avoid a runtime dependency on\nthe `annotated-types` package.\n\nTo be explicit, these types have the following meanings:\n\n* `Gt(x)` - value must be \"Greater Than\" `x` - equivalent to exclusive minimum\n* `Ge(x)` - value must be \"Greater than or Equal\" to `x` - equivalent to inclusive minimum\n* `Lt(x)` - value must be \"Less Than\" `x` - equivalent to exclusive maximum\n* `Le(x)` - value must be \"Less than or Equal\" to `x` - equivalent to inclusive maximum\n\n### Interval\n\n`Interval(gt, ge, lt, le)` allows you to specify an upper and lower bound with a single\nmetadata object. `None` attributes should be ignored, and non-`None` attributes\ntreated as per the single bounds above.\n\n### MultipleOf\n\n`MultipleOf(multiple_of=x)` might be interpreted in two ways:\n\n1. Python semantics, implying `value % multiple_of == 0`, or\n2. [JSONschema semantics](https://json-schema.org/draft/2020-12/json-schema-validation.html#rfc.section.6.2.1),\n where `int(value / multiple_of) == value / multiple_of`.\n\nWe encourage users to be aware of these two common interpretations and their\ndistinct behaviours, especially since very large or non-integer numbers make\nit easy to cause silent data corruption due to floating-point imprecision.\n\nWe encourage libraries to carefully document which interpretation they implement.\n\n### MinLen, MaxLen, Len\n\n`Len()` implies that `min_length <= len(value) <= max_length` - lower and upper bounds are inclusive.\n\nAs well as `Len()` which can optionally include upper and lower bounds, we also\nprovide `MinLen(x)` and `MaxLen(y)` which are equivalent to `Len(min_length=x)`\nand `Len(max_length=y)` respectively.\n\n`Len`, `MinLen`, and `MaxLen` may be used with any type which supports `len(value)`.\n\nExamples of usage:\n\n* `Annotated[list, MaxLen(10)]` (or `Annotated[list, Len(max_length=10)]`) - list must have a length of 10 or less\n* `Annotated[str, MaxLen(10)]` - string must have a length of 10 or less\n* `Annotated[list, MinLen(3)]` (or `Annotated[list, Len(min_length=3)]`) - list must have a length of 3 or more\n* `Annotated[list, Len(4, 6)]` - list must have a length of 4, 5, or 6\n* `Annotated[list, Len(8, 8)]` - list must have a length of exactly 8\n\n#### Changed in v0.4.0\n\n* `min_inclusive` has been renamed to `min_length`, no change in meaning\n* `max_exclusive` has been renamed to `max_length`, upper bound is now **inclusive** instead of **exclusive**\n* The recommendation that slices are interpreted as `Len` has been removed due to ambiguity and different semantic\n meaning of the upper bound in slices vs. `Len`\n\nSee [issue #23](https://github.com/annotated-types/annotated-types/issues/23) for discussion.\n\n### Timezone\n\n`Timezone` can be used with a `datetime` or a `time` to express which timezones\nare allowed. `Annotated[datetime, Timezone(None)]` must be a naive datetime.\n`Timezone[...]` ([literal ellipsis](https://docs.python.org/3/library/constants.html#Ellipsis))\nexpresses that any timezone-aware datetime is allowed. You may also pass a specific\ntimezone string or [`tzinfo`](https://docs.python.org/3/library/datetime.html#tzinfo-objects)\nobject such as `Timezone(timezone.utc)` or `Timezone(\"Africa/Abidjan\")` to express that you only\nallow a specific timezone, though we note that this is often a symptom of fragile design.\n\n#### Changed in v0.x.x\n\n* `Timezone` accepts [`tzinfo`](https://docs.python.org/3/library/datetime.html#tzinfo-objects) objects instead of\n `timezone`, extending compatibility to [`zoneinfo`](https://docs.python.org/3/library/zoneinfo.html) and third party libraries.\n\n### Unit\n\n`Unit(unit: str)` expresses that the annotated numeric value is the magnitude of\na quantity with the specified unit. For example, `Annotated[float, Unit(\"m/s\")]`\nwould be a float representing a velocity in meters per second.\n\nPlease note that `annotated_types` itself makes no attempt to parse or validate\nthe unit string in any way. That is left entirely to downstream libraries,\nsuch as [`pint`](https://pint.readthedocs.io) or\n[`astropy.units`](https://docs.astropy.org/en/stable/units/).\n\nAn example of how a library might use this metadata:\n\n```python\nfrom annotated_types import Unit\nfrom typing import Annotated, TypeVar, Callable, Any, get_origin, get_args\n\n# given a type annotated with a unit:\nMeters = Annotated[float, Unit(\"m\")]\n\n\n# you can cast the annotation to a specific unit type with any\n# callable that accepts a string and returns the desired type\nT = TypeVar(\"T\")\ndef cast_unit(tp: Any, unit_cls: Callable[[str], T]) -> T | None:\n if get_origin(tp) is Annotated:\n for arg in get_args(tp):\n if isinstance(arg, Unit):\n return unit_cls(arg.unit)\n return None\n\n\n# using `pint`\nimport pint\npint_unit = cast_unit(Meters, pint.Unit)\n\n\n# using `astropy.units`\nimport astropy.units as u\nastropy_unit = cast_unit(Meters, u.Unit)\n```\n\n### Predicate\n\n`Predicate(func: Callable)` expresses that `func(value)` is truthy for valid values.\nUsers should prefer the statically inspectable metadata above, but if you need\nthe full power and flexibility of arbitrary runtime predicates... here it is.\n\nFor some common constraints, we provide generic types:\n\n* `LowerCase = Annotated[T, Predicate(str.islower)]`\n* `UpperCase = Annotated[T, Predicate(str.isupper)]`\n* `IsDigit = Annotated[T, Predicate(str.isdigit)]`\n* `IsFinite = Annotated[T, Predicate(math.isfinite)]`\n* `IsNotFinite = Annotated[T, Predicate(Not(math.isfinite))]`\n* `IsNan = Annotated[T, Predicate(math.isnan)]`\n* `IsNotNan = Annotated[T, Predicate(Not(math.isnan))]`\n* `IsInfinite = Annotated[T, Predicate(math.isinf)]`\n* `IsNotInfinite = Annotated[T, Predicate(Not(math.isinf))]`\n\nso that you can write e.g. `x: IsFinite[float] = 2.0` instead of the longer\n(but exactly equivalent) `x: Annotated[float, Predicate(math.isfinite)] = 2.0`.\n\nSome libraries might have special logic to handle known or understandable predicates,\nfor example by checking for `str.isdigit` and using its presence to both call custom\nlogic to enforce digit-only strings, and customise some generated external schema.\nUsers are therefore encouraged to avoid indirection like `lambda s: s.lower()`, in\nfavor of introspectable methods such as `str.lower` or `re.compile(\"pattern\").search`.\n\nTo enable basic negation of commonly used predicates like `math.isnan` without introducing introspection that makes it impossible for implementers to introspect the predicate we provide a `Not` wrapper that simply negates the predicate in an introspectable manner. Several of the predicates listed above are created in this manner.\n\nWe do not specify what behaviour should be expected for predicates that raise\nan exception. For example `Annotated[int, Predicate(str.isdigit)]` might silently\nskip invalid constraints, or statically raise an error; or it might try calling it\nand then propagate or discard the resulting\n`TypeError: descriptor 'isdigit' for 'str' objects doesn't apply to a 'int' object`\nexception. We encourage libraries to document the behaviour they choose.\n\n### Doc\n\n`doc()` can be used to add documentation information in `Annotated`, for function and method parameters, variables, class attributes, return types, and any place where `Annotated` can be used.\n\nIt expects a value that can be statically analyzed, as the main use case is for static analysis, editors, documentation generators, and similar tools.\n\nIt returns a `DocInfo` class with a single attribute `documentation` containing the value passed to `doc()`.\n\nThis is the early adopter's alternative form of the [`typing-doc` proposal](https://github.com/tiangolo/fastapi/blob/typing-doc/typing_doc.md).\n\n### Integrating downstream types with `GroupedMetadata`\n\nImplementers may choose to provide a convenience wrapper that groups multiple pieces of metadata.\nThis can help reduce verbosity and cognitive overhead for users.\nFor example, an implementer like Pydantic might provide a `Field` or `Meta` type that accepts keyword arguments and transforms these into low-level metadata:\n\n```python\nfrom dataclasses import dataclass\nfrom typing import Iterator\nfrom annotated_types import GroupedMetadata, Ge\n\n@dataclass\nclass Field(GroupedMetadata):\n ge: int | None = None\n description: str | None = None\n\n def __iter__(self) -> Iterator[object]:\n # Iterating over a GroupedMetadata object should yield annotated-types\n # constraint metadata objects which describe it as fully as possible,\n # and may include other unknown objects too.\n if self.ge is not None:\n yield Ge(self.ge)\n if self.description is not None:\n yield Description(self.description)\n```\n\nLibraries consuming annotated-types constraints should check for `GroupedMetadata` and unpack it by iterating over the object and treating the results as if they had been \"unpacked\" in the `Annotated` type. The same logic should be applied to the [PEP 646 `Unpack` type](https://peps.python.org/pep-0646/), so that `Annotated[T, Field(...)]`, `Annotated[T, Unpack[Field(...)]]` and `Annotated[T, *Field(...)]` are all treated consistently.\n\nLibraries consuming annotated-types should also ignore any metadata they do not recongize that came from unpacking a `GroupedMetadata`, just like they ignore unrecognized metadata in `Annotated` itself.\n\nOur own `annotated_types.Interval` class is a `GroupedMetadata` which unpacks itself into `Gt`, `Lt`, etc., so this is not an abstract concern. Similarly, `annotated_types.Len` is a `GroupedMetadata` which unpacks itself into `MinLen` (optionally) and `MaxLen`.\n\n### Consuming metadata\n\nWe intend to not be prescriptive as to _how_ the metadata and constraints are used, but as an example of how one might parse constraints from types annotations see our [implementation in `test_main.py`](https://github.com/annotated-types/annotated-types/blob/f59cf6d1b5255a0fe359b93896759a180bec30ae/tests/test_main.py#L94-L103).\n\nIt is up to the implementer to determine how this metadata is used.\nYou could use the metadata for runtime type checking, for generating schemas or to generate example data, amongst other use cases.\n\n## Design & History\n\nThis package was designed at the PyCon 2022 sprints by the maintainers of Pydantic\nand Hypothesis, with the goal of making it as easy as possible for end-users to\nprovide more informative annotations for use by runtime libraries.\n\nIt is deliberately minimal, and following PEP-593 allows considerable downstream\ndiscretion in what (if anything!) they choose to support. Nonetheless, we expect\nthat staying simple and covering _only_ the most common use-cases will give users\nand maintainers the best experience we can. If you'd like more constraints for your\ntypes - follow our lead, by defining them and documenting them downstream!\n", + "description_content_type": "text/markdown", + "author_email": "Adrian Garcia Badaracco <1755071+adriangb@users.noreply.github.com>, Samuel Colvin , Zac Hatfield-Dodds ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 4 - Beta", + "Environment :: Console", + "Environment :: MacOS X", + "Intended Audience :: Developers", + "Intended Audience :: Information Technology", + "License :: OSI Approved :: MIT License", + "Operating System :: POSIX :: Linux", + "Operating System :: Unix", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Topic :: Software Development :: Libraries :: Python Modules", + "Typing :: Typed" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://github.com/annotated-types/annotated-types", + "Source, https://github.com/annotated-types/annotated-types", + "Changelog, https://github.com/annotated-types/annotated-types/releases" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/95/9c/c510029fc6ef33a6275cd2c5d3cecd6613dfd6aa401d57c54f1c18852ccf/setuptools-84.0.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670" + }, + "hash": "sha256=51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "setuptools", + "version": "84.0.0", + "dynamic": [ + "license-file" + ], + "summary": "Most extensible Python build backend with support for C/C++ extension modules", + "description": ".. |pypi-version| image:: https://img.shields.io/pypi/v/setuptools.svg\n :target: https://pypi.org/project/setuptools\n\n.. |py-version| image:: https://img.shields.io/pypi/pyversions/setuptools.svg\n\n.. |test-badge| image:: https://github.com/pypa/setuptools/actions/workflows/main.yml/badge.svg\n :target: https://github.com/pypa/setuptools/actions?query=workflow%3A%22tests%22\n :alt: tests\n\n.. |ruff-badge| image:: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v2.json\n :target: https://github.com/astral-sh/ruff\n :alt: Ruff\n\n.. |docs-badge| image:: https://img.shields.io/readthedocs/setuptools/latest.svg\n :target: https://setuptools.pypa.io\n\n.. |skeleton-badge| image:: https://img.shields.io/badge/skeleton-2026-informational\n :target: https://blog.jaraco.com/skeleton\n\n.. |codecov-badge| image:: https://img.shields.io/codecov/c/github/pypa/setuptools/master.svg?logo=codecov&logoColor=white\n :target: https://codecov.io/gh/pypa/setuptools\n\n.. |tidelift-badge| image:: https://tidelift.com/badges/github/pypa/setuptools?style=flat\n :target: https://tidelift.com/subscription/pkg/pypi-setuptools?utm_source=pypi-setuptools&utm_medium=readme\n\n.. |discord-badge| image:: https://img.shields.io/discord/803025117553754132\n :target: https://discord.com/channels/803025117553754132/815945031150993468\n :alt: Discord\n\n|pypi-version| |py-version| |test-badge| |ruff-badge| |docs-badge| |skeleton-badge| |codecov-badge| |discord-badge|\n\nSee the `Quickstart `_\nand the `User's Guide `_ for\ninstructions on how to use Setuptools.\n\nQuestions and comments should be directed to `GitHub Discussions\n`_.\nBug reports and especially tested patches may be\nsubmitted directly to the `bug tracker\n`_.\n\n\nCode of Conduct\n===============\n\nEveryone interacting in the setuptools project's codebases, issue trackers,\nchat rooms, and fora is expected to follow the\n`PSF Code of Conduct `_.\n\n\nFor Enterprise\n==============\n\nAvailable as part of the Tidelift Subscription.\n\nSetuptools and the maintainers of thousands of other packages are working with Tidelift to deliver one enterprise subscription that covers all of the open source you use.\n\n`Learn more `_.\n", + "description_content_type": "text/x-rst", + "keywords": [ + "CPAN", + "PyPI", + "distutils", + "eggs", + "package", + "management" + ], + "author_email": "Python Packaging Authority ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: System :: Archiving :: Packaging", + "Topic :: System :: Systems Administration", + "Topic :: Utilities" + ], + "requires_dist": [ + "pytest!=8.1.*,>=6; extra == \"test\"", + "virtualenv>=13.0.0; extra == \"test\"", + "wheel>=0.44.0; extra == \"test\"", + "pip>=19.1; extra == \"test\"", + "packaging>=24.2; extra == \"test\"", + "jaraco.envs>=2.2; extra == \"test\"", + "pytest-xdist>=3; extra == \"test\"", + "jaraco.path>=3.7.2; extra == \"test\"", + "build[virtualenv]>=1.0.3; extra == \"test\"", + "filelock>=3.4.0; extra == \"test\"", + "ini2toml[lite]>=0.14; extra == \"test\"", + "tomli-w>=1.0.0; extra == \"test\"", + "pytest-timeout; extra == \"test\"", + "pytest-perf; sys_platform != \"cygwin\" and extra == \"test\"", + "jaraco.develop>=7.21; (python_version >= \"3.9\" and sys_platform != \"cygwin\") and extra == \"test\"", + "pytest-home>=0.5; extra == \"test\"", + "pytest-subprocess; extra == \"test\"", + "pyproject-hooks!=1.1; extra == \"test\"", + "jaraco.test>=5.5; extra == \"test\"", + "sphinx>=3.5; extra == \"doc\"", + "jaraco.packaging>=9.3; extra == \"doc\"", + "rst.linker>=1.9; extra == \"doc\"", + "furo; extra == \"doc\"", + "sphinx-lint; extra == \"doc\"", + "jaraco.tidelift>=1.4; extra == \"doc\"", + "pygments-github-lexers==0.0.5; extra == \"doc\"", + "sphinx-favicon; extra == \"doc\"", + "sphinx-inline-tabs; extra == \"doc\"", + "sphinx-reredirects; extra == \"doc\"", + "sphinxcontrib-towncrier; extra == \"doc\"", + "sphinx-notfound-page<2,>=1; extra == \"doc\"", + "pyproject-hooks!=1.1; extra == \"doc\"", + "towncrier<24.7; extra == \"doc\"", + "packaging>=24.2; extra == \"core\"", + "more_itertools>=8.8; extra == \"core\"", + "jaraco.text>=3.7; extra == \"core\"", + "importlib_metadata>=6; python_version < \"3.10\" and extra == \"core\"", + "tomli>=2.0.1; python_version < \"3.11\" and extra == \"core\"", + "wheel>=0.43.0; extra == \"core\"", + "jaraco.functools>=4; extra == \"core\"", + "more_itertools; extra == \"core\"", + "pytest-checkdocs>=2.14; extra == \"check\"", + "pytest-ruff>=0.2.1; sys_platform != \"cygwin\" and extra == \"check\"", + "ruff>=0.13.0; sys_platform != \"cygwin\" and extra == \"check\"", + "pytest-cov; extra == \"cover\"", + "pytest-enabler>=3.4; extra == \"enabler\"", + "pytest-mypy>=1.0.1; platform_python_implementation != \"PyPy\" and extra == \"type\"", + "mypy==1.18.*; extra == \"type\"", + "importlib_metadata>=7.0.2; python_version < \"3.10\" and extra == \"type\"", + "jaraco.develop>=7.21; sys_platform != \"cygwin\" and extra == \"type\"" + ], + "requires_python": ">=3.10", + "project_url": [ + "Source, https://github.com/pypa/setuptools", + "Documentation, https://setuptools.pypa.io/", + "Changelog, https://setuptools.pypa.io/en/stable/history.html" + ], + "provides_extra": [ + "test", + "doc", + "ssl", + "certs", + "core", + "check", + "cover", + "enabler", + "type" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/4e/d6/1ec1b290f9e0fb067899b61e1d37a30c923068bad260b216dbe37a7d2967/starlette-1.7.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e" + }, + "hash": "sha256=67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "starlette", + "version": "1.7.0", + "summary": "The little ASGI library that shines.", + "description": "

\n \n \n \n \"starlette-logo\"\n \n

\n\n

\n ✨ The little ASGI framework that shines. ✨\n

\n\n---\n\n[![Build Status](https://github.com/Kludex/starlette/workflows/Test%20Suite/badge.svg)](https://github.com/Kludex/starlette/actions)\n[![Package version](https://badge.fury.io/py/starlette.svg)](https://pypi.python.org/pypi/starlette)\n[![Supported Python Version](https://img.shields.io/pypi/pyversions/starlette.svg?color=%2334D058)](https://pypi.org/project/starlette)\n[![Discord](https://img.shields.io/discord/1051468649518616576?logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2)](https://discord.gg/RxKUF5JuHs)\n\n---\n\n**Documentation**: https://starlette.dev\n\n**Source Code**: https://github.com/Kludex/starlette\n\n---\n\n# Starlette\n\nStarlette is a lightweight [ASGI][asgi] framework/toolkit,\nwhich is ideal for building async web services in Python.\n\nIt is production-ready, and gives you the following:\n\n* A lightweight, low-complexity HTTP web framework.\n* WebSocket support.\n* In-process background tasks.\n* Startup and shutdown events.\n* Test client built on `httpx2`.\n* CORS, GZip, Static Files, Streaming responses.\n* Session and Cookie support.\n* 100% test coverage.\n* 100% type annotated codebase.\n* Few hard dependencies.\n* Compatible with `asyncio` and `trio` backends.\n* Great overall performance [against independent benchmarks][techempower].\n\n## Installation\n\n```shell\n$ pip install starlette\n```\n\nYou'll also want to install an ASGI server, such as [uvicorn](https://uvicorn.dev) or any of the [other ASGI server implementations](https://asgi.readthedocs.io/en/latest/implementations.html#servers).\n\n```shell\n$ pip install uvicorn\n```\n\n## Example\n\n```python title=\"main.py\"\nfrom starlette.applications import Starlette\nfrom starlette.responses import JSONResponse\nfrom starlette.routing import Route\n\n\nasync def homepage(request):\n return JSONResponse({'hello': 'world'})\n\nroutes = [\n Route(\"/\", endpoint=homepage)\n]\n\napp = Starlette(debug=True, routes=routes)\n```\n\nThen run the application using Uvicorn:\n\n```shell\n$ uvicorn main:app\n```\n\n## Dependencies\n\nStarlette only requires `anyio`, and the following are optional:\n\n* [`httpx2`][httpx2] - Required if you want to use the `TestClient`.\n* [`jinja2`][jinja2] - Required if you want to use `Jinja2Templates`.\n* [`opentelemetry-api`][opentelemetry-api] - Required for `OpenTelemetryMiddleware`.\n* [`python-multipart`][python-multipart] - Required if you want to support form parsing, with `request.form()`.\n* [`itsdangerous`][itsdangerous] - Required for `SessionMiddleware` support.\n* [`pyyaml`][pyyaml] - Required for `SchemaGenerator` support.\n\nYou can install all of these with `pip install starlette[full]`.\n\n## Framework or Toolkit\n\nStarlette is designed to be used either as a complete framework, or as\nan ASGI toolkit. You can use any of its components independently.\n\n```python\nfrom starlette.responses import PlainTextResponse\n\n\nasync def app(scope, receive, send):\n assert scope['type'] == 'http'\n response = PlainTextResponse('Hello, world!')\n await response(scope, receive, send)\n```\n\nRun the `app` application in `example.py`:\n\n```shell\n$ uvicorn example:app\nINFO: Started server process [11509]\nINFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)\n```\n\nRun uvicorn with `--reload` to enable auto-reloading on code changes.\n\n## Modularity\n\nThe modularity that Starlette is designed on promotes building reusable\ncomponents that can be shared between any ASGI framework. This should enable\nan ecosystem of shared middleware and mountable applications.\n\nThe clean API separation also means it's easier to understand each component\nin isolation.\n\n---\n\n

Starlette is BSD licensed code.
Designed & crafted with care.

— ⭐️ —

\n\n[asgi]: https://asgi.readthedocs.io/en/latest/\n[httpx2]: https://pypi.org/project/httpx2/\n[jinja2]: https://jinja.palletsprojects.com/\n[opentelemetry-api]: https://opentelemetry.io/docs/languages/python/api/\n[python-multipart]: https://multipart.fastapiexpert.com/\n[itsdangerous]: https://itsdangerous.palletsprojects.com/\n[sqlalchemy]: https://www.sqlalchemy.org\n[pyyaml]: https://pyyaml.org/wiki/PyYAMLDocumentation\n[techempower]: https://github.com/TechEmpower/FrameworkBenchmarks\n", + "description_content_type": "text/markdown", + "author_email": "Tom Christie ", + "maintainer_email": "Marcelo Trylesinski ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.md" + ], + "classifier": [ + "Development Status :: 3 - Alpha", + "Environment :: Web Environment", + "Framework :: AnyIO", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Topic :: Internet :: WWW/HTTP" + ], + "requires_dist": [ + "anyio<5,>=4.0.0", + "typing-extensions>=4.10.0; python_version < '3.13'", + "httpx2>=2.0.0; extra == 'full'", + "httpx<0.29.0,>=0.27.0; extra == 'full'", + "itsdangerous; extra == 'full'", + "jinja2; extra == 'full'", + "opentelemetry-api; extra == 'full'", + "python-multipart>=0.0.18; extra == 'full'", + "pyyaml; extra == 'full'" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://github.com/Kludex/starlette", + "Documentation, https://starlette.dev/", + "Changelog, https://starlette.dev/release-notes/", + "Funding, https://github.com/sponsors/Kludex", + "Source, https://github.com/Kludex/starlette" + ], + "provides_extra": [ + "full" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/12/b8/4bd346e22b28902df4d651910f5242c28d84e4a5c2435ca5c3f797ed7e2e/anyio-4.15.1-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101" + }, + "hash": "sha256=6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "anyio", + "version": "4.15.1", + "dynamic": [ + "license-file" + ], + "summary": "High-level concurrency and networking framework on top of asyncio or Trio", + "description": ".. image:: https://github.com/agronholm/anyio/actions/workflows/test.yml/badge.svg\n :target: https://github.com/agronholm/anyio/actions/workflows/test.yml\n :alt: Build Status\n.. image:: https://coveralls.io/repos/github/agronholm/anyio/badge.svg?branch=master\n :target: https://coveralls.io/github/agronholm/anyio?branch=master\n :alt: Code Coverage\n.. image:: https://readthedocs.org/projects/anyio/badge/?version=latest\n :target: https://anyio.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation\n.. image:: https://badges.gitter.im/gitterHQ/gitter.svg\n :target: https://gitter.im/python-trio/AnyIO\n :alt: Gitter chat\n.. image:: https://tidelift.com/badges/package/pypi/anyio\n :target: https://tidelift.com/subscription/pkg/pypi-anyio\n :alt: Tidelift\n\nAnyIO is an asynchronous networking and concurrency library that works on top of either asyncio_ or\nTrio_. It implements Trio-like `structured concurrency`_ (SC) on top of asyncio and works in harmony\nwith the native SC of Trio itself.\n\nApplications and libraries written against AnyIO's API will run unmodified on either asyncio_ or\nTrio_. AnyIO can also be adopted into a library or application incrementally – bit by bit, no full\nrefactoring necessary. It will blend in with the native libraries of your chosen backend.\n\nTo find out why you might want to use AnyIO's APIs instead of asyncio's, you can read about it\n`here `_.\n\nDocumentation\n-------------\n\nView full documentation at: https://anyio.readthedocs.io/\n\nFeatures\n--------\n\nAnyIO offers the following functionality:\n\n* Task groups (nurseries_ in trio terminology)\n* High-level networking (TCP, UDP and UNIX sockets)\n\n * `Happy eyeballs`_ algorithm for TCP connections (more robust than that of asyncio on Python\n 3.8)\n * async/await style UDP sockets (unlike asyncio where you still have to use Transports and\n Protocols)\n\n* A versatile API for byte streams and object streams\n* Inter-task synchronization and communication (locks, conditions, events, semaphores, object\n streams and futures)\n* Worker threads\n* Subprocesses\n* Subinterpreter support for code parallelization (on Python 3.13 and later)\n* Asynchronous file I/O (using worker threads)\n* Signal handling\n* Asynchronous versions of the functools_ and itertools_ modules\n\nAnyIO also comes with its own pytest_ plugin which also supports asynchronous fixtures.\nIt even works with the popular Hypothesis_ library.\n\n.. _asyncio: https://docs.python.org/3/library/asyncio.html\n.. _Trio: https://github.com/python-trio/trio\n.. _structured concurrency: https://en.wikipedia.org/wiki/Structured_concurrency\n.. _nurseries: https://trio.readthedocs.io/en/stable/reference-core.html#nurseries-and-spawning\n.. _Happy eyeballs: https://en.wikipedia.org/wiki/Happy_Eyeballs\n.. _pytest: https://docs.pytest.org/en/latest/\n.. _functools: https://docs.python.org/3/library/functools.html\n.. _itertools: https://docs.python.org/3/library/itertools.html\n.. _Hypothesis: https://hypothesis.works/\n\nSecurity contact information\n----------------------------\n\nTo report a security vulnerability, please use the `Tidelift security contact`_.\nTidelift will coordinate the fix and disclosure.\n\n.. _Tidelift security contact: https://tidelift.com/security\n", + "description_content_type": "text/x-rst", + "author_email": "Alex Grönholm ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Framework :: AnyIO", + "Typing :: Typed", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Programming Language :: Python :: Free Threading :: 2 - Beta" + ], + "requires_dist": [ + "exceptiongroup>=1.0.2; python_version < \"3.11\"", + "idna>=2.8", + "typing_extensions>=4.16.0; python_version < \"3.15\"", + "trio>=0.32.0; extra == \"trio\"" + ], + "requires_python": ">=3.10", + "project_url": [ + "Documentation, https://anyio.readthedocs.io/en/latest/", + "Changelog, https://anyio.readthedocs.io/en/stable/versionhistory.html", + "Source code, https://github.com/agronholm/anyio", + "Issue tracker, https://github.com/agronholm/anyio/issues" + ], + "provides_extra": [ + "trio" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c" + }, + "hash": "sha256=ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "idna", + "version": "3.20", + "summary": "Internationalized Domain Names in Applications (IDNA)", + "description": "# Internationalized Domain Names in Applications (IDNA)\n\nSupport for [Internationalized Domain Names in Applications\n(IDNA)](https://tools.ietf.org/html/rfc5891) and [Unicode IDNA\nCompatibility Processing](https://unicode.org/reports/tr46/). It\nsupersedes the standard library's `encodings.idna`, which only\nimplements the 2003 specification, offering broader script coverage and\nlimiting domains with known security vulnerabilities.\n\n## Usage\n\nPackage may be installed from [PyPI](https://pypi.org/project/idna/) via\nthe typical methods (e.g. `python3 -m pip install idna`)\n\nFor typical usage, the `encode` and `decode` functions will take a\ndomain name argument and perform a conversion to ASCII-compatible encoding\n(known as A-labels), or to Unicode strings (known as U-labels)\nrespectively.\n\n```pycon\n>>> import idna\n>>> idna.encode('ドメイン.テスト')\nb'xn--eckwd4c7c.xn--zckzah'\n>>> print(idna.decode('xn--eckwd4c7c.xn--zckzah'))\nドメイン.テスト\n```\n\nConversions can be applied at a per-label basis using the `ulabel` or\n`alabel` functions for specialized use cases.\n\n\n### Compatibility Mapping (UTS #46)\n\nThis library provides support for [Unicode IDNA Compatibility\nProcessing](https://unicode.org/reports/tr46/) which normalizes input from\ndifferent potential ways a user may input a domain prior to performing the IDNA\nconversion operations. This functionality, known as a\n[mapping](https://tools.ietf.org/html/rfc5895), is considered by the\nspecification to be a local user-interface issue distinct from IDNA\nconversion functionality.\n\nFor example, \"Königsgäßchen\" is not a permissible label as capital letters\nare not allowed. UTS #46 will convert this into lower case prior to applying\nthe IDNA conversion.\n\n```pycon\n>>> import idna\n>>> idna.encode('Königsgäßchen')\n...\nidna.core.InvalidCodepoint: Codepoint U+004B at position 1 of 'Königsgäßchen' not allowed\n>>> idna.encode('Königsgäßchen', uts46=True)\nb'xn--knigsgchen-b4a3dun'\n>>> idna.decode('xn--knigsgchen-b4a3dun')\n'königsgäßchen'\n```\n\nWhen performing a decode operation for display purposes, `decode()`\naccepts a `display=True` argument that leaves any `xn--` label that\nfails to decode unchanged. This is useful for user interface display\nwhere a domain is in use, the A-label form can be presented when it\nis not a valid IDN.\n\n\n## Exceptions\n\nAll errors raised during conversion derive from the `idna.IDNAError`\nbase class. The more specific exceptions are:\n\n* `idna.IDNABidiError` — raised when a label contains an illegal\n combination of left-to-right and right-to-left characters.\n* `idna.InvalidCodepoint` — raised when a label contains a codepoint\n that is INVALID for IDNA.\n* `idna.InvalidCodepointContext` — raised when a CONTEXTO or CONTEXTJ\n codepoint appears in a position whose contextual requirements are\n not satisfied.\n\nExceptions carry machine-readable attributes so that applications do\nnot need to parse the message: `code` is a short, stable identifier\nfor the rule that failed (such as `disallowed_codepoint` or\n`label_too_long`); and, when the failure can be attributed to a\nparticular character, `text` (the label or domain being validated),\n`codepoint` (the offending codepoint as an integer) and `position`\nare set. \n\n\n## Command-line tool\n\nThe package supports command-line usage to convert domain names\nbetween their Unicode and ASCII-compatible forms. It can be run either\nas a module (`python3 -m idna`) or, once installed (such as with `uv\ntool` or `pipx`), via the `idna` script:\n\n```bash\n$ uv tool install idna\n$ idna xn--e1afmkfd.xn--p1ai\nпример.рф\n$ idna пример.рф\nxn--e1afmkfd.xn--p1ai\n```\n\nMode can be specified with `-e`/`--encode` or `-d`/`--decode`, otherwise\nit will be chosen automatically based on the first input. Multiple\ndomains can be supplied either as arguments or through standard input.\nUTS #46 mapping is applied by default, which lets the tool accept\ninputs that aren't strictly valid IDNA 2008 by normalising them first,\npass `--strict` to disable UTS #46.\n\nConversion failures are reported on stderr together with the\noffending input; processing continues with the remaining domains and\nthe tool exits with a non-zero status if any conversion failed.\n\n\n## Additional Notes\n\n* **Python version support**. This library supports Python 3.9 and higher.\n As this library serves as a low-level toolkit for a variety of\n applications, we strive to support all versions of Python that are\n not beyond end-of-life. Free-threaded Python is also supported,\n as the library holds no mutable global state the functions can be\n called concurrently from multiple threads.\n\n* **Unicode version**. The IDNA and UTS #46 lookup tables are generated\n from a specific Unicode release. Some Unicode data depends on the\n running Python's `unicodedata` module, so on an older Python a\n character new to Unicode may be rejected as unknown even if this\n library knows about it.\n\n* **Emoji**. It is an occasional request to support emoji domains in\n this library. Encoding of symbols like emoji is expressly prohibited by\n the IDNA technical standard, and emoji domains are broadly phased\n out across the domain industry due to associated security risks.\n\n* **Regenerating lookup tables**. The IDNA and UTS #46 functionality\n relies upon pre-calculated lookup tables, generated using the\n `idna-data` script in [`tools/`](tools/README.md).\n\n", + "description_content_type": "text/markdown", + "author_email": "Kim Davies ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.md" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Intended Audience :: System Administrators", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Internet :: Name Service (DNS)", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Utilities" + ], + "requires_dist": [ + "ruff >= 0.16.0 ; extra == \"all\"", + "mypy >= 1.11.2 ; extra == \"all\"", + "ty >= 0.0.37 ; extra == \"all\"", + "pytest >= 8.3.2 ; extra == \"all\"", + "hypothesis >= 6.141.1 ; extra == \"all\"", + "coverage >= 7.10.0 ; extra == \"all\"" + ], + "requires_python": ">=3.9", + "project_url": [ + "Changelog, https://github.com/kjd/idna/blob/master/HISTORY.md", + "Issue tracker, https://github.com/kjd/idna/issues", + "Source, https://github.com/kjd/idna" + ], + "provides_extra": [ + "all" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5" + }, + "hash": "sha256=e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "sympy", + "version": "1.14.0", + "dynamic": [ + "author", + "author-email", + "classifier", + "description", + "description-content-type", + "home-page", + "keywords", + "license", + "license-file", + "project-url", + "provides-extra", + "requires-dist", + "requires-python", + "summary" + ], + "summary": "Computer algebra system (CAS) in Python", + "description": "# SymPy\n\n[![pypi version](https://img.shields.io/pypi/v/sympy.svg)](https://pypi.python.org/pypi/sympy)\n[![Join the chat at https://gitter.im/sympy/sympy](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/sympy/sympy?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)\n[![Zenodo Badge](https://zenodo.org/badge/18918/sympy/sympy.svg)](https://zenodo.org/badge/latestdoi/18918/sympy/sympy)\n[![Downloads](https://pepy.tech/badge/sympy/month)](https://pepy.tech/project/sympy)\n[![GitHub Issues](https://img.shields.io/badge/issue_tracking-github-blue.svg)](https://github.com/sympy/sympy/issues)\n[![Git Tutorial](https://img.shields.io/badge/PR-Welcome-%23FF8300.svg?)](https://git-scm.com/book/en/v2/GitHub-Contributing-to-a-Project)\n[![Powered by NumFocus](https://img.shields.io/badge/powered%20by-NumFOCUS-orange.svg?style=flat&colorA=E1523D&colorB=007D8A)](https://numfocus.org)\n[![Commits since last release](https://img.shields.io/github/commits-since/sympy/sympy/latest.svg?longCache=true&style=flat-square&logo=git&logoColor=fff)](https://github.com/sympy/sympy/releases)\n\n[![SymPy Banner](https://github.com/sympy/sympy/raw/master/banner.svg)](https://sympy.org/)\n\n\nSee the [AUTHORS](AUTHORS) file for the list of authors.\n\nAnd many more people helped on the SymPy mailing list, reported bugs,\nhelped organize SymPy's participation in the Google Summer of Code, the\nGoogle Highly Open Participation Contest, Google Code-In, wrote and\nblogged about SymPy...\n\nLicense: New BSD License (see the [LICENSE](LICENSE) file for details) covers all\nfiles in the sympy repository unless stated otherwise.\n\nOur mailing list is at\n.\n\nWe have a community chat at [Gitter](https://gitter.im/sympy/sympy). Feel\nfree to ask us anything there. We have a very welcoming and helpful\ncommunity.\n\n## Download\n\nThe recommended installation method is through Anaconda,\n\n\nYou can also get the latest version of SymPy from\n\n\nTo get the git version do\n\n $ git clone https://github.com/sympy/sympy.git\n\nFor other options (tarballs, debs, etc.), see\n.\n\n## Documentation and Usage\n\nFor in-depth instructions on installation and building the\ndocumentation, see the [SymPy Documentation Style Guide](https://docs.sympy.org/dev/documentation-style-guide.html).\n\nEverything is at:\n\n\n\nYou can generate everything at the above site in your local copy of\nSymPy by:\n\n $ cd doc\n $ make html\n\nThen the docs will be in \\_build/html. If\nyou don't want to read that, here is a short usage:\n\nFrom this directory, start Python and:\n\n``` python\n>>> from sympy import Symbol, cos\n>>> x = Symbol('x')\n>>> e = 1/cos(x)\n>>> print(e.series(x, 0, 10))\n1 + x**2/2 + 5*x**4/24 + 61*x**6/720 + 277*x**8/8064 + O(x**10)\n```\n\nSymPy also comes with a console that is a simple wrapper around the\nclassic python console (or IPython when available) that loads the SymPy\nnamespace and executes some common commands for you.\n\nTo start it, issue:\n\n $ bin/isympy\n\nfrom this directory, if SymPy is not installed or simply:\n\n $ isympy\n\nif SymPy is installed.\n\n## Installation\n\nTo install SymPy using PyPI, run the following command:\n\n $ pip install sympy\n\nTo install SymPy using Anaconda, run the following command:\n\n $ conda install -c anaconda sympy\n\nTo install SymPy from GitHub source, first clone SymPy using `git`:\n\n $ git clone https://github.com/sympy/sympy.git\n\nThen, in the `sympy` repository that you cloned, simply run:\n\n $ pip install .\n\nSee for more information.\n\n## Contributing\n\nWe welcome contributions from anyone, even if you are new to open\nsource. Please read our [Introduction to Contributing](https://docs.sympy.org/dev/contributing/introduction-to-contributing.html)\npage and the [SymPy Documentation Style Guide](https://docs.sympy.org/dev/documentation-style-guide.html). If you\nare new and looking for some way to contribute, a good place to start is\nto look at the issues tagged [Easy to Fix](https://github.com/sympy/sympy/issues?q=is%3Aopen+is%3Aissue+label%3A%22Easy+to+Fix%22).\n\nPlease note that all participants in this project are expected to follow\nour Code of Conduct. By participating in this project you agree to abide\nby its terms. See [CODE\\_OF\\_CONDUCT.md](CODE_OF_CONDUCT.md).\n\n## Tests\n\nTo execute all tests, run:\n\n $./setup.py test\n\nin the current directory.\n\nFor the more fine-grained running of tests or doctests, use `bin/test`\nor respectively `bin/doctest`. The master branch is automatically tested\nby GitHub Actions.\n\nTo test pull requests, use\n[sympy-bot](https://github.com/sympy/sympy-bot).\n\n## Regenerate Experimental LaTeX Parser/Lexer\n\nThe parser and lexer were generated with the [ANTLR4](http://antlr4.org)\ntoolchain in `sympy/parsing/latex/_antlr` and checked into the repo.\nPresently, most users should not need to regenerate these files, but\nif you plan to work on this feature, you will need the `antlr4`\ncommand-line tool (and you must ensure that it is in your `PATH`).\nOne way to get it is:\n\n $ conda install -c conda-forge antlr=4.11.1\n\nAlternatively, follow the instructions on the ANTLR website and download\nthe `antlr-4.11.1-complete.jar`. Then export the `CLASSPATH` as instructed\nand instead of creating `antlr4` as an alias, make it an executable file\nwith the following contents:\n``` bash\n#!/bin/bash\njava -jar /usr/local/lib/antlr-4.11.1-complete.jar \"$@\"\n```\n\nAfter making changes to `sympy/parsing/latex/LaTeX.g4`, run:\n\n $ ./setup.py antlr\n\n## Clean\n\nTo clean everything (thus getting the same tree as in the repository):\n\n $ git clean -Xdf\n\nwhich will clear everything ignored by `.gitignore`, and:\n\n $ git clean -df\n\nto clear all untracked files. You can revert the most recent changes in\ngit with:\n\n $ git reset --hard\n\nWARNING: The above commands will all clear changes you may have made,\nand you will lose them forever. Be sure to check things with `git\nstatus`, `git diff`, `git clean -Xn`, and `git clean -n` before doing any\nof those.\n\n## Bugs\n\nOur issue tracker is at . Please\nreport any bugs that you find. Or, even better, fork the repository on\nGitHub and create a pull request. We welcome all changes, big or small,\nand we will help you make the pull request if you are new to git (just\nask on our mailing list or Gitter Channel). If you further have any queries, you can find answers\non Stack Overflow using the [sympy](https://stackoverflow.com/questions/tagged/sympy) tag.\n\n## Brief History\n\nSymPy was started by Ondřej Čertík in 2005, he wrote some code during\nthe summer, then he wrote some more code during summer 2006. In February\n2007, Fabian Pedregosa joined the project and helped fix many things,\ncontributed documentation, and made it alive again. 5 students (Mateusz\nPaprocki, Brian Jorgensen, Jason Gedge, Robert Schwarz, and Chris Wu)\nimproved SymPy incredibly during summer 2007 as part of the Google\nSummer of Code. Pearu Peterson joined the development during the summer\n2007 and he has made SymPy much more competitive by rewriting the core\nfrom scratch, which has made it from 10x to 100x faster. Jurjen N.E. Bos\nhas contributed pretty-printing and other patches. Fredrik Johansson has\nwritten mpmath and contributed a lot of patches.\n\nSymPy has participated in every Google Summer of Code since 2007. You\ncan see for\nfull details. Each year has improved SymPy by bounds. Most of SymPy's\ndevelopment has come from Google Summer of Code students.\n\nIn 2011, Ondřej Čertík stepped down as lead developer, with Aaron\nMeurer, who also started as a Google Summer of Code student, taking his\nplace. Ondřej Čertík is still active in the community but is too busy\nwith work and family to play a lead development role.\n\nSince then, a lot more people have joined the development and some\npeople have also left. You can see the full list in doc/src/aboutus.rst,\nor online at:\n\n\n\nThe git history goes back to 2007 when development moved from svn to hg.\nTo see the history before that point, look at\n.\n\nYou can use git to see the biggest developers. The command:\n\n $ git shortlog -ns\n\nwill show each developer, sorted by commits to the project. The command:\n\n $ git shortlog -ns --since=\"1 year\"\n\nwill show the top developers from the last year.\n\n## Citation\n\nTo cite SymPy in publications use\n\n> Meurer A, Smith CP, Paprocki M, Čertík O, Kirpichev SB, Rocklin M,\n> Kumar A, Ivanov S, Moore JK, Singh S, Rathnayake T, Vig S, Granger BE,\n> Muller RP, Bonazzi F, Gupta H, Vats S, Johansson F, Pedregosa F, Curry\n> MJ, Terrel AR, Roučka Š, Saboo A, Fernando I, Kulal S, Cimrman R,\n> Scopatz A. (2017) SymPy: symbolic computing in Python. *PeerJ Computer\n> Science* 3:e103 \n\nA BibTeX entry for LaTeX users is\n\n``` bibtex\n@article{10.7717/peerj-cs.103,\n title = {SymPy: symbolic computing in Python},\n author = {Meurer, Aaron and Smith, Christopher P. and Paprocki, Mateusz and \\v{C}ert\\'{i}k, Ond\\v{r}ej and Kirpichev, Sergey B. and Rocklin, Matthew and Kumar, Amit and Ivanov, Sergiu and Moore, Jason K. and Singh, Sartaj and Rathnayake, Thilina and Vig, Sean and Granger, Brian E. and Muller, Richard P. and Bonazzi, Francesco and Gupta, Harsh and Vats, Shivam and Johansson, Fredrik and Pedregosa, Fabian and Curry, Matthew J. and Terrel, Andy R. and Rou\\v{c}ka, \\v{S}t\\v{e}p\\'{a}n and Saboo, Ashutosh and Fernando, Isuru and Kulal, Sumith and Cimrman, Robert and Scopatz, Anthony},\n year = 2017,\n month = Jan,\n keywords = {Python, Computer algebra system, Symbolics},\n abstract = {\n SymPy is an open-source computer algebra system written in pure Python. It is built with a focus on extensibility and ease of use, through both interactive and programmatic applications. These characteristics have led SymPy to become a popular symbolic library for the scientific Python ecosystem. This paper presents the architecture of SymPy, a description of its features, and a discussion of select submodules. The supplementary material provides additional examples and further outlines details of the architecture and features of SymPy.\n },\n volume = 3,\n pages = {e103},\n journal = {PeerJ Computer Science},\n issn = {2376-5992},\n url = {https://doi.org/10.7717/peerj-cs.103},\n doi = {10.7717/peerj-cs.103}\n}\n```\n\nSymPy is BSD licensed, so you are free to use it whatever you like, be\nit academic, commercial, creating forks or derivatives, as long as you\ncopy the BSD statement if you redistribute it (see the LICENSE file for\ndetails). That said, although not required by the SymPy license, if it\nis convenient for you, please cite SymPy when using it in your work and\nalso consider contributing all your changes back, so that we can\nincorporate it and all of us will benefit in the end.\n", + "description_content_type": "text/markdown", + "keywords": [ + "Math", + "CAS" + ], + "home_page": "https://sympy.org", + "author": "SymPy development team", + "author_email": "sympy@googlegroups.com", + "license": "BSD", + "license_file": [ + "LICENSE", + "AUTHORS" + ], + "classifier": [ + "License :: OSI Approved :: BSD License", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Topic :: Scientific/Engineering", + "Topic :: Scientific/Engineering :: Mathematics", + "Topic :: Scientific/Engineering :: Physics", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy" + ], + "requires_dist": [ + "mpmath<1.4,>=1.1.0", + "pytest>=7.1.0; extra == \"dev\"", + "hypothesis>=6.70.0; extra == \"dev\"" + ], + "requires_python": ">=3.9", + "project_url": [ + "Source, https://github.com/sympy/sympy" + ], + "provides_extra": [ + "dev" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c" + }, + "hash": "sha256=a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.1", + "name": "mpmath", + "version": "1.3.0", + "summary": "Python library for arbitrary-precision floating-point arithmetic", + "description": "mpmath\n======\n\n|pypi version| |Build status| |Code coverage status| |Zenodo Badge|\n\n.. |pypi version| image:: https://img.shields.io/pypi/v/mpmath.svg\n :target: https://pypi.python.org/pypi/mpmath\n.. |Build status| image:: https://github.com/fredrik-johansson/mpmath/workflows/test/badge.svg\n :target: https://github.com/fredrik-johansson/mpmath/actions?workflow=test\n.. |Code coverage status| image:: https://codecov.io/gh/fredrik-johansson/mpmath/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/fredrik-johansson/mpmath\n.. |Zenodo Badge| image:: https://zenodo.org/badge/2934512.svg\n :target: https://zenodo.org/badge/latestdoi/2934512\n\nA Python library for arbitrary-precision floating-point arithmetic.\n\nWebsite: http://mpmath.org/\nMain author: Fredrik Johansson \n\nMpmath is free software released under the New BSD License (see the\nLICENSE file for details)\n\n0. History and credits\n----------------------\n\nThe following people (among others) have contributed major patches\nor new features to mpmath:\n\n* Pearu Peterson \n* Mario Pernici \n* Ondrej Certik \n* Vinzent Steinberg \n* Nimish Telang \n* Mike Taschuk \n* Case Van Horsen \n* Jorn Baayen \n* Chris Smith \n* Juan Arias de Reyna \n* Ioannis Tziakos \n* Aaron Meurer \n* Stefan Krastanov \n* Ken Allen \n* Timo Hartmann \n* Sergey B Kirpichev \n* Kris Kuhlman \n* Paul Masson \n* Michael Kagalenko \n* Jonathan Warner \n* Max Gaukler \n* Guillermo Navas-Palencia \n* Nike Dattani \n\nNumerous other people have contributed by reporting bugs,\nrequesting new features, or suggesting improvements to the\ndocumentation.\n\nFor a detailed changelog, including individual contributions,\nsee the CHANGES file.\n\nFredrik's work on mpmath during summer 2008 was sponsored by Google\nas part of the Google Summer of Code program.\n\nFredrik's work on mpmath during summer 2009 was sponsored by the\nAmerican Institute of Mathematics under the support of the National Science\nFoundation Grant No. 0757627 (FRG: L-functions and Modular Forms).\n\nAny opinions, findings, and conclusions or recommendations expressed in this\nmaterial are those of the author(s) and do not necessarily reflect the\nviews of the sponsors.\n\nCredit also goes to:\n\n* The authors of the GMP library and the Python wrapper\n gmpy, enabling mpmath to become much faster at\n high precision\n* The authors of MPFR, pari/gp, MPFUN, and other arbitrary-\n precision libraries, whose documentation has been helpful\n for implementing many of the algorithms in mpmath\n* Wikipedia contributors; Abramowitz & Stegun; Gradshteyn & Ryzhik;\n Wolfram Research for MathWorld and the Wolfram Functions site.\n These are the main references used for special functions\n implementations.\n* George Brandl for developing the Sphinx documentation tool\n used to build mpmath's documentation\n\nRelease history:\n\n* Version 1.3.0 released on March 7, 2023\n* Version 1.2.0 released on February 1, 2021\n* Version 1.1.0 released on December 11, 2018\n* Version 1.0.0 released on September 27, 2017\n* Version 0.19 released on June 10, 2014\n* Version 0.18 released on December 31, 2013\n* Version 0.17 released on February 1, 2011\n* Version 0.16 released on September 24, 2010\n* Version 0.15 released on June 6, 2010\n* Version 0.14 released on February 5, 2010\n* Version 0.13 released on August 13, 2009\n* Version 0.12 released on June 9, 2009\n* Version 0.11 released on January 26, 2009\n* Version 0.10 released on October 15, 2008\n* Version 0.9 released on August 23, 2008\n* Version 0.8 released on April 20, 2008\n* Version 0.7 released on March 12, 2008\n* Version 0.6 released on January 13, 2008\n* Version 0.5 released on November 24, 2007\n* Version 0.4 released on November 3, 2007\n* Version 0.3 released on October 5, 2007\n* Version 0.2 released on October 2, 2007\n* Version 0.1 released on September 27, 2007\n\n1. Download & installation\n--------------------------\n\nMpmath requires Python 2.7 or 3.5 (or later versions). It has been tested\nwith CPython 2.7, 3.5 through 3.7 and for PyPy.\n\nThe latest release of mpmath can be downloaded from the mpmath\nwebsite and from https://github.com/fredrik-johansson/mpmath/releases\n\nIt should also be available in the Python Package Index at\nhttps://pypi.python.org/pypi/mpmath\n\nTo install latest release of Mpmath with pip, simply run\n\n``pip install mpmath``\n\nOr unpack the mpmath archive and run\n\n``python setup.py install``\n\nMpmath can also be installed using\n\n``python -m easy_install mpmath``\n\nThe latest development code is available from\nhttps://github.com/fredrik-johansson/mpmath\n\nSee the main documentation for more detailed instructions.\n\n2. Running tests\n----------------\n\nThe unit tests in mpmath/tests/ can be run via the script\nruntests.py, but it is recommended to run them with py.test\n(https://pytest.org/), especially\nto generate more useful reports in case there are failures.\n\nYou may also want to check out the demo scripts in the demo\ndirectory.\n\nThe master branch is automatically tested by Travis CI.\n\n3. Documentation\n----------------\n\nDocumentation in reStructuredText format is available in the\ndoc directory included with the source package. These files\nare human-readable, but can be compiled to prettier HTML using\nthe build.py script (requires Sphinx, http://sphinx.pocoo.org/).\n\nSee setup.txt in the documentation for more information.\n\nThe most recent documentation is also available in HTML format:\n\nhttp://mpmath.org/doc/current/\n\n4. Known problems\n-----------------\n\nMpmath is a work in progress. Major issues include:\n\n* Some functions may return incorrect values when given extremely\n large arguments or arguments very close to singularities.\n\n* Directed rounding works for arithmetic operations. It is implemented\n heuristically for other operations, and their results may be off by one\n or two units in the last place (even if otherwise accurate).\n\n* Some IEEE 754 features are not available. Inifinities and NaN are\n partially supported; denormal rounding is currently not available\n at all.\n\n* The interface for switching precision and rounding is not finalized.\n The current method is not threadsafe.\n\n5. Help and bug reports\n-----------------------\n\nGeneral questions and comments can be sent to the mpmath mailinglist,\nmpmath@googlegroups.com\n\nYou can also report bugs and send patches to the mpmath issue tracker,\nhttps://github.com/fredrik-johansson/mpmath/issues\n", + "home_page": "http://mpmath.org/", + "author": "Fredrik Johansson", + "author_email": "fredrik.johansson@gmail.com", + "license": "BSD", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "License :: OSI Approved :: BSD License", + "Topic :: Scientific/Engineering :: Mathematics", + "Topic :: Software Development :: Libraries :: Python Modules", + "Programming Language :: Python", + "Programming Language :: Python :: 2", + "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.5", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy" + ], + "requires_dist": [ + "pytest (>=4.6) ; extra == 'develop'", + "pycodestyle ; extra == 'develop'", + "pytest-cov ; extra == 'develop'", + "codecov ; extra == 'develop'", + "wheel ; extra == 'develop'", + "sphinx ; extra == 'docs'", + "gmpy2 (>=2.1.0a4) ; (platform_python_implementation != \"PyPy\") and extra == 'gmpy'", + "pytest (>=4.6) ; extra == 'tests'" + ], + "project_url": [ + "Source, https://github.com/fredrik-johansson/mpmath", + "Tracker, https://github.com/fredrik-johansson/mpmath/issues", + "Documentation, http://mpmath.org/doc/current/" + ], + "provides_extra": [ + "develop", + "docs", + "gmpy", + "tests" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8" + }, + "hash": "sha256=481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "typing_extensions", + "version": "4.16.0", + "summary": "Backported and Experimental Type Hints for Python 3.9+", + "description": "# Typing Extensions\n\n[![Chat at https://gitter.im/python/typing](https://badges.gitter.im/python/typing.svg)](https://gitter.im/python/typing)\n\n[Documentation](https://typing-extensions.readthedocs.io/en/latest/#) –\n[PyPI](https://pypi.org/project/typing-extensions/)\n\n## Overview\n\nThe `typing_extensions` module serves two related purposes:\n\n- Enable use of new type system features on older Python versions. For example,\n `typing.TypeGuard` is new in Python 3.10, but `typing_extensions` allows\n users on previous Python versions to use it too.\n- Enable experimentation with new type system PEPs before they are accepted and\n added to the `typing` module.\n\n`typing_extensions` is treated specially by static type checkers such as\nmypy and pyright. Objects defined in `typing_extensions` are treated the same\nway as equivalent forms in `typing`.\n\n`typing_extensions` uses\n[Semantic Versioning](https://semver.org/). The\nmajor version will be incremented only for backwards-incompatible changes.\nTherefore, it's safe to depend\non `typing_extensions` like this: `typing_extensions ~=x.y`,\nwhere `x.y` is the first version that includes all features you need.\n[This](https://packaging.python.org/en/latest/specifications/version-specifiers/#compatible-release)\nis equivalent to `typing_extensions >=x.y, <(x+1)`. Do not depend on `~= x.y.z`\nunless you really know what you're doing; that defeats the purpose of\nsemantic versioning.\n\n## Included items\n\nSee [the documentation](https://typing-extensions.readthedocs.io/en/latest/#) for a\ncomplete listing of module contents.\n\n## Contributing\n\nSee [CONTRIBUTING.md](https://github.com/python/typing_extensions/blob/main/CONTRIBUTING.md)\nfor how to contribute to `typing_extensions`.\n\n", + "description_content_type": "text/markdown", + "keywords": [ + "annotations", + "backport", + "checker", + "checking", + "function", + "hinting", + "hints", + "type", + "typechecking", + "typehinting", + "typehints", + "typing" + ], + "author_email": "\"Guido van Rossum, Jukka Lehtosalo, Łukasz Langa, Michael Lee\" ", + "license_expression": "PSF-2.0", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Environment :: Console", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Topic :: Software Development" + ], + "requires_python": ">=3.9", + "project_url": [ + "Bug Tracker, https://github.com/python/typing_extensions/issues", + "Changes, https://github.com/python/typing_extensions/blob/main/CHANGELOG.md", + "Documentation, https://typing-extensions.readthedocs.io/", + "Home, https://github.com/python/typing_extensions", + "Q & A, https://github.com/python/typing/discussions", + "Repository, https://github.com/python/typing_extensions" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147" + }, + "hash": "sha256=65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "typing-inspection", + "version": "0.4.4", + "summary": "Runtime typing introspection tools", + "description": "# typing-inspection\n\n[![CI](https://img.shields.io/github/actions/workflow/status/pydantic/typing-inspection/ci.yml?branch=main&logo=github&label=CI)](https://github.com/pydantic/typing-inspection/actions?query=event%3Apush+branch%3Amain+workflow%3ACI)\n[![Coverage](https://coverage-badge.samuelcolvin.workers.dev/pydantic/typing-inspection.svg)](https://coverage-badge.samuelcolvin.workers.dev/redirect/pydantic/typing-inspection)\n[![PyPI](https://img.shields.io/pypi/v/typing-inspection.svg)](https://pypi.org/project/typing-inspection/)\n[![Versions](https://img.shields.io/pypi/pyversions/typing-inspection.svg)](https://github.com/pydantic/typing-inspection)\n[![License](https://img.shields.io/github/license/pydantic/typing-inspection.svg)](https://github.com/pydantic/typing-inspection/blob/main/LICENSE)\n[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)\n\n`typing-inspection` provides tools to inspect type annotations at runtime.\n\n## Installation\n\nFrom [PyPI](https://pypi.org/project/typing-inspection/):\n\n```bash\npip install typing-inspection\n```\n\nThe library can be imported from the `typing_inspection` module.\n", + "description_content_type": "text/markdown", + "author_email": "Victorien Plot ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Programming Language :: Python :: Implementation :: CPython", + "Topic :: Software Development :: Libraries :: Python Modules", + "Typing :: Typed" + ], + "requires_dist": [ + "typing-extensions>=4.15.0" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://github.com/pydantic/typing-inspection", + "Documentation, https://pydantic.github.io/typing-inspection/dev/", + "Source, https://github.com/pydantic/typing-inspection", + "Changelog, https://github.com/pydantic/typing-inspection/blob/main/HISTORY.md" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/7a/6d/db8b86e168fef0cf904737e275bccb683558088ef971e92d3b41ce980699/filelock-4.0.3-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "30cd166e2aee2c7534ce2c33c6367c4cd051b8368e20e2c4eb0c34f699bacfab" + }, + "hash": "sha256=30cd166e2aee2c7534ce2c33c6367c4cd051b8368e20e2c4eb0c34f699bacfab" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "filelock", + "version": "4.0.3", + "summary": "A platform independent file lock.", + "description": "# filelock\n\n[![PyPI](https://img.shields.io/pypi/v/filelock)](https://pypi.org/project/filelock/)\n[![Supported Python versions](https://img.shields.io/pypi/pyversions/filelock.svg)](https://pypi.org/project/filelock/)\n[![Documentation status](https://readthedocs.org/projects/py-filelock/badge/?version=latest)](https://py-filelock.readthedocs.io/en/latest/?badge=latest)\n[![Downloads](https://static.pepy.tech/badge/filelock/month)](https://pepy.tech/project/filelock)\n[![check](https://github.com/tox-dev/py-filelock/actions/workflows/check.yaml/badge.svg)](https://github.com/tox-dev/py-filelock/actions/workflows/check.yaml)\n\nFor more information checkout the [official documentation](https://py-filelock.readthedocs.io/en/latest/index.html).\n", + "description_content_type": "text/markdown", + "keywords": [ + "application", + "cache", + "directory", + "log", + "user" + ], + "maintainer_email": "Bernát Gábor ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Topic :: Internet", + "Topic :: Software Development :: Libraries", + "Topic :: System" + ], + "requires_python": ">=3.10", + "project_url": [ + "Documentation, https://py-filelock.readthedocs.io", + "Homepage, https://github.com/tox-dev/py-filelock", + "Source, https://github.com/tox-dev/py-filelock", + "Tracker, https://github.com/tox-dev/py-filelock/issues" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67" + }, + "hash": "sha256=85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "Jinja2", + "version": "3.1.6", + "summary": "A very fast and expressive template engine.", + "description": "# Jinja\n\nJinja is a fast, expressive, extensible templating engine. Special\nplaceholders in the template allow writing code similar to Python\nsyntax. Then the template is passed data to render the final document.\n\nIt includes:\n\n- Template inheritance and inclusion.\n- Define and import macros within templates.\n- HTML templates can use autoescaping to prevent XSS from untrusted\n user input.\n- A sandboxed environment can safely render untrusted templates.\n- AsyncIO support for generating templates and calling async\n functions.\n- I18N support with Babel.\n- Templates are compiled to optimized Python code just-in-time and\n cached, or can be compiled ahead-of-time.\n- Exceptions point to the correct line in templates to make debugging\n easier.\n- Extensible filters, tests, functions, and even syntax.\n\nJinja's philosophy is that while application logic belongs in Python if\npossible, it shouldn't make the template designer's job difficult by\nrestricting functionality too much.\n\n\n## In A Nutshell\n\n```jinja\n{% extends \"base.html\" %}\n{% block title %}Members{% endblock %}\n{% block content %}\n \n{% endblock %}\n```\n\n## Donate\n\nThe Pallets organization develops and supports Jinja and other popular\npackages. In order to grow the community of contributors and users, and\nallow the maintainers to devote more time to the projects, [please\ndonate today][].\n\n[please donate today]: https://palletsprojects.com/donate\n\n## Contributing\n\nSee our [detailed contributing documentation][contrib] for many ways to\ncontribute, including reporting issues, requesting features, asking or answering\nquestions, and making PRs.\n\n[contrib]: https://palletsprojects.com/contributing/\n\n", + "description_content_type": "text/markdown", + "maintainer_email": "Pallets ", + "license_file": [ + "LICENSE.txt" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Environment :: Web Environment", + "Intended Audience :: Developers", + "License :: OSI Approved :: BSD License", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Topic :: Internet :: WWW/HTTP :: Dynamic Content", + "Topic :: Text Processing :: Markup :: HTML", + "Typing :: Typed" + ], + "requires_dist": [ + "MarkupSafe>=2.0", + "Babel>=2.7 ; extra == \"i18n\"" + ], + "requires_python": ">=3.7", + "project_url": [ + "Changes, https://jinja.palletsprojects.com/changes/", + "Chat, https://discord.gg/pallets", + "Documentation, https://jinja.palletsprojects.com/", + "Donate, https://palletsprojects.com/donate", + "Source, https://github.com/pallets/jinja/" + ], + "provides_extra": [ + "i18n" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", + "archive_info": { + "hashes": { + "sha256": "457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97" + }, + "hash": "sha256=457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "MarkupSafe", + "version": "3.0.3", + "dynamic": [ + "license-file" + ], + "summary": "Safely add untrusted strings to HTML/XML markup.", + "description": "
\"\"
\n\n# MarkupSafe\n\nMarkupSafe implements a text object that escapes characters so it is\nsafe to use in HTML and XML. Characters that have special meanings are\nreplaced so that they display as the actual characters. This mitigates\ninjection attacks, meaning untrusted user input can safely be displayed\non a page.\n\n\n## Examples\n\n```pycon\n>>> from markupsafe import Markup, escape\n\n>>> # escape replaces special characters and wraps in Markup\n>>> escape(\"\")\nMarkup('<script>alert(document.cookie);</script>')\n\n>>> # wrap in Markup to mark text \"safe\" and prevent escaping\n>>> Markup(\"Hello\")\nMarkup('hello')\n\n>>> escape(Markup(\"Hello\"))\nMarkup('hello')\n\n>>> # Markup is a str subclass\n>>> # methods and operators escape their arguments\n>>> template = Markup(\"Hello {name}\")\n>>> template.format(name='\"World\"')\nMarkup('Hello "World"')\n```\n\n## Donate\n\nThe Pallets organization develops and supports MarkupSafe and other\npopular packages. In order to grow the community of contributors and\nusers, and allow the maintainers to devote more time to the projects,\n[please donate today][].\n\n[please donate today]: https://palletsprojects.com/donate\n\n## Contributing\n\nSee our [detailed contributing documentation][contrib] for many ways to\ncontribute, including reporting issues, requesting features, asking or answering\nquestions, and making PRs.\n\n[contrib]: https://palletsprojects.com/contributing/\n", + "description_content_type": "text/markdown", + "maintainer_email": "Pallets ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.txt" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Environment :: Web Environment", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Topic :: Internet :: WWW/HTTP :: Dynamic Content", + "Topic :: Text Processing :: Markup :: HTML", + "Typing :: Typed" + ], + "requires_python": ">=3.9", + "project_url": [ + "Donate, https://palletsprojects.com/donate", + "Documentation, https://markupsafe.palletsprojects.com/", + "Changes, https://markupsafe.palletsprojects.com/page/changes/", + "Source, https://github.com/pallets/markupsafe/", + "Chat, https://discord.gg/pallets" + ] + } + } + ], + "environment": { + "implementation_name": "cpython", + "implementation_version": "3.14.7", + "os_name": "posix", + "platform_machine": "x86_64", + "platform_release": "6.17.0-1022-azure", + "platform_system": "Linux", + "platform_version": "#22-Ubuntu SMP Mon Jul 27 17:24:03 UTC 2026", + "python_full_version": "3.14.7", + "platform_python_implementation": "CPython", + "python_version": "3.14", + "sys_platform": "linux" + } +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-restart-acceptance/probe-results.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-restart-acceptance/probe-results.json new file mode 100644 index 000000000..d7af72d34 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-restart-acceptance/probe-results.json @@ -0,0 +1,304 @@ +{ + "recorded_at": "2026-09-26T06:16:25.116027+00:00", + "status": "passed", + "core_status": "passed", + "adapter_status": "not selected", + "environment": { + "release": "2.14.0", + "torch": "2.14.0+cpu", + "build": "cpu", + "adapter": "none", + "python": "3.14", + "interpreter": "/tmp/pumas-torch-native-cpu-kkrybqey/launcher-data/managed-python/python/0800c1ab76812b8a0a424e27c9a0c6ff818175e26b32d40b165081b5e041a8c5/cpython-3.14.7-linux-x86_64-gnu/bin/python3.14", + "implementation": "cpython", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "machine": "x86_64", + "artifacts": [ + { + "name": "torch", + "version": "2.14.0+cpu", + "url": "https://download-r2.pytorch.org/whl/cpu/torch-2.14.0%2Bcpu-cp314-cp314-manylinux_2_28_x86_64.whl", + "sha256": "f152f41dc5dc462afe0de780e451ebb47ea8b4451f8f919f9537aa8e2cbe1d7e" + }, + { + "name": "fastapi", + "version": "0.141.1", + "url": "https://files.pythonhosted.org/packages/cb/03/10388a42375ee7e4ac9b94eb2c5c569c8b5795e377e701c9ac3ad63de890/fastapi-0.141.1-py3-none-any.whl", + "sha256": "bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3" + }, + { + "name": "uvicorn", + "version": "0.54.0", + "url": "https://files.pythonhosted.org/packages/38/0c/b54a4fdd7f90a3af8b02ebc9ce6712c2c208b7926a2f7bad95c33ebbe943/uvicorn-0.54.0-py3-none-any.whl", + "sha256": "505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf" + }, + { + "name": "psutil", + "version": "7.2.2", + "url": "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", + "sha256": "076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9" + }, + { + "name": "pillow", + "version": "12.3.0", + "url": "https://files.pythonhosted.org/packages/5c/44/c85361f65dbe00eea8576ee467c768d25129989efb76e94f205e9ca9bb46/pillow-12.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", + "sha256": "251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b" + }, + { + "name": "safetensors", + "version": "0.8.0", + "url": "https://files.pythonhosted.org/packages/28/50/f203ff3a3ddfe19308efc83c5a3a29ed02bf786732ec35e68bf9162f3365/safetensors-0.8.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "sha256": "fd6f3f93c9a0a7cc2788ee63fb763353d4bd2e89b0751bc78fcf7dda00bea774" + }, + { + "name": "annotated-doc", + "version": "0.0.5", + "url": "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", + "sha256": "117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101" + }, + { + "name": "click", + "version": "8.5.0", + "url": "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", + "sha256": "255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360" + }, + { + "name": "fsspec", + "version": "2026.9.0", + "url": "https://files.pythonhosted.org/packages/6c/c0/a98505f18594f1bce828bb159cec0fcf9860562f1a2c85913409fc8f3d9e/fsspec-2026.9.0-py3-none-any.whl", + "sha256": "8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f" + }, + { + "name": "h11", + "version": "0.16.0", + "url": "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", + "sha256": "63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86" + }, + { + "name": "networkx", + "version": "3.7", + "url": "https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl", + "sha256": "e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0" + }, + { + "name": "pydantic", + "version": "2.13.5", + "url": "https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl", + "sha256": "346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73" + }, + { + "name": "pydantic-core", + "version": "2.46.5", + "url": "https://files.pythonhosted.org/packages/2c/9b/59634b7ac631c63b2a37760eb6943af3e29573d6b59a4abc5e7f019d4cee/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "sha256": "54d510bac3ee52247af28ed4bb18a1e799f040ac60fd2bf5ccd4c92f1fbe786f" + }, + { + "name": "annotated-types", + "version": "0.8.0", + "url": "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", + "sha256": "f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0" + }, + { + "name": "setuptools", + "version": "84.0.0", + "url": "https://files.pythonhosted.org/packages/95/9c/c510029fc6ef33a6275cd2c5d3cecd6613dfd6aa401d57c54f1c18852ccf/setuptools-84.0.0-py3-none-any.whl", + "sha256": "51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670" + }, + { + "name": "starlette", + "version": "1.7.0", + "url": "https://files.pythonhosted.org/packages/4e/d6/1ec1b290f9e0fb067899b61e1d37a30c923068bad260b216dbe37a7d2967/starlette-1.7.0-py3-none-any.whl", + "sha256": "67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e" + }, + { + "name": "anyio", + "version": "4.15.1", + "url": "https://files.pythonhosted.org/packages/12/b8/4bd346e22b28902df4d651910f5242c28d84e4a5c2435ca5c3f797ed7e2e/anyio-4.15.1-py3-none-any.whl", + "sha256": "6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101" + }, + { + "name": "idna", + "version": "3.20", + "url": "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl", + "sha256": "ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c" + }, + { + "name": "sympy", + "version": "1.14.0", + "url": "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", + "sha256": "e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5" + }, + { + "name": "mpmath", + "version": "1.3.0", + "url": "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", + "sha256": "a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c" + }, + { + "name": "typing-extensions", + "version": "4.16.0", + "url": "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", + "sha256": "481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8" + }, + { + "name": "typing-inspection", + "version": "0.4.4", + "url": "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", + "sha256": "65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147" + }, + { + "name": "filelock", + "version": "4.0.3", + "url": "https://files.pythonhosted.org/packages/7a/6d/db8b86e168fef0cf904737e275bccb683558088ef971e92d3b41ce980699/filelock-4.0.3-py3-none-any.whl", + "sha256": "30cd166e2aee2c7534ce2c33c6367c4cd051b8368e20e2c4eb0c34f699bacfab" + }, + { + "name": "jinja2", + "version": "3.1.6", + "url": "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", + "sha256": "85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67" + }, + { + "name": "markupsafe", + "version": "3.0.3", + "url": "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", + "sha256": "457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97" + } + ] + }, + "context": { + "python": "3.14.7 (main, Sep 1 2026, 14:18:09) [Clang 22.1.3 ]", + "executable": "/tmp/pumas-torch-native-cpu-kkrybqey/torch-versions/.torch-install-EJymW6/runtime/venv/bin/python", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "hardware": { + "cuda": null, + "hip": null, + "devices": [] + }, + "hardware_fingerprint": "494fb1d79639aecf4bb2b6043473616914037c874c14d9805f8e3f9d38b2c602", + "driver_version": null, + "runtime_files_sha256": { + "control_api.py": "ee5160f121a749d8d11cd929abfb9d98a1a109235dac3690c9e2118f9cca54d0", + "device_manager.py": "9ab6d63eb943989bc19f1fed89098aca27b168536fa2529734d1ee4f37585379", + "diffusion.py": "c4dadfc949c17a460f8fc8a446b03139da0c574b45b3f561403fdf83e495b6d3", + "flux2.py": "39f864e1e15ffb2b697bb95418d474cb98a760feca9acd48a74b5cf05642fea2", + "image_api.py": "bb39ac05aee7ea4d4357360accfa27ee261f58d1cd9cc35af28470012673a7ec", + "loaders/__init__.py": "80cec9242f95b73881b038b890a5d9465a14be86a631b2a0e1bf9efacac543fe", + "loaders/dllm_loader.py": "2c5656bce01a6d133925d02ca72606f8ae951d66186ac07d3fcb7fd5580b1a13", + "loaders/safetensors_loader.py": "661a000b791396067d253a27a26cb5905ae40ce8d50817ba54bc1afce803396f", + "loaders/sherry_loader.py": "360ac3f66c4438e3ffe3d9dc99ef2a27ae69efdd26f8d3564f638ae7802e5b3f", + "model_manager.py": "cfc049050f9003f87d622fe57da5c4ab4efb5105523fcbab926d8770d82be3f8", + "nunchaku_compat.py": "27b42f9cae80e474c0b2162e6bf572f822d525134bf2fc3bddd551c031bb5d70", + "openai_api.py": "a3c712e6307fe3b60d1b7acdcbeb9413b011eb370ad656f862ef9399f3342f8c", + "probe_runtime.py": "9b9e1d81087aefffdb383038724b471daeb0456814e5f2fa17e0b4da46255e25", + "resolve_runtime.py": "e0476a77398ac18059160ca55c8bb74dfc32bbcf9938bab7a5ab329c70b027f1", + "serve.py": "88bf72ea3eac013dc7678bebe0e3b3053c141e8ec1222a210bd18b2a47601af4", + "validation.py": "f53cca26ddbddbc3c924ff07d32aaf9ced6061a7f1628379b4c0db2c9da7feb1" + }, + "interpreter_sha256": "241bf774a81580bb760adf960b48df7e6b23b1de026c9c912d4ca6be1a08241e", + "installed_distributions": { + "torch": "2.14.0+cpu", + "fastapi": "0.141.1", + "uvicorn": "0.54.0", + "psutil": "7.2.2", + "pillow": "12.3.0", + "safetensors": "0.8.0", + "annotated-doc": "0.0.5", + "click": "8.5.0", + "fsspec": "2026.9.0", + "h11": "0.16.0", + "networkx": "3.7", + "pydantic": "2.13.5", + "pydantic-core": "2.46.5", + "annotated-types": "0.8.0", + "setuptools": "84.0.0", + "starlette": "1.7.0", + "anyio": "4.15.1", + "idna": "3.20", + "sympy": "1.14.0", + "mpmath": "1.3.0", + "typing-extensions": "4.16.0", + "typing-inspection": "0.4.4", + "filelock": "4.0.3", + "jinja2": "3.1.6", + "markupsafe": "3.0.3" + }, + "all_installed_distributions": { + "annotated-doc": "0.0.5", + "annotated-types": "0.8.0", + "anyio": "4.15.1", + "click": "8.5.0", + "fastapi": "0.141.1", + "filelock": "4.0.3", + "fsspec": "2026.9.0", + "h11": "0.16.0", + "idna": "3.20", + "jinja2": "3.1.6", + "markupsafe": "3.0.3", + "mpmath": "1.3.0", + "networkx": "3.7", + "pillow": "12.3.0", + "pip": "26.2.1", + "psutil": "7.2.2", + "pydantic": "2.13.5", + "pydantic-core": "2.46.5", + "safetensors": "0.8.0", + "setuptools": "84.0.0", + "starlette": "1.7.0", + "sympy": "1.14.0", + "torch": "2.14.0+cpu", + "typing-extensions": "4.16.0", + "typing-inspection": "0.4.4", + "uvicorn": "0.54.0" + }, + "distributions_sha256": "fb628c6fb5305166cad9332e5cf97765df173d14d44b7a0296950ad749e0254e", + "resolution_sha256": "045da95bfd908fac18a677ff80be151dead40ce6dc85ca2475450b6fc2d4d371", + "sidecar_sha256": "88bf72ea3eac013dc7678bebe0e3b3053c141e8ec1222a210bd18b2a47601af4" + }, + "capabilities": { + "torch_import": { + "status": "passed", + "version": "2.14.0+cpu" + }, + "cpu_tensor": { + "status": "passed" + }, + "cuda_tensor": { + "status": "unavailable", + "scope": "CUDA tensor operation", + "reason": "CUDA is not available" + }, + "sidecar_app": { + "status": "passed", + "health": { + "status": "ok", + "protocol": 3, + "capabilities": [ + "image_generation" + ] + }, + "scope": "in-process app construction and health endpoint" + }, + "flux2_klein": { + "status": "not selected", + "scope": "optional adapter" + }, + "nunchaku_z_image": { + "status": "not selected", + "scope": "optional adapter" + }, + "image_device": { + "status": "unavailable", + "scope": "adapter device requirement", + "reason": "No NVIDIA sm_120 CUDA device detected" + }, + "sidecar_startup": { + "status": "not tested", + "scope": "socket startup requires an explicit trial" + }, + "image_generation": { + "status": "not tested", + "scope": "no model loaded or inference performed" + } + } +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-restart-acceptance/resolution.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-restart-acceptance/resolution.json new file mode 100644 index 000000000..168f451d8 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-restart-acceptance/resolution.json @@ -0,0 +1,163 @@ +{ + "release": "2.14.0", + "torch": "2.14.0+cpu", + "build": "cpu", + "adapter": "none", + "python": "3.14", + "interpreter": "/tmp/pumas-torch-native-cpu-kkrybqey/launcher-data/managed-python/python/0800c1ab76812b8a0a424e27c9a0c6ff818175e26b32d40b165081b5e041a8c5/cpython-3.14.7-linux-x86_64-gnu/bin/python3.14", + "implementation": "cpython", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "machine": "x86_64", + "artifacts": [ + { + "name": "torch", + "version": "2.14.0+cpu", + "url": "https://download-r2.pytorch.org/whl/cpu/torch-2.14.0%2Bcpu-cp314-cp314-manylinux_2_28_x86_64.whl", + "sha256": "f152f41dc5dc462afe0de780e451ebb47ea8b4451f8f919f9537aa8e2cbe1d7e" + }, + { + "name": "fastapi", + "version": "0.141.1", + "url": "https://files.pythonhosted.org/packages/cb/03/10388a42375ee7e4ac9b94eb2c5c569c8b5795e377e701c9ac3ad63de890/fastapi-0.141.1-py3-none-any.whl", + "sha256": "bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3" + }, + { + "name": "uvicorn", + "version": "0.54.0", + "url": "https://files.pythonhosted.org/packages/38/0c/b54a4fdd7f90a3af8b02ebc9ce6712c2c208b7926a2f7bad95c33ebbe943/uvicorn-0.54.0-py3-none-any.whl", + "sha256": "505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf" + }, + { + "name": "psutil", + "version": "7.2.2", + "url": "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", + "sha256": "076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9" + }, + { + "name": "pillow", + "version": "12.3.0", + "url": "https://files.pythonhosted.org/packages/5c/44/c85361f65dbe00eea8576ee467c768d25129989efb76e94f205e9ca9bb46/pillow-12.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", + "sha256": "251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b" + }, + { + "name": "safetensors", + "version": "0.8.0", + "url": "https://files.pythonhosted.org/packages/28/50/f203ff3a3ddfe19308efc83c5a3a29ed02bf786732ec35e68bf9162f3365/safetensors-0.8.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "sha256": "fd6f3f93c9a0a7cc2788ee63fb763353d4bd2e89b0751bc78fcf7dda00bea774" + }, + { + "name": "annotated-doc", + "version": "0.0.5", + "url": "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", + "sha256": "117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101" + }, + { + "name": "click", + "version": "8.5.0", + "url": "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", + "sha256": "255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360" + }, + { + "name": "fsspec", + "version": "2026.9.0", + "url": "https://files.pythonhosted.org/packages/6c/c0/a98505f18594f1bce828bb159cec0fcf9860562f1a2c85913409fc8f3d9e/fsspec-2026.9.0-py3-none-any.whl", + "sha256": "8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f" + }, + { + "name": "h11", + "version": "0.16.0", + "url": "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", + "sha256": "63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86" + }, + { + "name": "networkx", + "version": "3.7", + "url": "https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl", + "sha256": "e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0" + }, + { + "name": "pydantic", + "version": "2.13.5", + "url": "https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl", + "sha256": "346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73" + }, + { + "name": "pydantic-core", + "version": "2.46.5", + "url": "https://files.pythonhosted.org/packages/2c/9b/59634b7ac631c63b2a37760eb6943af3e29573d6b59a4abc5e7f019d4cee/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "sha256": "54d510bac3ee52247af28ed4bb18a1e799f040ac60fd2bf5ccd4c92f1fbe786f" + }, + { + "name": "annotated-types", + "version": "0.8.0", + "url": "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", + "sha256": "f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0" + }, + { + "name": "setuptools", + "version": "84.0.0", + "url": "https://files.pythonhosted.org/packages/95/9c/c510029fc6ef33a6275cd2c5d3cecd6613dfd6aa401d57c54f1c18852ccf/setuptools-84.0.0-py3-none-any.whl", + "sha256": "51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670" + }, + { + "name": "starlette", + "version": "1.7.0", + "url": "https://files.pythonhosted.org/packages/4e/d6/1ec1b290f9e0fb067899b61e1d37a30c923068bad260b216dbe37a7d2967/starlette-1.7.0-py3-none-any.whl", + "sha256": "67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e" + }, + { + "name": "anyio", + "version": "4.15.1", + "url": "https://files.pythonhosted.org/packages/12/b8/4bd346e22b28902df4d651910f5242c28d84e4a5c2435ca5c3f797ed7e2e/anyio-4.15.1-py3-none-any.whl", + "sha256": "6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101" + }, + { + "name": "idna", + "version": "3.20", + "url": "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl", + "sha256": "ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c" + }, + { + "name": "sympy", + "version": "1.14.0", + "url": "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", + "sha256": "e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5" + }, + { + "name": "mpmath", + "version": "1.3.0", + "url": "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", + "sha256": "a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c" + }, + { + "name": "typing-extensions", + "version": "4.16.0", + "url": "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", + "sha256": "481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8" + }, + { + "name": "typing-inspection", + "version": "0.4.4", + "url": "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", + "sha256": "65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147" + }, + { + "name": "filelock", + "version": "4.0.3", + "url": "https://files.pythonhosted.org/packages/7a/6d/db8b86e168fef0cf904737e275bccb683558088ef971e92d3b41ce980699/filelock-4.0.3-py3-none-any.whl", + "sha256": "30cd166e2aee2c7534ce2c33c6367c4cd051b8368e20e2c4eb0c34f699bacfab" + }, + { + "name": "jinja2", + "version": "3.1.6", + "url": "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", + "sha256": "85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67" + }, + { + "name": "markupsafe", + "version": "3.0.3", + "url": "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", + "sha256": "457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97" + } + ] +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-restart-acceptance/restart-backend-session.txt b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-restart-acceptance/restart-backend-session.txt new file mode 100644 index 000000000..01d6bf226 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-restart-acceptance/restart-backend-session.txt @@ -0,0 +1,21 @@ +2026-09-26T06:16:30.685491Z  INFO Starting Pumas RPC Server +2026-09-26T06:16:30.685584Z  INFO Launcher root configured +2026-09-26T06:16:30.719439Z  INFO Rebuilding model index +2026-09-26T06:16:30.719598Z  INFO Rebuilt index with 0 models +2026-09-26T06:16:30.781667Z  INFO IPC server listening on 127.0.0.1:35249 +2026-09-26T06:16:30.781993Z  INFO IPC server started on port 35249 +2026-09-26T06:16:30.782322Z  INFO Started watching model library at "/tmp/pumas-torch-native-cpu-kkrybqey/shared-resources/models" +2026-09-26T06:16:30.806512Z  INFO Validation complete: 0 valid, 0 removed, 0 orphaned +2026-09-26T06:16:30.806598Z  INFO ollama version manager initialized successfully +2026-09-26T06:16:30.832757Z  INFO Validation complete: 1 valid, 0 removed, 0 orphaned +2026-09-26T06:16:30.833779Z  INFO torch version manager initialized successfully +2026-09-26T06:16:30.858902Z  INFO Validation complete: 0 valid, 0 removed, 0 orphaned +2026-09-26T06:16:30.858962Z  INFO llama-cpp version manager initialized successfully +2026-09-26T06:16:30.858981Z  INFO Initialized 3 version manager(s) +2026-09-26T06:16:30.859085Z  INFO Size calculator initialized +2026-09-26T06:16:30.859166Z  INFO Plugin loader initialized (0 plugins) +2026-09-26T06:16:30.974456Z  INFO Server listening on 127.0.0.1:46157 with max 64 in-flight requests and 33554432 byte request bodies +RPC_PORT=46157 +2026-09-26T06:16:30.974571Z  INFO RPC server running on 127.0.0.1:46157 +2026-09-26T06:16:34.896653Z  INFO Shutdown signal received, exiting +2026-09-26T06:16:34.900646Z  WARN File watcher channel disconnected diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-restart-acceptance/runtime.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-restart-acceptance/runtime.json new file mode 100644 index 000000000..247f9f1aa --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-restart-acceptance/runtime.json @@ -0,0 +1,181 @@ +{ + "adapter": "none", + "artifacts": [ + { + "name": "torch", + "sha256": "f152f41dc5dc462afe0de780e451ebb47ea8b4451f8f919f9537aa8e2cbe1d7e", + "url": "https://download-r2.pytorch.org/whl/cpu/torch-2.14.0%2Bcpu-cp314-cp314-manylinux_2_28_x86_64.whl", + "version": "2.14.0+cpu" + }, + { + "name": "fastapi", + "sha256": "bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3", + "url": "https://files.pythonhosted.org/packages/cb/03/10388a42375ee7e4ac9b94eb2c5c569c8b5795e377e701c9ac3ad63de890/fastapi-0.141.1-py3-none-any.whl", + "version": "0.141.1" + }, + { + "name": "uvicorn", + "sha256": "505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf", + "url": "https://files.pythonhosted.org/packages/38/0c/b54a4fdd7f90a3af8b02ebc9ce6712c2c208b7926a2f7bad95c33ebbe943/uvicorn-0.54.0-py3-none-any.whl", + "version": "0.54.0" + }, + { + "name": "psutil", + "sha256": "076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9", + "url": "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", + "version": "7.2.2" + }, + { + "name": "pillow", + "sha256": "251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b", + "url": "https://files.pythonhosted.org/packages/5c/44/c85361f65dbe00eea8576ee467c768d25129989efb76e94f205e9ca9bb46/pillow-12.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", + "version": "12.3.0" + }, + { + "name": "safetensors", + "sha256": "fd6f3f93c9a0a7cc2788ee63fb763353d4bd2e89b0751bc78fcf7dda00bea774", + "url": "https://files.pythonhosted.org/packages/28/50/f203ff3a3ddfe19308efc83c5a3a29ed02bf786732ec35e68bf9162f3365/safetensors-0.8.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "version": "0.8.0" + }, + { + "name": "annotated-doc", + "sha256": "117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101", + "url": "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", + "version": "0.0.5" + }, + { + "name": "click", + "sha256": "255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360", + "url": "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", + "version": "8.5.0" + }, + { + "name": "fsspec", + "sha256": "8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f", + "url": "https://files.pythonhosted.org/packages/6c/c0/a98505f18594f1bce828bb159cec0fcf9860562f1a2c85913409fc8f3d9e/fsspec-2026.9.0-py3-none-any.whl", + "version": "2026.9.0" + }, + { + "name": "h11", + "sha256": "63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", + "url": "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", + "version": "0.16.0" + }, + { + "name": "networkx", + "sha256": "e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0", + "url": "https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl", + "version": "3.7" + }, + { + "name": "pydantic", + "sha256": "346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73", + "url": "https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl", + "version": "2.13.5" + }, + { + "name": "pydantic-core", + "sha256": "54d510bac3ee52247af28ed4bb18a1e799f040ac60fd2bf5ccd4c92f1fbe786f", + "url": "https://files.pythonhosted.org/packages/2c/9b/59634b7ac631c63b2a37760eb6943af3e29573d6b59a4abc5e7f019d4cee/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "version": "2.46.5" + }, + { + "name": "annotated-types", + "sha256": "f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0", + "url": "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", + "version": "0.8.0" + }, + { + "name": "setuptools", + "sha256": "51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670", + "url": "https://files.pythonhosted.org/packages/95/9c/c510029fc6ef33a6275cd2c5d3cecd6613dfd6aa401d57c54f1c18852ccf/setuptools-84.0.0-py3-none-any.whl", + "version": "84.0.0" + }, + { + "name": "starlette", + "sha256": "67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e", + "url": "https://files.pythonhosted.org/packages/4e/d6/1ec1b290f9e0fb067899b61e1d37a30c923068bad260b216dbe37a7d2967/starlette-1.7.0-py3-none-any.whl", + "version": "1.7.0" + }, + { + "name": "anyio", + "sha256": "6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101", + "url": "https://files.pythonhosted.org/packages/12/b8/4bd346e22b28902df4d651910f5242c28d84e4a5c2435ca5c3f797ed7e2e/anyio-4.15.1-py3-none-any.whl", + "version": "4.15.1" + }, + { + "name": "idna", + "sha256": "ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c", + "url": "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl", + "version": "3.20" + }, + { + "name": "sympy", + "sha256": "e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", + "url": "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", + "version": "1.14.0" + }, + { + "name": "mpmath", + "sha256": "a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", + "url": "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", + "version": "1.3.0" + }, + { + "name": "typing-extensions", + "sha256": "481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", + "url": "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", + "version": "4.16.0" + }, + { + "name": "typing-inspection", + "sha256": "65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147", + "url": "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", + "version": "0.4.4" + }, + { + "name": "filelock", + "sha256": "30cd166e2aee2c7534ce2c33c6367c4cd051b8368e20e2c4eb0c34f699bacfab", + "url": "https://files.pythonhosted.org/packages/7a/6d/db8b86e168fef0cf904737e275bccb683558088ef971e92d3b41ce980699/filelock-4.0.3-py3-none-any.whl", + "version": "4.0.3" + }, + { + "name": "jinja2", + "sha256": "85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", + "url": "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", + "version": "3.1.6" + }, + { + "name": "markupsafe", + "sha256": "457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", + "url": "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", + "version": "3.0.3" + } + ], + "build": "cpu", + "capabilities": [ + "image_generation" + ], + "managed_python": { + "distribution": { + "catalogKey": "cpython-3.14.7-linux-x86_64-gnu", + "implementation": "CPython", + "sourceUrl": "https://releases.astral.sh/github/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz", + "targetTriple": "x86_64-unknown-linux-gnu", + "version": "3.14.7" + }, + "executable": { + "path": "/tmp/pumas-torch-native-cpu-kkrybqey/launcher-data/managed-python/python/0800c1ab76812b8a0a424e27c9a0c6ff818175e26b32d40b165081b5e041a8c5/cpython-3.14.7-linux-x86_64-gnu/bin/python3.14", + "sha256": "241bf774a81580bb760adf960b48df7e6b23b1de026c9c912d4ca6be1a08241e" + }, + "provider": { + "archiveSha256": "89eadd7c76fc063887959510d5ba0ab1264dfd5f1143b925ddb73021a40acf16", + "name": "uv", + "version": "0.12.18" + } + }, + "protocol": 3, + "python": "python3.14", + "qualification": "not verified by Pumas", + "recipe_id": "upstream-preview-v2.14.0-cpu-python3.14-none" +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-current-source-cpu-rpc-restart-acceptance/README.md b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-current-source-cpu-rpc-restart-acceptance/README.md new file mode 100644 index 000000000..494b5024b --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-current-source-cpu-rpc-restart-acceptance/README.md @@ -0,0 +1,32 @@ +# Torch v2.14.0 current-source Linux CPU/Core RPC acceptance + +The native RPC E2E job in [workflow run 36229508586](https://github.com/MrScripty/Pumas-Library/actions/runs/36229508586) +passed on code commit `21041697` for Linux x86_64 (Ubuntu 24.04). It discovered `v2.14.0`, +resolved and installed 25 hashed official CPU/Core artifacts, then restarted a +second backend against the same launcher root. The persisted active release and +managed Python interpreter were verified; a fresh CPU tensor operation returned +`14` with Torch `2.14.0+cpu` on device `cpu`. + +The run installed Pumas-managed CPython 3.14.7 for `x86_64-unknown-linux-gnu` using the +pinned uv 0.12.18 provider and the target's official Python Build Standalone +install-only archive. The resolver probe passed, protocol 3 sidecar trial/stop +passed, shutdown was graceful, and the acceptance harness reported +`cleanup_safe: true`. This run verifies the metadata-lock follow-up on the +current runtime source. It is native RPC acceptance, not Electron UI-driven +installation or image generation through Tuldok. + +## Retained evidence + +- [Acceptance result](acceptance.json) records release discovery, both-session + restart, managed-interpreter identity and hash, CPU operation, probes, + sidecar lifecycle, and cleanup. +- [Initial backend log](initial-backend-session.txt) and + [restart backend log](restart-backend-session.txt) record process lifecycles. +- [Installed runtime](runtime.json), [resolution](resolution.json), + [pip resolution](pip-resolution.json), and [runtime probes](probe-results.json) + retain the exact wheel and dependency artifacts, installed profile, and + runtime checks. +- [Python archive manifest](managed-python-licenses/full-archive-manifest.json) + records full-archive license hashes. The full collection's + [README](../managed-python-license-collection/README.md) links the target's + legal files and authoritative manifest. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-current-source-cpu-rpc-restart-acceptance/acceptance.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-current-source-cpu-rpc-restart-acceptance/acceptance.json new file mode 100644 index 000000000..51ad520b7 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-current-source-cpu-rpc-restart-acceptance/acceptance.json @@ -0,0 +1,65 @@ +{ + "architecture": "x86_64", + "artifact_count": 25, + "build": "cpu", + "cleanup_safe": true, + "cpython_version": "3.14.7", + "distribution_catalog_key": "cpython-3.14.7-linux-x86_64-gnu", + "distribution_implementation": "CPython", + "distribution_source_url": "https://releases.astral.sh/github/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz", + "executable_path": "/tmp/pumas-torch-native-cpu-7ajvyak2/launcher-data/managed-python/python/0800c1ab76812b8a0a424e27c9a0c6ff818175e26b32d40b165081b5e041a8c5/cpython-3.14.7-linux-x86_64-gnu/bin/python3.14", + "executable_sha256": "241bf774a81580bb760adf960b48df7e6b23b1de026c9c912d4ca6be1a08241e", + "platform": "linux", + "probe": "passed", + "provider": "uv", + "provider_archive_sha256": "89eadd7c76fc063887959510d5ba0ab1264dfd5f1143b925ddb73021a40acf16", + "provider_version": "0.12.18", + "python": "python3.14", + "release": "v2.14.0", + "restart": { + "active_version": "v2.14.0", + "cpu_operation": { + "device": "cpu", + "result": 14, + "version": "2.14.0+cpu" + }, + "interpreter": "persisted", + "managed_python": { + "cpython_version": "3.14.7", + "distribution_catalog_key": "cpython-3.14.7-linux-x86_64-gnu", + "distribution_implementation": "CPython", + "distribution_source_url": "https://releases.astral.sh/github/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz", + "executable_path": "/tmp/pumas-torch-native-cpu-7ajvyak2/launcher-data/managed-python/python/0800c1ab76812b8a0a424e27c9a0c6ff818175e26b32d40b165081b5e041a8c5/cpython-3.14.7-linux-x86_64-gnu/bin/python3.14", + "executable_sha256": "241bf774a81580bb760adf960b48df7e6b23b1de026c9c912d4ca6be1a08241e", + "provider": "uv", + "provider_archive_sha256": "89eadd7c76fc063887959510d5ba0ab1264dfd5f1143b925ddb73021a40acf16", + "provider_version": "0.12.18", + "target": "x86_64-unknown-linux-gnu" + }, + "probe": "passed", + "profile_id": "torch-managed-python-acceptance", + "same_launcher_root": true, + "shutdown": "graceful", + "sidecar_generation": "1", + "sidecar_protocol": 3, + "stop_result": true, + "trial": "passed" + }, + "sidecar_generation": "1", + "sidecar_protocol": 3, + "stop_result": true, + "stopped": true, + "success": true, + "target": "x86_64-unknown-linux-gnu", + "trial": "passed", + "version_preflight": { + "attempts": [ + { + "number": 1, + "status": "requested_tag_found" + } + ], + "elapsed_seconds": 1.031, + "status": "passed" + } +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-current-source-cpu-rpc-restart-acceptance/initial-backend-session.txt b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-current-source-cpu-rpc-restart-acceptance/initial-backend-session.txt new file mode 100644 index 000000000..187257edc --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-current-source-cpu-rpc-restart-acceptance/initial-backend-session.txt @@ -0,0 +1,27 @@ +2026-09-26T08:23:06.213159Z  INFO Starting Pumas RPC Server +2026-09-26T08:23:06.213223Z  INFO Launcher root configured +2026-09-26T08:23:06.288867Z  INFO Created FTS5 table: model_search +2026-09-26T08:23:06.291099Z  INFO Populated FTS5 table from models +2026-09-26T08:23:06.291347Z  INFO Rebuilding model index +2026-09-26T08:23:06.291478Z  INFO Rebuilt index with 0 models +2026-09-26T08:23:06.388701Z  INFO IPC server listening on 127.0.0.1:33829 +2026-09-26T08:23:06.389047Z  INFO IPC server started on port 33829 +2026-09-26T08:23:06.389393Z  INFO Started watching model library at "/tmp/pumas-torch-native-cpu-7ajvyak2/shared-resources/models" +2026-09-26T08:23:06.426839Z  INFO Validation complete: 0 valid, 0 removed, 0 orphaned +2026-09-26T08:23:06.426884Z  INFO ollama version manager initialized successfully +2026-09-26T08:23:06.463181Z  INFO Validation complete: 0 valid, 0 removed, 0 orphaned +2026-09-26T08:23:06.463375Z  INFO torch version manager initialized successfully +2026-09-26T08:23:06.504991Z  INFO Validation complete: 0 valid, 0 removed, 0 orphaned +2026-09-26T08:23:06.505026Z  INFO llama-cpp version manager initialized successfully +2026-09-26T08:23:06.505042Z  INFO Initialized 3 version manager(s) +2026-09-26T08:23:06.505235Z  INFO Size calculator initialized +2026-09-26T08:23:06.505396Z  INFO Plugin loader initialized (0 plugins) +2026-09-26T08:23:06.681896Z  INFO Server listening on 127.0.0.1:44461 with max 64 in-flight requests and 33554432 byte request bodies +RPC_PORT=44461 +2026-09-26T08:23:06.681959Z  INFO RPC server running on 127.0.0.1:44461 +2026-09-26T08:23:07.493802Z  INFO Fetched 69 releases from GitHub for pytorch/pytorch +2026-09-26T08:24:23.381561Z  INFO Finalizing installation for v2.14.0 +2026-09-26T08:24:23.388070Z  INFO Installation of v2.14.0 finalized +2026-09-26T08:24:25.822300Z  INFO Set active version: v2.14.0 +2026-09-26T08:24:28.211785Z  INFO Shutdown signal received, exiting +2026-09-26T08:24:28.216926Z  WARN File watcher channel disconnected diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-current-source-cpu-rpc-restart-acceptance/managed-python-licenses/full-archive-manifest.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-current-source-cpu-rpc-restart-acceptance/managed-python-licenses/full-archive-manifest.json new file mode 100644 index 000000000..8672a15e6 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-current-source-cpu-rpc-restart-acceptance/managed-python-licenses/full-archive-manifest.json @@ -0,0 +1,114 @@ +{ + "archive_name": "cpython-3.14.7+20260901-x86_64-unknown-linux-gnu-pgo+lto-full.tar.zst", + "archive_sha256": "46a9e98d2c7fd2c5b9ca67510b5a0699f5ccad5fb750957961c22c52e07b6cb0", + "archive_size": 126709151, + "archive_url": "https://github.com/astral-sh/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "asset_id": 539917788, + "files": [ + { + "declared": false, + "path": "licenses/LICENSE.bdb.txt", + "sha256": "3bdff06e69991c94664f2ef5c5f8096f60b7dbec071756ea6cc26b445e06ec5b" + }, + { + "declared": false, + "path": "licenses/LICENSE.bzip2.txt", + "sha256": "1f38bbc7caacafd65169276d759c0d88c991b753b643ce35d0e45ea1971dd441" + }, + { + "declared": true, + "path": "licenses/LICENSE.cpython.txt", + "sha256": "86e61415828a8b5b06ec8d024e6f086ce155a8b85fd0c419c0ba4dc004e74fdd" + }, + { + "declared": false, + "path": "licenses/LICENSE.expat.txt", + "sha256": "122f2c27000472a201d337b9b31f7eb2b52d091b02857061a8880371612d9534" + }, + { + "declared": false, + "path": "licenses/LICENSE.libX11.txt", + "sha256": "2daec087a88e7c9b8082557cdeebad5bbb8155a4137472f0b22e269cd99d0c1e" + }, + { + "declared": false, + "path": "licenses/LICENSE.libXau.txt", + "sha256": "56abe29bb1d9806a9e04fa9f80fed2c0f18027594df3f098148d814aef6bddfa" + }, + { + "declared": false, + "path": "licenses/LICENSE.libedit.txt", + "sha256": "29cea33c32bbc9785142386377915612a2fa786482c46843383384aded2e09b1" + }, + { + "declared": false, + "path": "licenses/LICENSE.libffi.txt", + "sha256": "deaf3a42effb551a5b140fa9afefed183a27f1341c6d1bf430d106a5e6931fc0" + }, + { + "declared": false, + "path": "licenses/LICENSE.liblzma.txt", + "sha256": "9a4062de0a2c388a98cf35a35d348b62fa97c838a71c3c28ee1a2d7d0a565b02" + }, + { + "declared": false, + "path": "licenses/LICENSE.libuuid.txt", + "sha256": "122ee1f7e258f2c3c0e538a75c037684f420454bf3850ddc74ce750bbf5fe86b" + }, + { + "declared": false, + "path": "licenses/LICENSE.libxcb.txt", + "sha256": "c5ffbfeaa501071ceeb97b7de2c0d703fdaa35de01c0fb6cbac1c28453a3e9fd" + }, + { + "declared": false, + "path": "licenses/LICENSE.mpdecimal.txt", + "sha256": "669512af7219f58be03a398766d7c9da11a3b3df9d3f05cb74c5ceca25c8da3b" + }, + { + "declared": false, + "path": "licenses/LICENSE.ncurses.txt", + "sha256": "87a4c4442337b8968ef956031c406b74f9cb7149b7ba87311bdaba534816201c" + }, + { + "declared": false, + "path": "licenses/LICENSE.openssl-1.1.txt", + "sha256": "9c04cce50c4989d5601dd8b07f6ab922c40388b66ac736c9007cb1ed9d9dd560" + }, + { + "declared": false, + "path": "licenses/LICENSE.openssl-3.txt", + "sha256": "7d5450cb2d142651b8afa315b5f238efc805dad827d91ba367d8516bc9d49e7a" + }, + { + "declared": false, + "path": "licenses/LICENSE.sqlite.txt", + "sha256": "38bef3d28b24f145ea293bd3b6eb4b20396982abc8303128fb493986ea5bc719" + }, + { + "declared": false, + "path": "licenses/LICENSE.tcl.txt", + "sha256": "c0a69a2bfd757361ec7e6143973b103c90409316b49e9c88db26ad6388e79f16" + }, + { + "declared": false, + "path": "licenses/LICENSE.tix.txt", + "sha256": "3ac5cdd0bef6c43ce34c6a7ced452081d9e5a0bf94082b9f9147d23ec9e214f5" + }, + { + "declared": false, + "path": "licenses/LICENSE.zlib.txt", + "sha256": "818922b2620f12801a12bf78e399644a30990e66824abd8ca8ec24d451d6f92c" + } + ], + "mapping_authority": "https://github.com/astral-sh/python-build-standalone/blob/20260901/src/release.rs", + "python_json": { + "path": "PYTHON.json", + "sha256": "0bb1b7ad30bac3dbd00ec6f8cab3b07dbd0ab727980fa6ac4f4947eb45ab831d", + "size": 139785 + }, + "release_id": 380696527, + "scope": "selected_full_archive_license_directory_and_declared_references", + "source_url": "https://releases.astral.sh/github/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz", + "target": "x86_64-unknown-linux-gnu" +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-current-source-cpu-rpc-restart-acceptance/pip-resolution.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-current-source-cpu-rpc-restart-acceptance/pip-resolution.json new file mode 100644 index 000000000..5205185b3 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-current-source-cpu-rpc-restart-acceptance/pip-resolution.json @@ -0,0 +1,2057 @@ +{ + "version": "1", + "pip_version": "26.2.1", + "install": [ + { + "download_info": { + "url": "https://download-r2.pytorch.org/whl/cpu/torch-2.14.0%2Bcpu-cp314-cp314-manylinux_2_28_x86_64.whl", + "archive_info": { + "hashes": { + "sha256": "f152f41dc5dc462afe0de780e451ebb47ea8b4451f8f919f9537aa8e2cbe1d7e" + }, + "hash": "sha256=f152f41dc5dc462afe0de780e451ebb47ea8b4451f8f919f9537aa8e2cbe1d7e" + } + }, + "is_direct": true, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.4", + "name": "torch", + "version": "2.14.0+cpu", + "summary": "Tensors and Dynamic neural networks in Python with strong GPU acceleration", + "description": "\n \n \n \"PyTorch\n\n\n--------------------------------------------------------------------------------\n\nPyTorch is a Python package that provides two high-level features:\n- Tensor computation (like NumPy) with strong GPU acceleration\n- Deep neural networks built on a tape-based autograd system\n\nYou can reuse your favorite Python packages such as NumPy, SciPy, and Cython to extend PyTorch when needed.\n\nOur trunk health (Continuous Integration signals) can be found at [hud.pytorch.org](https://hud.pytorch.org/ci/pytorch/pytorch/main).\n\n\n\n- [More About PyTorch](#more-about-pytorch)\n - [A GPU-Ready Tensor Library](#a-gpu-ready-tensor-library)\n - [Dynamic Neural Networks: Tape-Based Autograd](#dynamic-neural-networks-tape-based-autograd)\n - [Python First](#python-first)\n - [Imperative Experiences](#imperative-experiences)\n - [Fast and Lean](#fast-and-lean)\n - [Extensions Without Pain](#extensions-without-pain)\n- [Installation](#installation)\n - [Binaries](#binaries)\n - [NVIDIA Jetson Platforms](#nvidia-jetson-platforms)\n - [From Source](#from-source)\n - [Prerequisites](#prerequisites)\n - [NVIDIA CUDA Support](#nvidia-cuda-support)\n - [AMD ROCm Support](#amd-rocm-support)\n - [Intel GPU Support](#intel-gpu-support)\n - [Get the PyTorch Source](#get-the-pytorch-source)\n - [Install Dependencies](#install-dependencies)\n - [Install PyTorch](#install-pytorch)\n - [Adjust Build Options (Optional)](#adjust-build-options-optional)\n - [Docker Image](#docker-image)\n - [Using pre-built images](#using-pre-built-images)\n - [Building the image yourself](#building-the-image-yourself)\n - [Building the Documentation](#building-the-documentation)\n - [Troubleshooting CI Errors](#troubleshooting-ci-errors)\n - [Building a PDF](#building-a-pdf)\n - [Previous Versions](#previous-versions)\n- [Getting Started](#getting-started)\n- [Resources](#resources)\n- [Communication](#communication)\n- [Releases and Contributing](#releases-and-contributing)\n- [The Team](#the-team)\n- [License](#license)\n\n\n\n## More About PyTorch\n\n[Learn the basics of PyTorch](https://pytorch.org/tutorials/beginner/basics/intro.html)\n\nAt a granular level, PyTorch is a library that consists of the following components:\n\n| Component | Description |\n| ---- | --- |\n| [**torch**](https://pytorch.org/docs/stable/torch.html) | A Tensor library like NumPy, with strong GPU support |\n| [**torch.autograd**](https://pytorch.org/docs/stable/autograd.html) | A tape-based automatic differentiation library that supports all differentiable Tensor operations in torch |\n| [**torch.jit**](https://pytorch.org/docs/stable/jit.html) | A compilation stack (TorchScript) to create serializable and optimizable models from PyTorch code |\n| [**torch.nn**](https://pytorch.org/docs/stable/nn.html) | A neural networks library deeply integrated with autograd designed for maximum flexibility |\n| [**torch.multiprocessing**](https://pytorch.org/docs/stable/multiprocessing.html) | Python multiprocessing, but with magical memory sharing of torch Tensors across processes. Useful for data loading and Hogwild training |\n| [**torch.utils**](https://pytorch.org/docs/stable/data.html) | DataLoader and other utility functions for convenience |\n\nUsually, PyTorch is used either as:\n\n- A replacement for NumPy to use the power of GPUs.\n- A deep learning research platform that provides maximum flexibility and speed.\n\nElaborating Further:\n\n### A GPU-Ready Tensor Library\n\nIf you use NumPy, then you have used Tensors (a.k.a. ndarray).\n\n![Tensor illustration](https://github.com/pytorch/pytorch/raw/main/docs/source/_static/img/tensor_illustration.png)\n\nPyTorch provides Tensors that can live either on the CPU or the GPU and accelerates the\ncomputation by a huge amount.\n\nWe provide a wide variety of tensor routines to accelerate and fit your scientific computation needs\nsuch as slicing, indexing, mathematical operations, linear algebra, reductions.\nAnd they are fast!\n\n### Dynamic Neural Networks: Tape-Based Autograd\n\nPyTorch has a unique way of building neural networks: using and replaying a tape recorder.\n\nMost frameworks such as TensorFlow, Theano, Caffe, and CNTK have a static view of the world.\nOne has to build a neural network and reuse the same structure again and again.\nChanging the way the network behaves means that one has to start from scratch.\n\nWith PyTorch, we use a technique called reverse-mode auto-differentiation, which allows you to\nchange the way your network behaves arbitrarily with zero lag or overhead. Our inspiration comes\nfrom several research papers on this topic, as well as current and past work such as\n[torch-autograd](https://github.com/twitter/torch-autograd),\n[autograd](https://github.com/HIPS/autograd),\n[Chainer](https://chainer.org), etc.\n\nWhile this technique is not unique to PyTorch, it's one of the fastest implementations of it to date.\nYou get the best of speed and flexibility for your crazy research.\n\n![Dynamic graph](https://github.com/pytorch/pytorch/raw/main/docs/source/_static/img/dynamic_graph.gif)\n\n### Python First\n\nPyTorch is not a Python binding into a monolithic C++ framework.\nIt is built to be deeply integrated into Python.\nYou can use it naturally like you would use [NumPy](https://www.numpy.org/) / [SciPy](https://www.scipy.org/) / [scikit-learn](https://scikit-learn.org) etc.\nYou can write your new neural network layers in Python itself, using your favorite libraries\nand use packages such as [Cython](https://cython.org/) and [Numba](https://numba.pydata.org/).\nOur goal is to not reinvent the wheel where appropriate.\n\n### Imperative Experiences\n\nPyTorch is designed to be intuitive, linear in thought, and easy to use.\nWhen you execute a line of code, it gets executed. There isn't an asynchronous view of the world.\nWhen you drop into a debugger or receive error messages and stack traces, understanding them is straightforward.\nThe stack trace points to exactly where your code was defined.\nWe hope you never spend hours debugging your code because of bad stack traces or asynchronous and opaque execution engines.\n\n### Fast and Lean\n\nPyTorch has minimal framework overhead. We integrate acceleration libraries\nsuch as [Intel MKL](https://software.intel.com/mkl) and NVIDIA ([cuDNN](https://developer.nvidia.com/cudnn), [NCCL](https://developer.nvidia.com/nccl)) to maximize speed.\nAt the core, its CPU and GPU Tensor and neural network backends\nare mature and have been tested for years.\n\nHence, PyTorch is quite fast — whether you run small or large neural networks.\n\nThe memory usage in PyTorch is extremely efficient compared to Torch or some of the alternatives.\nWe've written custom memory allocators for the GPU to make sure that\nyour deep learning models are maximally memory efficient.\nThis enables you to train bigger deep learning models than before.\n\n### Extensions Without Pain\n\nWriting new neural network modules, or interfacing with PyTorch's Tensor API, was designed to be straightforward\nand with minimal abstractions.\n\nYou can write new neural network layers in Python using the torch API\n[or your favorite NumPy-based libraries such as SciPy](https://pytorch.org/tutorials/advanced/numpy_extensions_tutorial.html).\n\nIf you want to write your layers in C/C++, we provide a convenient extension API that is efficient and with minimal boilerplate.\nNo wrapper code needs to be written. You can see [a tutorial here](https://pytorch.org/tutorials/advanced/cpp_extension.html) and [an example here](https://github.com/pytorch/extension-cpp).\n\n\n## Installation\n\n### Binaries\nCommands to install binaries via Conda or pip wheels are on our website: [https://pytorch.org/get-started/locally/](https://pytorch.org/get-started/locally/)\n\n\n#### NVIDIA Jetson Platforms\n\nPython wheels for NVIDIA's Jetson Nano, Jetson TX1/TX2, Jetson Xavier NX/AGX, and Jetson AGX Orin are provided [here](https://forums.developer.nvidia.com/t/pytorch-for-jetson-version-1-10-now-available/72048) and the L4T container is published [here](https://catalog.ngc.nvidia.com/orgs/nvidia/containers/l4t-pytorch)\n\nThey require JetPack 4.2 and above, and [@dusty-nv](https://github.com/dusty-nv) and [@ptrblck](https://github.com/ptrblck) are maintaining them.\n\n\n### From Source\n\n#### Prerequisites\nIf you are installing from source, you will need:\n- Python 3.10 or later\n- A compiler that fully supports C++20, such as clang or gcc (gcc 11.3.0 or newer is required, on Linux)\n- Visual Studio or Visual Studio Build Tool (Windows only)\n- At least 10 GB of free disk space\n- 30-60 minutes for the initial build (subsequent rebuilds are much faster)\n\n\\* PyTorch CI uses Visual C++ BuildTools, which come with Visual Studio Enterprise,\nProfessional, or Community Editions. You can also install the build tools from\nhttps://visualstudio.microsoft.com/visual-cpp-build-tools/. The build tools *do not*\ncome with Visual Studio Code by default.\n\nAn example of environment setup is shown below:\n\n* Linux:\n\n```bash\n$ source /bin/activate\n$ conda create -y -n \n$ conda activate \n```\n* Windows:\n\n```bash\n$ source \\Scripts\\activate.bat\n$ conda create -y -n \n$ conda activate \n$ call \"C:\\Program Files\\Microsoft Visual Studio\\\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat\" x64\n```\n\nA conda environment is not required. You can also do a PyTorch build in a\nstandard virtual environment, e.g., created with tools like `uv`, provided\nyour system has installed all the necessary dependencies unavailable as pip\npackages (e.g., CUDA, MKL.)\n\n##### NVIDIA CUDA Support\nIf you want to compile with CUDA support, [select a supported version of CUDA from our support matrix](https://pytorch.org/get-started/locally/), then install the following:\n- [NVIDIA CUDA](https://developer.nvidia.com/cuda-downloads)\n- [NVIDIA cuDNN](https://developer.nvidia.com/cudnn) v9.0 or above\n- [Compiler](https://gist.github.com/ax3l/9489132) compatible with CUDA\n\nNote: You could refer to the [cuDNN Support Matrix](https://docs.nvidia.com/deeplearning/cudnn/backend/latest/reference/support-matrix.html) for cuDNN versions with the various supported CUDA, CUDA driver, and NVIDIA hardware.\n\nIf you want to disable CUDA support, export the environment variable `USE_CUDA=0`.\nOther potentially useful environment variables are documented in `cmake/EnvVarForwarding.cmake`. If\nCUDA is installed in a non-standard location, set PATH so that the nvcc you\nwant to use can be found (e.g., `export PATH=/usr/local/cuda-12.8/bin:$PATH`).\n\nIf you are building for NVIDIA's Jetson platforms (Jetson Nano, TX1, TX2, AGX Xavier), Instructions to install PyTorch for Jetson Nano are [available here](https://devtalk.nvidia.com/default/topic/1049071/jetson-nano/pytorch-for-jetson-nano/)\n\n##### AMD ROCm Support\nIf you want to compile with ROCm support, install\n- [AMD ROCm](https://rocm.docs.amd.com/en/latest/deploy/linux/quick_start.html) 4.0 and above installation\n- ROCm is currently supported only for Linux systems.\n\nBy default the build system expects ROCm to be installed in `/opt/rocm`. If ROCm is installed in a different directory, the `ROCM_PATH` environment variable must be set to the ROCm installation directory. The build system automatically detects the AMD GPU architecture. Optionally, the AMD GPU architecture can be explicitly set with the `PYTORCH_ROCM_ARCH` environment variable [AMD GPU architecture](https://rocm.docs.amd.com/projects/install-on-linux/en/latest/reference/system-requirements.html#supported-gpus)\n\nIf you want to disable ROCm support, export the environment variable `USE_ROCM=0`.\nOther potentially useful environment variables are documented in `cmake/EnvVarForwarding.cmake`.\n\n##### Intel GPU Support\nIf you want to compile with Intel GPU support, follow these\n- [PyTorch Prerequisites for Intel GPUs](https://www.intel.com/content/www/us/en/developer/articles/tool/pytorch-prerequisites-for-intel-gpu.html) instructions.\n- Intel GPU is supported for Linux and Windows.\n\nIf you want to disable Intel GPU support, export the environment variable `USE_XPU=0`.\nOther potentially useful environment variables are documented in `cmake/EnvVarForwarding.cmake`.\n\n#### Get the PyTorch Source\n\n```bash\ngit clone https://github.com/pytorch/pytorch\ncd pytorch\n# if you are updating an existing checkout\ngit submodule sync\ngit submodule update --init --recursive\n```\n\n#### Install Dependencies\n\n**Common**\n\n```bash\n# Run this command from the PyTorch directory after cloning the source code using the “Get the PyTorch Source“ section above\npip install --group dev\n```\n\n**On Linux**\n\n```bash\npip install mkl-static mkl-include\n# CUDA only: Add LAPACK support for the GPU if needed\n# magma installation: run with active conda environment. specify CUDA version to install\n.ci/docker/common/install_magma_conda.sh 12.4\n\n# (optional) If using torch.compile with inductor/triton, install the matching version of triton\n# Run from the pytorch directory after cloning\n# For Intel GPU support, please explicitly `export USE_XPU=1` before running command.\nmake triton\n```\n\n**On Windows**\n\n```bash\npip install mkl-static mkl-include\n# Add these packages if torch.distributed is needed.\n# Distributed package support on Windows is a prototype feature and is subject to changes.\nconda install -c conda-forge libuv=1.51\n```\n\n#### Install PyTorch\n\n**On Linux**\n\nIf you're compiling for AMD ROCm then first run this command:\n\n```bash\n# Only run this if you're compiling for ROCm\npython tools/amd_build/build_amd.py\n```\n\nInstall PyTorch\n\n```bash\n# the CMake prefix for conda environment\nexport CMAKE_PREFIX_PATH=\"${CONDA_PREFIX:-'$(dirname $(which conda))/../'}:${CMAKE_PREFIX_PATH}\"\npython -m pip install --no-build-isolation -v -e .\n\n# the CMake prefix for non-conda environment, e.g. Python venv\n# call following after activating the venv\nexport CMAKE_PREFIX_PATH=\"${VIRTUAL_ENV}:${CMAKE_PREFIX_PATH}\"\n```\n\n**On macOS**\n\n```bash\npython -m pip install --no-build-isolation -v -e .\n```\n\n**On Windows**\n\nIf you want to build legacy python code, please refer to [Building on legacy code and CUDA](https://github.com/pytorch/pytorch/blob/main/CONTRIBUTING.md#building-on-legacy-code-and-cuda)\n\n**CPU-only builds**\n\nIn this mode PyTorch computations will run on your CPU, not your GPU.\n\n```cmd\npython -m pip install --no-build-isolation -v -e .\n```\n\nNote on OpenMP: The desired OpenMP implementation is Intel OpenMP (iomp). In order to link against iomp, you'll need to manually download the library and set up the building environment by tweaking `CMAKE_INCLUDE_PATH` and `LIB`. The instruction [here](https://docs.pytorch.org/docs/main/notes/windows.html#building-from-source) is an example for setting up both MKL and Intel OpenMP. Without these configurations for CMake, Microsoft Visual C OpenMP runtime (vcomp) will be used.\n\n**CUDA based build**\n\nIn this mode PyTorch computations will leverage your GPU via CUDA for faster number crunching\n\n[NVTX](https://docs.nvidia.com/gameworks/content/gameworkslibrary/nvtx/nvidia_tools_extension_library_nvtx.htm) is needed to build PyTorch with CUDA.\nNVTX is a part of CUDA distributive, where it is called \"Nsight Compute\". To install it onto an already installed CUDA run CUDA installation once again and check the corresponding checkbox.\nMake sure that CUDA with Nsight Compute is installed after Visual Studio.\n\nCurrently, VS 2017 / 2019, and Ninja are supported as the generator of CMake. If `ninja.exe` is detected in `PATH`, then Ninja will be used as the default generator, otherwise, it will use VS 2017 / 2019.\n
If Ninja is selected as the generator, the latest MSVC will get selected as the underlying toolchain.\n\nAdditional libraries such as\n[Magma](https://developer.nvidia.com/magma), [oneDNN, a.k.a. MKLDNN or DNNL](https://github.com/oneapi-src/oneDNN), and [Sccache](https://github.com/mozilla/sccache) are often needed. Please refer to the [installation-helper](https://github.com/pytorch/pytorch/tree/main/.ci/pytorch/win-test-helpers/installation-helpers) to install them.\n\nYou can refer to the [build_pytorch.bat](https://github.com/pytorch/pytorch/blob/main/.ci/pytorch/win-test-helpers/build_pytorch.bat) script for some other environment variables configurations\n\n```cmd\ncmd\n\n:: Set the environment variables after you have downloaded and unzipped the mkl package,\n:: else CMake would throw an error as `Could NOT find OpenMP`.\nset CMAKE_INCLUDE_PATH={Your directory}\\mkl\\include\nset LIB={Your directory}\\mkl\\lib;%LIB%\n\n:: Read the content in the previous section carefully before you proceed.\n:: [Optional] If you want to override the underlying toolset used by Ninja and Visual Studio with CUDA, please run the following script block.\n:: \"Visual Studio 2019 Developer Command Prompt\" will be run automatically.\n:: Make sure you have CMake >= 3.12 before you do this when you use the Visual Studio generator.\nset CMAKE_GENERATOR_TOOLSET_VERSION=14.27\nset DISTUTILS_USE_SDK=1\nfor /f \"usebackq tokens=*\" %i in (`\"%ProgramFiles(x86)%\\Microsoft Visual Studio\\Installer\\vswhere.exe\" -version [15^,17^) -products * -latest -property installationPath`) do call \"%i\\VC\\Auxiliary\\Build\\vcvarsall.bat\" x64 -vcvars_ver=%CMAKE_GENERATOR_TOOLSET_VERSION%\n\n:: [Optional] If you want to override the CUDA host compiler\nset CUDAHOSTCXX=C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.27.29110\\bin\\HostX64\\x64\\cl.exe\n\npython -m pip install --no-build-isolation -v -e .\n```\n\n**Intel GPU builds**\n\nIn this mode PyTorch with Intel GPU support will be built.\n\nPlease make sure [the common prerequisites](#prerequisites) as well as [the prerequisites for Intel GPU](#intel-gpu-support) are properly installed and the environment variables are configured prior to starting the build. For build tool support, `Visual Studio 2022` is required.\n\nThen PyTorch can be built with the command:\n\n```cmd\n:: CMD Commands:\n:: Set the CMAKE_PREFIX_PATH to help find corresponding packages\n:: %CONDA_PREFIX% only works after `conda activate custom_env`\n\nif defined CMAKE_PREFIX_PATH (\n set \"CMAKE_PREFIX_PATH=%CONDA_PREFIX%\\Library;%CMAKE_PREFIX_PATH%\"\n) else (\n set \"CMAKE_PREFIX_PATH=%CONDA_PREFIX%\\Library\"\n)\n\npython -m pip install --no-build-isolation -v -e .\n```\n\n##### Adjust Build Options (Optional)\n\nYou can adjust the configuration of CMake variables through environment variables, which the\nbuild forwards to CMake (see [`cmake/EnvVarForwarding.cmake`](./cmake/EnvVarForwarding.cmake) for\nthe full list). For example, pointing the build at a specific Conda prefix, CuDNN, or BLAS:\n\nOn Linux\n\n```bash\nexport CMAKE_PREFIX_PATH=\"${CONDA_PREFIX:-'$(dirname $(which conda))/../'}:${CMAKE_PREFIX_PATH}\"\nspin develop\n```\n\nOn macOS\n\n```bash\nexport CMAKE_PREFIX_PATH=\"${CONDA_PREFIX:-'$(dirname $(which conda))/../'}:${CMAKE_PREFIX_PATH}\"\nMACOSX_DEPLOYMENT_TARGET=11.0 spin develop\n```\n\nAfter a first `spin develop`, you can inspect or adjust the CMake cache interactively with\n`ccmake build` (or `cmake-gui build`) and rebuild with `spin develop`; your edits persist, because\nreconfiguration does not use `--fresh` and environment variables only seed cache entries that are\nnot already set. The corollary: once a variable is in the cache, changing its environment variable\nno longer affects it -- edit the cache directly (or delete `build/CMakeCache.txt`) to change it.\nThe build type and compiler are the exception; the build always re-applies them.\n\n### Docker Image\n\n#### Using pre-built images\n\nYou can also pull a pre-built docker image from Docker Hub and run with docker v23.0+\n\n```bash\ndocker run --gpus all --rm -ti --ipc=host pytorch/pytorch:latest\n```\n\nPlease note that PyTorch uses shared memory to share data between processes, so if torch multiprocessing is used (e.g.\nfor multithreaded data loaders) the default shared memory segment size that container runs with is not enough, and you\nshould increase shared memory size either with `--ipc=host` or `--shm-size` command line options to `nvidia-docker run`.\n\n#### Building the image yourself\n\n**NOTE:** Must be built with a Docker version >= 23.0\n\nThe Dockerfile is supplied to build images with CUDA 12.6 support and cuDNN v9.\nYou can pass `PYTHON_VERSION=x.y` make variable to specify which Python version is to be used by Miniconda, or leave it\nunset to use the default, as the Dockerfile uses system Python.\n\n```bash\nmake -f docker.Makefile\n# images are tagged as docker.io/${your_docker_username}/pytorch\n```\n\nYou can also pass the `CMAKE_VARS=\"...\"` environment variable to specify additional CMake variables to be passed to CMake during the build.\nSee [`cmake/EnvVarForwarding.cmake`](./cmake/EnvVarForwarding.cmake) for the list of available variables.\n\n```bash\nmake -f docker.Makefile\n```\n\n### Building the Documentation\n\nTo build documentation in various formats, you will need [Sphinx](https://www.sphinx-doc.org)\nand the `pytorch_sphinx_theme2`.\n\nBefore you build the documentation locally, ensure `torch` is\ninstalled in your environment. For small fixes, you can install the\nnightly version as described in [Getting Started](https://pytorch.org/get-started/locally/).\n\nFor more complex fixes, such as adding a new module and docstrings for\nthe new module, you might need to install torch [from source](#from-source).\nSee [Docstring Guidelines](https://github.com/pytorch/pytorch/wiki/Docstring-Guidelines)\nfor docstring conventions.\n\n```bash\ncd docs/\npip install -r requirements.txt\nmake html\nmake serve\n```\n\nRun `make` to get a list of all available output formats.\n\nIf you get a katex error run `npm install katex`. If it persists, try\n`npm install -g katex`\n\n> [!NOTE]\n> If you see a numpy incompatibility error, run:\n> ```\n> pip install 'numpy<2'\n> ```\n\n\n#### Troubleshooting CI Errors\nYour build may show errors you didn't have locally - here's how to find the errors relevant to the docs.\n\nIf the build has any errors, you will see something like this on the PR:\n\n\"Monosnap\n\nAny doc-related errors will occur in jobs that include \"doc\" somewhere in the title. It doesn't look like any of these jobs are relevant to our docs.\n\n\nLet's take a look anyway. Click on the job to see the logs:\n\n\"Monosnap\n\nAnd we can be sure that this job does not involve docs.\n\nLooking at this build, we can see these jobs are relevant to our docs - and they didn't have any errors:\n\n\"Check\n\nYou might also see a comment on the PR like this:\n\n\"PR\n\nWe can see that some of these issues are relevant to our docs.\n\nOpen the logs by clicking on the `gh` link:\n\n\"View\n\nAnd here we can see there is a doc-related error:\n\n\"Doc\n\nYou can always find the relevant doc builds by going to the `Checks` tab on your PR, and scrolling down to `pull`.\n\n\"checks\"\n\nYou can either click through or toggle the accordion to see all of the jobs here, where you can see the docs jobs highlighted:\n\n\"jobs\"\n\nIf you click through, you'll see the doc jobs at the bottom, like this:\n\n\"View\n\n\n#### Building a PDF\n\nTo compile a PDF of all PyTorch documentation, ensure you have\n`texlive` and LaTeX installed. On macOS, you can install them using:\n\n```\nbrew install --cask mactex\n```\n\nTo create the PDF:\n\n1. Run:\n\n ```\n make latexpdf\n ```\n\n This will generate the necessary files in the `build/latex` directory.\n\n2. Navigate to this directory and execute:\n\n ```\n make LATEXOPTS=\"-interaction=nonstopmode\"\n ```\n\n This will produce a `pytorch.pdf` with the desired content. Run this\n command one more time so that it generates the correct table\n of contents and index.\n\n> [!NOTE]\n> To view the Table of Contents, switch to the **Table of Contents**\n> view in your PDF viewer.\n\n\n### Previous Versions\n\nInstallation instructions and binaries for previous PyTorch versions may be found\non [our website](https://pytorch.org/get-started/previous-versions).\n\n\n## Getting Started\n\nPointers to get you started:\n- [Tutorials: get you started with understanding and using PyTorch](https://pytorch.org/tutorials/)\n- [Examples: easy to understand PyTorch code across all domains](https://github.com/pytorch/examples)\n- [The API Reference](https://pytorch.org/docs/)\n- [Glossary](https://github.com/pytorch/pytorch/blob/main/GLOSSARY.md)\n\n## Resources\n\n* [PyTorch.org](https://pytorch.org/)\n* [PyTorch Tutorials](https://pytorch.org/tutorials/)\n* [PyTorch Examples](https://github.com/pytorch/examples)\n* [PyTorch Models](https://pytorch.org/hub/)\n* [Intro to Deep Learning with PyTorch from Udacity](https://www.udacity.com/course/deep-learning-pytorch--ud188)\n* [Intro to Machine Learning with PyTorch from Udacity](https://www.udacity.com/course/intro-to-machine-learning-nanodegree--nd229)\n* [Deep Neural Networks with PyTorch from Coursera](https://www.coursera.org/learn/deep-neural-networks-with-pytorch)\n* [PyTorch Twitter](https://twitter.com/PyTorch)\n* [PyTorch Blog](https://pytorch.org/blog/)\n* [PyTorch YouTube](https://www.youtube.com/channel/UCWXI5YeOsh03QvJ59PMaXFw)\n\n## Communication\n* Forums: Discuss implementations, research, etc. https://discuss.pytorch.org\n* GitHub Issues: Bug reports, feature requests, install issues, RFCs, thoughts, etc.\n* Slack: The [PyTorch Slack](https://pytorch.slack.com/) hosts a primary audience of moderate to experienced PyTorch users and developers for general chat, online discussions, collaboration, etc. If you are a beginner looking for help, the primary medium is [PyTorch Forums](https://discuss.pytorch.org). If you need a slack invite, please fill this form: https://goo.gl/forms/PP1AGvNHpSaJP8to1\n* Newsletter: No-noise, a one-way email newsletter with important announcements about PyTorch. You can sign-up here: https://eepurl.com/cbG0rv\n* Facebook Page: Important announcements about PyTorch. https://www.facebook.com/pytorch\n* For brand guidelines, please visit our website at [pytorch.org](https://pytorch.org/)\n\n## Releases and Contributing\n\nTypically, PyTorch has three minor releases a year. Please let us know if you encounter a bug by [filing an issue](https://github.com/pytorch/pytorch/issues).\n\nWe appreciate all contributions. If you are planning to contribute back bug-fixes, please do so without any further discussion.\n\nIf you plan to contribute new features, utility functions, or extensions to the core, please first open an issue and discuss the feature with us.\nSending a PR without discussion might end up resulting in a rejected PR because we might be taking the core in a different direction than you might be aware of.\n\nTo learn more about making a contribution to PyTorch, please see our [Contribution page](CONTRIBUTING.md). For more information about PyTorch releases, see [Release page](RELEASE.md).\n\n## The Team\n\nPyTorch is a community-driven project with several skillful engineers and researchers contributing to it.\n\nPyTorch is currently maintained by [Soumith Chintala](https://soumith.ch), [Gregory Chanan](https://github.com/gchanan), [Dmytro Dzhulgakov](https://github.com/dzhulgakov), [Edward Yang](https://github.com/ezyang), [Alban Desmaison](https://github.com/albanD), [Piotr Bialecki](https://github.com/ptrblck) and [Nikita Shulga](https://github.com/malfet) with major contributions coming from hundreds of talented individuals in various forms and means.\nA non-exhaustive but growing list needs to mention: [Trevor Killeen](https://github.com/killeent), [Sasank Chilamkurthy](https://github.com/chsasank), [Sergey Zagoruyko](https://github.com/szagoruyko), [Adam Lerer](https://github.com/adamlerer), [Francisco Massa](https://github.com/fmassa), [Alykhan Tejani](https://github.com/alykhantejani), [Luca Antiga](https://github.com/lantiga), [Alban Desmaison](https://github.com/albanD), [Andreas Koepf](https://github.com/andreaskoepf), [James Bradbury](https://github.com/jekbradbury), [Zeming Lin](https://github.com/ebetica), [Yuandong Tian](https://github.com/yuandong-tian), [Guillaume Lample](https://github.com/glample), [Marat Dukhan](https://github.com/Maratyszcza), [Natalia Gimelshein](https://github.com/ngimel), [Christian Sarofeen](https://github.com/csarofeen), [Martin Raison](https://github.com/martinraison), [Edward Yang](https://github.com/ezyang), [Zachary Devito](https://github.com/zdevito). \n\nNote: This project is unrelated to [hughperkins/pytorch](https://github.com/hughperkins/pytorch) with the same name. Hugh is a valuable contributor to the Torch community and has helped with many things Torch and PyTorch.\n\n## License\n\nPyTorch has a BSD-style license, as found in the [LICENSE](LICENSE) file.\n", + "description_content_type": "text/markdown", + "keywords": [ + "pytorch", + "machine learning" + ], + "author_email": "PyTorch Team ", + "license_expression": "Apache-2.0 AND Apache-2.0 WITH LLVM-exception AND BSD-2-Clause AND BSD-3-Clause AND BSL-1.0 AND MIT", + "license_file": [ + "LICENSE", + "third_party/FP16/LICENSE", + "third_party/FXdiv/LICENSE", + "third_party/NNPACK/LICENSE", + "third_party/NVTX/LICENSE.txt", + "third_party/NVTX/docs/LICENSE.txt", + "third_party/NVTX/python/LICENSE.txt", + "third_party/NVTX/rust/LICENSE", + "third_party/VulkanMemoryAllocator/LICENSE.txt", + "third_party/XNNPACK/LICENSE", + "third_party/aiter/3rdparty/composable_kernel/LICENSE", + "third_party/aiter/LICENSE", + "third_party/benchmark/LICENSE", + "third_party/composable_kernel/LICENSE", + "third_party/cpp-httplib/LICENSE", + "third_party/cpuinfo/LICENSE", + "third_party/cpuinfo/deps/clog/LICENSE", + "third_party/cudnn_frontend/LICENSE.txt", + "third_party/cutlass/LICENSE.txt", + "third_party/cutlass/python/LICENSE.txt", + "third_party/fbgemm/LICENSE", + "third_party/fbgemm/external/composable_kernel/LICENSE", + "third_party/fbgemm/external/cpuinfo/LICENSE", + "third_party/fbgemm/external/cpuinfo/deps/clog/LICENSE", + "third_party/fbgemm/external/cutlass/LICENSE.txt", + "third_party/fbgemm/external/cutlass/python/LICENSE.txt", + "third_party/fbgemm/external/googletest/LICENSE", + "third_party/fbgemm/external/hipify_torch/LICENSE.txt", + "third_party/fbgemm/fbgemm_gpu/experimental/hstu/LICENSE", + "third_party/fbgemm/fbgemm_gpu/src/quantize_ops/mx/LICENSE", + "third_party/fbgemm/fbgemm_gpu/test/quantize/mx/LICENSE", + "third_party/flash-attention/LICENSE", + "third_party/flash-attention/csrc/composable_kernel/LICENSE", + "third_party/flash-attention/csrc/cutlass/LICENSE.txt", + "third_party/flash-attention/csrc/cutlass/python/LICENSE.txt", + "third_party/flash-attention/flash_attn/cute/LICENSE", + "third_party/flash-attention/third_party/aiter/3rdparty/composable_kernel/LICENSE", + "third_party/flash-attention/third_party/aiter/LICENSE", + "third_party/flatbuffers/LICENSE", + "third_party/flatbuffers/dart/LICENSE", + "third_party/flatbuffers/swift/LICENSE", + "third_party/fmt/LICENSE", + "third_party/gemmlowp/gemmlowp/LICENSE", + "third_party/gloo/LICENSE", + "third_party/googletest/LICENSE", + "third_party/ideep/LICENSE", + "third_party/ideep/mkl-dnn/LICENSE", + "third_party/ideep/mkl-dnn/third_party/gtest/LICENSE", + "third_party/ideep/mkl-dnn/third_party/opencl/LICENSE", + "third_party/kineto/LICENSE", + "third_party/kineto/libkineto/third_party/dynolog_headers/LICENSE", + "third_party/kineto/libkineto/third_party/fmt/LICENSE", + "third_party/kineto/libkineto/third_party/googletest/LICENSE", + "third_party/llvm-openmp/LICENSE.txt", + "third_party/mimalloc/LICENSE", + "third_party/miniz-3.0.2/LICENSE", + "third_party/mslk/LICENSE", + "third_party/mslk/external/composable_kernel/LICENSE", + "third_party/mslk/external/cutlass/LICENSE.txt", + "third_party/mslk/external/cutlass/python/LICENSE.txt", + "third_party/mslk/external/googletest/LICENSE", + "third_party/mslk/external/hipify_torch/LICENSE.txt", + "third_party/mslk/mslk/attention/flash_attn/LICENSE", + "third_party/onnx/LICENSE", + "third_party/onnx/third_party/pybind11/LICENSE", + "third_party/perfetto/LICENSE", + "third_party/protobuf/LICENSE", + "third_party/protobuf/third_party/benchmark/LICENSE", + "third_party/protobuf/third_party/googletest/LICENSE", + "third_party/protobuf/third_party/googletest/googlemock/LICENSE", + "third_party/protobuf/third_party/googletest/googlemock/scripts/generator/LICENSE", + "third_party/protobuf/third_party/googletest/googletest/LICENSE", + "third_party/protobuf/third_party/utf8_range/LICENSE", + "third_party/psimd/LICENSE", + "third_party/pthreadpool/LICENSE", + "third_party/pybind11/LICENSE", + "third_party/python-peachpy/LICENSE.rst", + "third_party/sleef/LICENSE.txt", + "third_party/tensorpipe/LICENSE.txt", + "third_party/tensorpipe/third_party/googletest/LICENSE", + "third_party/tensorpipe/third_party/googletest/googlemock/LICENSE", + "third_party/tensorpipe/third_party/googletest/googlemock/scripts/generator/LICENSE", + "third_party/tensorpipe/third_party/googletest/googletest/LICENSE", + "third_party/tensorpipe/third_party/libnop/LICENSE", + "third_party/tensorpipe/third_party/libuv/LICENSE", + "third_party/tensorpipe/third_party/pybind11/LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Intended Audience :: Education", + "Intended Audience :: Science/Research", + "Topic :: Scientific/Engineering", + "Topic :: Scientific/Engineering :: Mathematics", + "Topic :: Scientific/Engineering :: Artificial Intelligence", + "Topic :: Software Development", + "Topic :: Software Development :: Libraries", + "Topic :: Software Development :: Libraries :: Python Modules", + "Programming Language :: C++", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15" + ], + "requires_dist": [ + "filelock", + "typing-extensions>=4.10.0", + "setuptools>=77.0.3", + "sympy>=1.13.3", + "networkx>=2.5.1", + "jinja2", + "fsspec>=0.8.5", + "optree>=0.13.0; extra == \"optree\"", + "opt-einsum>=3.3; extra == \"opt-einsum\"", + "pyyaml; extra == \"pyyaml\"" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://pytorch.org", + "Repository, https://github.com/pytorch/pytorch", + "Documentation, https://pytorch.org/docs", + "Issue Tracker, https://github.com/pytorch/pytorch/issues", + "Forum, https://discuss.pytorch.org" + ], + "provides_extra": [ + "optree", + "opt-einsum", + "pyyaml" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/cb/03/10388a42375ee7e4ac9b94eb2c5c569c8b5795e377e701c9ac3ad63de890/fastapi-0.141.1-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3" + }, + "hash": "sha256=bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.4", + "name": "fastapi", + "version": "0.141.1", + "summary": "FastAPI framework, high performance, easy to learn, fast to code, ready for production", + "description": "

\n \"FastAPI\"\n

\n

\n FastAPI framework, high performance, easy to learn, fast to code, ready for production\n

\n

\n\n \"Test\"\n\n\n \"Coverage\"\n\n\n \"Package\n\n\n \"Supported\n\n

\n\n---\n\n**Documentation**: [https://fastapi.tiangolo.com](https://fastapi.tiangolo.com)\n\n**Source Code**: [https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi)\n\n---\n\nFastAPI is a modern, fast (high-performance), web framework for building APIs with Python based on standard Python type hints.\n\nThe key features are:\n\n* **Fast**: Very high performance, on par with **NodeJS** and **Go** (thanks to Starlette and Pydantic). [One of the fastest Python frameworks available](#performance).\n* **Fast to code**: Increase the speed to develop features by about 200% to 300%. *\n* **Fewer bugs**: Reduce about 40% of human (developer) induced errors. *\n* **Intuitive**: Great editor support. Completion everywhere. Less time debugging.\n* **Easy**: Designed to be easy to use and learn. Less time reading docs.\n* **Short**: Minimize code duplication. Multiple features from each parameter declaration. Fewer bugs.\n* **Robust**: Get production-ready code. With automatic interactive documentation.\n* **Standards-based**: Based on (and fully compatible with) the open standards for APIs: [OpenAPI](https://github.com/OAI/OpenAPI-Specification) (previously known as Swagger) and [JSON Schema](https://json-schema.org/).\n\n* estimation based on tests conducted by an internal development team, building production applications.\n\n## Sponsors\n\n\n### Keystone Sponsor\n\n\n\n### Gold Sponsors\n\n\n\n\n\n\n\n\n\n\n### Silver Sponsors\n\n\n\n\n\n\n\n\n\n\n[Other sponsors](https://fastapi.tiangolo.com/fastapi-people/#sponsors)\n\n## Opinions\n\n\n\n
\n\n\"_[...] I'm using **FastAPI** a ton these days. [...] I'm actually planning to use it for all of my team's **ML services at Microsoft**. Some of them are getting integrated into the core **Windows** product and some **Office** products._\"\n\n
Kabir Khan - Microsoft (ref)
\n\n---\n\n\"_We adopted the **FastAPI** library to spawn a **REST** server that can be queried to obtain **predictions**. [for Ludwig]_\"\n\n
Piero Molino, Yaroslav Dudin, and Sai Sumanth Miryala - Uber (ref)
\n\n---\n\n\"_**Netflix** is pleased to announce the open-source release of our **crisis management** orchestration framework: **Dispatch**! [built with **FastAPI**]_\"\n\n
Kevin Glisson, Marc Vilanova, Forest Monsen - Netflix (ref)
\n\n---\n\n\"_If anyone is looking to build a production Python API, I would highly recommend **FastAPI**. It is **beautifully designed**, **simple to use** and **highly scalable**, it has become a **key component** in our API first development strategy and is driving many automations and services such as our Virtual TAC Engineer._\"\n\n
Deon Pillsbury - Cisco (ref)
\n\n---\n\n
\n\n## FastAPI Conf\n\n[**FastAPI Conf '26**](https://fastapiconf.com) is happening on **October 28, 2026** in **Amsterdam, NL**. All about FastAPI, right from the source. 🎤\n\n\"FastAPI\n\n## FastAPI mini documentary\n\nThere's a [FastAPI mini documentary](https://www.youtube.com/watch?v=mpR8ngthqiE) released at the end of 2025, you can watch it online:\n\n\"FastAPI\n\n## **Typer**, the FastAPI of CLIs\n\n\n\nIf you are building a CLI app to be used in the terminal instead of a web API, check out [**Typer**](https://typer.tiangolo.com/).\n\n**Typer** is FastAPI's little sibling. And it's intended to be the **FastAPI of CLIs**. ⌨️ 🚀\n\n## Requirements\n\nFastAPI stands on the shoulders of giants:\n\n* [Starlette](https://starlette.dev/) for the web parts.\n* [Pydantic](https://pydantic.dev/docs/) for the data parts.\n\n## Installation\n\nFirst, [install `uv`](https://docs.astral.sh/uv/getting-started/installation/), and then add FastAPI to your project:\n\n
\n\n```console\n$ uv add \"fastapi[standard]\"\n\n---> 100%\n```\n\n
\n\n**Note**: Make sure you put `\"fastapi[standard]\"` in quotes to ensure it works in all terminals.\n\nIf you prefer to use `pip`, install `fastapi[standard]` inside a virtual environment. See the [installation guide](tutorial/#install-fastapi) for the alternative steps.\n\n## Example\n\n### Create it\n\nCreate a file `main.py` with:\n\n```Python\nfrom fastapi import FastAPI\n\napp = FastAPI()\n\n\n@app.get(\"/\")\ndef read_root():\n return {\"Hello\": \"World\"}\n\n\n@app.get(\"/items/{item_id}\")\ndef read_item(item_id: int, q: str | None = None):\n return {\"item_id\": item_id, \"q\": q}\n```\n\n
\nOr use async def...\n\nIf your code uses `async` / `await`, use `async def`:\n\n```Python hl_lines=\"7 12\"\nfrom fastapi import FastAPI\n\napp = FastAPI()\n\n\n@app.get(\"/\")\nasync def read_root():\n return {\"Hello\": \"World\"}\n\n\n@app.get(\"/items/{item_id}\")\nasync def read_item(item_id: int, q: str | None = None):\n return {\"item_id\": item_id, \"q\": q}\n```\n\n**Note**:\n\nIf you don't know, check the _\"In a hurry?\"_ section about [`async` and `await` in the docs](https://fastapi.tiangolo.com/async/#in-a-hurry).\n\n
\n\n### Run it\n\nRun the server with:\n\n
\n\n```console\n$ uv run fastapi dev\n\n ╭────────── FastAPI CLI - Development mode ───────────╮\n │ │\n │ Serving at: http://127.0.0.1:8000 │\n │ │\n │ API docs: http://127.0.0.1:8000/docs │\n │ │\n │ Running in development mode, for production use: │\n │ │\n │ fastapi run │\n │ │\n ╰─────────────────────────────────────────────────────╯\n\nINFO: Will watch for changes in these directories: ['/home/user/code/awesomeapp']\nINFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)\nINFO: Started reloader process [2248755] using WatchFiles\nINFO: Started server process [2248757]\nINFO: Waiting for application startup.\nINFO: Application startup complete.\n```\n\n
\n\n
\nAbout the command fastapi dev...\n\nThe command `fastapi dev` reads your `main.py` file automatically, detects the **FastAPI** app in it, and starts a server using [Uvicorn](https://uvicorn.dev).\n\nBy default, `fastapi dev` will start with auto-reload enabled for local development.\n\nYou can read more about it in the [FastAPI CLI docs](https://fastapi.tiangolo.com/fastapi-cli/).\n\n
\n\n### Check it\n\nOpen your browser at [http://127.0.0.1:8000/items/5?q=somequery](http://127.0.0.1:8000/items/5?q=somequery).\n\nYou will see the JSON response as:\n\n```JSON\n{\"item_id\": 5, \"q\": \"somequery\"}\n```\n\nYou already created an API that:\n\n* Receives HTTP requests in the _paths_ `/` and `/items/{item_id}`.\n* Both _paths_ take `GET` operations (also known as HTTP _methods_).\n* The _path_ `/items/{item_id}` has a _path parameter_ `item_id` that should be an `int`.\n* The _path_ `/items/{item_id}` has an optional `str` _query parameter_ `q`.\n\n### Interactive API docs\n\nNow go to [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs).\n\nYou will see the automatic interactive API documentation (provided by [Swagger UI](https://github.com/swagger-api/swagger-ui)):\n\n![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png)\n\n### Alternative API docs\n\nAnd now, go to [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc).\n\nYou will see the alternative automatic documentation (provided by [ReDoc](https://github.com/Redocly/redoc)):\n\n![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png)\n\n## Example upgrade\n\nNow modify the file `main.py` to receive a body from a `PUT` request.\n\nDeclare the body using standard Python types, thanks to Pydantic.\n\n```Python hl_lines=\"2 7-10 23-25\"\nfrom fastapi import FastAPI\nfrom pydantic import BaseModel\n\napp = FastAPI()\n\n\nclass Item(BaseModel):\n name: str\n price: float\n is_offer: bool | None = None\n\n\n@app.get(\"/\")\ndef read_root():\n return {\"Hello\": \"World\"}\n\n\n@app.get(\"/items/{item_id}\")\ndef read_item(item_id: int, q: str | None = None):\n return {\"item_id\": item_id, \"q\": q}\n\n\n@app.put(\"/items/{item_id}\")\ndef update_item(item_id: int, item: Item):\n return {\"item_name\": item.name, \"item_id\": item_id}\n```\n\nThe `fastapi dev` server should reload automatically.\n\n### Interactive API docs upgrade\n\nNow go to [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs).\n\n* The interactive API documentation will be automatically updated, including the new body:\n\n![Swagger UI](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png)\n\n* Click on the button \"Try it out\", it allows you to fill the parameters and directly interact with the API:\n\n![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-04-swagger-03.png)\n\n* Then click on the \"Execute\" button, the user interface will communicate with your API, send the parameters, get the results and show them on the screen:\n\n![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-05-swagger-04.png)\n\n### Alternative API docs upgrade\n\nAnd now, go to [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc).\n\n* The alternative documentation will also reflect the new query parameter and body:\n\n![ReDoc](https://fastapi.tiangolo.com/img/index/index-06-redoc-02.png)\n\n### Recap\n\nIn summary, you declare **once** the types of parameters, body, etc. as function parameters.\n\nYou do that with standard modern Python types.\n\nYou don't have to learn a new syntax, the methods or classes of a specific library, etc.\n\nJust standard **Python**.\n\nFor example, for an `int`:\n\n```Python\nitem_id: int\n```\n\nor for a more complex `Item` model:\n\n```Python\nitem: Item\n```\n\n...and with that single declaration you get:\n\n* Editor support, including:\n * Completion.\n * Type checks.\n* Validation of data:\n * Automatic and clear errors when the data is invalid.\n * Validation even for deeply nested JSON objects.\n* Conversion of input data: coming from the network to Python data and types. Reading from:\n * JSON.\n * Path parameters.\n * Query parameters.\n * Cookies.\n * Headers.\n * Forms.\n * Files.\n* Conversion of output data: converting from Python data and types to network data (as JSON):\n * Convert Python types (`str`, `int`, `float`, `bool`, `list`, etc).\n * `datetime` objects.\n * `UUID` objects.\n * Database models.\n * ...and many more.\n* Automatic interactive API documentation, including 2 alternative user interfaces:\n * Swagger UI.\n * ReDoc.\n\n---\n\nComing back to the previous code example, **FastAPI** will:\n\n* Validate that there is an `item_id` in the path for `GET` and `PUT` requests.\n* Validate that the `item_id` is of type `int` for `GET` and `PUT` requests.\n * If it is not, the client will see a useful, clear error.\n* Check if there is an optional query parameter named `q` (as in `http://127.0.0.1:8000/items/foo?q=somequery`) for `GET` requests.\n * As the `q` parameter is declared with `= None`, it is optional.\n * Without the `None` it would be required (as is the body in the case with `PUT`).\n* For `PUT` requests to `/items/{item_id}`, read the body as JSON:\n * Check that it has a required attribute `name` that should be a `str`.\n * Check that it has a required attribute `price` that has to be a `float`.\n * Check that it has an optional attribute `is_offer`, that should be a `bool`, if present.\n * All this would also work for deeply nested JSON objects.\n* Convert from and to JSON automatically.\n* Document everything with OpenAPI, that can be used by:\n * Interactive documentation systems.\n * Automatic client code generation systems, for many languages.\n* Provide 2 interactive documentation web interfaces directly.\n\n---\n\nWe just scratched the surface, but you already get the idea of how it all works.\n\nTry changing the line with:\n\n```Python\n return {\"item_name\": item.name, \"item_id\": item_id}\n```\n\n...from:\n\n```Python\n ... \"item_name\": item.name ...\n```\n\n...to:\n\n```Python\n ... \"item_price\": item.price ...\n```\n\n...and see how your editor will auto-complete the attributes and know their types:\n\n![editor support](https://fastapi.tiangolo.com/img/vscode-completion.png)\n\nFor a more complete example including more features, see the Tutorial - User Guide.\n\n**Spoiler alert**: the tutorial - user guide includes:\n\n* Declaration of **parameters** from other different places such as: **headers**, **cookies**, **form fields** and **files**.\n* How to set **validation constraints** such as `maximum_length` or `regex`.\n* A very powerful and easy to use **Dependency Injection** system.\n* Security and authentication, including support for **OAuth2** with **JWT tokens** and **HTTP Basic** auth.\n* More advanced (but equally easy) techniques for declaring **deeply nested JSON models** (thanks to Pydantic).\n* **GraphQL** integration with [Strawberry](https://strawberry.rocks) and other libraries.\n* Many extra features (thanks to Starlette) such as:\n * **WebSockets**\n * extremely easy tests based on HTTPX and `pytest`\n * **CORS**\n * **Cookie Sessions**\n * ...and more.\n\n### Deploy your app (optional)\n\nYou can optionally deploy your FastAPI app to [FastAPI Cloud](https://fastapicloud.com) with a single command. 🚀\n\n
\n\n```console\n$ uv run fastapi deploy\n\nDeploying to FastAPI Cloud...\n\n✅ Deployment successful!\n\n🐔 Ready the chicken! Your app is ready at https://myapp.fastapicloud.dev\n```\n\n
\n\nThe CLI will automatically detect your FastAPI application and deploy it to the cloud. If you are not logged in, your browser will open to complete the authentication process.\n\nThat's it! Now you can access your app at that URL. ✨\n\n#### About FastAPI Cloud\n\n**[FastAPI Cloud](https://fastapicloud.com)** is built by the same author and team behind **FastAPI**.\n\nIt streamlines the process of **building**, **deploying**, and **accessing** an API with minimal effort.\n\nIt brings the same **developer experience** of building apps with FastAPI to **deploying** them to the cloud. 🎉\n\nFastAPI Cloud is the primary sponsor and funding provider for the *FastAPI and friends* open source projects. ✨\n\n#### Deploy to other cloud providers\n\nFastAPI is open source and based on standards. You can deploy FastAPI apps to any cloud provider you choose.\n\nFollow your cloud provider's guides to deploy FastAPI apps with them. 🤓\n\n## Performance\n\nIndependent TechEmpower benchmarks show **FastAPI** applications running under Uvicorn as [one of the fastest Python frameworks available](https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7), only below Starlette and Uvicorn themselves (used internally by FastAPI). (*)\n\nTo understand more about it, see the section [Benchmarks](https://fastapi.tiangolo.com/benchmarks/).\n\n## Dependencies\n\nFastAPI depends on Pydantic and Starlette.\n\n### `standard` Dependencies\n\nWhen you install FastAPI with `uv add \"fastapi[standard]\"` it comes with the `standard` group of optional dependencies:\n\nUsed by Pydantic:\n\n* [`email-validator`](https://github.com/JoshData/python-email-validator) - for email validation.\n\nUsed by Starlette:\n\n* [`httpx`](https://www.python-httpx.org) - Required if you want to use the `TestClient`.\n* [`jinja2`](https://jinja.palletsprojects.com) - Required if you want to use the default template configuration.\n* [`python-multipart`](https://github.com/Kludex/python-multipart) - Required if you want to support form \"parsing\", with `request.form()`.\n\nUsed by FastAPI:\n\n* [`uvicorn`](https://uvicorn.dev) - for the server that loads and serves your application. This includes `uvicorn[standard]`, which includes some dependencies (e.g. `uvloop`) needed for high performance serving.\n* `fastapi-cli[standard]` - to provide the `fastapi` command.\n * This includes `fastapi-cloud-cli`, which allows you to deploy your FastAPI application to [FastAPI Cloud](https://fastapicloud.com).\n\n### Without `standard` Dependencies\n\nIf you don't want to include the `standard` optional dependencies, you can install with `uv add fastapi` instead of `uv add \"fastapi[standard]\"`.\n\n### Without `fastapi-cloud-cli`\n\nIf you want to install FastAPI with the standard dependencies but without the `fastapi-cloud-cli`, you can install with `uv add \"fastapi[standard-no-fastapi-cloud-cli]\"`.\n\n### Additional Optional Dependencies\n\nThere are some additional dependencies you might want to install.\n\nAdditional optional Pydantic dependencies:\n\n* [`pydantic-settings`](https://pydantic.dev/docs/validation/latest/concepts/pydantic_settings/) - for settings management.\n* [`pydantic-extra-types`](https://github.com/pydantic/pydantic-extra-types) - for extra types to be used with Pydantic.\n\nAdditional optional FastAPI dependencies:\n\n* [`orjson`](https://github.com/ijl/orjson) - Required if you want to use `ORJSONResponse`.\n* [`ujson`](https://github.com/ultrajson/ultrajson) - Required if you want to use `UJSONResponse`.\n\n## License\n\nThis project is licensed under the terms of the MIT license.\n", + "description_content_type": "text/markdown", + "author_email": "=?utf-8?q?Sebasti=C3=A1n_Ram=C3=ADrez?= ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Intended Audience :: Information Technology", + "Intended Audience :: System Administrators", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python", + "Topic :: Internet", + "Topic :: Software Development :: Libraries :: Application Frameworks", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Software Development :: Libraries", + "Topic :: Software Development", + "Typing :: Typed", + "Development Status :: 4 - Beta", + "Environment :: Web Environment", + "Framework :: AsyncIO", + "Framework :: FastAPI", + "Framework :: Pydantic", + "Framework :: Pydantic :: 2", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Topic :: Internet :: WWW/HTTP :: HTTP Servers", + "Topic :: Internet :: WWW/HTTP" + ], + "requires_dist": [ + "starlette>=0.46.0", + "pydantic>=2.9.0", + "typing-extensions>=4.8.0", + "typing-inspection>=0.4.2", + "annotated-doc>=0.0.2", + "fastapi-cli[standard]>=0.0.32; extra == \"standard\"", + "fastar>=0.9.0; extra == \"standard\"", + "httpx<1.0.0,>=0.23.0; extra == \"standard\"", + "jinja2>=3.1.5; extra == \"standard\"", + "python-multipart>=0.0.18; extra == \"standard\"", + "email-validator>=2.0.0; extra == \"standard\"", + "uvicorn[standard]>=0.12.0; extra == \"standard\"", + "pydantic-settings>=2.0.0; extra == \"standard\"", + "pydantic-extra-types>=2.0.0; extra == \"standard\"", + "fastapi-cli[standard-no-fastapi-cloud-cli]>=0.0.32; extra == \"standard-no-fastapi-cloud-cli\"", + "httpx<1.0.0,>=0.23.0; extra == \"standard-no-fastapi-cloud-cli\"", + "jinja2>=3.1.5; extra == \"standard-no-fastapi-cloud-cli\"", + "python-multipart>=0.0.18; extra == \"standard-no-fastapi-cloud-cli\"", + "email-validator>=2.0.0; extra == \"standard-no-fastapi-cloud-cli\"", + "uvicorn[standard]>=0.12.0; extra == \"standard-no-fastapi-cloud-cli\"", + "pydantic-settings>=2.0.0; extra == \"standard-no-fastapi-cloud-cli\"", + "pydantic-extra-types>=2.0.0; extra == \"standard-no-fastapi-cloud-cli\"", + "fastapi-cli[standard]>=0.0.32; extra == \"all\"", + "httpx<1.0.0,>=0.23.0; extra == \"all\"", + "jinja2>=3.1.5; extra == \"all\"", + "python-multipart>=0.0.18; extra == \"all\"", + "itsdangerous>=1.1.0; extra == \"all\"", + "pyyaml>=5.3.1; extra == \"all\"", + "email-validator>=2.0.0; extra == \"all\"", + "uvicorn[standard]>=0.12.0; extra == \"all\"", + "pydantic-settings>=2.0.0; extra == \"all\"", + "pydantic-extra-types>=2.0.0; extra == \"all\"" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://github.com/fastapi/fastapi", + "Documentation, https://fastapi.tiangolo.com/", + "Repository, https://github.com/fastapi/fastapi", + "Issues, https://github.com/fastapi/fastapi/issues", + "Changelog, https://fastapi.tiangolo.com/release-notes/" + ], + "provides_extra": [ + "standard", + "standard-no-fastapi-cloud-cli", + "all" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/38/0c/b54a4fdd7f90a3af8b02ebc9ce6712c2c208b7926a2f7bad95c33ebbe943/uvicorn-0.54.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf" + }, + "hash": "sha256=505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.5", + "name": "uvicorn", + "version": "0.54.0", + "summary": "The lightning-fast ASGI server.", + "description": "

\n uvicorn\n

\n\n

\nAn ASGI web server, for Python.\n

\n\n---\n\n[![Build Status](https://github.com/Kludex/uvicorn/workflows/Test%20Suite/badge.svg)](https://github.com/Kludex/uvicorn/actions)\n[![Package version](https://badge.fury.io/py/uvicorn.svg)](https://pypi.python.org/pypi/uvicorn)\n[![Supported Python Version](https://img.shields.io/pypi/pyversions/uvicorn.svg?color=%2334D058)](https://pypi.org/project/uvicorn)\n[![Discord](https://img.shields.io/discord/1051468649518616576?logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2)](https://discord.gg/RxKUF5JuHs)\n\n---\n\n**Documentation**: [https://uvicorn.dev](https://uvicorn.dev)\n\n**Source Code**: [https://www.github.com/Kludex/uvicorn](https://www.github.com/Kludex/uvicorn)\n\n---\n\nUvicorn is an ASGI web server implementation for Python.\n\nUntil recently Python has lacked a minimal low-level server/application interface for\nasync frameworks. The [ASGI specification][asgi] fills this gap, and means we're now able to\nstart building a common set of tooling usable across all async frameworks.\n\nUvicorn currently supports HTTP/1.1, HTTP/2 and WebSockets.\n\n## Quickstart\n\nInstall using `pip`:\n\n```shell\n$ pip install uvicorn\n```\n\nThis will install uvicorn with minimal (pure Python) dependencies.\n\n```shell\n$ pip install 'uvicorn[standard]'\n```\n\nThis will install uvicorn with \"Cython-based\" dependencies (where possible) and other \"optional extras\".\n\nIn this context, \"Cython-based\" means the following:\n\n- the event loop `uvloop` will be installed and used if possible.\n- the http protocol will be handled by `httptools` if possible.\n\nMoreover, \"optional extras\" means that:\n\n- the websocket protocol will be handled by `websockets` (should you want to use `wsproto` you'd need to install it manually) if possible.\n- the `--reload` flag in development mode will use `watchfiles`.\n- `python-dotenv` will be installed should you want to use the `--env-file` option.\n- `PyYAML` will be installed to allow you to provide a `.yaml` file to `--log-config`, if desired.\n\nCreate an application, in `example.py`:\n\n```python\nasync def app(scope, receive, send):\n assert scope['type'] == 'http'\n\n await send({\n 'type': 'http.response.start',\n 'status': 200,\n 'headers': [\n (b'content-type', b'text/plain'),\n ],\n })\n await send({\n 'type': 'http.response.body',\n 'body': b'Hello, world!',\n })\n```\n\nRun the server:\n\n```shell\n$ uvicorn example:app\n```\n\n---\n\n## Why ASGI?\n\nMost well established Python Web frameworks started out as WSGI-based frameworks.\n\nWSGI applications are a single, synchronous callable that takes a request and returns a response.\nThis doesn’t allow for long-lived connections, like you get with long-poll HTTP or WebSocket connections,\nwhich WSGI doesn't support well.\n\nHaving an async concurrency model also allows for options such as lightweight background tasks,\nand can be less of a limiting factor for endpoints that have long periods being blocked on network\nI/O such as dealing with slow HTTP requests.\n\n---\n\n## Alternative ASGI servers\n\nA strength of the ASGI protocol is that it decouples the server implementation\nfrom the application framework. This allows for an ecosystem of interoperating\nwebservers and application frameworks.\n\n### Daphne\n\nThe first ASGI server implementation, originally developed to power Django Channels, is [the Daphne webserver][daphne].\n\nIt is run widely in production, and supports HTTP/1.1, HTTP/2, and WebSockets.\n\nAny of the example applications given here can equally well be run using `daphne` instead.\n\n```\n$ pip install daphne\n$ daphne app:App\n```\n\n### Hypercorn\n\n[Hypercorn][hypercorn] was initially part of the Quart web framework, before\nbeing separated out into a standalone ASGI server.\n\nHypercorn supports HTTP/1.1, HTTP/2, and WebSockets.\n\nIt also supports [the excellent `trio` async framework][trio], as an alternative to `asyncio`.\n\n```\n$ pip install hypercorn\n$ hypercorn app:App\n```\n\n### Mangum\n\n[Mangum][mangum] is an adapter for using ASGI applications with AWS Lambda & API Gateway.\n\n### Granian\n\n[Granian][granian] is an ASGI compatible Rust HTTP server which supports HTTP/2, TLS and WebSockets.\n\n---\n\n

Uvicorn is BSD licensed code.
Designed & crafted with care.

— 🦄 —

\n\n[asgi]: https://asgi.readthedocs.io/en/latest/\n[daphne]: https://github.com/django/daphne\n[hypercorn]: https://github.com/pgjones/hypercorn\n[trio]: https://trio.readthedocs.io\n[mangum]: https://github.com/jordaneremieff/mangum\n[granian]: https://github.com/emmett-framework/granian\n", + "description_content_type": "text/markdown", + "author_email": "Tom Christie ", + "maintainer_email": "Marcelo Trylesinski ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.md" + ], + "classifier": [ + "Development Status :: 4 - Beta", + "Environment :: Web Environment", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Internet :: WWW/HTTP" + ], + "requires_dist": [ + "click>=7.0", + "h11>=0.8", + "typing-extensions>=4.0; python_version < '3.11'", + "httptools>=0.8.0; extra == 'standard'", + "python-dotenv>=0.13; extra == 'standard'", + "pyyaml>=5.1; extra == 'standard'", + "uvloop>=0.15.1; (sys_platform != 'win32' and (sys_platform != 'cygwin' and platform_python_implementation != 'PyPy')) and extra == 'standard'", + "watchfiles>=0.20; extra == 'standard'", + "websockets>=13.0; extra == 'standard'" + ], + "requires_python": ">=3.10", + "project_url": [ + "Changelog, https://uvicorn.dev/release-notes", + "Funding, https://github.com/sponsors/Kludex", + "Homepage, https://uvicorn.dev/", + "Source, https://github.com/Kludex/uvicorn" + ], + "provides_extra": [ + "standard" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", + "archive_info": { + "hashes": { + "sha256": "076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9" + }, + "hash": "sha256=076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "psutil", + "version": "7.2.2", + "platform": [ + "Platform Independent" + ], + "summary": "Cross-platform lib for process and system monitoring.", + "description": "| |downloads| |stars| |forks| |contributors| |packages|\n| |version| |license| |stackoverflow| |twitter| |tidelift|\n| |github-actions-wheels| |github-actions-bsd|\n\n.. |downloads| image:: https://img.shields.io/pypi/dm/psutil.svg\n :target: https://clickpy.clickhouse.com/dashboard/psutil\n :alt: Downloads\n\n.. |stars| image:: https://img.shields.io/github/stars/giampaolo/psutil.svg\n :target: https://github.com/giampaolo/psutil/stargazers\n :alt: Github stars\n\n.. |forks| image:: https://img.shields.io/github/forks/giampaolo/psutil.svg\n :target: https://github.com/giampaolo/psutil/network/members\n :alt: Github forks\n\n.. |contributors| image:: https://img.shields.io/github/contributors/giampaolo/psutil.svg\n :target: https://github.com/giampaolo/psutil/graphs/contributors\n :alt: Contributors\n\n.. |stackoverflow| image:: https://img.shields.io/badge/stackoverflow-Ask%20questions-blue.svg\n :target: https://stackoverflow.com/questions/tagged/psutil\n :alt: Stackoverflow\n\n.. |github-actions-wheels| image:: https://img.shields.io/github/actions/workflow/status/giampaolo/psutil/.github/workflows/build.yml.svg?label=Linux%2C%20macOS%2C%20Windows\n :target: https://github.com/giampaolo/psutil/actions?query=workflow%3Abuild\n :alt: Linux, macOS, Windows\n\n.. |github-actions-bsd| image:: https://img.shields.io/github/actions/workflow/status/giampaolo/psutil/.github/workflows/bsd.yml.svg?label=FreeBSD,%20NetBSD,%20OpenBSD\n :target: https://github.com/giampaolo/psutil/actions?query=workflow%3Absd-tests\n :alt: FreeBSD, NetBSD, OpenBSD\n\n.. |version| image:: https://img.shields.io/pypi/v/psutil.svg?label=pypi\n :target: https://pypi.org/project/psutil\n :alt: Latest version\n\n.. |packages| image:: https://repology.org/badge/tiny-repos/python:psutil.svg\n :target: https://repology.org/metapackage/python:psutil/versions\n :alt: Binary packages\n\n.. |license| image:: https://img.shields.io/pypi/l/psutil.svg\n :target: https://github.com/giampaolo/psutil/blob/master/LICENSE\n :alt: License\n\n.. |twitter| image:: https://img.shields.io/twitter/follow/grodola?style=flat\n :target: https://twitter.com/grodola\n :alt: Twitter Follow\n\n.. |tidelift| image:: https://tidelift.com/badges/github/giampaolo/psutil?style=flat\n :target: https://tidelift.com/subscription/pkg/pypi-psutil?utm_source=pypi-psutil&utm_medium=referral&utm_campaign=readme\n :alt: Tidelift\n\n-----\n\nQuick links\n===========\n\n- `Home page `_\n- `Install `_\n- `Documentation `_\n- `Download `_\n- `Forum `_\n- `StackOverflow `_\n- `Blog `_\n- `What's new `_\n\n\nSummary\n=======\n\npsutil (process and system utilities) is a cross-platform library for\nretrieving information on **running processes** and **system utilization**\n(CPU, memory, disks, network, sensors) in Python.\nIt is useful mainly for **system monitoring**, **profiling and limiting process\nresources** and **management of running processes**.\nIt implements many functionalities offered by classic UNIX command line tools\nsuch as *ps, top, iotop, lsof, netstat, ifconfig, free* and others.\npsutil currently supports the following platforms:\n\n- **Linux**\n- **Windows**\n- **macOS**\n- **FreeBSD, OpenBSD**, **NetBSD**\n- **Sun Solaris**\n- **AIX**\n\nSupported Python versions are cPython 3.6+ and `PyPy `__.\nLatest psutil version supporting Python 2.7 is\n`psutil 6.1.1 `__.\n\nExample usages\n==============\n\nThis represents pretty much the whole psutil API.\n\nCPU\n---\n\n.. code-block:: python\n\n >>> import psutil\n >>>\n >>> psutil.cpu_times()\n scputimes(user=3961.46, nice=169.729, system=2150.659, idle=16900.540, iowait=629.59, irq=0.0, softirq=19.42, steal=0.0, guest=0, guest_nice=0.0)\n >>>\n >>> for x in range(3):\n ... psutil.cpu_percent(interval=1)\n ...\n 4.0\n 5.9\n 3.8\n >>>\n >>> for x in range(3):\n ... psutil.cpu_percent(interval=1, percpu=True)\n ...\n [4.0, 6.9, 3.7, 9.2]\n [7.0, 8.5, 2.4, 2.1]\n [1.2, 9.0, 9.9, 7.2]\n >>>\n >>> for x in range(3):\n ... psutil.cpu_times_percent(interval=1, percpu=False)\n ...\n scputimes(user=1.5, nice=0.0, system=0.5, idle=96.5, iowait=1.5, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)\n scputimes(user=1.0, nice=0.0, system=0.0, idle=99.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)\n scputimes(user=2.0, nice=0.0, system=0.0, idle=98.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)\n >>>\n >>> psutil.cpu_count()\n 4\n >>> psutil.cpu_count(logical=False)\n 2\n >>>\n >>> psutil.cpu_stats()\n scpustats(ctx_switches=20455687, interrupts=6598984, soft_interrupts=2134212, syscalls=0)\n >>>\n >>> psutil.cpu_freq()\n scpufreq(current=931.42925, min=800.0, max=3500.0)\n >>>\n >>> psutil.getloadavg() # also on Windows (emulated)\n (3.14, 3.89, 4.67)\n\nMemory\n------\n\n.. code-block:: python\n\n >>> psutil.virtual_memory()\n svmem(total=10367352832, available=6472179712, percent=37.6, used=8186245120, free=2181107712, active=4748992512, inactive=2758115328, buffers=790724608, cached=3500347392, shared=787554304)\n >>> psutil.swap_memory()\n sswap(total=2097147904, used=296128512, free=1801019392, percent=14.1, sin=304193536, sout=677842944)\n >>>\n\nDisks\n-----\n\n.. code-block:: python\n\n >>> psutil.disk_partitions()\n [sdiskpart(device='/dev/sda1', mountpoint='/', fstype='ext4', opts='rw,nosuid'),\n sdiskpart(device='/dev/sda2', mountpoint='/home', fstype='ext', opts='rw')]\n >>>\n >>> psutil.disk_usage('/')\n sdiskusage(total=21378641920, used=4809781248, free=15482871808, percent=22.5)\n >>>\n >>> psutil.disk_io_counters(perdisk=False)\n sdiskio(read_count=719566, write_count=1082197, read_bytes=18626220032, write_bytes=24081764352, read_time=5023392, write_time=63199568, read_merged_count=619166, write_merged_count=812396, busy_time=4523412)\n >>>\n\nNetwork\n-------\n\n.. code-block:: python\n\n >>> psutil.net_io_counters(pernic=True)\n {'eth0': netio(bytes_sent=485291293, bytes_recv=6004858642, packets_sent=3251564, packets_recv=4787798, errin=0, errout=0, dropin=0, dropout=0),\n 'lo': netio(bytes_sent=2838627, bytes_recv=2838627, packets_sent=30567, packets_recv=30567, errin=0, errout=0, dropin=0, dropout=0)}\n >>>\n >>> psutil.net_connections(kind='tcp')\n [sconn(fd=115, family=, type=, laddr=addr(ip='10.0.0.1', port=48776), raddr=addr(ip='93.186.135.91', port=80), status='ESTABLISHED', pid=1254),\n sconn(fd=117, family=, type=, laddr=addr(ip='10.0.0.1', port=43761), raddr=addr(ip='72.14.234.100', port=80), status='CLOSING', pid=2987),\n ...]\n >>>\n >>> psutil.net_if_addrs()\n {'lo': [snicaddr(family=, address='127.0.0.1', netmask='255.0.0.0', broadcast='127.0.0.1', ptp=None),\n snicaddr(family=, address='::1', netmask='ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', broadcast=None, ptp=None),\n snicaddr(family=, address='00:00:00:00:00:00', netmask=None, broadcast='00:00:00:00:00:00', ptp=None)],\n 'wlan0': [snicaddr(family=, address='192.168.1.3', netmask='255.255.255.0', broadcast='192.168.1.255', ptp=None),\n snicaddr(family=, address='fe80::c685:8ff:fe45:641%wlan0', netmask='ffff:ffff:ffff:ffff::', broadcast=None, ptp=None),\n snicaddr(family=, address='c4:85:08:45:06:41', netmask=None, broadcast='ff:ff:ff:ff:ff:ff', ptp=None)]}\n >>>\n >>> psutil.net_if_stats()\n {'lo': snicstats(isup=True, duplex=, speed=0, mtu=65536, flags='up,loopback,running'),\n 'wlan0': snicstats(isup=True, duplex=, speed=100, mtu=1500, flags='up,broadcast,running,multicast')}\n >>>\n\nSensors\n-------\n\n.. code-block:: python\n\n >>> import psutil\n >>> psutil.sensors_temperatures()\n {'acpitz': [shwtemp(label='', current=47.0, high=103.0, critical=103.0)],\n 'asus': [shwtemp(label='', current=47.0, high=None, critical=None)],\n 'coretemp': [shwtemp(label='Physical id 0', current=52.0, high=100.0, critical=100.0),\n shwtemp(label='Core 0', current=45.0, high=100.0, critical=100.0)]}\n >>>\n >>> psutil.sensors_fans()\n {'asus': [sfan(label='cpu_fan', current=3200)]}\n >>>\n >>> psutil.sensors_battery()\n sbattery(percent=93, secsleft=16628, power_plugged=False)\n >>>\n\nOther system info\n-----------------\n\n.. code-block:: python\n\n >>> import psutil\n >>> psutil.users()\n [suser(name='giampaolo', terminal='pts/2', host='localhost', started=1340737536.0, pid=1352),\n suser(name='giampaolo', terminal='pts/3', host='localhost', started=1340737792.0, pid=1788)]\n >>>\n >>> psutil.boot_time()\n 1365519115.0\n >>>\n\nProcess management\n------------------\n\n.. code-block:: python\n\n >>> import psutil\n >>> psutil.pids()\n [1, 2, 3, 4, 5, 6, 7, 46, 48, 50, 51, 178, 182, 222, 223, 224, 268, 1215,\n 1216, 1220, 1221, 1243, 1244, 1301, 1601, 2237, 2355, 2637, 2774, 3932,\n 4176, 4177, 4185, 4187, 4189, 4225, 4243, 4245, 4263, 4282, 4306, 4311,\n 4312, 4313, 4314, 4337, 4339, 4357, 4358, 4363, 4383, 4395, 4408, 4433,\n 4443, 4445, 4446, 5167, 5234, 5235, 5252, 5318, 5424, 5644, 6987, 7054,\n 7055, 7071]\n >>>\n >>> p = psutil.Process(7055)\n >>> p\n psutil.Process(pid=7055, name='python3', status='running', started='09:04:44')\n >>> p.pid\n 7055\n >>> p.name()\n 'python3'\n >>> p.exe()\n '/usr/bin/python3'\n >>> p.cwd()\n '/home/giampaolo'\n >>> p.cmdline()\n ['/usr/bin/python3', 'main.py']\n >>>\n >>> p.ppid()\n 7054\n >>> p.parent()\n psutil.Process(pid=4699, name='bash', status='sleeping', started='09:06:44')\n >>> p.parents()\n [psutil.Process(pid=4699, name='bash', started='09:06:44'),\n psutil.Process(pid=4689, name='gnome-terminal-server', status='sleeping', started='0:06:44'),\n psutil.Process(pid=1, name='systemd', status='sleeping', started='05:56:55')]\n >>> p.children(recursive=True)\n [psutil.Process(pid=29835, name='python3', status='sleeping', started='11:45:38'),\n psutil.Process(pid=29836, name='python3', status='waking', started='11:43:39')]\n >>>\n >>> p.status()\n 'running'\n >>> p.create_time()\n 1267551141.5019531\n >>> p.terminal()\n '/dev/pts/0'\n >>>\n >>> p.username()\n 'giampaolo'\n >>> p.uids()\n puids(real=1000, effective=1000, saved=1000)\n >>> p.gids()\n pgids(real=1000, effective=1000, saved=1000)\n >>>\n >>> p.cpu_times()\n pcputimes(user=1.02, system=0.31, children_user=0.32, children_system=0.1, iowait=0.0)\n >>> p.cpu_percent(interval=1.0)\n 12.1\n >>> p.cpu_affinity()\n [0, 1, 2, 3]\n >>> p.cpu_affinity([0, 1]) # set\n >>> p.cpu_num()\n 1\n >>>\n >>> p.memory_info()\n pmem(rss=10915840, vms=67608576, shared=3313664, text=2310144, lib=0, data=7262208, dirty=0)\n >>> p.memory_full_info() # \"real\" USS memory usage (Linux, macOS, Win only)\n pfullmem(rss=10199040, vms=52133888, shared=3887104, text=2867200, lib=0, data=5967872, dirty=0, uss=6545408, pss=6872064, swap=0)\n >>> p.memory_percent()\n 0.7823\n >>> p.memory_maps()\n [pmmap_grouped(path='/lib/x8664-linux-gnu/libutil-2.15.so', rss=32768, size=2125824, pss=32768, shared_clean=0, shared_dirty=0, private_clean=20480, private_dirty=12288, referenced=32768, anonymous=12288, swap=0),\n pmmap_grouped(path='/lib/x8664-linux-gnu/libc-2.15.so', rss=3821568, size=3842048, pss=3821568, shared_clean=0, shared_dirty=0, private_clean=0, private_dirty=3821568, referenced=3575808, anonymous=3821568, swap=0),\n pmmap_grouped(path='[heap]', rss=32768, size=139264, pss=32768, shared_clean=0, shared_dirty=0, private_clean=0, private_dirty=32768, referenced=32768, anonymous=32768, swap=0),\n pmmap_grouped(path='[stack]', rss=2465792, size=2494464, pss=2465792, shared_clean=0, shared_dirty=0, private_clean=0, private_dirty=2465792, referenced=2277376, anonymous=2465792, swap=0),\n ...]\n >>>\n >>> p.io_counters()\n pio(read_count=478001, write_count=59371, read_bytes=700416, write_bytes=69632, read_chars=456232, write_chars=517543)\n >>>\n >>> p.open_files()\n [popenfile(path='/home/giampaolo/monit.py', fd=3, position=0, mode='r', flags=32768),\n popenfile(path='/var/log/monit.log', fd=4, position=235542, mode='a', flags=33793)]\n >>>\n >>> p.net_connections(kind='tcp')\n [pconn(fd=115, family=, type=, laddr=addr(ip='10.0.0.1', port=48776), raddr=addr(ip='93.186.135.91', port=80), status='ESTABLISHED'),\n pconn(fd=117, family=, type=, laddr=addr(ip='10.0.0.1', port=43761), raddr=addr(ip='72.14.234.100', port=80), status='CLOSING')]\n >>>\n >>> p.threads()\n [pthread(id=5234, user_time=22.5, system_time=9.2891),\n pthread(id=5237, user_time=0.0707, system_time=1.1)]\n >>>\n >>> p.num_threads()\n 4\n >>> p.num_fds()\n 8\n >>> p.num_ctx_switches()\n pctxsw(voluntary=78, involuntary=19)\n >>>\n >>> p.nice()\n 0\n >>> p.nice(10) # set\n >>>\n >>> p.ionice(psutil.IOPRIO_CLASS_IDLE) # IO priority (Win and Linux only)\n >>> p.ionice()\n pionice(ioclass=, value=0)\n >>>\n >>> p.rlimit(psutil.RLIMIT_NOFILE, (5, 5)) # set resource limits (Linux only)\n >>> p.rlimit(psutil.RLIMIT_NOFILE)\n (5, 5)\n >>>\n >>> p.environ()\n {'LC_PAPER': 'it_IT.UTF-8', 'SHELL': '/bin/bash', 'GREP_OPTIONS': '--color=auto',\n 'XDG_CONFIG_DIRS': '/etc/xdg/xdg-ubuntu:/usr/share/upstart/xdg:/etc/xdg',\n ...}\n >>>\n >>> p.as_dict()\n {'status': 'running', 'num_ctx_switches': pctxsw(voluntary=63, involuntary=1), 'pid': 5457, ...}\n >>> p.is_running()\n True\n >>> p.suspend()\n >>> p.resume()\n >>>\n >>> p.terminate()\n >>> p.kill()\n >>> p.wait(timeout=3)\n \n >>>\n >>> psutil.test()\n USER PID %CPU %MEM VSZ RSS TTY START TIME COMMAND\n root 1 0.0 0.0 24584 2240 Jun17 00:00 init\n root 2 0.0 0.0 0 0 Jun17 00:00 kthreadd\n ...\n giampaolo 31475 0.0 0.0 20760 3024 /dev/pts/0 Jun19 00:00 python2.4\n giampaolo 31721 0.0 2.2 773060 181896 00:04 10:30 chrome\n root 31763 0.0 0.0 0 0 00:05 00:00 kworker/0:1\n >>>\n\nFurther process APIs\n--------------------\n\n.. code-block:: python\n\n >>> import psutil\n >>> for proc in psutil.process_iter(['pid', 'name']):\n ... print(proc.info)\n ...\n {'pid': 1, 'name': 'systemd'}\n {'pid': 2, 'name': 'kthreadd'}\n {'pid': 3, 'name': 'ksoftirqd/0'}\n ...\n >>>\n >>> psutil.pid_exists(3)\n True\n >>>\n >>> def on_terminate(proc):\n ... print(\"process {} terminated\".format(proc))\n ...\n >>> # waits for multiple processes to terminate\n >>> gone, alive = psutil.wait_procs(procs_list, timeout=3, callback=on_terminate)\n >>>\n\nHeap info\n---------\n\n.. code-block:: python\n\n >>> import psutil\n >>> psutil.heap_info()\n pheap(heap_used=5177792, mmap_used=819200)\n >>> psutil.heap_trim()\n\nSee also `psleak `__\n\nWindows services\n----------------\n\n.. code-block:: python\n\n >>> list(psutil.win_service_iter())\n [,\n ,\n ,\n ,\n ...]\n >>> s = psutil.win_service_get('alg')\n >>> s.as_dict()\n {'binpath': 'C:\\\\Windows\\\\System32\\\\alg.exe',\n 'description': 'Provides support for 3rd party protocol plug-ins for Internet Connection Sharing',\n 'display_name': 'Application Layer Gateway Service',\n 'name': 'alg',\n 'pid': None,\n 'start_type': 'manual',\n 'status': 'stopped',\n 'username': 'NT AUTHORITY\\\\LocalService'}\n\nProjects using psutil\n=====================\n\nHere's some I find particularly interesting:\n\n- https://github.com/giampaolo/psleak\n- https://github.com/google/grr\n- https://github.com/facebook/osquery/\n- https://github.com/nicolargo/glances\n- https://github.com/aristocratos/bpytop\n- https://github.com/Jahaja/psdash\n- https://github.com/ajenti/ajenti\n- https://github.com/home-assistant/home-assistant/\n\nPortings\n========\n\n- Go: https://github.com/shirou/gopsutil\n- C: https://github.com/hamon-in/cpslib\n- Rust: https://github.com/rust-psutil/rust-psutil\n- Nim: https://github.com/johnscillieri/psutil-nim\n\n\n\n", + "description_content_type": "text/x-rst", + "keywords": [ + "ps", + "top", + "kill", + "free", + "lsof", + "netstat", + "nice", + "tty", + "ionice", + "uptime", + "taskmgr", + "process", + "df", + "iotop", + "iostat", + "ifconfig", + "taskset", + "who", + "pidof", + "pmap", + "smem", + "pstree", + "monitoring", + "ulimit", + "prlimit", + "smem", + "performance", + "metrics", + "agent", + "observability" + ], + "home_page": "https://github.com/giampaolo/psutil", + "author": "Giampaolo Rodola", + "author_email": "g.rodola@gmail.com", + "license": "BSD-3-Clause", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Environment :: Console", + "Intended Audience :: Developers", + "Intended Audience :: Information Technology", + "Intended Audience :: System Administrators", + "Operating System :: MacOS :: MacOS X", + "Operating System :: Microsoft :: Windows :: Windows 10", + "Operating System :: Microsoft :: Windows :: Windows 11", + "Operating System :: Microsoft :: Windows :: Windows 7", + "Operating System :: Microsoft :: Windows :: Windows 8", + "Operating System :: Microsoft :: Windows :: Windows 8.1", + "Operating System :: Microsoft :: Windows :: Windows Server 2003", + "Operating System :: Microsoft :: Windows :: Windows Server 2008", + "Operating System :: Microsoft :: Windows :: Windows Vista", + "Operating System :: Microsoft :: Windows", + "Operating System :: Microsoft", + "Operating System :: OS Independent", + "Operating System :: POSIX :: AIX", + "Operating System :: POSIX :: BSD :: FreeBSD", + "Operating System :: POSIX :: BSD :: NetBSD", + "Operating System :: POSIX :: BSD :: OpenBSD", + "Operating System :: POSIX :: BSD", + "Operating System :: POSIX :: Linux", + "Operating System :: POSIX :: SunOS/Solaris", + "Operating System :: POSIX", + "Programming Language :: C", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Programming Language :: Python", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Software Development :: Libraries", + "Topic :: System :: Benchmark", + "Topic :: System :: Hardware", + "Topic :: System :: Monitoring", + "Topic :: System :: Networking :: Monitoring :: Hardware Watchdog", + "Topic :: System :: Networking :: Monitoring", + "Topic :: System :: Networking", + "Topic :: System :: Operating System", + "Topic :: System :: Systems Administration", + "Topic :: Utilities" + ], + "requires_dist": [ + "psleak ; extra == 'dev'", + "pytest ; extra == 'dev'", + "pytest-instafail ; extra == 'dev'", + "pytest-xdist ; extra == 'dev'", + "setuptools ; extra == 'dev'", + "abi3audit ; extra == 'dev'", + "black ; extra == 'dev'", + "check-manifest ; extra == 'dev'", + "coverage ; extra == 'dev'", + "packaging ; extra == 'dev'", + "pylint ; extra == 'dev'", + "pyperf ; extra == 'dev'", + "pypinfo ; extra == 'dev'", + "pytest-cov ; extra == 'dev'", + "requests ; extra == 'dev'", + "rstcheck ; extra == 'dev'", + "ruff ; extra == 'dev'", + "sphinx ; extra == 'dev'", + "sphinx-rtd-theme ; extra == 'dev'", + "toml-sort ; extra == 'dev'", + "twine ; extra == 'dev'", + "validate-pyproject[all] ; extra == 'dev'", + "virtualenv ; extra == 'dev'", + "vulture ; extra == 'dev'", + "wheel ; extra == 'dev'", + "colorama ; (os_name == \"nt\") and extra == 'dev'", + "pyreadline3 ; (os_name == \"nt\") and extra == 'dev'", + "pywin32 ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'dev'", + "wheel ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'dev'", + "wmi ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'dev'", + "psleak ; extra == 'test'", + "pytest ; extra == 'test'", + "pytest-instafail ; extra == 'test'", + "pytest-xdist ; extra == 'test'", + "setuptools ; extra == 'test'", + "pywin32 ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'test'", + "wheel ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'test'", + "wmi ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'test'" + ], + "requires_python": ">=3.6", + "provides_extra": [ + "dev", + "test" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/5c/44/c85361f65dbe00eea8576ee467c768d25129989efb76e94f205e9ca9bb46/pillow-12.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", + "archive_info": { + "hashes": { + "sha256": "251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b" + }, + "hash": "sha256=251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.4", + "name": "pillow", + "version": "12.3.0", + "dynamic": [ + "license-file" + ], + "summary": "Python Imaging Library (fork)", + "description": "

\n \"Pillow\n

\n\n# Pillow\n\n## Python Imaging Library (Fork)\n\nPillow is the friendly PIL fork by [Jeffrey 'Alex' Clark and\ncontributors](https://github.com/python-pillow/Pillow/graphs/contributors).\nPIL is the Python Imaging Library by Fredrik Lundh and contributors.\nDevelopment is supported by:\n- [Tidelift](https://tidelift.com/subscription/pkg/pypi-pillow?utm_source=pypi-pillow&utm_medium=readme&utm_campaign=enterprise) (since 2018)\n- [Thanks.dev](https://thanks.dev) (since 2023)\n- [GitHub Sponsors](https://github.com/sponsors/python-pillow) (since 2026)\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
docs\n \n
tests\n \n \n \n \n \n \n \n \n
package\n \n \n \n \n \n
social\n \n \n
\n\n## Overview\n\nThe Python Imaging Library adds image processing capabilities to your Python interpreter.\n\nThis library provides extensive file format support, an efficient internal representation, and fairly powerful image processing capabilities.\n\nThe core image library is designed for fast access to data stored in a few basic pixel formats. It should provide a solid foundation for a general image processing tool.\n\n## More information\n\n- [Documentation](https://pillow.readthedocs.io/)\n - [Installation](https://pillow.readthedocs.io/en/latest/installation/basic-installation.html)\n - [Handbook](https://pillow.readthedocs.io/en/latest/handbook/index.html)\n- [Contribute](https://github.com/python-pillow/Pillow/blob/main/.github/CONTRIBUTING.md)\n - [Issues](https://github.com/python-pillow/Pillow/issues)\n - [Pull requests](https://github.com/python-pillow/Pillow/pulls)\n- [Release notes](https://pillow.readthedocs.io/en/stable/releasenotes/index.html)\n- [Changelog](https://github.com/python-pillow/Pillow/releases)\n - [Pre-fork](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst#pre-fork)\n\n## Report a vulnerability\n\nTo report sensitive vulnerability information, report it [privately on GitHub](https://github.com/python-pillow/Pillow/security/advisories/new).\n\nIf you cannot use GitHub, use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure.\n\nDO NOT report sensitive vulnerability information in public.\n", + "description_content_type": "text/markdown", + "keywords": [ + "Imaging" + ], + "author_email": "Jeffrey 'Alex' Clark ", + "license_expression": "MIT-CMU", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 6 - Mature", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Multimedia :: Graphics", + "Topic :: Multimedia :: Graphics :: Capture :: Digital Camera", + "Topic :: Multimedia :: Graphics :: Capture :: Screen Capture", + "Topic :: Multimedia :: Graphics :: Graphics Conversion", + "Topic :: Multimedia :: Graphics :: Viewers", + "Typing :: Typed" + ], + "requires_dist": [ + "furo; extra == \"docs\"", + "olefile; extra == \"docs\"", + "sphinx>=8.2; extra == \"docs\"", + "sphinx-autobuild; extra == \"docs\"", + "sphinx-copybutton; extra == \"docs\"", + "sphinx-inline-tabs; extra == \"docs\"", + "sphinxext-opengraph; extra == \"docs\"", + "olefile; extra == \"fpx\"", + "olefile; extra == \"mic\"", + "arro3-compute; extra == \"test-arrow\"", + "arro3-core; extra == \"test-arrow\"", + "nanoarrow; extra == \"test-arrow\"", + "pyarrow; extra == \"test-arrow\"", + "coverage>=7.4.2; extra == \"tests\"", + "defusedxml; extra == \"tests\"", + "markdown2; extra == \"tests\"", + "olefile; extra == \"tests\"", + "packaging; extra == \"tests\"", + "pytest; extra == \"tests\"", + "pytest-cov; extra == \"tests\"", + "pytest-timeout; extra == \"tests\"", + "pytest-xdist; extra == \"tests\"", + "setuptools; extra == \"tests\"", + "trove-classifiers>=2024.10.12; extra == \"tests\"", + "defusedxml; extra == \"xmp\"" + ], + "requires_python": ">=3.10", + "project_url": [ + "Release notes, https://pillow.readthedocs.io/en/stable/releasenotes/index.html", + "Changelog, https://github.com/python-pillow/Pillow/releases", + "Documentation, https://pillow.readthedocs.io", + "Funding, https://tidelift.com/subscription/pkg/pypi-pillow?utm_source=pypi-pillow&utm_medium=pypi", + "Homepage, https://python-pillow.github.io", + "Mastodon, https://fosstodon.org/@pillow", + "Source, https://github.com/python-pillow/Pillow" + ], + "provides_extra": [ + "docs", + "fpx", + "mic", + "test-arrow", + "tests", + "xmp" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/28/50/f203ff3a3ddfe19308efc83c5a3a29ed02bf786732ec35e68bf9162f3365/safetensors-0.8.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "archive_info": { + "hashes": { + "sha256": "fd6f3f93c9a0a7cc2788ee63fb763353d4bd2e89b0751bc78fcf7dda00bea774" + }, + "hash": "sha256=fd6f3f93c9a0a7cc2788ee63fb763353d4bd2e89b0751bc78fcf7dda00bea774" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.4", + "name": "safetensors", + "version": "0.8.0", + "description": "## Installation\n\n```\npip install safetensors\n```\n\n\n## Usage\n\n### Numpy\n\n```python\nfrom safetensors.numpy import save_file, load_file\nimport numpy as np\n\ntensors = {\n \"a\": np.zeros((2, 2)),\n \"b\": np.zeros((2, 3), dtype=np.uint8)\n}\n\nsave_file(tensors, \"./model.safetensors\")\n\n\n# Now loading\nloaded = load_file(\"./model.safetensors\")\n```\n\n### Torch\n\n```python\nfrom safetensors.torch import save_file, load_file\nimport torch\n\ntensors = {\n \"a\": torch.zeros((2, 2)),\n \"b\": torch.zeros((2, 3), dtype=torch.uint8)\n}\n\nsave_file(tensors, \"./model.safetensors\")\n\n\n# Now loading\nloaded = load_file(\"./model.safetensors\")\n```\n\n### Developing\n\n```\n# inside ./safetensors/bindings/python\npip install .[dev]\n```\nShould be enough to install this library locally.\n\n### Testing\n\n```\n# inside ./safetensors/bindings/python\npip install .[dev]\npytest -sv tests/\n```\n\n", + "description_content_type": "text/markdown; charset=UTF-8; variant=GFM", + "author_email": "Nicolas Patry , Luc Georges , Daniël De Kok ", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Intended Audience :: Education", + "Intended Audience :: Science/Research", + "License :: OSI Approved :: Apache Software License", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Topic :: Scientific/Engineering :: Artificial Intelligence", + "Typing :: Typed" + ], + "requires_dist": [ + "safetensors[torch] ; extra == 'all'", + "safetensors[numpy] ; extra == 'all'", + "safetensors[jax] ; extra == 'all'", + "safetensors[paddlepaddle] ; extra == 'all'", + "safetensors[convert] ; extra == 'all'", + "safetensors[quality] ; extra == 'all'", + "safetensors[testing] ; extra == 'all'", + "safetensors[torch] ; extra == 'convert'", + "huggingface-hub>=1.4 ; extra == 'convert'", + "safetensors[all] ; extra == 'dev'", + "safetensors[pinned-tf] ; extra == 'dev'", + "safetensors[numpy] ; extra == 'jax'", + "flax>=0.6.3 ; extra == 'jax'", + "jax>=0.3.25 ; extra == 'jax'", + "jaxlib>=0.3.25 ; extra == 'jax'", + "mlx>=0.0.9 ; extra == 'mlx'", + "numpy>=1.24.6 ; extra == 'numpy'", + "safetensors[numpy] ; extra == 'paddlepaddle'", + "paddlepaddle>=2.4.1 ; extra == 'paddlepaddle'", + "safetensors[numpy] ; extra == 'pinned-tf'", + "tensorflow==2.18.0 ; extra == 'pinned-tf'", + "ruff ; extra == 'quality'", + "safetensors[numpy] ; extra == 'tensorflow'", + "tensorflow>=2.11.0 ; extra == 'tensorflow'", + "safetensors[numpy] ; extra == 'testing'", + "h5py>=3.7.0 ; extra == 'testing'", + "setuptools-rust>=1.12.0 ; extra == 'testing'", + "pytest>=9.0 ; extra == 'testing'", + "pytest-benchmark>=5.2 ; extra == 'testing'", + "hypothesis>=6.70.2 ; extra == 'testing'", + "fsspec>=2024.6.0 ; extra == 'testing'", + "s3fs>=2024.6.0 ; extra == 'testing'", + "safetensors[numpy] ; extra == 'tf-nightly'", + "tf-nightly ; extra == 'tf-nightly'", + "safetensors[numpy] ; extra == 'torch'", + "torch>=2.4 ; extra == 'torch'" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://github.com/huggingface/safetensors", + "Source, https://github.com/huggingface/safetensors" + ], + "provides_extra": [ + "all", + "convert", + "dev", + "jax", + "mlx", + "numpy", + "paddlepaddle", + "pinned-tf", + "quality", + "tensorflow", + "testing", + "tf-nightly", + "torch" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101" + }, + "hash": "sha256=117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "annotated-doc", + "version": "0.0.5", + "summary": "Document parameters, class attributes, return types, and variables inline, with Annotated.", + "description": "# Annotated Doc\n\nDocument parameters, class attributes, return types, and variables inline, with `Annotated`.\n\n\n \"Test\"\n\n\n \"Coverage\"\n\n\n \"Package\n\n\n \"Supported\n\n\n## Installation\n\n```bash\npip install annotated-doc\n```\n\nOr with `uv`:\n\n```Python\nuv add annotated-doc\n```\n\n## Usage\n\nImport `Doc` and pass a single literal string with the documentation for the specific parameter, class attribute, return type, or variable.\n\nFor example, to document a parameter `name` in a function `hi` you could do:\n\n```Python\nfrom typing import Annotated\n\nfrom annotated_doc import Doc\n\ndef hi(name: Annotated[str, Doc(\"Who to say hi to\")]) -> None:\n print(f\"Hi, {name}!\")\n```\n\nYou can also use it to document class attributes:\n\n```Python\nfrom typing import Annotated\n\nfrom annotated_doc import Doc\n\nclass User:\n name: Annotated[str, Doc(\"The user's name\")]\n age: Annotated[int, Doc(\"The user's age\")]\n```\n\nThe same way, you could document return types and variables, or anything that could have a type annotation with `Annotated`.\n\n## Who Uses This\n\n`annotated-doc` was made for:\n\n* [FastAPI](https://fastapi.tiangolo.com/)\n* [Typer](https://typer.tiangolo.com/)\n* [SQLModel](https://sqlmodel.tiangolo.com/)\n* [Asyncer](https://asyncer.tiangolo.com/)\n\n`annotated-doc` is supported by [griffe-typingdoc](https://github.com/mkdocstrings/griffe-typingdoc), which powers reference documentation like the one in the [FastAPI Reference](https://fastapi.tiangolo.com/reference/).\n\n## Reasons not to use `annotated-doc`\n\nYou are already comfortable with one of the existing docstring formats, like:\n\n* Sphinx\n* numpydoc\n* Google\n* Keras\n\nYour team is already comfortable using them.\n\nYou prefer having the documentation about parameters all together in a docstring, separated from the code defining them.\n\nYou care about a specific set of users, using one specific editor, and that editor already has support for the specific docstring format you use.\n\n## Reasons to use `annotated-doc`\n\n* No micro-syntax to learn for newcomers, it’s **just Python** syntax.\n* **Editing** would be already fully supported by default by any editor (current or future) supporting Python syntax, including syntax errors, syntax highlighting, etc.\n* **Rendering** would be relatively straightforward to implement by static tools (tools that don't need runtime execution), as the information can be extracted from the AST they normally already create.\n* **Deduplication of information**: the name of a parameter would be defined in a single place, not duplicated inside of a docstring.\n* **Elimination** of the possibility of having **inconsistencies** when removing a parameter or class variable and **forgetting to remove** its documentation.\n* **Minimization** of the probability of adding a new parameter or class variable and **forgetting to add its documentation**.\n* **Elimination** of the possibility of having **inconsistencies** between the **name** of a parameter in the **signature** and the name in the docstring when it is renamed.\n* **Access** to the documentation string for each symbol at **runtime**, including existing (older) Python versions.\n* A more formalized way to document other symbols, like type aliases, that could use Annotated.\n* **Support** for apps using FastAPI, Typer and others.\n* **AI Accessibility**: AI tools will have an easier way understanding each parameter as the distance from documentation to parameter is much closer.\n\n## History\n\nI ([@tiangolo](https://github.com/tiangolo)) originally wanted for this to be part of the Python standard library (in [PEP 727](https://peps.python.org/pep-0727/)), but the proposal was withdrawn as there was a fair amount of negative feedback and opposition.\n\nThe conclusion was that this was better done as an external effort, in a third-party library.\n\nSo, here it is, with a simpler approach, as a third-party library, in a way that can be used by others, starting with FastAPI and friends.\n\n## License\n\nThis project is licensed under the terms of the MIT license.\n", + "description_content_type": "text/markdown", + "author_email": "=?utf-8?q?Sebasti=C3=A1n_Ram=C3=ADrez?= ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Intended Audience :: Information Technology", + "Intended Audience :: System Administrators", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python", + "Topic :: Internet", + "Topic :: Software Development :: Libraries :: Application Frameworks", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Software Development :: Libraries", + "Topic :: Software Development", + "Typing :: Typed", + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14" + ], + "requires_python": ">=3.9", + "project_url": [ + "Homepage, https://github.com/fastapi/annotated-doc", + "Documentation, https://github.com/fastapi/annotated-doc", + "Repository, https://github.com/fastapi/annotated-doc", + "Issues, https://github.com/fastapi/annotated-doc/issues", + "Changelog, https://github.com/fastapi/annotated-doc/release-notes.md" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360" + }, + "hash": "sha256=255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "click", + "version": "8.5.0", + "summary": "Composable command line interface toolkit", + "description": "
\"\"
\n\n# Click\n\nClick is a Python package for creating beautiful command line interfaces\nin a composable way with as little code as necessary. It's the \"Command\nLine Interface Creation Kit\". It's highly configurable but comes with\nsensible defaults out of the box.\n\nIt aims to make the process of writing command line tools quick and fun\nwhile also preventing any frustration caused by the inability to\nimplement an intended CLI API.\n\nClick in three points:\n\n- Arbitrary nesting of commands\n- Automatic help page generation\n- Supports lazy loading of subcommands at runtime\n\n\n## A Simple Example\n\n```python\nimport click\n\n@click.command()\n@click.option(\"--count\", default=1, help=\"Number of greetings.\")\n@click.option(\"--name\", prompt=\"Your name\", help=\"The person to greet.\")\ndef hello(count, name):\n \"\"\"Simple program that greets NAME for a total of COUNT times.\"\"\"\n for _ in range(count):\n click.echo(f\"Hello, {name}!\")\n\nif __name__ == '__main__':\n hello()\n```\n\n```\n$ python hello.py --count=3\nYour name: Click\nHello, Click!\nHello, Click!\nHello, Click!\n```\n\n\n## Donate\n\nThe Pallets organization develops and supports Click and other popular\npackages. In order to grow the community of contributors and users, and\nallow the maintainers to devote more time to the projects, [please\ndonate today][].\n\n[please donate today]: https://palletsprojects.com/donate\n\n## Contributing\n\nSee our [detailed contributing documentation][contrib] for many ways to\ncontribute, including reporting issues, requesting features, asking or answering\nquestions, and making PRs.\n\n[contrib]: https://palletsprojects.com/contributing/\n\n", + "description_content_type": "text/markdown", + "maintainer_email": "Pallets ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.txt" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Typing :: Typed" + ], + "requires_python": ">=3.10", + "project_url": [ + "Changes, https://click.palletsprojects.com/page/changes/", + "Chat, https://discord.gg/pallets", + "Documentation, https://click.palletsprojects.com/", + "Donate, https://palletsprojects.com/donate", + "Source, https://github.com/pallets/click/" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/6c/c0/a98505f18594f1bce828bb159cec0fcf9860562f1a2c85913409fc8f3d9e/fsspec-2026.9.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f" + }, + "hash": "sha256=8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "fsspec", + "version": "2026.9.0", + "summary": "File-system specification", + "description": "# filesystem_spec\n\n[![PyPI version](https://badge.fury.io/py/fsspec.svg)](https://pypi.python.org/pypi/fsspec/)\n[![Anaconda-Server Badge](https://anaconda.org/conda-forge/fsspec/badges/version.svg)](https://anaconda.org/conda-forge/fsspec)\n![Build](https://github.com/fsspec/filesystem_spec/workflows/CI/badge.svg)\n[![Docs](https://readthedocs.org/projects/filesystem-spec/badge/?version=latest)](https://filesystem-spec.readthedocs.io/en/latest/?badge=latest)\n\nA specification for pythonic filesystems.\n\n## Install\n\n```bash\npip install fsspec\n```\n\nwould install the base fsspec. Various optionally supported features might require specification of custom\nextra require, e.g. `pip install fsspec[ssh]` will install dependencies for `ssh` backends support.\nUse `pip install fsspec[full]` for installation of all known extra dependencies.\n\nUp-to-date package also provided through conda-forge distribution:\n\n```bash\nconda install -c conda-forge fsspec\n```\n\n\n## Purpose\n\nTo produce a template or specification for a file-system interface, that specific implementations should follow,\nso that applications making use of them can rely on a common behaviour and not have to worry about the specific\ninternal implementation decisions with any given backend. Many such implementations are included in this package,\nor in sister projects such as `s3fs` and `gcsfs`.\n\nIn addition, if this is well-designed, then additional functionality, such as a key-value store or FUSE\nmounting of the file-system implementation may be available for all implementations \"for free\".\n\n## Documentation\n\nPlease refer to [RTD](https://filesystem-spec.readthedocs.io/en/latest/?badge=latest)\n\n## Develop\n\nfsspec uses GitHub Actions for CI. Environment files can be found\nin the \"ci/\" directory. Note that the main environment is called \"py38\",\nbut it is expected that the version of python installed be adjustable at\nCI runtime. For local use, pick a version suitable for you.\n\n```bash\n# For a new environment (mamba / conda).\nmamba create -n fsspec -c conda-forge python=3.10 -y\nconda activate fsspec\n\n# Standard dev install with docs and tests.\npip install -e \".[dev,doc,test]\"\n\n# Full tests except for downstream\npip install s3fs\npip uninstall s3fs\npip install -e .[dev,doc,test_full]\npip install s3fs --no-deps\npytest -v\n\n# Downstream tests.\nsh install_s3fs.sh\n# Windows powershell.\ninstall_s3fs.sh\n```\n\n### Testing\n\nTests can be run in the dev environment, if activated, via ``pytest fsspec``.\n\nThe full fsspec suite requires a system-level docker, docker-compose, and fuse\ninstallation. If only making changes to one backend implementation, it is\nnot generally necessary to run all tests locally.\n\nIt is expected that contributors ensure that any change to fsspec does not\ncause issues or regressions for either other fsspec-related packages such\nas gcsfs and s3fs, nor for downstream users of fsspec. The \"downstream\" CI\nrun and corresponding environment file run a set of tests from the dask\ntest suite, and very minimal tests against pandas and zarr from the\ntest_downstream.py module in this repo.\n\n### Code Formatting\n\nfsspec uses [Black](https://black.readthedocs.io/en/stable) to ensure\na consistent code format throughout the project.\nRun ``black fsspec`` from the root of the filesystem_spec repository to\nauto-format your code. Additionally, many editors have plugins that will apply\n``black`` as you edit files. ``black`` is included in the ``tox`` environments.\n\nOptionally, you may wish to setup [pre-commit hooks](https://pre-commit.com) to\nautomatically run ``black`` when you make a git commit.\nRun ``pre-commit install --install-hooks`` from the root of the\nfilesystem_spec repository to setup pre-commit hooks. ``black`` will now be run\nbefore you commit, reformatting any changed files. You can format without\ncommitting via ``pre-commit run`` or skip these checks with ``git commit\n--no-verify``.\n\n## Support\n\nWork on this repository is supported in part by:\n\n\"Anaconda, Inc. - Advancing AI through open source.\"\n\n\"anaconda\n", + "description_content_type": "text/markdown", + "keywords": [ + "file" + ], + "maintainer_email": "Martin Durant ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14" + ], + "requires_dist": [ + "adlfs; extra == 'abfs'", + "adlfs; extra == 'adl'", + "pyarrow>=1; extra == 'arrow'", + "dask; extra == 'dask'", + "distributed; extra == 'dask'", + "pre-commit; extra == 'dev'", + "ruff>=0.5; extra == 'dev'", + "numpydoc; extra == 'doc'", + "sphinx; extra == 'doc'", + "sphinx-design; extra == 'doc'", + "sphinx-rtd-theme; extra == 'doc'", + "yarl; extra == 'doc'", + "dropbox; extra == 'dropbox'", + "dropboxdrivefs; extra == 'dropbox'", + "requests; extra == 'dropbox'", + "adlfs; extra == 'full'", + "aiohttp!=4.0.0a0,!=4.0.0a1; extra == 'full'", + "dask; extra == 'full'", + "distributed; extra == 'full'", + "dropbox; extra == 'full'", + "dropboxdrivefs; extra == 'full'", + "fusepy; extra == 'full'", + "gcsfs>=2026.4.0; extra == 'full'", + "libarchive-c; extra == 'full'", + "ocifs; extra == 'full'", + "panel; extra == 'full'", + "paramiko; extra == 'full'", + "pyarrow>=1; extra == 'full'", + "pygit2; extra == 'full'", + "requests; extra == 'full'", + "s3fs>=2026.6.0; extra == 'full'", + "smbprotocol; extra == 'full'", + "tqdm; extra == 'full'", + "fusepy; extra == 'fuse'", + "gcsfs>=2026.4.0; extra == 'gcs'", + "pygit2; extra == 'git'", + "requests; extra == 'github'", + "gcsfs>=2026.4.0; extra == 'gs'", + "panel; extra == 'gui'", + "pyarrow>=1; extra == 'hdfs'", + "aiohttp!=4.0.0a0,!=4.0.0a1; extra == 'http'", + "libarchive-c; extra == 'libarchive'", + "ocifs; extra == 'oci'", + "s3fs>=2026.6.0; extra == 's3'", + "paramiko; extra == 'sftp'", + "smbprotocol; extra == 'smb'", + "paramiko; extra == 'ssh'", + "aiohttp!=4.0.0a0,!=4.0.0a1; extra == 'test'", + "numpy; extra == 'test'", + "pytest; extra == 'test'", + "pytest-asyncio!=0.22.0; extra == 'test'", + "pytest-benchmark; extra == 'test'", + "pytest-cov; extra == 'test'", + "pytest-mock; extra == 'test'", + "pytest-recording; extra == 'test'", + "pytest-rerunfailures; extra == 'test'", + "requests; extra == 'test'", + "aiobotocore<3.0.0,>=2.5.4; extra == 'test-downstream'", + "dask[dataframe,test]; extra == 'test-downstream'", + "moto[server]<5,>4; extra == 'test-downstream'", + "pytest-timeout; extra == 'test-downstream'", + "xarray; extra == 'test-downstream'", + "zarr; extra == 'test-downstream'", + "adlfs; extra == 'test-full'", + "aiohttp!=4.0.0a0,!=4.0.0a1; extra == 'test-full'", + "backports-zstd; (python_version < '3.14') and extra == 'test-full'", + "cloudpickle; extra == 'test-full'", + "dask; extra == 'test-full'", + "distributed; extra == 'test-full'", + "dropbox; extra == 'test-full'", + "dropboxdrivefs; extra == 'test-full'", + "fastparquet; extra == 'test-full'", + "fusepy; extra == 'test-full'", + "gcsfs>=2026.4.0; extra == 'test-full'", + "jinja2; extra == 'test-full'", + "kerchunk; extra == 'test-full'", + "libarchive-c; extra == 'test-full'", + "lz4; extra == 'test-full'", + "notebook; extra == 'test-full'", + "numpy; extra == 'test-full'", + "ocifs; extra == 'test-full'", + "pandas<3.0.0; extra == 'test-full'", + "panel; extra == 'test-full'", + "paramiko; extra == 'test-full'", + "pyarrow>=1; extra == 'test-full'", + "pyftpdlib; extra == 'test-full'", + "pygit2; extra == 'test-full'", + "pytest; extra == 'test-full'", + "pytest-asyncio!=0.22.0; extra == 'test-full'", + "pytest-benchmark; extra == 'test-full'", + "pytest-cov; extra == 'test-full'", + "pytest-mock; extra == 'test-full'", + "pytest-recording; extra == 'test-full'", + "pytest-rerunfailures; extra == 'test-full'", + "python-snappy; extra == 'test-full'", + "requests; extra == 'test-full'", + "s3fs>=2026.6.0; extra == 'test-full'", + "smbprotocol; extra == 'test-full'", + "tqdm; extra == 'test-full'", + "urllib3; extra == 'test-full'", + "zarr<3.2.0; extra == 'test-full'", + "zstandard; (python_version < '3.14') and extra == 'test-full'", + "tqdm; extra == 'tqdm'" + ], + "requires_python": ">=3.10", + "project_url": [ + "Changelog, https://filesystem-spec.readthedocs.io/en/latest/changelog.html", + "Documentation, https://filesystem-spec.readthedocs.io/en/latest/", + "Homepage, https://github.com/fsspec/filesystem_spec" + ], + "provides_extra": [ + "abfs", + "adl", + "arrow", + "dask", + "dev", + "doc", + "dropbox", + "entrypoints", + "full", + "fuse", + "gcs", + "git", + "github", + "gs", + "gui", + "hdfs", + "http", + "libarchive", + "oci", + "s3", + "sftp", + "smb", + "ssh", + "test", + "test-downstream", + "test-full", + "tqdm" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86" + }, + "hash": "sha256=63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "h11", + "version": "0.16.0", + "dynamic": [ + "author", + "author-email", + "classifier", + "description", + "home-page", + "license", + "license-file", + "requires-python", + "summary" + ], + "summary": "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1", + "description": "h11\n===\n\n.. image:: https://travis-ci.org/python-hyper/h11.svg?branch=master\n :target: https://travis-ci.org/python-hyper/h11\n :alt: Automated test status\n\n.. image:: https://codecov.io/gh/python-hyper/h11/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/python-hyper/h11\n :alt: Test coverage\n\n.. image:: https://readthedocs.org/projects/h11/badge/?version=latest\n :target: http://h11.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation Status\n\nThis is a little HTTP/1.1 library written from scratch in Python,\nheavily inspired by `hyper-h2 `_.\n\nIt's a \"bring-your-own-I/O\" library; h11 contains no IO code\nwhatsoever. This means you can hook h11 up to your favorite network\nAPI, and that could be anything you want: synchronous, threaded,\nasynchronous, or your own implementation of `RFC 6214\n`_ -- h11 won't judge you.\n(Compare this to the current state of the art, where every time a `new\nnetwork API `_ comes along then someone\ngets to start over reimplementing the entire HTTP protocol from\nscratch.) Cory Benfield made an `excellent blog post describing the\nbenefits of this approach\n`_, or if you like video\nthen here's his `PyCon 2016 talk on the same theme\n`_.\n\nThis also means that h11 is not immediately useful out of the box:\nit's a toolkit for building programs that speak HTTP, not something\nthat could directly replace ``requests`` or ``twisted.web`` or\nwhatever. But h11 makes it much easier to implement something like\n``requests`` or ``twisted.web``.\n\nAt a high level, working with h11 goes like this:\n\n1) First, create an ``h11.Connection`` object to track the state of a\n single HTTP/1.1 connection.\n\n2) When you read data off the network, pass it to\n ``conn.receive_data(...)``; you'll get back a list of objects\n representing high-level HTTP \"events\".\n\n3) When you want to send a high-level HTTP event, create the\n corresponding \"event\" object and pass it to ``conn.send(...)``;\n this will give you back some bytes that you can then push out\n through the network.\n\nFor example, a client might instantiate and then send a\n``h11.Request`` object, then zero or more ``h11.Data`` objects for the\nrequest body (e.g., if this is a POST), and then a\n``h11.EndOfMessage`` to indicate the end of the message. Then the\nserver would then send back a ``h11.Response``, some ``h11.Data``, and\nits own ``h11.EndOfMessage``. If either side violates the protocol,\nyou'll get a ``h11.ProtocolError`` exception.\n\nh11 is suitable for implementing both servers and clients, and has a\npleasantly symmetric API: the events you send as a client are exactly\nthe ones that you receive as a server and vice-versa.\n\n`Here's an example of a tiny HTTP client\n`_\n\nIt also has `a fine manual `_.\n\nFAQ\n---\n\n*Whyyyyy?*\n\nI wanted to play with HTTP in `Curio\n`__ and `Trio\n`__, which at the time didn't have any\nHTTP libraries. So I thought, no big deal, Python has, like, a dozen\ndifferent implementations of HTTP, surely I can find one that's\nreusable. I didn't find one, but I did find Cory's call-to-arms\nblog-post. So I figured, well, fine, if I have to implement HTTP from\nscratch, at least I can make sure no-one *else* has to ever again.\n\n*Should I use it?*\n\nMaybe. You should be aware that it's a very young project. But, it's\nfeature complete and has an exhaustive test-suite and complete docs,\nso the next step is for people to try using it and see how it goes\n:-). If you do then please let us know -- if nothing else we'll want\nto talk to you before making any incompatible changes!\n\n*What are the features/limitations?*\n\nRoughly speaking, it's trying to be a robust, complete, and non-hacky\nimplementation of the first \"chapter\" of the HTTP/1.1 spec: `RFC 7230:\nHTTP/1.1 Message Syntax and Routing\n`_. That is, it mostly focuses on\nimplementing HTTP at the level of taking bytes on and off the wire,\nand the headers related to that, and tries to be anal about spec\nconformance. It doesn't know about higher-level concerns like URL\nrouting, conditional GETs, cross-origin cookie policies, or content\nnegotiation. But it does know how to take care of framing,\ncross-version differences in keep-alive handling, and the \"obsolete\nline folding\" rule, so you can focus your energies on the hard /\ninteresting parts for your application, and it tries to support the\nfull specification in the sense that any useful HTTP/1.1 conformant\napplication should be able to use h11.\n\nIt's pure Python, and has no dependencies outside of the standard\nlibrary.\n\nIt has a test suite with 100.0% coverage for both statements and\nbranches.\n\nCurrently it supports Python 3 (testing on 3.8-3.12) and PyPy 3.\nThe last Python 2-compatible version was h11 0.11.x.\n(Originally it had a Cython wrapper for `http-parser\n`_ and a beautiful nested state\nmachine implemented with ``yield from`` to postprocess the output. But\nI had to take these out -- the new *parser* needs fewer lines-of-code\nthan the old *parser wrapper*, is written in pure Python, uses no\nexotic language syntax, and has more features. It's sad, really; that\nold state machine was really slick. I just need a few sentences here\nto mourn that.)\n\nI don't know how fast it is. I haven't benchmarked or profiled it yet,\nso it's probably got a few pointless hot spots, and I've been trying\nto err on the side of simplicity and robustness instead of\nmicro-optimization. But at the architectural level I tried hard to\navoid fundamentally bad decisions, e.g., I believe that all the\nparsing algorithms remain linear-time even in the face of pathological\ninput like slowloris, and there are no byte-by-byte loops. (I also\nbelieve that it maintains bounded memory usage in the face of\narbitrary/pathological input.)\n\nThe whole library is ~800 lines-of-code. You can read and understand\nthe whole thing in less than an hour. Most of the energy invested in\nthis so far has been spent on trying to keep things simple by\nminimizing special-cases and ad hoc state manipulation; even though it\nis now quite small and simple, I'm still annoyed that I haven't\nfigured out how to make it even smaller and simpler. (Unfortunately,\nHTTP does not lend itself to simplicity.)\n\nThe API is ~feature complete and I don't expect the general outlines\nto change much, but you can't judge an API's ergonomics until you\nactually document and use it, so I'd expect some changes in the\ndetails.\n\n*How do I try it?*\n\n.. code-block:: sh\n\n $ pip install h11\n $ git clone git@github.com:python-hyper/h11\n $ cd h11/examples\n $ python basic-client.py\n\nand go from there.\n\n*License?*\n\nMIT\n\n*Code of conduct?*\n\nContributors are requested to follow our `code of conduct\n`_ in\nall project spaces.\n", + "home_page": "https://github.com/python-hyper/h11", + "author": "Nathaniel J. Smith", + "author_email": "njs@pobox.com", + "license": "MIT", + "license_file": [ + "LICENSE.txt" + ], + "classifier": [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Topic :: Internet :: WWW/HTTP", + "Topic :: System :: Networking" + ], + "requires_python": ">=3.8" + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0" + }, + "hash": "sha256=e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "networkx", + "version": "3.7", + "dynamic": [ + "license-file" + ], + "platform": [ + "Linux", + "Mac OSX", + "Windows", + "Unix" + ], + "summary": "Python package for creating and manipulating graphs and networks", + "description": "NetworkX\n========\n\n\n.. image::\n https://github.com/networkx/networkx/actions/workflows/test.yml/badge.svg?branch=main\n :target: https://github.com/networkx/networkx/actions/workflows/test.yml\n\n.. image::\n https://img.shields.io/pypi/v/networkx.svg?\n :target: https://pypi.python.org/pypi/networkx\n\n.. image::\n https://img.shields.io/pypi/l/networkx.svg?\n :target: https://github.com/networkx/networkx/blob/main/LICENSE.txt\n\n.. image::\n https://img.shields.io/pypi/pyversions/networkx.svg?\n :target: https://pypi.python.org/pypi/networkx\n\n.. image::\n https://insights.linuxfoundation.org/api/badge/health-score?project=networkx\n :target: https://insights.linuxfoundation.org/project/networkx\n\n\nNetworkX is a Python package for the creation, manipulation,\nand study of the structure, dynamics, and functions\nof complex networks.\n\n- **Website (including documentation):** https://networkx.org\n- **Mailing list:** https://groups.google.com/forum/#!forum/networkx-discuss\n- **Source:** https://github.com/networkx/networkx\n- **Bug reports:** https://github.com/networkx/networkx/issues\n- **Report a security vulnerability:** https://tidelift.com/security\n- **Tutorial:** https://networkx.org/documentation/latest/tutorial.html\n- **GitHub Discussions:** https://github.com/networkx/networkx/discussions\n- **Discord (Scientific Python) invite link:** https://discord.com/invite/vur45CbwMz\n- **NetworkX meetings calendar (open to all):** https://scientific-python.org/calendars/networkx.ics\n\nSimple example\n--------------\n\nFind the shortest path between two nodes in an undirected graph:\n\n.. code:: pycon\n\n >>> import networkx as nx\n >>> G = nx.Graph()\n >>> G.add_edge(\"A\", \"B\", weight=4)\n >>> G.add_edge(\"B\", \"D\", weight=2)\n >>> G.add_edge(\"A\", \"C\", weight=3)\n >>> G.add_edge(\"C\", \"D\", weight=4)\n >>> nx.shortest_path(G, \"A\", \"D\", weight=\"weight\")\n ['A', 'B', 'D']\n\nInstall\n-------\n\nInstall the latest released version of NetworkX:\n\n.. code:: shell\n\n $ pip install networkx\n\nInstall with all optional dependencies:\n\n.. code:: shell\n\n $ pip install networkx[default]\n\nFor additional details,\nplease see the `installation guide `_.\n\nBugs\n----\n\nPlease report any bugs that you find `here `_.\nOr, even better, fork the repository on `GitHub `_\nand create a pull request (PR). We welcome all changes, big or small, and we\nwill help you make the PR if you are new to `git` (just ask on the issue and/or\nsee the `contributor guide `_).\n\nLicense\n-------\n\nReleased under the `3-clause BSD license `_::\n\n Copyright (c) 2004-2026, NetworkX Developers\n Aric Hagberg \n Dan Schult \n Pieter Swart \n", + "description_content_type": "text/x-rst", + "keywords": [ + "Networks", + "Graph Theory", + "Mathematics", + "network", + "graph", + "discrete mathematics", + "math" + ], + "author_email": "Aric Hagberg ", + "maintainer_email": "NetworkX Developers ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.txt" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Intended Audience :: Science/Research", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Programming Language :: Python :: 3 :: Only", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Scientific/Engineering :: Bio-Informatics", + "Topic :: Scientific/Engineering :: Information Analysis", + "Topic :: Scientific/Engineering :: Mathematics", + "Topic :: Scientific/Engineering :: Physics" + ], + "requires_dist": [ + "asv>=0.6.5; extra == \"benchmarking\"", + "py-rattler<0.22,>=0.21; extra == \"benchmarking\"", + "virtualenv; extra == \"benchmarking\"", + "numpy>=2.2; extra == \"default\"", + "scipy>=1.15; extra == \"default\"", + "matplotlib>=3.10; extra == \"default\"", + "pandas>=2.3; extra == \"default\"", + "pre-commit>=4.1; extra == \"developer\"", + "mypy>=1.15; extra == \"developer\"", + "sphinx>=8.0; extra == \"doc\"", + "pydata-sphinx-theme>=0.16; extra == \"doc\"", + "sphinx-gallery>=0.18; extra == \"doc\"", + "numpydoc>=1.8.0; extra == \"doc\"", + "pillow>=10; extra == \"doc\"", + "texext>=0.6.7; extra == \"doc\"", + "myst-nb>=1.1; extra == \"doc\"", + "intersphinx-registry; extra == \"doc\"", + "osmnx>=2.0.0; extra == \"example\"", + "momepy>=0.7.2; extra == \"example\"", + "contextily>=1.6; extra == \"example\"", + "seaborn>=0.13; extra == \"example\"", + "cairocffi>=1.7; extra == \"example\"", + "igraph>=0.11; extra == \"example\"", + "scikit-learn>=1.6; extra == \"example\"", + "iplotx>=0.9.0; extra == \"example\"", + "hiveplotlib>=0.28; extra == \"example\"", + "lxml>=4.6; extra == \"extra\"", + "pygraphviz>=2.0; extra == \"extra\"", + "pydot>=3.0.1; extra == \"extra\"", + "sympy>=1.10; extra == \"extra\"", + "build>=0.10; extra == \"release\"", + "twine>=4.0; extra == \"release\"", + "wheel>=0.40; extra == \"release\"", + "changelist==0.5; extra == \"release\"", + "pytest>=7.2; extra == \"test\"", + "pytest-cov>=4.0; extra == \"test\"", + "pytest-xdist>=3.0; extra == \"test\"", + "pytest-mpl; extra == \"test-extras\"", + "pytest-randomly; extra == \"test-extras\"" + ], + "requires_python": "!=3.14.1,>=3.12", + "project_url": [ + "Homepage, https://networkx.org/", + "Bug Tracker, https://github.com/networkx/networkx/issues", + "Documentation, https://networkx.org/documentation/stable/", + "Source Code, https://github.com/networkx/networkx" + ], + "provides_extra": [ + "benchmarking", + "default", + "developer", + "doc", + "example", + "extra", + "release", + "test", + "test-extras" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73" + }, + "hash": "sha256=346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "pydantic", + "version": "2.13.5", + "summary": "Data validation using Python type hints", + "description": "# Pydantic Validation\n\n[![CI](https://img.shields.io/github/actions/workflow/status/pydantic/pydantic/ci.yml?branch=main&logo=github&label=CI)](https://github.com/pydantic/pydantic/actions?query=event%3Apush+branch%3Amain+workflow%3ACI)\n[![Coverage](https://coverage-badge.samuelcolvin.workers.dev/pydantic/pydantic.svg)](https://coverage-badge.samuelcolvin.workers.dev/redirect/pydantic/pydantic)\n[![pypi](https://img.shields.io/pypi/v/pydantic.svg)](https://pypi.python.org/pypi/pydantic)\n[![CondaForge](https://img.shields.io/conda/v/conda-forge/pydantic.svg)](https://anaconda.org/conda-forge/pydantic)\n[![downloads](https://static.pepy.tech/badge/pydantic/month)](https://pepy.tech/project/pydantic)\n[![versions](https://img.shields.io/pypi/pyversions/pydantic.svg)](https://github.com/pydantic/pydantic)\n[![license](https://img.shields.io/github/license/pydantic/pydantic.svg)](https://github.com/pydantic/pydantic/blob/main/LICENSE)\n[![Pydantic v2](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/pydantic/pydantic/main/docs/badge/v2.json)](https://docs.pydantic.dev/latest/contributing/#badges)\n[![llms.txt](https://img.shields.io/badge/llms.txt-green)](https://docs.pydantic.dev/latest/llms.txt)\n\nData validation using Python type hints.\n\nFast and extensible, Pydantic plays nicely with your linters/IDE/brain.\nDefine how data should be in pure, canonical Python 3.9+; validate it with Pydantic.\n\n## Pydantic Logfire :fire:\n\nWe've launched Pydantic Logfire to help you monitor your applications.\n[Learn more](https://pydantic.dev/logfire/?utm_source=pydantic_validation)\n\n## Pydantic V1.10 vs. V2\n\nPydantic V2 is a ground-up rewrite that offers many new features, performance improvements, and some breaking changes compared to Pydantic V1.\n\nIf you're using Pydantic V1 you may want to look at the\n[pydantic V1.10 Documentation](https://docs.pydantic.dev/) or,\n[`1.10.X-fixes` git branch](https://github.com/pydantic/pydantic/tree/1.10.X-fixes). Pydantic V2 also ships with the latest version of Pydantic V1 built in so that you can incrementally upgrade your code base and projects: `from pydantic import v1 as pydantic_v1`.\n\n## Help\n\nSee [documentation](https://docs.pydantic.dev/) for more details.\n\n## Installation\n\nInstall using `pip install -U pydantic` or `conda install pydantic -c conda-forge`.\nFor more installation options to make Pydantic even faster,\nsee the [Install](https://docs.pydantic.dev/install/) section in the documentation.\n\n## A Simple Example\n\n```python\nfrom datetime import datetime\nfrom typing import Optional\nfrom pydantic import BaseModel\n\nclass User(BaseModel):\n id: int\n name: str = 'John Doe'\n signup_ts: Optional[datetime] = None\n friends: list[int] = []\n\nexternal_data = {'id': '123', 'signup_ts': '2017-06-01 12:22', 'friends': [1, '2', b'3']}\nuser = User(**external_data)\nprint(user)\n#> User id=123 name='John Doe' signup_ts=datetime.datetime(2017, 6, 1, 12, 22) friends=[1, 2, 3]\nprint(user.id)\n#> 123\n```\n\n## Contributing\n\nFor guidance on setting up a development environment and how to make a\ncontribution to Pydantic, see\n[Contributing to Pydantic](https://docs.pydantic.dev/contributing/).\n\n## Reporting a Security Vulnerability\n\nSee our [security policy](https://github.com/pydantic/pydantic/security/policy).\n\n## Changelog\n\n\n\n\n\n## v2.13.5 (2026-08-28)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.5)\n\n### What's Changed\n\n#### Fixes\n\n* Allow reuse of validators when plugins are set by [@Viicos](https://github.com/Viicos) in [#13535](https://github.com/pydantic/pydantic/pull/13535)\n* Fix missing GC traversal on some `pydantic-core` struct fields by [@Viicos](https://github.com/Viicos) in [#13624](https://github.com/pydantic/pydantic/pull/13624)\n* Fix missing GC traversal in `pydantic-core` for `GeneralFieldsSerializer` by [@Viicos](https://github.com/Viicos) in [#13629](https://github.com/pydantic/pydantic/pull/13629)\n* Count validated model fields once in smart unions by [@tamird](https://github.com/tamird) in [#13731](https://github.com/pydantic/pydantic/pull/13731)\n\n## v2.13.4 (2026-05-06)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.4)\n\n### What's Changed\n\n#### Packaging\n\n* Bump libc from 0.2.155 to 0.2.185 by [@Viicos](https://github.com/Viicos) in [#13109](https://github.com/pydantic/pydantic/pull/13109)\n* Adapt `pydantic-core` linker flags on macOS by [@washingtoneg](https://github.com/washingtoneg) and [@Viicos](https://github.com/Viicos) in [#13147](https://github.com/pydantic/pydantic/pull/13147)\n\n#### Fixes\n\n* Preserve `RootModel` core metadata by [@Viicos](https://github.com/Viicos) in [#13129](https://github.com/pydantic/pydantic/pull/13129)\n\n## v2.13.3 (2026-04-20)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.3)\n\n### What's Changed\n\n#### Fixes\n\n* Handle `AttributeError` subclasses with `from_attributes` by [@Viicos](https://github.com/Viicos) in [#13096](https://github.com/pydantic/pydantic/pull/13096)\n\n## v2.13.2 (2026-04-17)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.2)\n\n### What's Changed\n\n#### Fixes\n\n* Fix `ValidationInfo.field_name` missing with `model_validate_json()` by [@Viicos](https://github.com/Viicos) in [#13084](https://github.com/pydantic/pydantic/pull/13084)\n\n## v2.13.1 (2026-04-15)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.1)\n\n### What's Changed\n\n#### Fixes\n\n* Fix `ValidationInfo.data` missing with `model_validate_json()` by [@davidhewitt](https://github.com/davidhewitt) in [#13079](https://github.com/pydantic/pydantic/pull/13079)\n\n## v2.13.0 (2026-04-13)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.0)\n\nThe highlights of the v2.13 release are available in the [blog post](https://pydantic.dev/articles/pydantic-v2-13-release).\nSeveral minor changes (considered non-breaking changes according to our [versioning policy](https://pydantic.dev/docs/validation/2.13/get-started/version-policy/#pydantic-v2))\nare also included in this release. Make sure to look into them before upgrading.\n\nThis release contains the updated `pydantic.v1` namespace, matching version 1.10.26 which includes support for Python 3.14.\n\n### What's Changed\n\nSee the beta releases for all changes sinces 2.12.\n\n#### New Features\n\n* Allow default factories of private attributes to take validated model data by [@Viicos](https://github.com/Viicos) in [#13013](https://github.com/pydantic/pydantic/pull/13013)\n\n#### Changes\n\n* Warn when serializing fixed length tuples with too few items by [@arvindsaripalli](https://github.com/arvindsaripalli) in [#13016](https://github.com/pydantic/pydantic/pull/13016)\n\n#### Fixes\n\n* Change type of `Any` when synthesizing `_build_sources` for `BaseSettings.__init__()` signature in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#13049](https://github.com/pydantic/pydantic/pull/13049)\n* Fix model equality when using runtime `extra` configuration by [@Viicos](https://github.com/Viicos) in [#13062](https://github.com/pydantic/pydantic/pull/13062)\n\n#### Packaging\n\n* Add zizmor for GitHub Actions workflow linting by [@Viicos](https://github.com/Viicos) in [#13039](https://github.com/pydantic/pydantic/pull/13039)\n* Update jiter to v0.14.0 to fix a segmentation fault on musl Linux by [@Viicos](https://github.com/Viicos) in [#13064](https://github.com/pydantic/pydantic/pull/13064)\n\n### New Contributors\n\n* [@arvindsaripalli](https://github.com/arvindsaripalli) made their first contribution in [#13016](https://github.com/pydantic/pydantic/pull/13016)\n\n## v2.13.0b3 (2026-03-31)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.0b3)\n\n### What's Changed\n\n#### New Features\n\n* Add `ascii_only` option to `StringConstraints` by [@ai-man-codes](https://github.com/ai-man-codes) in [#12907](https://github.com/pydantic/pydantic/pull/12907)\n* Support `exclude_if` in computed fields by [@andresliszt](https://github.com/andresliszt) in [#12748](https://github.com/pydantic/pydantic/pull/12748)\n* Push down constraints in unions involving `MISSING` sentinel by [@Viicos](https://github.com/Viicos) in [#12908](https://github.com/pydantic/pydantic/pull/12908)\n\n#### Changes\n\n* Track extra fields set after init in `model_fields_set` by [@navalprakhar](https://github.com/navalprakhar) in [#12817](https://github.com/pydantic/pydantic/pull/12817)\n* Do not include annotations that are not part of named tuple fields by [@galuszkak](https://github.com/galuszkak) in [#12951](https://github.com/pydantic/pydantic/pull/12951)\n* No longer fall back to trying all union members when the variant selected by discriminator fails to serialize by [@navalprakhar](https://github.com/navalprakhar) in [#12825](https://github.com/pydantic/pydantic/pull/12825)\n\n#### Fixes\n\n* Support discriminator metadata outside union type alias by [@Viicos](https://github.com/Viicos) in [#12785](https://github.com/pydantic/pydantic/pull/12785)\n* Respect `extras_schema` when only `extra_fields_behavior` is set on the config in JSON Schema generation for typed dictionaries by [@Viicos](https://github.com/Viicos) in [#12810](https://github.com/pydantic/pydantic/pull/12810)\n* Ensure `__pydantic_private__` is set in `model_construct()` with user-defined `model_post_init()` by [@nightcityblade](https://github.com/nightcityblade) in [#12816](https://github.com/pydantic/pydantic/pull/12816)\n* Handle all schema generation errors in `InstanceOf` by [@Viicos](https://github.com/Viicos) in [#12705](https://github.com/pydantic/pydantic/pull/12705)\n* Allow dynamic models created with `create_model()` to be used as annotations in the Mypy plugin by [@Br1an67](https://github.com/Br1an67) in [#12879](https://github.com/pydantic/pydantic/pull/12879)\n* Check for `PlaceholderNode` in Mypy plugin by [@Viicos](https://github.com/Viicos) in [#12929](https://github.com/pydantic/pydantic/pull/12929)\n* Try other branches in smart union in case of omit errors by [@mikeedjones](https://github.com/mikeedjones) in [#12758](https://github.com/pydantic/pydantic/pull/12758)\n* Patch unset attributes with `MISSING` during model serialization with `exclude_unset` by [@davidhewitt](https://github.com/davidhewitt) in [#12905](https://github.com/pydantic/pydantic/pull/12905)\n* Ensure custom `__init__()` is called when using `model_validate_strings()` by [@siewcapital](https://github.com/siewcapital) in [#12897](https://github.com/pydantic/pydantic/pull/12897)\n\n#### Packaging\n\n* Add riscv64 build target for manylinux by [@boosterl](https://github.com/boosterl) in [#12723](https://github.com/pydantic/pydantic/pull/12723)\n\n### New Contributors\n\n* [@kelsonbrito50](https://github.com/kelsonbrito50) made their first contribution in [#12860](https://github.com/pydantic/pydantic/pull/12860)\n* [@boosterl](https://github.com/boosterl) made their first contribution in [#12723](https://github.com/pydantic/pydantic/pull/12723)\n* [@adityagiri3600](https://github.com/adityagiri3600) made their first contribution in [#12868](https://github.com/pydantic/pydantic/pull/12868)\n* [@navalprakhar](https://github.com/navalprakhar) made their first contribution in [#12817](https://github.com/pydantic/pydantic/pull/12817)\n* [@Br1an67](https://github.com/Br1an67) made their first contribution in [#12879](https://github.com/pydantic/pydantic/pull/12879)\n* [@rmorshea](https://github.com/rmorshea) made their first contribution in [#12910](https://github.com/pydantic/pydantic/pull/12910)\n* [@N3XT3R1337](https://github.com/N3XT3R1337) made their first contribution in [#12922](https://github.com/pydantic/pydantic/pull/12922)\n* [@ai-man-codes](https://github.com/ai-man-codes) made their first contribution in [#12907](https://github.com/pydantic/pydantic/pull/12907)\n* [@Yume05-dev](https://github.com/Yume05-dev) made their first contribution in [#12953](https://github.com/pydantic/pydantic/pull/12953)\n* [@galuszkak](https://github.com/galuszkak) made their first contribution in [#12951](https://github.com/pydantic/pydantic/pull/12951)\n* [@siewcapital](https://github.com/siewcapital) made their first contribution in [#12897](https://github.com/pydantic/pydantic/pull/12897)\n\n## v2.13.0b2 (2026-02-24)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.0b2)\n\n### What's Changed\n\n#### Fixes\n\n* Fix backported V1 namespace by [@Viicos](https://github.com/Viicos) in [#12855](https://github.com/pydantic/pydantic/pull/12855)\n* Allow any type form to be used in `validate_as()` by [@bledden](https://github.com/bledden) in [#12846](https://github.com/pydantic/pydantic/pull/12846)\n* Fix walrus operator precedence in `UrlConstraints.__get_pydantic_core_schema__()` by [@bysiber](https://github.com/bysiber) in [#12826](https://github.com/pydantic/pydantic/pull/12826)\n\n### New Contributors\n\n* [@bledden](https://github.com/bledden) made their first contribution in [#12846](https://github.com/pydantic/pydantic/pull/12846)\n* [@bysiber](https://github.com/bysiber) made their first contribution in [#12827](https://github.com/pydantic/pydantic/pull/12827)\n\n## v2.13.0b1 (2026-02-23)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.0b1)\n\nThis is the first beta release of the 2.13 version, mainly providing bug fixes and performance improvements\nfor validation and serialization.\n\nNotable changes include:\n\n* Add a new `polymorphic_serialization` option, solving issues with `serialize_as_any` introduced in 2.12.\n* Latest V1.10.26 release under the `pydantic.v1` namespace. This version includes support for Python 3.14.\n* The [`pydantic-core`](https://github.com/pydantic/pydantic-core/) repository was merged inside the main `pydantic` one.\n\n### What's Changed\n\n#### New Features\n\n* Add `polymorphic_serialization` option by [@davidhewitt](https://github.com/davidhewitt) in [#12518](https://github.com/pydantic/pydantic/pull/12518)\n* Support Root models with `Literal` root types as discriminator field types by [@YassinNouh21](https://github.com/YassinNouh21) in [#12680](https://github.com/pydantic/pydantic/pull/12680)\n\n#### Changes\n\n* Migrate `pydantic-core` CI by [@Viicos](https://github.com/Viicos) in [#12752](https://github.com/pydantic/pydantic/pull/12752)\n* Import `pydantic-core` into pydantic by [@davidhewitt](https://github.com/davidhewitt) in [#12481](https://github.com/pydantic/pydantic/pull/12481)\n* Backport V1 changes up to v1.10.26 by [@Viicos](https://github.com/Viicos) in [#12663](https://github.com/pydantic/pydantic/pull/12663)\n* Use the `complex()` constructor unconditionally when validating `complex` Python data by [@tanmaymunjal](https://github.com/tanmaymunjal) in [#12498](https://github.com/pydantic/pydantic/pull/12498)\n* Add support for three-tuple input for `Decimal` by [@tanmaymunjal](https://github.com/tanmaymunjal) in [#12500](https://github.com/pydantic/pydantic/pull/12500)\n* Align `@field_serializer` logic with `@field_validator` by [@Viicos](https://github.com/Viicos) in [#12577](https://github.com/pydantic/pydantic/pull/12577)\n* Make `PydanticUserError` a `RuntimeError` instead of a `TypeError` by [@poliakovva](https://github.com/poliakovva) in [#12579](https://github.com/pydantic/pydantic/pull/12579)\n* Remove redundant serialization attempts in nested unions by [@davidhewitt](https://github.com/davidhewitt) in [#12604](https://github.com/pydantic/pydantic/pull/12604)\n* Copy `root` value when making root model shallow copies by [@YassinNouh21](https://github.com/YassinNouh21) in [#12679](https://github.com/pydantic/pydantic/pull/12679)\n* Ensure deterministic JSON schema defaults by sorting sets by [@drshvik](https://github.com/drshvik) in [#12760](https://github.com/pydantic/pydantic/pull/12760)\n\n#### Performance\n\n* Refactor `DecoratorInfos.build()` implementation by [@Viicos](https://github.com/Viicos) in [#12536](https://github.com/pydantic/pydantic/pull/12536)\n* Cache compiled regex in `pydantic-core` by [@Viicos](https://github.com/Viicos) in [#12549](https://github.com/pydantic/pydantic/pull/12549)\n* Optimize creation of `Literal` validators by [@davidhewitt](https://github.com/davidhewitt) in [#12569](https://github.com/pydantic/pydantic/pull/12569)\n* Optimize implementation of `LookupKey` by [@davidhewitt](https://github.com/davidhewitt) in [#12571](https://github.com/pydantic/pydantic/pull/12571)\n* Use python strings for field names by [@davidhewitt](https://github.com/davidhewitt) in [#12631](https://github.com/pydantic/pydantic/pull/12631)\n* Optimize datetime formatting code by [@davidhewitt](https://github.com/davidhewitt) in [#12626](https://github.com/pydantic/pydantic/pull/12626)\n* Validate JSON model data by iteration by [@davidhewitt](https://github.com/davidhewitt) in [#12550](https://github.com/pydantic/pydantic/pull/12550)\n* Optimize annotations evaluation of Pydantic models by [@Viicos](https://github.com/Viicos) in [#12681](https://github.com/pydantic/pydantic/pull/12681)\n* Optimize `FieldInfo._copy()` by [@Viicos](https://github.com/Viicos) in [#12727](https://github.com/pydantic/pydantic/pull/12727)\n\n#### Fixes\n\n* Fix `FieldInfo` rebuilding when parameterizing generic models with an `Annotated` type by [@Viicos](https://github.com/Viicos) in [#12463](https://github.com/pydantic/pydantic/pull/12463)\n* Fix nested model schema deduplication in JSON schema generation by [@marwan-alloreview](https://github.com/marwan-alloreview) in [#12494](https://github.com/pydantic/pydantic/pull/12494)\n* Fix `InitVar` being ignored when using with the `pydantic.Field()` function by [@Viicos](https://github.com/Viicos) in [#12495](https://github.com/pydantic/pydantic/pull/12495)\n* Fix support for enums with `NamedTuple` as values by [@Viicos](https://github.com/Viicos) in [#12506](https://github.com/pydantic/pydantic/pull/12506)\n* Do not delete mock validator/serializer in `rebuild_dataclass()` by [@Viicos](https://github.com/Viicos) in [#12513](https://github.com/pydantic/pydantic/pull/12513)\n* Require test suite to pass with free threading, switch back to global generic types cache by [@davidhewitt](https://github.com/davidhewitt) in [#12537](https://github.com/pydantic/pydantic/pull/12537)\n* Refactor `__pydantic_extra__` annotation handling by [@Viicos](https://github.com/Viicos) in [#12563](https://github.com/pydantic/pydantic/pull/12563)\n* Do not add claim of UUID \"safety\" provision by [@davidhewitt](https://github.com/davidhewitt) in [#12567](https://github.com/pydantic/pydantic/pull/12567)\n* Use Python hash to perform lookup in tagged union serializer by [@davidhewitt](https://github.com/davidhewitt) in [#12594](https://github.com/pydantic/pydantic/pull/12594)\n* Do not emit serialization warning `MISSING` sentinel is present in a nested model by [@Viicos](https://github.com/Viicos) in [#12635](https://github.com/pydantic/pydantic/pull/12635)\n* Do not eagerly evaluate annotations in signature logic by [@Viicos](https://github.com/Viicos) in [#12660](https://github.com/pydantic/pydantic/pull/12660)\n* Fix serialization of typed dict unions when `exclude_none` is set by [@davidhewitt](https://github.com/davidhewitt) in [#12677](https://github.com/pydantic/pydantic/pull/12677)\n* Do not reuse prebuilt serializers/validators on rebuilds by [@lmmx](https://github.com/lmmx) in [#12689](https://github.com/pydantic/pydantic/pull/12689)\n* Fix type annotation of `field_definitions` in `create_model()` by [@lehmann-hqs](https://github.com/lehmann-hqs) in [#12734](https://github.com/pydantic/pydantic/pull/12734)\n* Fix incorrect dataclass constructor signature when overriding class `kw_only` with `Field()` by [@jfadia](https://github.com/jfadia) in [#12741](https://github.com/pydantic/pydantic/pull/12741)\n* Use `typing.Union` when replacing types under Python 3.14 by [@Viicos](https://github.com/Viicos) in [#12733](https://github.com/pydantic/pydantic/pull/12733)\n* Improve ImportString error when internal imports fail by [@tsembp](https://github.com/tsembp) in [#12740](https://github.com/pydantic/pydantic/pull/12740)\n* Fix serializing complex numbers with negative zero imaginary part by [@lhnwrk](https://github.com/lhnwrk) in [#12770](https://github.com/pydantic/pydantic/pull/12770)\n* Preserve custom docstrings on stdlib dataclasses in JSON schema by [@nightcityblade](https://github.com/nightcityblade) in [#12815](https://github.com/pydantic/pydantic/pull/12815)\n\n#### Packaging\n\n* Bump Rust url dependency from 2.5.4 to 2.5.7 in `pydantic-core` by [@dependabot](https://github.com/dependabot)[bot] in [#12508](https://github.com/pydantic/pydantic/pull/12508)\n* Bump Rust minimum version to 1.88, use edition 2024 by [@davidhewitt](https://github.com/davidhewitt) and [@Viicos](https://github.com/Viicos) in [#12551](https://github.com/pydantic/pydantic/pull/12551) and [#12752](https://github.com/pydantic/pydantic/pull/12752)\n* Bump PyO3 to 0.28, jiter to 0.13 by [@davidhewitt](https://github.com/davidhewitt) in [#12767](https://github.com/pydantic/pydantic/pull/12767)\n\n### New Contributors\n\n* [@marwan-alloreview](https://github.com/marwan-alloreview) made their first contribution in [#12494](https://github.com/pydantic/pydantic/pull/12494)\n* [@tanmaymunjal](https://github.com/tanmaymunjal) made their first contribution in [#12498](https://github.com/pydantic/pydantic/pull/12498)\n* [@poliakovva](https://github.com/poliakovva) made their first contribution in [#12579](https://github.com/pydantic/pydantic/pull/12579)\n* [@lehmann-hqs](https://github.com/lehmann-hqs) made their first contribution in [#12734](https://github.com/pydantic/pydantic/pull/12734)\n* [@jfadia](https://github.com/jfadia) made their first contribution in [#12741](https://github.com/pydantic/pydantic/pull/12741)\n* [@tsembp](https://github.com/tsembp) made their first contribution in [#12740](https://github.com/pydantic/pydantic/pull/12740)\n* [@drshvik](https://github.com/drshvik) made their first contribution in [#12760](https://github.com/pydantic/pydantic/pull/12760)\n* [@lhnwrk](https://github.com/lhnwrk) made their first contribution in [#12770](https://github.com/pydantic/pydantic/pull/12770)\n* [@nightcityblade](https://github.com/nightcityblade) made their first contribution in [#12815](https://github.com/pydantic/pydantic/pull/12811)\n\n## v2.12.5 (2025-11-26)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.5)\n\nThis is the fifth 2.12 patch release, addressing an issue with the `MISSING` sentinel and providing several documentation improvements.\n\nThe next 2.13 minor release will be published in a couple weeks, and will include a new *polymorphic serialization* feature addressing\nthe remaining unexpected changes to the *serialize as any* behavior.\n\n* Fix pickle error when using `model_construct()` on a model with `MISSING` as a default value by [@ornariece](https://github.com/ornariece) in [#12522](https://github.com/pydantic/pydantic/pull/12522).\n* Several updates to the documentation by [@Viicos](https://github.com/Viicos).\n\n## v2.12.4 (2025-11-05)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.4)\n\nThis is the fourth 2.12 patch release, fixing more regressions, and reverting a change in the `build()` method\nof the [`AnyUrl` and Dsn types](https://docs.pydantic.dev/latest/api/networks/).\n\nThis patch release also fixes an issue with the serialization of IP address types, when `serialize_as_any` is used. The next patch release\nwill try to address the remaining issues with *serialize as any* behavior by introducing a new *polymorphic serialization* feature, that\nshould be used in most cases in place of *serialize as any*.\n\n* Fix issue with forward references in parent `TypedDict` classes by [@Viicos](https://github.com/Viicos) in [#12427](https://github.com/pydantic/pydantic/pull/12427).\n\n This issue is only relevant on Python 3.14 and greater.\n\n* Exclude fields with `exclude_if` from JSON Schema required fields by [@Viicos](https://github.com/Viicos) in [#12430](https://github.com/pydantic/pydantic/pull/12430)\n* Revert URL percent-encoding of credentials in the `build()` method\n of the [`AnyUrl` and Dsn types](https://docs.pydantic.dev/latest/api/networks/) by [@davidhewitt](https://github.com/davidhewitt) in\n [pydantic-core#1833](https://github.com/pydantic/pydantic-core/pull/1833).\n\n This was initially considered as a bugfix, but caused regressions and as such was fully reverted. The next release will include\n an opt-in option to percent-encode components of the URL.\n\n* Add type inference for IP address types by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1868](https://github.com/pydantic/pydantic-core/pull/1868).\n\n The 2.12 changes to the `serialize_as_any` behavior made it so that IP address types could not properly serialize to JSON.\n\n* Avoid getting default values from defaultdict by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1853](https://github.com/pydantic/pydantic-core/pull/1853).\n\n This fixes a subtle regression in the validation behavior of the [`collections.defaultdict`](https://docs.python.org/3/library/collections.html#collections.defaultdict)\n type.\n\n* Fix issue with field serializers on nested typed dictionaries by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1879](https://github.com/pydantic/pydantic-core/pull/1879).\n* Add more `pydantic-core` builds for the three-threaded version of Python 3.14 by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1864](https://github.com/pydantic/pydantic-core/pull/1864).\n\n## v2.12.3 (2025-10-17)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.3)\n\n### What's Changed\n\nThis is the third 2.12 patch release, fixing issues related to the `FieldInfo` class, and reverting a change to the supported\n[*after* model validator](https://docs.pydantic.dev/latest/concepts/validators/#model-validators) function signatures.\n\n* Raise a warning when an invalid after model validator function signature is raised by [@Viicos](https://github.com/Viicos) in [#12414](https://github.com/pydantic/pydantic/pull/12414).\n Starting in 2.12.0, using class methods for *after* model validators raised an error, but the error wasn't raised concistently. We decided\n to emit a deprecation warning instead.\n* Add [`FieldInfo.asdict()`](https://docs.pydantic.dev/latest/api/fields/#pydantic.fields.FieldInfo.asdict) method, improve documentation around `FieldInfo` by [@Viicos](https://github.com/Viicos) in [#12411](https://github.com/pydantic/pydantic/pull/12411).\n This also add back support for mutations on `FieldInfo` classes, that are reused as `Annotated` metadata. **However**, note that this is still\n *not* a supported pattern. Instead, please refer to the [added example](https://docs.pydantic.dev/latest/examples/dynamic_models/) in the documentation.\n\nThe [blog post](https://pydantic.dev/articles/pydantic-v2-12-release#changes) section on changes was also updated to document the changes related to `serialize_as_any`.\n\n## v2.12.2 (2025-10-14)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.2)\n\n### What's Changed\n\n#### Fixes\n\n* Release a new `pydantic-core` version, as a corrupted CPython 3.10 `manylinux2014_aarch64` wheel got uploaded ([pydantic-core#1843](https://github.com/pydantic/pydantic-core/pull/1843)).\n* Fix issue with recursive generic models with a parent model class by [@Viicos](https://github.com/Viicos) in [#12398](https://github.com/pydantic/pydantic/pull/12398)\n\n## v2.12.1 (2025-10-13)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.1)\n\n### What's Changed\n\nThis is the first 2.12 patch release, addressing most (but not all yet) regressions from the initial 2.12.0 release.\n\n#### Fixes\n\n* Do not evaluate annotations when inspecting validators and serializers by [@Viicos](https://github.com/Viicos) in [#12355](https://github.com/pydantic/pydantic/pull/12355)\n* Make sure `None` is converted as `NoneType` in Python 3.14 by [@Viicos](https://github.com/Viicos) in [#12370](https://github.com/pydantic/pydantic/pull/12370)\n* Backport V1 runtime warning when using Python 3.14 by [@Viicos](https://github.com/Viicos) in [#12367](https://github.com/pydantic/pydantic/pull/12367)\n* Fix error message for invalid validator signatures by [@Viicos](https://github.com/Viicos) in [#12366](https://github.com/pydantic/pydantic/pull/12366)\n* Populate field name in `ValidationInfo` for validation of default value by [@Viicos](https://github.com/Viicos) in [pydantic-core#1826](https://github.com/pydantic/pydantic-core/pull/1826)\n* Encode credentials in `MultiHostUrl` builder by [@willswire](https://github.com/willswire) in [pydantic-core#1829](https://github.com/pydantic/pydantic-core/pull/1829)\n* Respect field serializers when using `serialize_as_any` serialization flag by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1829](https://github.com/pydantic/pydantic-core/pull/1829)\n* Fix various `RootModel` serialization issues by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1836](https://github.com/pydantic/pydantic-core/pull/1836)\n\n### New Contributors\n\n* [@willswire](https://github.com/willswire) made their first contribution in [pydantic-core#1829](https://github.com/pydantic/pydantic-core/pull/1829)\n\n## v2.12.0 (2025-10-07)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.0)\n\nThis is the final 2.12 release. It features the work of 20 external contributors and provides useful new features, along with initial Python 3.14 support.\nSeveral minor changes (considered non-breaking changes according to our [versioning policy](https://docs.pydantic.dev/2.12/version-policy/#pydantic-v2))\nare also included in this release. Make sure to look into them before upgrading.\n\n**Note that Pydantic V1 is not compatible with Python 3.14 and greater**.\n\n### What's Changed\n\nSee the beta releases for all changes sinces 2.11.\n\n#### New Features\n\n* Add `extra` parameter to the validate functions by [@anvilpete](https://github.com/anvilpete) in [#12233](https://github.com/pydantic/pydantic/pull/12233)\n* Add `exclude_computed_fields` serialization option by [@Viicos](https://github.com/Viicos) in [#12334](https://github.com/pydantic/pydantic/pull/12334)\n* Add `preverse_empty_path` URL options by [@Viicos](https://github.com/Viicos) in [#12336](https://github.com/pydantic/pydantic/pull/12336)\n* Add `union_format` parameter to JSON Schema generation by [@Viicos](https://github.com/Viicos) in [#12147](https://github.com/pydantic/pydantic/pull/12147)\n* Add `__qualname__` parameter for `create_model` by [@Atry](https://github.com/Atry) in [#12001](https://github.com/pydantic/pydantic/pull/12001)\n\n#### Fixes\n\n* Do not try to infer name from lambda definitions in pipelines API by [@Viicos](https://github.com/Viicos) in [#12289](https://github.com/pydantic/pydantic/pull/12289)\n* Use proper namespace for functions in `TypeAdapter` by [@Viicos](https://github.com/Viicos) in [#12324](https://github.com/pydantic/pydantic/pull/12324)\n* Use `Any` for context type annotation in `TypeAdapter` by [@inducer](https://github.com/inducer) in [#12279](https://github.com/pydantic/pydantic/pull/12279)\n* Expose `FieldInfo` in `pydantic.fields.__all__` by [@Viicos](https://github.com/Viicos) in [#12339](https://github.com/pydantic/pydantic/pull/12339)\n* Respect `validation_alias` in `@validate_call` by [@Viicos](https://github.com/Viicos) in [#12340](https://github.com/pydantic/pydantic/pull/12340)\n* Use `Any` as context annotation in plugin API by [@Viicos](https://github.com/Viicos) in [#12341](https://github.com/pydantic/pydantic/pull/12341)\n* Use proper `stacklevel` in warnings when possible by [@Viicos](https://github.com/Viicos) in [#12342](https://github.com/pydantic/pydantic/pull/12342)\n\n#### Packaging\n\n* Update V1 copy to v1.10.24 by [@Viicos](https://github.com/Viicos) in [#12338](https://github.com/pydantic/pydantic/pull/12338)\n\n### New Contributors\n\n* [@anvilpete](https://github.com/anvilpete) made their first contribution in [#12233](https://github.com/pydantic/pydantic/pull/12233)\n* [@JonathanWindell](https://github.com/JonathanWindell) made their first contribution in [#12327](https://github.com/pydantic/pydantic/pull/12327)\n* [@inducer](https://github.com/inducer) made their first contribution in [#12279](https://github.com/pydantic/pydantic/pull/12279)\n* [@Atry](https://github.com/Atry) made their first contribution in [#12001](https://github.com/pydantic/pydantic/pull/12001)\n\n## v2.12.0b1 (2025-10-03)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.0b1)\n\nThis is the first beta release of the upcoming 2.12 release.\n\n### What's Changed\n\n#### New Features\n\n* Add support for `exclude_if` at the field level by [@andresliszt](https://github.com/andresliszt) in [#12141](https://github.com/pydantic/pydantic/pull/12141)\n* Add `ValidateAs` annotation helper by [@Viicos](https://github.com/Viicos) in [#11942](https://github.com/pydantic/pydantic/pull/11942)\n* Add configuration options for validation and JSON serialization of temporal types by [@ollz272](https://github.com/ollz272) in [#12068](https://github.com/pydantic/pydantic/pull/12068)\n* Add support for PEP 728 by [@Viicos](https://github.com/Viicos) in [#12179](https://github.com/pydantic/pydantic/pull/12179)\n* Add field name in serialization error by [@NicolasPllr1](https://github.com/NicolasPllr1) in [pydantic-core#1799](https://github.com/pydantic/pydantic-core/pull/1799)\n* Add option to preserve empty URL paths by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1789](https://github.com/pydantic/pydantic-core/pull/1789)\n\n#### Changes\n\n* Raise error if an incompatible `pydantic-core` version is installed by [@Viicos](https://github.com/Viicos) in [#12196](https://github.com/pydantic/pydantic/pull/12196)\n* Remove runtime warning for experimental features by [@Viicos](https://github.com/Viicos) in [#12265](https://github.com/pydantic/pydantic/pull/12265)\n* Warn if registering virtual subclasses on Pydantic models by [@Viicos](https://github.com/Viicos) in [#11669](https://github.com/pydantic/pydantic/pull/11669)\n\n#### Fixes\n\n* Fix `__getattr__()` behavior on Pydantic models when a property raised an `AttributeError` and extra values are present by [@raspuchin](https://github.com/raspuchin) in [#12106](https://github.com/pydantic/pydantic/pull/12106)\n* Add test to prevent regression with Pydantic models used as annotated metadata by [@Viicos](https://github.com/Viicos) in [#12133](https://github.com/pydantic/pydantic/pull/12133)\n* Allow to use property setters on Pydantic dataclasses with `validate_assignment` set by [@Viicos](https://github.com/Viicos) in [#12173](https://github.com/pydantic/pydantic/pull/12173)\n* Fix mypy v2 plugin for upcoming mypy release by [@cdce8p](https://github.com/cdce8p) in [#12209](https://github.com/pydantic/pydantic/pull/12209)\n* Respect custom title in functions JSON Schema by [@Viicos](https://github.com/Viicos) in [#11892](https://github.com/pydantic/pydantic/pull/11892)\n* Fix `ImportString` JSON serialization for objects with a `name` attribute by [@chr1sj0nes](https://github.com/chr1sj0nes) in [#12219](https://github.com/pydantic/pydantic/pull/12219)\n* Do not error on fields overridden by methods in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#12290](https://github.com/pydantic/pydantic/pull/12290)\n\n#### Packaging\n\n* Bump `pydantic-core` to v2.40.1 by [@Viicos](https://github.com/Viicos) in [#12314](https://github.com/pydantic/pydantic/pull/12314)\n\n### New Contributors\n\n* [@raspuchin](https://github.com/raspuchin) made their first contribution in [#12106](https://github.com/pydantic/pydantic/pull/12106)\n* [@chr1sj0nes](https://github.com/chr1sj0nes) made their first contribution in [#12219](https://github.com/pydantic/pydantic/pull/12219)\n\n## v2.12.0a1 (2025-07-26)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.0a1)\n\nThis is the first alpha release of the upcoming 2.12 release, which adds initial support for Python 3.14.\n\n### What's Changed\n\n#### New Features\n\n* Add `__pydantic_on_complete__()` hook that is called once model is fully ready to be used by [@DouweM](https://github.com/DouweM) in [#11762](https://github.com/pydantic/pydantic/pull/11762)\n* Add initial support for Python 3.14 by [@Viicos](https://github.com/Viicos) in [#11991](https://github.com/pydantic/pydantic/pull/11991)\n* Add regex patterns to JSON schema for `Decimal` type by [@Dima-Bulavenko](https://github.com/Dima-Bulavenko) in [#11987](https://github.com/pydantic/pydantic/pull/11987)\n* Add support for `doc` attribute on dataclass fields by [@Viicos](https://github.com/Viicos) in [#12077](https://github.com/pydantic/pydantic/pull/12077)\n* Add experimental `MISSING` sentinel by [@Viicos](https://github.com/Viicos) in [#11883](https://github.com/pydantic/pydantic/pull/11883)\n\n#### Changes\n\n* Allow config and bases to be specified together in `create_model()` by [@Viicos](https://github.com/Viicos) in [#11714](https://github.com/pydantic/pydantic/pull/11714)\n* Move some field logic out of the `GenerateSchema` class by [@Viicos](https://github.com/Viicos) in [#11733](https://github.com/pydantic/pydantic/pull/11733)\n* Always make use of `inspect.getsourcelines()` for docstring extraction on Python 3.13 and greater by [@Viicos](https://github.com/Viicos) in [#11829](https://github.com/pydantic/pydantic/pull/11829)\n* Only support the latest Mypy version by [@Viicos](https://github.com/Viicos) in [#11832](https://github.com/pydantic/pydantic/pull/11832)\n* Do not implicitly convert after model validators to class methods by [@Viicos](https://github.com/Viicos) in [#11957](https://github.com/pydantic/pydantic/pull/11957)\n* Refactor `FieldInfo` creation implementation by [@Viicos](https://github.com/Viicos) in [#11898](https://github.com/pydantic/pydantic/pull/11898)\n* Make `Secret` covariant by [@bluenote10](https://github.com/bluenote10) in [#12008](https://github.com/pydantic/pydantic/pull/12008)\n* Emit warning when field-specific metadata is used in invalid contexts by [@Viicos](https://github.com/Viicos) in [#12028](https://github.com/pydantic/pydantic/pull/12028)\n\n#### Fixes\n\n* Properly fetch plain serializer function when serializing default value in JSON Schema by [@Viicos](https://github.com/Viicos) in [#11721](https://github.com/pydantic/pydantic/pull/11721)\n* Remove generics cache workaround by [@Viicos](https://github.com/Viicos) in [#11755](https://github.com/pydantic/pydantic/pull/11755)\n* Remove coercion of decimal constraints by [@Viicos](https://github.com/Viicos) in [#11772](https://github.com/pydantic/pydantic/pull/11772)\n* Fix crash when expanding root type in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11735](https://github.com/pydantic/pydantic/pull/11735)\n* Only mark model as complete once all fields are complete by [@DouweM](https://github.com/DouweM) in [#11759](https://github.com/pydantic/pydantic/pull/11759)\n* Do not provide `field_name` in validator core schemas by [@DouweM](https://github.com/DouweM) in [#11761](https://github.com/pydantic/pydantic/pull/11761)\n* Fix issue with recursive generic models by [@Viicos](https://github.com/Viicos) in [#11775](https://github.com/pydantic/pydantic/pull/11775)\n* Fix qualified name comparison of private attributes during namespace inspection by [@karta9821](https://github.com/karta9821) in [#11803](https://github.com/pydantic/pydantic/pull/11803)\n* Make sure Pydantic dataclasses with slots and `validate_assignment` can be unpickled by [@Viicos](https://github.com/Viicos) in [#11769](https://github.com/pydantic/pydantic/pull/11769)\n* Traverse `function-before` schemas during schema gathering by [@Viicos](https://github.com/Viicos) in [#11801](https://github.com/pydantic/pydantic/pull/11801)\n* Fix check for stdlib dataclasses by [@Viicos](https://github.com/Viicos) in [#11822](https://github.com/pydantic/pydantic/pull/11822)\n* Check if `FieldInfo` is complete after applying type variable map by [@Viicos](https://github.com/Viicos) in [#11855](https://github.com/pydantic/pydantic/pull/11855)\n* Do not delete mock validator/serializer in `model_rebuild()` by [@Viicos](https://github.com/Viicos) in [#11890](https://github.com/pydantic/pydantic/pull/11890)\n* Rebuild dataclass fields before schema generation by [@Viicos](https://github.com/Viicos) in [#11949](https://github.com/pydantic/pydantic/pull/11949)\n* Always store the original field assignment on `FieldInfo` by [@Viicos](https://github.com/Viicos) in [#11946](https://github.com/pydantic/pydantic/pull/11946)\n* Do not use deprecated methods as default field values by [@Viicos](https://github.com/Viicos) in [#11914](https://github.com/pydantic/pydantic/pull/11914)\n* Allow callable discriminator to be applied on PEP 695 type aliases by [@Viicos](https://github.com/Viicos) in [#11941](https://github.com/pydantic/pydantic/pull/11941)\n* Suppress core schema generation warning when using `SkipValidation` by [@ygsh0816](https://github.com/ygsh0816) in [#12002](https://github.com/pydantic/pydantic/pull/12002)\n* Do not emit typechecking error for invalid `Field()` default with `validate_default` set to `True` by [@Viicos](https://github.com/Viicos) in [#11988](https://github.com/pydantic/pydantic/pull/11988)\n* Refactor logic to support Pydantic's `Field()` function in dataclasses by [@Viicos](https://github.com/Viicos) in [#12051](https://github.com/pydantic/pydantic/pull/12051)\n\n#### Packaging\n\n* Update project metadata to use PEP 639 by [@Viicos](https://github.com/Viicos) in [#11694](https://github.com/pydantic/pydantic/pull/11694)\n* Bump `mkdocs-llmstxt` to v0.2.0 by [@Viicos](https://github.com/Viicos) in [#11725](https://github.com/pydantic/pydantic/pull/11725)\n* Bump `pydantic-core` to v2.35.1 by [@Viicos](https://github.com/Viicos) in [#11963](https://github.com/pydantic/pydantic/pull/11963)\n* Bump dawidd6/action-download-artifact from 10 to 11 by [@dependabot](https://github.com/dependabot)[bot] in [#12033](https://github.com/pydantic/pydantic/pull/12033)\n* Bump astral-sh/setup-uv from 5 to 6 by [@dependabot](https://github.com/dependabot)[bot] in [#11826](https://github.com/pydantic/pydantic/pull/11826)\n* Update mypy to 1.17.0 by [@Viicos](https://github.com/Viicos) in [#12076](https://github.com/pydantic/pydantic/pull/12076)\n\n### New Contributors\n\n* [@parth-paradkar](https://github.com/parth-paradkar) made their first contribution in [#11695](https://github.com/pydantic/pydantic/pull/11695)\n* [@dqkqd](https://github.com/dqkqd) made their first contribution in [#11739](https://github.com/pydantic/pydantic/pull/11739)\n* [@fhightower](https://github.com/fhightower) made their first contribution in [#11722](https://github.com/pydantic/pydantic/pull/11722)\n* [@gbaian10](https://github.com/gbaian10) made their first contribution in [#11766](https://github.com/pydantic/pydantic/pull/11766)\n* [@DouweM](https://github.com/DouweM) made their first contribution in [#11759](https://github.com/pydantic/pydantic/pull/11759)\n* [@bowenliang123](https://github.com/bowenliang123) made their first contribution in [#11719](https://github.com/pydantic/pydantic/pull/11719)\n* [@rawwar](https://github.com/rawwar) made their first contribution in [#11799](https://github.com/pydantic/pydantic/pull/11799)\n* [@karta9821](https://github.com/karta9821) made their first contribution in [#11803](https://github.com/pydantic/pydantic/pull/11803)\n* [@jinnovation](https://github.com/jinnovation) made their first contribution in [#11834](https://github.com/pydantic/pydantic/pull/11834)\n* [@zmievsa](https://github.com/zmievsa) made their first contribution in [#11861](https://github.com/pydantic/pydantic/pull/11861)\n* [@Otto-AA](https://github.com/Otto-AA) made their first contribution in [#11860](https://github.com/pydantic/pydantic/pull/11860)\n* [@ygsh0816](https://github.com/ygsh0816) made their first contribution in [#12002](https://github.com/pydantic/pydantic/pull/12002)\n* [@lukland](https://github.com/lukland) made their first contribution in [#12015](https://github.com/pydantic/pydantic/pull/12015)\n* [@Dima-Bulavenko](https://github.com/Dima-Bulavenko) made their first contribution in [#11987](https://github.com/pydantic/pydantic/pull/11987)\n* [@GSemikozov](https://github.com/GSemikozov) made their first contribution in [#12050](https://github.com/pydantic/pydantic/pull/12050)\n* [@hannah-heywa](https://github.com/hannah-heywa) made their first contribution in [#12082](https://github.com/pydantic/pydantic/pull/12082)\n\n## v2.11.10 (2025-10-04)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.10)\n\n### What's Changed\n\n#### Fixes\n\n* Backport v1.10.24 changes by [@Viicos](https://github.com/Viicos)\n\n## v2.11.9 (2025-09-13)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.9)\n\n### What's Changed\n\n#### Fixes\n\n* Backport v1.10.23 changes by [@Viicos](https://github.com/Viicos)\n\n## v2.11.8 (2025-09-13)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.8)\n\n### What's Changed\n\n#### Fixes\n\n* Fix mypy plugin for mypy 1.18 by [@cdce8p](https://github.com/cdce8p) in [#12209](https://github.com/pydantic/pydantic/pull/12209)\n\n## v2.11.7 (2025-06-14)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.7)\n\n### What's Changed\n\n#### Fixes\n\n* Copy `FieldInfo` instance if necessary during `FieldInfo` build by [@Viicos](https://github.com/Viicos) in [#11898](https://github.com/pydantic/pydantic/pull/11898)\n\n## v2.11.6 (2025-06-13)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.6)\n\n### What's Changed\n\n#### Fixes\n\n* Rebuild dataclass fields before schema generation by [@Viicos](https://github.com/Viicos) in [#11949](https://github.com/pydantic/pydantic/pull/11949)\n* Always store the original field assignment on `FieldInfo` by [@Viicos](https://github.com/Viicos) in [#11946](https://github.com/pydantic/pydantic/pull/11946)\n\n## v2.11.5 (2025-05-22)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.5)\n\n### What's Changed\n\n#### Fixes\n\n* Check if `FieldInfo` is complete after applying type variable map by [@Viicos](https://github.com/Viicos) in [#11855](https://github.com/pydantic/pydantic/pull/11855)\n* Do not delete mock validator/serializer in `model_rebuild()` by [@Viicos](https://github.com/Viicos) in [#11890](https://github.com/pydantic/pydantic/pull/11890)\n* Do not duplicate metadata on model rebuild by [@Viicos](https://github.com/Viicos) in [#11902](https://github.com/pydantic/pydantic/pull/11902)\n\n## v2.11.4 (2025-04-29)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.4)\n\n### What's Changed\n\n#### Changes\n\n* Allow config and bases to be specified together in `create_model()` by [@Viicos](https://github.com/Viicos) in [#11714](https://github.com/pydantic/pydantic/pull/11714).\n This change was backported as it was previously possible (although not meant to be supported)\n to provide `model_config` as a field, which would make it possible to provide both configuration\n and bases.\n\n#### Fixes\n\n* Remove generics cache workaround by [@Viicos](https://github.com/Viicos) in [#11755](https://github.com/pydantic/pydantic/pull/11755)\n* Remove coercion of decimal constraints by [@Viicos](https://github.com/Viicos) in [#11772](https://github.com/pydantic/pydantic/pull/11772)\n* Fix crash when expanding root type in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11735](https://github.com/pydantic/pydantic/pull/11735)\n* Fix issue with recursive generic models by [@Viicos](https://github.com/Viicos) in [#11775](https://github.com/pydantic/pydantic/pull/11775)\n* Traverse `function-before` schemas during schema gathering by [@Viicos](https://github.com/Viicos) in [#11801](https://github.com/pydantic/pydantic/pull/11801)\n\n#### Packaging\n\n* Bump `mkdocs-llmstxt` to v0.2.0 by [@Viicos](https://github.com/Viicos) in [#11725](https://github.com/pydantic/pydantic/pull/11725)\n\n## v2.11.3 (2025-04-08)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.3)\n\n### What's Changed\n\n#### Fixes\n\n* Preserve field description when rebuilding model fields by [@Viicos](https://github.com/Viicos) in [#11698](https://github.com/pydantic/pydantic/pull/11698)\n\n#### Packaging\n\n* Update V1 copy to v1.10.21 by [@Viicos](https://github.com/Viicos) in [#11706](https://github.com/pydantic/pydantic/pull/11706)\n\n## v2.11.2 (2025-04-03)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.2)\n\n### What's Changed\n\n#### Fixes\n\n* Bump `pydantic-core` to v2.33.1 by [@Viicos](https://github.com/Viicos) in [#11678](https://github.com/pydantic/pydantic/pull/11678)\n* Make sure `__pydantic_private__` exists before setting private attributes by [@Viicos](https://github.com/Viicos) in [#11666](https://github.com/pydantic/pydantic/pull/11666)\n* Do not override `FieldInfo._complete` when using field from parent class by [@Viicos](https://github.com/Viicos) in [#11668](https://github.com/pydantic/pydantic/pull/11668)\n* Provide the available definitions when applying discriminated unions by [@Viicos](https://github.com/Viicos) in [#11670](https://github.com/pydantic/pydantic/pull/11670)\n* Do not expand root type in the mypy plugin for variables by [@Viicos](https://github.com/Viicos) in [#11676](https://github.com/pydantic/pydantic/pull/11676)\n* Mention the attribute name in model fields deprecation message by [@Viicos](https://github.com/Viicos) in [#11674](https://github.com/pydantic/pydantic/pull/11674)\n* Properly validate parameterized mappings by [@Viicos](https://github.com/Viicos) in [#11658](https://github.com/pydantic/pydantic/pull/11658)\n\n## v2.11.1 (2025-03-28)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.1)\n\n### What's Changed\n\n#### Fixes\n\n* Do not override `'definitions-ref'` schemas containing serialization schemas or metadata by [@Viicos](https://github.com/Viicos) in [#11644](https://github.com/pydantic/pydantic/pull/11644)\n\n## v2.11.0 (2025-03-27)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0)\n\n### What's Changed\n\nPydantic v2.11 is a version strongly focused on build time performance of Pydantic models (and core schema generation in general).\nSee the [blog post](https://pydantic.dev/articles/pydantic-v2-11-release) for more details.\n\n#### New Features\n\n* Add `encoded_string()` method to the URL types by [@YassinNouh21](https://github.com/YassinNouh21) in [#11580](https://github.com/pydantic/pydantic/pull/11580)\n* Add support for `defer_build` with `@validate_call` decorator by [@Viicos](https://github.com/Viicos) in [#11584](https://github.com/pydantic/pydantic/pull/11584)\n* Allow `@with_config` decorator to be used with keyword arguments by [@Viicos](https://github.com/Viicos) in [#11608](https://github.com/pydantic/pydantic/pull/11608)\n* Simplify customization of default value inclusion in JSON Schema generation by [@Viicos](https://github.com/Viicos) in [#11634](https://github.com/pydantic/pydantic/pull/11634)\n* Add `generate_arguments_schema()` function by [@Viicos](https://github.com/Viicos) in [#11572](https://github.com/pydantic/pydantic/pull/11572)\n\n#### Fixes\n\n* Allow generic typed dictionaries to be used for unpacked variadic keyword parameters by [@Viicos](https://github.com/Viicos) in [#11571](https://github.com/pydantic/pydantic/pull/11571)\n* Fix runtime error when computing model string representation involving cached properties and self-referenced models by [@Viicos](https://github.com/Viicos) in [#11579](https://github.com/pydantic/pydantic/pull/11579)\n* Preserve other steps when using the ellipsis in the pipeline API by [@Viicos](https://github.com/Viicos) in [#11626](https://github.com/pydantic/pydantic/pull/11626)\n* Fix deferred discriminator application logic by [@Viicos](https://github.com/Viicos) in [#11591](https://github.com/pydantic/pydantic/pull/11591)\n\n#### Packaging\n\n* Bump `pydantic-core` to v2.33.0 by [@Viicos](https://github.com/Viicos) in [#11631](https://github.com/pydantic/pydantic/pull/11631)\n\n### New Contributors\n\n* [@cmenon12](https://github.com/cmenon12) made their first contribution in [#11562](https://github.com/pydantic/pydantic/pull/11562)\n* [@Jeukoh](https://github.com/Jeukoh) made their first contribution in [#11611](https://github.com/pydantic/pydantic/pull/11611)\n\n## v2.11.0b2 (2025-03-17)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0b2)\n\n### What's Changed\n\n#### New Features\n\n* Add experimental support for free threading by [@Viicos](https://github.com/Viicos) in [#11516](https://github.com/pydantic/pydantic/pull/11516)\n\n#### Fixes\n\n* Fix `NotRequired` qualifier not taken into account in stringified annotation by [@Viicos](https://github.com/Viicos) in [#11559](https://github.com/pydantic/pydantic/pull/11559)\n\n#### Packaging\n\n* Bump `pydantic-core` to v2.32.0 by [@Viicos](https://github.com/Viicos) in [#11567](https://github.com/pydantic/pydantic/pull/11567)\n\n### New Contributors\n\n* [@joren485](https://github.com/joren485) made their first contribution in [#11547](https://github.com/pydantic/pydantic/pull/11547)\n\n## v2.11.0b1 (2025-03-06)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0b1)\n\n### What's Changed\n\n#### New Features\n\n* Support unsubstituted type variables with both a default and a bound or constraints by [@FyZzyss](https://github.com/FyZzyss) in https://github.com/pydantic/pydantic/pull/10789\n* Add a `default_factory_takes_validated_data` property to `FieldInfo` by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11034\n* Raise a better error when a generic alias is used inside `type[]` by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11088\n* Properly support PEP 695 generics syntax by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11189\n* Properly support type variable defaults by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11332\n* Add support for validating v6, v7, v8 UUIDs by [@astei](https://github.com/astei) in https://github.com/pydantic/pydantic/pull/11436\n* Improve alias configuration APIs by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11468\n\n#### Changes\n\n* Rework `create_model` field definitions format by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11032\n* Raise a deprecation warning when a field is annotated as final with a default value by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11168\n* Deprecate accessing `model_fields` and `model_computed_fields` on instances by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11169\n* **Breaking Change:** Move core schema generation logic for path types inside the `GenerateSchema` class by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/10846\n* Remove Python 3.8 Support by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11258\n* Optimize calls to `get_type_ref` by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/10863\n* Disable `pydantic-core` core schema validation by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11271\n\n#### Performance\n\n* Only evaluate `FieldInfo` annotations if required during schema building by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/10769\n* Improve `__setattr__` performance of Pydantic models by caching setter functions by [@MarkusSintonen](https://github.com/MarkusSintonen) in https://github.com/pydantic/pydantic/pull/10868\n* Improve annotation application performance by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11186\n* Improve performance of `_typing_extra` module by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11255\n* Refactor and optimize schema cleaning logic by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11244\n* Create a single dictionary when creating a `CoreConfig` instance by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11384\n* Bump `pydantic-core` and thus use `SchemaValidator` and `SchemaSerializer` caching by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11402\n* Reuse cached core schemas for parametrized generic Pydantic models by [@MarkusSintonen](https://github.com/MarkusSintonen) in https://github.com/pydantic/pydantic/pull/11434\n\n#### Fixes\n\n* Improve `TypeAdapter` instance repr by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/10872\n* Use the correct frame when instantiating a parametrized `TypeAdapter` by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/10893\n* Infer final fields with a default value as class variables in the mypy plugin by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11121\n* Recursively unpack `Literal` values if using PEP 695 type aliases by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11114\n* Override `__subclasscheck__` on `ModelMetaclass` to avoid memory leak and performance issues by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11116\n* Remove unused `_extract_get_pydantic_json_schema()` parameter by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11155\n* Improve discriminated union error message for invalid union variants by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11161\n* Unpack PEP 695 type aliases if using the `Annotated` form by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11109\n* Add missing stacklevel in `deprecated_instance_property` warning by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11200\n* Copy `WithJsonSchema` schema to avoid sharing mutated data by [@thejcannon](https://github.com/thejcannon) in https://github.com/pydantic/pydantic/pull/11014\n* Do not cache parametrized models when in the process of parametrizing another model by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/10704\n* Add discriminated union related metadata entries to the `CoreMetadata` definition by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11216\n* Consolidate schema definitions logic in the `_Definitions` class by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11208\n* Support initializing root model fields with values of the `root` type in the mypy plugin by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11212\n* Fix various issues with dataclasses and `use_attribute_docstrings` by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11246\n* Only compute normalized decimal places if necessary in `decimal_places_validator` by [@misrasaurabh1](https://github.com/misrasaurabh1) in https://github.com/pydantic/pydantic/pull/11281\n* Add support for `validation_alias` in the mypy plugin by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11295\n* Fix JSON Schema reference collection with `\"examples\"` keys by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11305\n* Do not transform model serializer functions as class methods in the mypy plugin by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11298\n* Simplify `GenerateJsonSchema.literal_schema()` implementation by [@misrasaurabh1](https://github.com/misrasaurabh1) in https://github.com/pydantic/pydantic/pull/11321\n* Add additional allowed schemes for `ClickHouseDsn` by [@Maze21127](https://github.com/Maze21127) in https://github.com/pydantic/pydantic/pull/11319\n* Coerce decimal constraints to `Decimal` instances by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11350\n* Use the correct JSON Schema mode when handling function schemas by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11367\n* Improve exception message when encountering recursion errors during type evaluation by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11356\n* Always include `additionalProperties: True` for arbitrary dictionary schemas by [@austinyu](https://github.com/austinyu) in https://github.com/pydantic/pydantic/pull/11392\n* Expose `fallback` parameter in serialization methods by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11398\n* Fix path serialization behavior by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11416\n* Do not reuse validators and serializers during model rebuild by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11429\n* Collect model fields when rebuilding a model by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11388\n* Allow cached properties to be altered on frozen models by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11432\n* Fix tuple serialization for `Sequence` types by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11435\n* Fix: do not check for `__get_validators__` on classes where `__get_pydantic_core_schema__` is also defined by [@tlambert03](https://github.com/tlambert03) in https://github.com/pydantic/pydantic/pull/11444\n* Allow callable instances to be used as serializers by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11451\n* Improve error thrown when overriding field with a property by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11459\n* Fix JSON Schema generation with referenceable core schemas holding JSON metadata by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11475\n* Support strict specification on union member types by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11481\n* Implicitly set `validate_by_name` to `True` when `validate_by_alias` is `False` by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11503\n* Change type of `Any` when synthesizing `BaseSettings.__init__` signature in the mypy plugin by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11497\n* Support type variable defaults referencing other type variables by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11520\n* Fix `ValueError` on year zero by [@davidhewitt](https://github.com/davidhewitt) in https://github.com/pydantic/pydantic-core/pull/1583\n* `dataclass` `InitVar` shouldn't be required on serialization by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic-core/pull/1602\n\n#### Packaging\n\n* Add a `check_pydantic_core_version()` function by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11324\n* Remove `greenlet` development dependency by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11351\n* Use the `typing-inspection` library by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11479\n* Bump `pydantic-core` to `v2.31.1` by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11526\n\n## New Contributors\n\n* [@FyZzyss](https://github.com/FyZzyss) made their first contribution in https://github.com/pydantic/pydantic/pull/10789\n* [@tamird](https://github.com/tamird) made their first contribution in https://github.com/pydantic/pydantic/pull/10948\n* [@felixxm](https://github.com/felixxm) made their first contribution in https://github.com/pydantic/pydantic/pull/11077\n* [@alexprabhat99](https://github.com/alexprabhat99) made their first contribution in https://github.com/pydantic/pydantic/pull/11082\n* [@Kharianne](https://github.com/Kharianne) made their first contribution in https://github.com/pydantic/pydantic/pull/11111\n* [@mdaffad](https://github.com/mdaffad) made their first contribution in https://github.com/pydantic/pydantic/pull/11177\n* [@thejcannon](https://github.com/thejcannon) made their first contribution in https://github.com/pydantic/pydantic/pull/11014\n* [@thomasfrimannkoren](https://github.com/thomasfrimannkoren) made their first contribution in https://github.com/pydantic/pydantic/pull/11251\n* [@usernameMAI](https://github.com/usernameMAI) made their first contribution in https://github.com/pydantic/pydantic/pull/11275\n* [@ananiavito](https://github.com/ananiavito) made their first contribution in https://github.com/pydantic/pydantic/pull/11302\n* [@pawamoy](https://github.com/pawamoy) made their first contribution in https://github.com/pydantic/pydantic/pull/11311\n* [@Maze21127](https://github.com/Maze21127) made their first contribution in https://github.com/pydantic/pydantic/pull/11319\n* [@kauabh](https://github.com/kauabh) made their first contribution in https://github.com/pydantic/pydantic/pull/11369\n* [@jaceklaskowski](https://github.com/jaceklaskowski) made their first contribution in https://github.com/pydantic/pydantic/pull/11353\n* [@tmpbeing](https://github.com/tmpbeing) made their first contribution in https://github.com/pydantic/pydantic/pull/11375\n* [@petyosi](https://github.com/petyosi) made their first contribution in https://github.com/pydantic/pydantic/pull/11405\n* [@austinyu](https://github.com/austinyu) made their first contribution in https://github.com/pydantic/pydantic/pull/11392\n* [@mikeedjones](https://github.com/mikeedjones) made their first contribution in https://github.com/pydantic/pydantic/pull/11402\n* [@astei](https://github.com/astei) made their first contribution in https://github.com/pydantic/pydantic/pull/11436\n* [@dsayling](https://github.com/dsayling) made their first contribution in https://github.com/pydantic/pydantic/pull/11522\n* [@sobolevn](https://github.com/sobolevn) made their first contribution in https://github.com/pydantic/pydantic-core/pull/1645\n\n## v2.11.0a2 (2025-02-10)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0a2)\n\n### What's Changed\n\nPydantic v2.11 is a version strongly focused on build time performance of Pydantic models (and core schema generation in general).\nThis is another early alpha release, meant to collect early feedback from users having issues with core schema builds.\n\n#### Performance\n\n* Create a single dictionary when creating a `CoreConfig` instance by [@sydney-runkle](https://github.com/sydney-runkle) in [#11384](https://github.com/pydantic/pydantic/pull/11384)\n\n#### Fixes\n\n* Use the correct JSON Schema mode when handling function schemas by [@Viicos](https://github.com/Viicos) in [#11367](https://github.com/pydantic/pydantic/pull/11367)\n* Fix JSON Schema reference logic with `examples` keys by [@Viicos](https://github.com/Viicos) in [#11366](https://github.com/pydantic/pydantic/pull/11366)\n* Improve exception message when encountering recursion errors during type evaluation by [@Viicos](https://github.com/Viicos) in [#11356](https://github.com/pydantic/pydantic/pull/11356)\n* Always include `additionalProperties: True` for arbitrary dictionary schemas by [@austinyu](https://github.com/austinyu) in [#11392](https://github.com/pydantic/pydantic/pull/11392)\n* Expose `fallback` parameter in serialization methods by [@Viicos](https://github.com/Viicos) in [#11398](https://github.com/pydantic/pydantic/pull/11398)\n* Fix path serialization behavior by [@sydney-runkle](https://github.com/sydney-runkle) in [#11416](https://github.com/pydantic/pydantic/pull/11416)\n\n#### Packaging\n\n* Bump `ruff` from 0.9.2 to 0.9.5 by [@Viicos](https://github.com/Viicos) in [#11407](https://github.com/pydantic/pydantic/pull/11407)\n* Bump `pydantic-core` to v2.29.0 by [@mikeedjones](https://github.com/mikeedjones) in [#11402](https://github.com/pydantic/pydantic/pull/11402)\n* Use locally-built rust with symbols & pgo by [@davidhewitt](https://github.com/davidhewitt) in [#11403](https://github.com/pydantic/pydantic/pull/11403)\n\n### New Contributors\n\n* [@kauabh](https://github.com/kauabh) made their first contribution in [#11369](https://github.com/pydantic/pydantic/pull/11369)\n* [@jaceklaskowski](https://github.com/jaceklaskowski) made their first contribution in [#11353](https://github.com/pydantic/pydantic/pull/11353)\n* [@tmpbeing](https://github.com/tmpbeing) made their first contribution in [#11375](https://github.com/pydantic/pydantic/pull/11375)\n* [@petyosi](https://github.com/petyosi) made their first contribution in [#11405](https://github.com/pydantic/pydantic/pull/11405)\n* [@austinyu](https://github.com/austinyu) made their first contribution in [#11392](https://github.com/pydantic/pydantic/pull/11392)\n* [@mikeedjones](https://github.com/mikeedjones) made their first contribution in [#11402](https://github.com/pydantic/pydantic/pull/11402)\n\n## v2.11.0a1 (2025-01-30)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0a1)\n\n### What's Changed\n\nPydantic v2.11 is a version strongly focused on build time performance of Pydantic models (and core schema generation in general).\nThis is an early alpha release, meant to collect early feedback from users having issues with core schema builds.\n\n#### New Features\n\n* Support unsubstituted type variables with both a default and a bound or constraints by [@FyZzyss](https://github.com/FyZzyss) in [#10789](https://github.com/pydantic/pydantic/pull/10789)\n* Add a `default_factory_takes_validated_data` property to `FieldInfo` by [@Viicos](https://github.com/Viicos) in [#11034](https://github.com/pydantic/pydantic/pull/11034)\n* Raise a better error when a generic alias is used inside `type[]` by [@Viicos](https://github.com/Viicos) in [#11088](https://github.com/pydantic/pydantic/pull/11088)\n* Properly support PEP 695 generics syntax by [@Viicos](https://github.com/Viicos) in [#11189](https://github.com/pydantic/pydantic/pull/11189)\n* Properly support type variable defaults by [@Viicos](https://github.com/Viicos) in [#11332](https://github.com/pydantic/pydantic/pull/11332)\n\n#### Changes\n\n* Rework `create_model` field definitions format by [@Viicos](https://github.com/Viicos) in [#11032](https://github.com/pydantic/pydantic/pull/11032)\n* Raise a deprecation warning when a field is annotated as final with a default value by [@Viicos](https://github.com/Viicos) in [#11168](https://github.com/pydantic/pydantic/pull/11168)\n* Deprecate accessing `model_fields` and `model_computed_fields` on instances by [@Viicos](https://github.com/Viicos) in [#11169](https://github.com/pydantic/pydantic/pull/11169)\n* Move core schema generation logic for path types inside the `GenerateSchema` class by [@sydney-runkle](https://github.com/sydney-runkle) in [#10846](https://github.com/pydantic/pydantic/pull/10846)\n* Move `deque` schema gen to `GenerateSchema` class by [@sydney-runkle](https://github.com/sydney-runkle) in [#11239](https://github.com/pydantic/pydantic/pull/11239)\n* Move `Mapping` schema gen to `GenerateSchema` to complete removal of `prepare_annotations_for_known_type` workaround by [@sydney-runkle](https://github.com/sydney-runkle) in [#11247](https://github.com/pydantic/pydantic/pull/11247)\n* Remove Python 3.8 Support by [@sydney-runkle](https://github.com/sydney-runkle) in [#11258](https://github.com/pydantic/pydantic/pull/11258)\n* Disable `pydantic-core` core schema validation by [@sydney-runkle](https://github.com/sydney-runkle) in [#11271](https://github.com/pydantic/pydantic/pull/11271)\n\n#### Performance\n\n* Only evaluate `FieldInfo` annotations if required during schema building by [@Viicos](https://github.com/Viicos) in [#10769](https://github.com/pydantic/pydantic/pull/10769)\n* Optimize calls to `get_type_ref` by [@Viicos](https://github.com/Viicos) in [#10863](https://github.com/pydantic/pydantic/pull/10863)\n* Improve `__setattr__` performance of Pydantic models by caching setter functions by [@MarkusSintonen](https://github.com/MarkusSintonen) in [#10868](https://github.com/pydantic/pydantic/pull/10868)\n* Improve annotation application performance by [@Viicos](https://github.com/Viicos) in [#11186](https://github.com/pydantic/pydantic/pull/11186)\n* Improve performance of `_typing_extra` module by [@Viicos](https://github.com/Viicos) in [#11255](https://github.com/pydantic/pydantic/pull/11255)\n* Refactor and optimize schema cleaning logic by [@Viicos](https://github.com/Viicos) and [@MarkusSintonen](https://github.com/MarkusSintonen) in [#11244](https://github.com/pydantic/pydantic/pull/11244)\n\n#### Fixes\n\n* Add validation tests for `_internal/_validators.py` by [@tkasuz](https://github.com/tkasuz) in [#10763](https://github.com/pydantic/pydantic/pull/10763)\n* Improve `TypeAdapter` instance repr by [@sydney-runkle](https://github.com/sydney-runkle) in [#10872](https://github.com/pydantic/pydantic/pull/10872)\n* Revert \"ci: use locally built pydantic-core with debug symbols by [@sydney-runkle](https://github.com/sydney-runkle) in [#10942](https://github.com/pydantic/pydantic/pull/10942)\n* Re-enable all FastAPI tests by [@tamird](https://github.com/tamird) in [#10948](https://github.com/pydantic/pydantic/pull/10948)\n* Fix typo in HISTORY.md. by [@felixxm](https://github.com/felixxm) in [#11077](https://github.com/pydantic/pydantic/pull/11077)\n* Infer final fields with a default value as class variables in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11121](https://github.com/pydantic/pydantic/pull/11121)\n* Recursively unpack `Literal` values if using PEP 695 type aliases by [@Viicos](https://github.com/Viicos) in [#11114](https://github.com/pydantic/pydantic/pull/11114)\n* Override `__subclasscheck__` on `ModelMetaclass` to avoid memory leak and performance issues by [@Viicos](https://github.com/Viicos) in [#11116](https://github.com/pydantic/pydantic/pull/11116)\n* Remove unused `_extract_get_pydantic_json_schema()` parameter by [@Viicos](https://github.com/Viicos) in [#11155](https://github.com/pydantic/pydantic/pull/11155)\n* Add FastAPI and SQLModel to third-party tests by [@sydney-runkle](https://github.com/sydney-runkle) in [#11044](https://github.com/pydantic/pydantic/pull/11044)\n* Fix conditional expressions syntax for third-party tests by [@Viicos](https://github.com/Viicos) in [#11162](https://github.com/pydantic/pydantic/pull/11162)\n* Move FastAPI tests to third-party workflow by [@Viicos](https://github.com/Viicos) in [#11164](https://github.com/pydantic/pydantic/pull/11164)\n* Improve discriminated union error message for invalid union variants by [@Viicos](https://github.com/Viicos) in [#11161](https://github.com/pydantic/pydantic/pull/11161)\n* Unpack PEP 695 type aliases if using the `Annotated` form by [@Viicos](https://github.com/Viicos) in [#11109](https://github.com/pydantic/pydantic/pull/11109)\n* Include `openapi-python-client` check in issue creation for third-party failures, use `main` branch by [@sydney-runkle](https://github.com/sydney-runkle) in [#11182](https://github.com/pydantic/pydantic/pull/11182)\n* Add pandera third-party tests by [@Viicos](https://github.com/Viicos) in [#11193](https://github.com/pydantic/pydantic/pull/11193)\n* Add ODMantic third-party tests by [@sydney-runkle](https://github.com/sydney-runkle) in [#11197](https://github.com/pydantic/pydantic/pull/11197)\n* Add missing stacklevel in `deprecated_instance_property` warning by [@Viicos](https://github.com/Viicos) in [#11200](https://github.com/pydantic/pydantic/pull/11200)\n* Copy `WithJsonSchema` schema to avoid sharing mutated data by [@thejcannon](https://github.com/thejcannon) in [#11014](https://github.com/pydantic/pydantic/pull/11014)\n* Do not cache parametrized models when in the process of parametrizing another model by [@Viicos](https://github.com/Viicos) in [#10704](https://github.com/pydantic/pydantic/pull/10704)\n* Re-enable Beanie third-party tests by [@Viicos](https://github.com/Viicos) in [#11214](https://github.com/pydantic/pydantic/pull/11214)\n* Add discriminated union related metadata entries to the `CoreMetadata` definition by [@Viicos](https://github.com/Viicos) in [#11216](https://github.com/pydantic/pydantic/pull/11216)\n* Consolidate schema definitions logic in the `_Definitions` class by [@Viicos](https://github.com/Viicos) in [#11208](https://github.com/pydantic/pydantic/pull/11208)\n* Support initializing root model fields with values of the `root` type in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11212](https://github.com/pydantic/pydantic/pull/11212)\n* Fix various issues with dataclasses and `use_attribute_docstrings` by [@Viicos](https://github.com/Viicos) in [#11246](https://github.com/pydantic/pydantic/pull/11246)\n* Only compute normalized decimal places if necessary in `decimal_places_validator` by [@misrasaurabh1](https://github.com/misrasaurabh1) in [#11281](https://github.com/pydantic/pydantic/pull/11281)\n* Fix two misplaced sentences in validation errors documentation by [@ananiavito](https://github.com/ananiavito) in [#11302](https://github.com/pydantic/pydantic/pull/11302)\n* Fix mkdocstrings inventory example in documentation by [@pawamoy](https://github.com/pawamoy) in [#11311](https://github.com/pydantic/pydantic/pull/11311)\n* Add support for `validation_alias` in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11295](https://github.com/pydantic/pydantic/pull/11295)\n* Do not transform model serializer functions as class methods in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11298](https://github.com/pydantic/pydantic/pull/11298)\n* Simplify `GenerateJsonSchema.literal_schema()` implementation by [@misrasaurabh1](https://github.com/misrasaurabh1) in [#11321](https://github.com/pydantic/pydantic/pull/11321)\n* Add additional allowed schemes for `ClickHouseDsn` by [@Maze21127](https://github.com/Maze21127) in [#11319](https://github.com/pydantic/pydantic/pull/11319)\n* Coerce decimal constraints to `Decimal` instances by [@Viicos](https://github.com/Viicos) in [#11350](https://github.com/pydantic/pydantic/pull/11350)\n* Fix `ValueError` on year zero by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1583](https://github.com/pydantic/pydantic-core/pull/1583)\n\n#### Packaging\n\n* Bump dawidd6/action-download-artifact from 6 to 7 by [@dependabot](https://github.com/dependabot) in [#11018](https://github.com/pydantic/pydantic/pull/11018)\n* Re-enable memray related tests on Python 3.12+ by [@Viicos](https://github.com/Viicos) in [#11191](https://github.com/pydantic/pydantic/pull/11191)\n* Bump astral-sh/setup-uv to 5 by [@dependabot](https://github.com/dependabot) in [#11205](https://github.com/pydantic/pydantic/pull/11205)\n* Bump `ruff` to v0.9.0 by [@sydney-runkle](https://github.com/sydney-runkle) in [#11254](https://github.com/pydantic/pydantic/pull/11254)\n* Regular `uv.lock` deps update by [@sydney-runkle](https://github.com/sydney-runkle) in [#11333](https://github.com/pydantic/pydantic/pull/11333)\n* Add a `check_pydantic_core_version()` function by [@Viicos](https://github.com/Viicos) in [#11324](https://github.com/pydantic/pydantic/pull/11324)\n* Remove `greenlet` development dependency by [@Viicos](https://github.com/Viicos) in [#11351](https://github.com/pydantic/pydantic/pull/11351)\n* Bump `pydantic-core` to v2.28.0 by [@Viicos](https://github.com/Viicos) in [#11364](https://github.com/pydantic/pydantic/pull/11364)\n\n### New Contributors\n\n* [@FyZzyss](https://github.com/FyZzyss) made their first contribution in [#10789](https://github.com/pydantic/pydantic/pull/10789)\n* [@tamird](https://github.com/tamird) made their first contribution in [#10948](https://github.com/pydantic/pydantic/pull/10948)\n* [@felixxm](https://github.com/felixxm) made their first contribution in [#11077](https://github.com/pydantic/pydantic/pull/11077)\n* [@alexprabhat99](https://github.com/alexprabhat99) made their first contribution in [#11082](https://github.com/pydantic/pydantic/pull/11082)\n* [@Kharianne](https://github.com/Kharianne) made their first contribution in [#11111](https://github.com/pydantic/pydantic/pull/11111)\n* [@mdaffad](https://github.com/mdaffad) made their first contribution in [#11177](https://github.com/pydantic/pydantic/pull/11177)\n* [@thejcannon](https://github.com/thejcannon) made their first contribution in [#11014](https://github.com/pydantic/pydantic/pull/11014)\n* [@thomasfrimannkoren](https://github.com/thomasfrimannkoren) made their first contribution in [#11251](https://github.com/pydantic/pydantic/pull/11251)\n* [@usernameMAI](https://github.com/usernameMAI) made their first contribution in [#11275](https://github.com/pydantic/pydantic/pull/11275)\n* [@ananiavito](https://github.com/ananiavito) made their first contribution in [#11302](https://github.com/pydantic/pydantic/pull/11302)\n* [@pawamoy](https://github.com/pawamoy) made their first contribution in [#11311](https://github.com/pydantic/pydantic/pull/11311)\n* [@Maze21127](https://github.com/Maze21127) made their first contribution in [#11319](https://github.com/pydantic/pydantic/pull/11319)\n\n## v2.10.6 (2025-01-23)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.6)\n\n### What's Changed\n\n#### Fixes\n\n* Fix JSON Schema reference collection with `'examples'` keys by [@Viicos](https://github.com/Viicos) in [#11325](https://github.com/pydantic/pydantic/pull/11325)\n* Fix url python serialization by [@sydney-runkle](https://github.com/sydney-runkle) in [#11331](https://github.com/pydantic/pydantic/pull/11331)\n\n## v2.10.5 (2025-01-08)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.5)\n\n### What's Changed\n\n#### Fixes\n\n* Remove custom MRO implementation of Pydantic models by [@Viicos](https://github.com/Viicos) in [#11184](https://github.com/pydantic/pydantic/pull/11184)\n* Fix URL serialization for unions by [@sydney-runkle](https://github.com/sydney-runkle) in [#11233](https://github.com/pydantic/pydantic/pull/11233)\n\n## v2.10.4 (2024-12-18)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.4)\n\n### What's Changed\n\n#### Fixes\n\n* Fix for comparison of `AnyUrl` objects by [@alexprabhat99](https://github.com/alexprabhat99) in [#11082](https://github.com/pydantic/pydantic/pull/11082)\n* Properly fetch PEP 695 type params for functions, do not fetch annotations from signature by [@Viicos](https://github.com/Viicos) in [#11093](https://github.com/pydantic/pydantic/pull/11093)\n* Include JSON Schema input core schema in function schemas by [@Viicos](https://github.com/Viicos) in [#11085](https://github.com/pydantic/pydantic/pull/11085)\n* Add `len` to `_BaseUrl` to avoid TypeError by [@Kharianne](https://github.com/Kharianne) in [#11111](https://github.com/pydantic/pydantic/pull/11111)\n* Make sure the type reference is removed from the seen references by [@Viicos](https://github.com/Viicos) in [#11143](https://github.com/pydantic/pydantic/pull/11143)\n\n### New Contributors\n\n* [@FyZzyss](https://github.com/FyZzyss) made their first contribution in [#10789](https://github.com/pydantic/pydantic/pull/10789)\n* [@tamird](https://github.com/tamird) made their first contribution in [#10948](https://github.com/pydantic/pydantic/pull/10948)\n* [@felixxm](https://github.com/felixxm) made their first contribution in [#11077](https://github.com/pydantic/pydantic/pull/11077)\n* [@alexprabhat99](https://github.com/alexprabhat99) made their first contribution in [#11082](https://github.com/pydantic/pydantic/pull/11082)\n* [@Kharianne](https://github.com/Kharianne) made their first contribution in [#11111](https://github.com/pydantic/pydantic/pull/11111)\n\n#### Packaging\n\n* Bump `pydantic-core` to v2.27.2 by [@davidhewitt](https://github.com/davidhewitt) in [#11138](https://github.com/pydantic/pydantic/pull/11138)\n\n## v2.10.3 (2024-12-03)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.3)\n\n### What's Changed\n\n#### Fixes\n\n* Set fields when `defer_build` is set on Pydantic dataclasses by [@Viicos](https://github.com/Viicos) in [#10984](https://github.com/pydantic/pydantic/pull/10984)\n* Do not resolve the JSON Schema reference for `dict` core schema keys by [@Viicos](https://github.com/Viicos) in [#10989](https://github.com/pydantic/pydantic/pull/10989)\n* Use the globals of the function when evaluating the return type for `PlainSerializer` and `WrapSerializer` functions by [@Viicos](https://github.com/Viicos) in [#11008](https://github.com/pydantic/pydantic/pull/11008)\n* Fix host required enforcement for urls to be compatible with v2.9 behavior by [@sydney-runkle](https://github.com/sydney-runkle) in [#11027](https://github.com/pydantic/pydantic/pull/11027)\n* Add a `default_factory_takes_validated_data` property to `FieldInfo` by [@Viicos](https://github.com/Viicos) in [#11034](https://github.com/pydantic/pydantic/pull/11034)\n* Fix url json schema in `serialization` mode by [@sydney-runkle](https://github.com/sydney-runkle) in [#11035](https://github.com/pydantic/pydantic/pull/11035)\n\n## v2.10.2 (2024-11-25)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.2)\n\n### What's Changed\n\n#### Fixes\n\n* Only evaluate FieldInfo annotations if required during schema building by [@Viicos](https://github.com/Viicos) in [#10769](https://github.com/pydantic/pydantic/pull/10769)\n* Do not evaluate annotations for private fields by [@Viicos](https://github.com/Viicos) in [#10962](https://github.com/pydantic/pydantic/pull/10962)\n* Support serialization as any for `Secret` types and `Url` types by [@sydney-runkle](https://github.com/sydney-runkle) in [#10947](https://github.com/pydantic/pydantic/pull/10947)\n* Fix type hint of `Field.default` to be compatible with Python 3.8 and 3.9 by [@Viicos](https://github.com/Viicos) in [#10972](https://github.com/pydantic/pydantic/pull/10972)\n* Add hashing support for URL types by [@sydney-runkle](https://github.com/sydney-runkle) in [#10975](https://github.com/pydantic/pydantic/pull/10975)\n* Hide `BaseModel.__replace__` definition from type checkers by [@Viicos](https://github.com/Viicos) in [#10979](https://github.com/pydantic/pydantic/pull/10979)\n\n## v2.10.1 (2024-11-21)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.1)\n\n### What's Changed\n\n#### Fixes\n\n* Use the correct frame when instantiating a parametrized `TypeAdapter` by [@Viicos](https://github.com/Viicos) in [#10893](https://github.com/pydantic/pydantic/pull/10893)\n* Relax check for validated data in `default_factory` utils by [@sydney-runkle](https://github.com/sydney-runkle) in [#10909](https://github.com/pydantic/pydantic/pull/10909)\n* Fix type checking issue with `model_fields` and `model_computed_fields` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10911](https://github.com/pydantic/pydantic/pull/10911)\n* Use the parent configuration during schema generation for stdlib `dataclass`es by [@sydney-runkle](https://github.com/sydney-runkle) in [#10928](https://github.com/pydantic/pydantic/pull/10928)\n* Use the `globals` of the function when evaluating the return type of serializers and `computed_field`s by [@Viicos](https://github.com/Viicos) in [#10929](https://github.com/pydantic/pydantic/pull/10929)\n* Fix URL constraint application by [@sydney-runkle](https://github.com/sydney-runkle) in [#10922](https://github.com/pydantic/pydantic/pull/10922)\n* Fix URL equality with different validation methods by [@sydney-runkle](https://github.com/sydney-runkle) in [#10934](https://github.com/pydantic/pydantic/pull/10934)\n* Fix JSON schema title when specified as `''` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10936](https://github.com/pydantic/pydantic/pull/10936)\n* Fix `python` mode serialization for `complex` inference by [@sydney-runkle](https://github.com/sydney-runkle) in [pydantic-core#1549](https://github.com/pydantic/pydantic-core/pull/1549)\n\n#### Packaging\n\n* Bump `pydantic-core` version to `v2.27.1` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10938](https://github.com/pydantic/pydantic/pull/10938)\n\n### New Contributors\n\n## v2.10.0 (2024-11-20)\n\nThe code released in v2.10.0 is practically identical to that of v2.10.0b2.\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.0)\n\nSee the [v2.10 release blog post](https://pydantic.dev/articles/pydantic-v2-10-release) for the highlights!\n\n### What's Changed\n\n#### New Features\n\n* Support `fractions.Fraction` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10318](https://github.com/pydantic/pydantic/pull/10318)\n* Support `Hashable` for json validation by [@sydney-runkle](https://github.com/sydney-runkle) in [#10324](https://github.com/pydantic/pydantic/pull/10324)\n* Add a `SocketPath` type for `linux` systems by [@theunkn0wn1](https://github.com/theunkn0wn1) in [#10378](https://github.com/pydantic/pydantic/pull/10378)\n* Allow arbitrary refs in JSON schema `examples` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10417](https://github.com/pydantic/pydantic/pull/10417)\n* Support `defer_build` for Pydantic dataclasses by [@Viicos](https://github.com/Viicos) in [#10313](https://github.com/pydantic/pydantic/pull/10313)\n* Adding v1 / v2 incompatibility warning for nested v1 model by [@sydney-runkle](https://github.com/sydney-runkle) in [#10431](https://github.com/pydantic/pydantic/pull/10431)\n* Add support for unpacked `TypedDict` to type hint variadic keyword arguments with `@validate_call` by [@Viicos](https://github.com/Viicos) in [#10416](https://github.com/pydantic/pydantic/pull/10416)\n* Support compiled patterns in `protected_namespaces` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10522](https://github.com/pydantic/pydantic/pull/10522)\n* Add support for `propertyNames` in JSON schema by [@FlorianSW](https://github.com/FlorianSW) in [#10478](https://github.com/pydantic/pydantic/pull/10478)\n* Adding `__replace__` protocol for Python 3.13+ support by [@sydney-runkle](https://github.com/sydney-runkle) in [#10596](https://github.com/pydantic/pydantic/pull/10596)\n* Expose public `sort` method for JSON schema generation by [@sydney-runkle](https://github.com/sydney-runkle) in [#10595](https://github.com/pydantic/pydantic/pull/10595)\n* Add runtime validation of `@validate_call` callable argument by [@kc0506](https://github.com/kc0506) in [#10627](https://github.com/pydantic/pydantic/pull/10627)\n* Add `experimental_allow_partial` support by [@samuelcolvin](https://github.com/samuelcolvin) in [#10748](https://github.com/pydantic/pydantic/pull/10748)\n* Support default factories taking validated data as an argument by [@Viicos](https://github.com/Viicos) in [#10678](https://github.com/pydantic/pydantic/pull/10678)\n* Allow subclassing `ValidationError` and `PydanticCustomError` by [@Youssefares](https://github.com/Youssefares) in [pydantic/pydantic-core#1413](https://github.com/pydantic/pydantic-core/pull/1413)\n* Add `trailing-strings` support to `experimental_allow_partial` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10825](https://github.com/pydantic/pydantic/pull/10825)\n* Add `rebuild()` method for `TypeAdapter` and simplify `defer_build` patterns by [@sydney-runkle](https://github.com/sydney-runkle) in [#10537](https://github.com/pydantic/pydantic/pull/10537)\n* Improve `TypeAdapter` instance repr by [@sydney-runkle](https://github.com/sydney-runkle) in [#10872](https://github.com/pydantic/pydantic/pull/10872)\n\n#### Changes\n\n* Don't allow customization of `SchemaGenerator` until interface is more stable by [@sydney-runkle](https://github.com/sydney-runkle) in [#10303](https://github.com/pydantic/pydantic/pull/10303)\n* Cleanly `defer_build` on `TypeAdapters`, removing experimental flag by [@sydney-runkle](https://github.com/sydney-runkle) in [#10329](https://github.com/pydantic/pydantic/pull/10329)\n* Fix `mro` of generic subclass by [@kc0506](https://github.com/kc0506) in [#10100](https://github.com/pydantic/pydantic/pull/10100)\n* Strip whitespaces on JSON Schema title generation by [@sydney-runkle](https://github.com/sydney-runkle) in [#10404](https://github.com/pydantic/pydantic/pull/10404)\n* Use `b64decode` and `b64encode` for `Base64Bytes` type by [@sydney-runkle](https://github.com/sydney-runkle) in [#10486](https://github.com/pydantic/pydantic/pull/10486)\n* Relax protected namespace config default by [@sydney-runkle](https://github.com/sydney-runkle) in [#10441](https://github.com/pydantic/pydantic/pull/10441)\n* Revalidate parametrized generics if instance's origin is subclass of OG class by [@sydney-runkle](https://github.com/sydney-runkle) in [#10666](https://github.com/pydantic/pydantic/pull/10666)\n* Warn if configuration is specified on the `@dataclass` decorator and with the `__pydantic_config__` attribute by [@sydney-runkle](https://github.com/sydney-runkle) in [#10406](https://github.com/pydantic/pydantic/pull/10406)\n* Recommend against using `Ellipsis` (...) with `Field` by [@Viicos](https://github.com/Viicos) in [#10661](https://github.com/pydantic/pydantic/pull/10661)\n* Migrate to subclassing instead of annotated approach for pydantic url types by [@sydney-runkle](https://github.com/sydney-runkle) in [#10662](https://github.com/pydantic/pydantic/pull/10662)\n* Change JSON schema generation of `Literal`s and `Enums` by [@Viicos](https://github.com/Viicos) in [#10692](https://github.com/pydantic/pydantic/pull/10692)\n* Simplify unions involving `Any` or `Never` when replacing type variables by [@Viicos](https://github.com/Viicos) in [#10338](https://github.com/pydantic/pydantic/pull/10338)\n* Do not require padding when decoding `base64` bytes by [@bschoenmaeckers](https://github.com/bschoenmaeckers) in [pydantic/pydantic-core#1448](https://github.com/pydantic/pydantic-core/pull/1448)\n* Support dates all the way to 1BC by [@changhc](https://github.com/changhc) in [pydantic/speedate#77](https://github.com/pydantic/speedate/pull/77)\n\n#### Performance\n\n* Schema cleaning: skip unnecessary copies during schema walking by [@Viicos](https://github.com/Viicos) in [#10286](https://github.com/pydantic/pydantic/pull/10286)\n* Refactor namespace logic for annotations evaluation by [@Viicos](https://github.com/Viicos) in [#10530](https://github.com/pydantic/pydantic/pull/10530)\n* Improve email regexp on edge cases by [@AlekseyLobanov](https://github.com/AlekseyLobanov) in [#10601](https://github.com/pydantic/pydantic/pull/10601)\n* `CoreMetadata` refactor with an emphasis on documentation, schema build time performance, and reducing complexity by [@sydney-runkle](https://github.com/sydney-runkle) in [#10675](https://github.com/pydantic/pydantic/pull/10675)\n\n#### Packaging\n\n* Bump `pydantic-core` to `v2.27.0` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10825](https://github.com/pydantic/pydantic/pull/10825)\n* Replaced pdm with uv by [@frfahim](https://github.com/frfahim) in [#10727](https://github.com/pydantic/pydantic/pull/10727)\n\n#### Fixes\n\n* Remove guarding check on `computed_field` with `field_serializer` by [@nix010](https://github.com/nix010) in [#10390](https://github.com/pydantic/pydantic/pull/10390)\n* Fix `Predicate` issue in `v2.9.0` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10321](https://github.com/pydantic/pydantic/pull/10321)\n* Fixing `annotated-types` bound by [@sydney-runkle](https://github.com/sydney-runkle) in [#10327](https://github.com/pydantic/pydantic/pull/10327)\n* Turn `tzdata` install requirement into optional `timezone` dependency by [@jakob-keller](https://github.com/jakob-keller) in [#10331](https://github.com/pydantic/pydantic/pull/10331)\n* Use correct types namespace when building `namedtuple` core schemas by [@Viicos](https://github.com/Viicos) in [#10337](https://github.com/pydantic/pydantic/pull/10337)\n* Fix evaluation of stringified annotations during namespace inspection by [@Viicos](https://github.com/Viicos) in [#10347](https://github.com/pydantic/pydantic/pull/10347)\n* Fix `IncEx` type alias definition by [@Viicos](https://github.com/Viicos) in [#10339](https://github.com/pydantic/pydantic/pull/10339)\n* Do not error when trying to evaluate annotations of private attributes by [@Viicos](https://github.com/Viicos) in [#10358](https://github.com/pydantic/pydantic/pull/10358)\n* Fix nested type statement by [@kc0506](https://github.com/kc0506) in [#10369](https://github.com/pydantic/pydantic/pull/10369)\n* Improve typing of `ModelMetaclass.mro` by [@Viicos](https://github.com/Viicos) in [#10372](https://github.com/pydantic/pydantic/pull/10372)\n* Fix class access of deprecated `computed_field`s by [@Viicos](https://github.com/Viicos) in [#10391](https://github.com/pydantic/pydantic/pull/10391)\n* Make sure `inspect.iscoroutinefunction` works on coroutines decorated with `@validate_call` by [@MovisLi](https://github.com/MovisLi) in [#10374](https://github.com/pydantic/pydantic/pull/10374)\n* Fix `NameError` when using `validate_call` with PEP 695 on a class by [@kc0506](https://github.com/kc0506) in [#10380](https://github.com/pydantic/pydantic/pull/10380)\n* Fix `ZoneInfo` with various invalid types by [@sydney-runkle](https://github.com/sydney-runkle) in [#10408](https://github.com/pydantic/pydantic/pull/10408)\n* Fix `PydanticUserError` on empty `model_config` with annotations by [@cdwilson](https://github.com/cdwilson) in [#10412](https://github.com/pydantic/pydantic/pull/10412)\n* Fix variance issue in `_IncEx` type alias, only allow `True` by [@Viicos](https://github.com/Viicos) in [#10414](https://github.com/pydantic/pydantic/pull/10414)\n* Fix serialization schema generation when using `PlainValidator` by [@Viicos](https://github.com/Viicos) in [#10427](https://github.com/pydantic/pydantic/pull/10427)\n* Fix schema generation error when serialization schema holds references by [@Viicos](https://github.com/Viicos) in [#10444](https://github.com/pydantic/pydantic/pull/10444)\n* Inline references if possible when generating schema for `json_schema_input_type` by [@Viicos](https://github.com/Viicos) in [#10439](https://github.com/pydantic/pydantic/pull/10439)\n* Fix recursive arguments in `Representation` by [@Viicos](https://github.com/Viicos) in [#10480](https://github.com/pydantic/pydantic/pull/10480)\n* Fix representation for builtin function types by [@kschwab](https://github.com/kschwab) in [#10479](https://github.com/pydantic/pydantic/pull/10479)\n* Add python validators for decimal constraints (`max_digits` and `decimal_places`) by [@sydney-runkle](https://github.com/sydney-runkle) in [#10506](https://github.com/pydantic/pydantic/pull/10506)\n* Only fetch `__pydantic_core_schema__` from the current class during schema generation by [@Viicos](https://github.com/Viicos) in [#10518](https://github.com/pydantic/pydantic/pull/10518)\n* Fix `stacklevel` on deprecation warnings for `BaseModel` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10520](https://github.com/pydantic/pydantic/pull/10520)\n* Fix warning `stacklevel` in `BaseModel.__init__` by [@Viicos](https://github.com/Viicos) in [#10526](https://github.com/pydantic/pydantic/pull/10526)\n* Improve error handling for in-evaluable refs for discriminator application by [@sydney-runkle](https://github.com/sydney-runkle) in [#10440](https://github.com/pydantic/pydantic/pull/10440)\n* Change the signature of `ConfigWrapper.core_config` to take the title directly by [@Viicos](https://github.com/Viicos) in [#10562](https://github.com/pydantic/pydantic/pull/10562)\n* Do not use the previous config from the stack for dataclasses without config by [@Viicos](https://github.com/Viicos) in [#10576](https://github.com/pydantic/pydantic/pull/10576)\n* Fix serialization for IP types with `mode='python'` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10594](https://github.com/pydantic/pydantic/pull/10594)\n* Support constraint application for `Base64Etc` types by [@sydney-runkle](https://github.com/sydney-runkle) in [#10584](https://github.com/pydantic/pydantic/pull/10584)\n* Fix `validate_call` ignoring `Field` in `Annotated` by [@kc0506](https://github.com/kc0506) in [#10610](https://github.com/pydantic/pydantic/pull/10610)\n* Raise an error when `Self` is invalid by [@kc0506](https://github.com/kc0506) in [#10609](https://github.com/pydantic/pydantic/pull/10609)\n* Using `core_schema.InvalidSchema` instead of metadata injection + checks by [@sydney-runkle](https://github.com/sydney-runkle) in [#10523](https://github.com/pydantic/pydantic/pull/10523)\n* Tweak type alias logic by [@kc0506](https://github.com/kc0506) in [#10643](https://github.com/pydantic/pydantic/pull/10643)\n* Support usage of `type` with `typing.Self` and type aliases by [@kc0506](https://github.com/kc0506) in [#10621](https://github.com/pydantic/pydantic/pull/10621)\n* Use overloads for `Field` and `PrivateAttr` functions by [@Viicos](https://github.com/Viicos) in [#10651](https://github.com/pydantic/pydantic/pull/10651)\n* Clean up the `mypy` plugin implementation by [@Viicos](https://github.com/Viicos) in [#10669](https://github.com/pydantic/pydantic/pull/10669)\n* Properly check for `typing_extensions` variant of `TypeAliasType` by [@Daraan](https://github.com/Daraan) in [#10713](https://github.com/pydantic/pydantic/pull/10713)\n* Allow any mapping in `BaseModel.model_copy()` by [@Viicos](https://github.com/Viicos) in [#10751](https://github.com/pydantic/pydantic/pull/10751)\n* Fix `isinstance` behavior for urls by [@sydney-runkle](https://github.com/sydney-runkle) in [#10766](https://github.com/pydantic/pydantic/pull/10766)\n* Ensure `cached_property` can be set on Pydantic models by [@Viicos](https://github.com/Viicos) in [#10774](https://github.com/pydantic/pydantic/pull/10774)\n* Fix equality checks for primitives in literals by [@sydney-runkle](https://github.com/sydney-runkle) in [pydantic/pydantic-core#1459](https://github.com/pydantic/pydantic-core/pull/1459)\n* Properly enforce `host_required` for URLs by [@Viicos](https://github.com/Viicos) in [pydantic/pydantic-core#1488](https://github.com/pydantic/pydantic-core/pull/1488)\n* Fix when `coerce_numbers_to_str` enabled and string has invalid Unicode character by [@andrey-berenda](https://github.com/andrey-berenda) in [pydantic/pydantic-core#1515](https://github.com/pydantic/pydantic-core/pull/1515)\n* Fix serializing `complex` values in `Enum`s by [@changhc](https://github.com/changhc) in [pydantic/pydantic-core#1524](https://github.com/pydantic/pydantic-core/pull/1524)\n* Refactor `_typing_extra` module by [@Viicos](https://github.com/Viicos) in [#10725](https://github.com/pydantic/pydantic/pull/10725)\n* Support intuitive equality for urls by [@sydney-runkle](https://github.com/sydney-runkle) in [#10798](https://github.com/pydantic/pydantic/pull/10798)\n* Add `bytearray` to `TypeAdapter.validate_json` signature by [@samuelcolvin](https://github.com/samuelcolvin) in [#10802](https://github.com/pydantic/pydantic/pull/10802)\n* Ensure class access of method descriptors is performed when used as a default with `Field` by [@Viicos](https://github.com/Viicos) in [#10816](https://github.com/pydantic/pydantic/pull/10816)\n* Fix circular import with `validate_call` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10807](https://github.com/pydantic/pydantic/pull/10807)\n* Fix error when using type aliases referencing other type aliases by [@Viicos](https://github.com/Viicos) in [#10809](https://github.com/pydantic/pydantic/pull/10809)\n* Fix `IncEx` type alias to be compatible with mypy by [@Viicos](https://github.com/Viicos) in [#10813](https://github.com/pydantic/pydantic/pull/10813)\n* Make `__signature__` a lazy property, do not deepcopy defaults by [@Viicos](https://github.com/Viicos) in [#10818](https://github.com/pydantic/pydantic/pull/10818)\n* Make `__signature__` lazy for dataclasses, too by [@sydney-runkle](https://github.com/sydney-runkle) in [#10832](https://github.com/pydantic/pydantic/pull/10832)\n* Subclass all single host url classes from `AnyUrl` to preserve behavior from v2.9 by [@sydney-runkle](https://github.com/sydney-runkle) in [#10856](https://github.com/pydantic/pydantic/pull/10856)\n\n### New Contributors\n\n* [@jakob-keller](https://github.com/jakob-keller) made their first contribution in [#10331](https://github.com/pydantic/pydantic/pull/10331)\n* [@MovisLi](https://github.com/MovisLi) made their first contribution in [#10374](https://github.com/pydantic/pydantic/pull/10374)\n* [@joaopalmeiro](https://github.com/joaopalmeiro) made their first contribution in [#10405](https://github.com/pydantic/pydantic/pull/10405)\n* [@theunkn0wn1](https://github.com/theunkn0wn1) made their first contribution in [#10378](https://github.com/pydantic/pydantic/pull/10378)\n* [@cdwilson](https://github.com/cdwilson) made their first contribution in [#10412](https://github.com/pydantic/pydantic/pull/10412)\n* [@dlax](https://github.com/dlax) made their first contribution in [#10421](https://github.com/pydantic/pydantic/pull/10421)\n* [@kschwab](https://github.com/kschwab) made their first contribution in [#10479](https://github.com/pydantic/pydantic/pull/10479)\n* [@santibreo](https://github.com/santibreo) made their first contribution in [#10453](https://github.com/pydantic/pydantic/pull/10453)\n* [@FlorianSW](https://github.com/FlorianSW) made their first contribution in [#10478](https://github.com/pydantic/pydantic/pull/10478)\n* [@tkasuz](https://github.com/tkasuz) made their first contribution in [#10555](https://github.com/pydantic/pydantic/pull/10555)\n* [@AlekseyLobanov](https://github.com/AlekseyLobanov) made their first contribution in [#10601](https://github.com/pydantic/pydantic/pull/10601)\n* [@NiclasvanEyk](https://github.com/NiclasvanEyk) made their first contribution in [#10667](https://github.com/pydantic/pydantic/pull/10667)\n* [@mschoettle](https://github.com/mschoettle) made their first contribution in [#10677](https://github.com/pydantic/pydantic/pull/10677)\n* [@Daraan](https://github.com/Daraan) made their first contribution in [#10713](https://github.com/pydantic/pydantic/pull/10713)\n* [@k4nar](https://github.com/k4nar) made their first contribution in [#10736](https://github.com/pydantic/pydantic/pull/10736)\n* [@UriyaHarpeness](https://github.com/UriyaHarpeness) made their first contribution in [#10740](https://github.com/pydantic/pydantic/pull/10740)\n* [@frfahim](https://github.com/frfahim) made their first contribution in [#10727](https://github.com/pydantic/pydantic/pull/10727)\n\n## v2.10.0b2 (2024-11-13)\n\nPre-release, see [the GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.0b2) for details.\n\n## v2.10.0b1 (2024-11-06)\n\nPre-release, see [the GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.0b1) for details.\n\n\n... see [here](https://docs.pydantic.dev/changelog/#v0322-2019-08-17) for earlier changes.\n", + "description_content_type": "text/markdown", + "author_email": "Samuel Colvin , Eric Jolibois , Hasan Ramezani , Adrian Garcia Badaracco <1755071+adriangb@users.noreply.github.com>, Terrence Dorsey , David Montague , Serge Matveenko , Marcelo Trylesinski , Sydney Runkle , David Hewitt , Alex Hall , Victorien Plot ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Framework :: Hypothesis", + "Framework :: Pydantic", + "Intended Audience :: Developers", + "Intended Audience :: Information Technology", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Internet", + "Topic :: Software Development :: Libraries :: Python Modules" + ], + "requires_dist": [ + "annotated-types>=0.6.0", + "pydantic-core==2.46.5", + "typing-extensions>=4.14.1", + "typing-inspection>=0.4.2", + "email-validator>=2.0.0; extra == 'email'", + "tzdata; (python_version >= '3.9' and platform_system == 'Windows') and extra == 'timezone'" + ], + "requires_python": ">=3.9", + "project_url": [ + "Homepage, https://github.com/pydantic/pydantic", + "Documentation, https://docs.pydantic.dev", + "Funding, https://github.com/sponsors/samuelcolvin", + "Source, https://github.com/pydantic/pydantic", + "Changelog, https://docs.pydantic.dev/latest/changelog/" + ], + "provides_extra": [ + "email", + "timezone" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/2c/9b/59634b7ac631c63b2a37760eb6943af3e29573d6b59a4abc5e7f019d4cee/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "archive_info": { + "hashes": { + "sha256": "54d510bac3ee52247af28ed4bb18a1e799f040ac60fd2bf5ccd4c92f1fbe786f" + }, + "hash": "sha256=54d510bac3ee52247af28ed4bb18a1e799f040ac60fd2bf5ccd4c92f1fbe786f" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "pydantic_core", + "version": "2.46.5", + "summary": "Core functionality for Pydantic validation and serialization", + "description": "# pydantic-core\n\n[![CI](https://github.com/pydantic/pydantic-core/workflows/ci/badge.svg?event=push)](https://github.com/pydantic/pydantic-core/actions?query=event%3Apush+branch%3Amain+workflow%3Aci)\n[![Coverage](https://codecov.io/gh/pydantic/pydantic-core/branch/main/graph/badge.svg)](https://codecov.io/gh/pydantic/pydantic-core)\n[![pypi](https://img.shields.io/pypi/v/pydantic-core.svg)](https://pypi.python.org/pypi/pydantic-core)\n[![versions](https://img.shields.io/pypi/pyversions/pydantic-core.svg)](https://github.com/pydantic/pydantic-core)\n[![license](https://img.shields.io/github/license/pydantic/pydantic-core.svg)](https://github.com/pydantic/pydantic-core/blob/main/LICENSE)\n\nThis package provides the core functionality for [pydantic](https://docs.pydantic.dev) validation and serialization.\n\nPydantic-core is currently around 17x faster than pydantic V1.\nSee [`tests/benchmarks/`](./tests/benchmarks/) for details.\n\n## Example of direct usage\n\n*NOTE: You should not need to use pydantic-core directly; instead, use pydantic, which in turn uses pydantic-core.*\n\n```py\nfrom pydantic_core import SchemaValidator, ValidationError\n\n\nv = SchemaValidator(\n {\n 'type': 'typed-dict',\n 'fields': {\n 'name': {\n 'type': 'typed-dict-field',\n 'schema': {\n 'type': 'str',\n },\n },\n 'age': {\n 'type': 'typed-dict-field',\n 'schema': {\n 'type': 'int',\n 'ge': 18,\n },\n },\n 'is_developer': {\n 'type': 'typed-dict-field',\n 'schema': {\n 'type': 'default',\n 'schema': {'type': 'bool'},\n 'default': True,\n },\n },\n },\n }\n)\n\nr1 = v.validate_python({'name': 'Samuel', 'age': 35})\nassert r1 == {'name': 'Samuel', 'age': 35, 'is_developer': True}\n\n# pydantic-core can also validate JSON directly\nr2 = v.validate_json('{\"name\": \"Samuel\", \"age\": 35}')\nassert r1 == r2\n\ntry:\n v.validate_python({'name': 'Samuel', 'age': 11})\nexcept ValidationError as e:\n print(e)\n \"\"\"\n 1 validation error for model\n age\n Input should be greater than or equal to 18\n [type=greater_than_equal, context={ge: 18}, input_value=11, input_type=int]\n \"\"\"\n```\n\n## Getting Started\n\n### Prerequisites\n\nYou'll need:\n\n1. **[Rust](https://rustup.rs/)** - Rust stable (or nightly for coverage)\n2. **[uv](https://docs.astral.sh/uv/getting-started/installation/)** - Fast Python package manager (will install Python 3.9+ automatically)\n3. **[git](https://git-scm.com/)** - For version control\n4. **[make](https://www.gnu.org/software/make/)** - For running development commands (or use `nmake` on Windows)\n\n### Quick Start\n\n```bash\n# Clone the repository (or from your fork)\ngit clone git@github.com:pydantic/pydantic-core.git\ncd pydantic-core\n\n# Install all dependencies using uv, setup pre-commit hooks, and build the development version\nmake install\n```\n\nVerify your installation by running:\n\n```bash\nmake\n```\n\nThis runs a full development cycle: formatting, building, linting, and testing\n\n### Development Commands\n\nRun `make help` to see all available commands, or use these common ones:\n\n```bash\nmake build-dev # to build the package during development\nmake build-prod # to perform an optimised build for benchmarking\nmake test # to run the tests\nmake testcov # to run the tests and generate a coverage report\nmake lint # to run the linter\nmake format # to format python and rust code\nmake all # to run to run build-dev + format + lint + test\n```\n\n### Useful Resources\n\n* [`python/pydantic_core/_pydantic_core.pyi`](./python/pydantic_core/_pydantic_core.pyi) - Python API types\n* [`python/pydantic_core/core_schema.py`](./python/pydantic_core/core_schema.py) - Core schema definitions\n* [`tests/`](./tests) - Comprehensive usage examples\n\n## Profiling\n\nIt's possible to profile the code using the [`flamegraph` utility from `flamegraph-rs`](https://github.com/flamegraph-rs/flamegraph). (Tested on Linux.) You can install this with `cargo install flamegraph`.\n\nRun `make build-profiling` to install a release build with debugging symbols included (needed for profiling).\n\nOnce that is built, you can profile pytest benchmarks with (e.g.):\n\n```bash\nflamegraph -- pytest tests/benchmarks/test_micro_benchmarks.py -k test_list_of_ints_core_py --benchmark-enable\n```\n\nThe `flamegraph` command will produce an interactive SVG at `flamegraph.svg`.\n\n## Releasing\n\nTBC (needs to be integrated into `pydantic` repository release process).\n\n", + "description_content_type": "text/markdown; charset=UTF-8; variant=GFM", + "home_page": "https://github.com/pydantic/pydantic", + "author_email": "Samuel Colvin , Adrian Garcia Badaracco <1755071+adriangb@users.noreply.github.com>, David Montague , David Hewitt , Sydney Runkle , Victorien Plot ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 3 - Alpha", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Programming Language :: Python :: Implementation :: GraalPy", + "Programming Language :: Rust", + "Framework :: Pydantic", + "Intended Audience :: Developers", + "Intended Audience :: Information Technology", + "Operating System :: POSIX :: Linux", + "Operating System :: Microsoft :: Windows", + "Operating System :: MacOS", + "Typing :: Typed" + ], + "requires_dist": [ + "typing-extensions>=4.14.1" + ], + "requires_python": ">=3.9", + "project_url": [ + "Funding, https://github.com/sponsors/samuelcolvin", + "Homepage, https://github.com/pydantic", + "Source, https://github.com/pydantic/pydantic/tree/main/pydantic-core" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0" + }, + "hash": "sha256=f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "annotated-types", + "version": "0.8.0", + "summary": "Reusable constraint types to use with typing.Annotated", + "description": "# annotated-types\n\n[![CI](https://github.com/annotated-types/annotated-types/workflows/CI/badge.svg?event=push)](https://github.com/annotated-types/annotated-types/actions?query=event%3Apush+branch%3Amain+workflow%3ACI)\n[![pypi](https://img.shields.io/pypi/v/annotated-types.svg)](https://pypi.python.org/pypi/annotated-types)\n[![versions](https://img.shields.io/pypi/pyversions/annotated-types.svg)](https://github.com/annotated-types/annotated-types)\n[![license](https://img.shields.io/github/license/annotated-types/annotated-types.svg)](https://github.com/annotated-types/annotated-types/blob/main/LICENSE)\n\n[PEP-593](https://peps.python.org/pep-0593/) added `typing.Annotated` as a way of\nadding context-specific metadata to existing types, and specifies that\n`Annotated[T, x]` _should_ be treated as `T` by any tool or library without special\nlogic for `x`.\n\nThis package provides metadata objects which can be used to represent common\nconstraints such as upper and lower bounds on scalar values and collection sizes,\na `Predicate` marker for runtime checks, and\ndescriptions of how we intend these metadata to be interpreted. In some cases,\nwe also note alternative representations which do not require this package.\n\n## Install\n\n```bash\npip install annotated-types\n```\n\n## Examples\n\n```python\nfrom typing import Annotated\nfrom annotated_types import Gt, Len, Predicate\n\nclass MyClass:\n age: Annotated[int, Gt(18)] # Valid: 19, 20, ...\n # Invalid: 17, 18, \"19\", 19.0, ...\n factors: list[Annotated[int, Predicate(is_prime)]] # Valid: 2, 3, 5, 7, 11, ...\n # Invalid: 4, 8, -2, 5.0, \"prime\", ...\n\n my_list: Annotated[list[int], Len(0, 10)] # Valid: [], [10, 20, 30, 40, 50]\n # Invalid: (1, 2), [\"abc\"], [0] * 20\n```\n\n## Documentation\n\n_While `annotated-types` avoids runtime checks for performance, users should not\nconstruct invalid combinations such as `MultipleOf(\"non-numeric\")` or `Annotated[int, Len(3)]`.\nDownstream implementors may choose to raise an error, emit a warning, silently ignore\na metadata item, etc., if the metadata objects described below are used with an\nincompatible type - or for any other reason!_\n\n### Gt, Ge, Lt, Le\n\nExpress inclusive and/or exclusive bounds on orderable values - which may be numbers,\ndates, times, strings, sets, etc. Note that the boundary value need not be of the\nsame type that was annotated, so long as they can be compared: `Annotated[int, Gt(1.5)]`\nis fine, for example, and implies that the value is an integer x such that `x > 1.5`.\n\nWe suggest that implementors may also interpret `functools.partial(operator.le, 1.5)`\nas being equivalent to `Gt(1.5)`, for users who wish to avoid a runtime dependency on\nthe `annotated-types` package.\n\nTo be explicit, these types have the following meanings:\n\n* `Gt(x)` - value must be \"Greater Than\" `x` - equivalent to exclusive minimum\n* `Ge(x)` - value must be \"Greater than or Equal\" to `x` - equivalent to inclusive minimum\n* `Lt(x)` - value must be \"Less Than\" `x` - equivalent to exclusive maximum\n* `Le(x)` - value must be \"Less than or Equal\" to `x` - equivalent to inclusive maximum\n\n### Interval\n\n`Interval(gt, ge, lt, le)` allows you to specify an upper and lower bound with a single\nmetadata object. `None` attributes should be ignored, and non-`None` attributes\ntreated as per the single bounds above.\n\n### MultipleOf\n\n`MultipleOf(multiple_of=x)` might be interpreted in two ways:\n\n1. Python semantics, implying `value % multiple_of == 0`, or\n2. [JSONschema semantics](https://json-schema.org/draft/2020-12/json-schema-validation.html#rfc.section.6.2.1),\n where `int(value / multiple_of) == value / multiple_of`.\n\nWe encourage users to be aware of these two common interpretations and their\ndistinct behaviours, especially since very large or non-integer numbers make\nit easy to cause silent data corruption due to floating-point imprecision.\n\nWe encourage libraries to carefully document which interpretation they implement.\n\n### MinLen, MaxLen, Len\n\n`Len()` implies that `min_length <= len(value) <= max_length` - lower and upper bounds are inclusive.\n\nAs well as `Len()` which can optionally include upper and lower bounds, we also\nprovide `MinLen(x)` and `MaxLen(y)` which are equivalent to `Len(min_length=x)`\nand `Len(max_length=y)` respectively.\n\n`Len`, `MinLen`, and `MaxLen` may be used with any type which supports `len(value)`.\n\nExamples of usage:\n\n* `Annotated[list, MaxLen(10)]` (or `Annotated[list, Len(max_length=10)]`) - list must have a length of 10 or less\n* `Annotated[str, MaxLen(10)]` - string must have a length of 10 or less\n* `Annotated[list, MinLen(3)]` (or `Annotated[list, Len(min_length=3)]`) - list must have a length of 3 or more\n* `Annotated[list, Len(4, 6)]` - list must have a length of 4, 5, or 6\n* `Annotated[list, Len(8, 8)]` - list must have a length of exactly 8\n\n#### Changed in v0.4.0\n\n* `min_inclusive` has been renamed to `min_length`, no change in meaning\n* `max_exclusive` has been renamed to `max_length`, upper bound is now **inclusive** instead of **exclusive**\n* The recommendation that slices are interpreted as `Len` has been removed due to ambiguity and different semantic\n meaning of the upper bound in slices vs. `Len`\n\nSee [issue #23](https://github.com/annotated-types/annotated-types/issues/23) for discussion.\n\n### Timezone\n\n`Timezone` can be used with a `datetime` or a `time` to express which timezones\nare allowed. `Annotated[datetime, Timezone(None)]` must be a naive datetime.\n`Timezone[...]` ([literal ellipsis](https://docs.python.org/3/library/constants.html#Ellipsis))\nexpresses that any timezone-aware datetime is allowed. You may also pass a specific\ntimezone string or [`tzinfo`](https://docs.python.org/3/library/datetime.html#tzinfo-objects)\nobject such as `Timezone(timezone.utc)` or `Timezone(\"Africa/Abidjan\")` to express that you only\nallow a specific timezone, though we note that this is often a symptom of fragile design.\n\n#### Changed in v0.x.x\n\n* `Timezone` accepts [`tzinfo`](https://docs.python.org/3/library/datetime.html#tzinfo-objects) objects instead of\n `timezone`, extending compatibility to [`zoneinfo`](https://docs.python.org/3/library/zoneinfo.html) and third party libraries.\n\n### Unit\n\n`Unit(unit: str)` expresses that the annotated numeric value is the magnitude of\na quantity with the specified unit. For example, `Annotated[float, Unit(\"m/s\")]`\nwould be a float representing a velocity in meters per second.\n\nPlease note that `annotated_types` itself makes no attempt to parse or validate\nthe unit string in any way. That is left entirely to downstream libraries,\nsuch as [`pint`](https://pint.readthedocs.io) or\n[`astropy.units`](https://docs.astropy.org/en/stable/units/).\n\nAn example of how a library might use this metadata:\n\n```python\nfrom annotated_types import Unit\nfrom typing import Annotated, TypeVar, Callable, Any, get_origin, get_args\n\n# given a type annotated with a unit:\nMeters = Annotated[float, Unit(\"m\")]\n\n\n# you can cast the annotation to a specific unit type with any\n# callable that accepts a string and returns the desired type\nT = TypeVar(\"T\")\ndef cast_unit(tp: Any, unit_cls: Callable[[str], T]) -> T | None:\n if get_origin(tp) is Annotated:\n for arg in get_args(tp):\n if isinstance(arg, Unit):\n return unit_cls(arg.unit)\n return None\n\n\n# using `pint`\nimport pint\npint_unit = cast_unit(Meters, pint.Unit)\n\n\n# using `astropy.units`\nimport astropy.units as u\nastropy_unit = cast_unit(Meters, u.Unit)\n```\n\n### Predicate\n\n`Predicate(func: Callable)` expresses that `func(value)` is truthy for valid values.\nUsers should prefer the statically inspectable metadata above, but if you need\nthe full power and flexibility of arbitrary runtime predicates... here it is.\n\nFor some common constraints, we provide generic types:\n\n* `LowerCase = Annotated[T, Predicate(str.islower)]`\n* `UpperCase = Annotated[T, Predicate(str.isupper)]`\n* `IsDigit = Annotated[T, Predicate(str.isdigit)]`\n* `IsFinite = Annotated[T, Predicate(math.isfinite)]`\n* `IsNotFinite = Annotated[T, Predicate(Not(math.isfinite))]`\n* `IsNan = Annotated[T, Predicate(math.isnan)]`\n* `IsNotNan = Annotated[T, Predicate(Not(math.isnan))]`\n* `IsInfinite = Annotated[T, Predicate(math.isinf)]`\n* `IsNotInfinite = Annotated[T, Predicate(Not(math.isinf))]`\n\nso that you can write e.g. `x: IsFinite[float] = 2.0` instead of the longer\n(but exactly equivalent) `x: Annotated[float, Predicate(math.isfinite)] = 2.0`.\n\nSome libraries might have special logic to handle known or understandable predicates,\nfor example by checking for `str.isdigit` and using its presence to both call custom\nlogic to enforce digit-only strings, and customise some generated external schema.\nUsers are therefore encouraged to avoid indirection like `lambda s: s.lower()`, in\nfavor of introspectable methods such as `str.lower` or `re.compile(\"pattern\").search`.\n\nTo enable basic negation of commonly used predicates like `math.isnan` without introducing introspection that makes it impossible for implementers to introspect the predicate we provide a `Not` wrapper that simply negates the predicate in an introspectable manner. Several of the predicates listed above are created in this manner.\n\nWe do not specify what behaviour should be expected for predicates that raise\nan exception. For example `Annotated[int, Predicate(str.isdigit)]` might silently\nskip invalid constraints, or statically raise an error; or it might try calling it\nand then propagate or discard the resulting\n`TypeError: descriptor 'isdigit' for 'str' objects doesn't apply to a 'int' object`\nexception. We encourage libraries to document the behaviour they choose.\n\n### Doc\n\n`doc()` can be used to add documentation information in `Annotated`, for function and method parameters, variables, class attributes, return types, and any place where `Annotated` can be used.\n\nIt expects a value that can be statically analyzed, as the main use case is for static analysis, editors, documentation generators, and similar tools.\n\nIt returns a `DocInfo` class with a single attribute `documentation` containing the value passed to `doc()`.\n\nThis is the early adopter's alternative form of the [`typing-doc` proposal](https://github.com/tiangolo/fastapi/blob/typing-doc/typing_doc.md).\n\n### Integrating downstream types with `GroupedMetadata`\n\nImplementers may choose to provide a convenience wrapper that groups multiple pieces of metadata.\nThis can help reduce verbosity and cognitive overhead for users.\nFor example, an implementer like Pydantic might provide a `Field` or `Meta` type that accepts keyword arguments and transforms these into low-level metadata:\n\n```python\nfrom dataclasses import dataclass\nfrom typing import Iterator\nfrom annotated_types import GroupedMetadata, Ge\n\n@dataclass\nclass Field(GroupedMetadata):\n ge: int | None = None\n description: str | None = None\n\n def __iter__(self) -> Iterator[object]:\n # Iterating over a GroupedMetadata object should yield annotated-types\n # constraint metadata objects which describe it as fully as possible,\n # and may include other unknown objects too.\n if self.ge is not None:\n yield Ge(self.ge)\n if self.description is not None:\n yield Description(self.description)\n```\n\nLibraries consuming annotated-types constraints should check for `GroupedMetadata` and unpack it by iterating over the object and treating the results as if they had been \"unpacked\" in the `Annotated` type. The same logic should be applied to the [PEP 646 `Unpack` type](https://peps.python.org/pep-0646/), so that `Annotated[T, Field(...)]`, `Annotated[T, Unpack[Field(...)]]` and `Annotated[T, *Field(...)]` are all treated consistently.\n\nLibraries consuming annotated-types should also ignore any metadata they do not recongize that came from unpacking a `GroupedMetadata`, just like they ignore unrecognized metadata in `Annotated` itself.\n\nOur own `annotated_types.Interval` class is a `GroupedMetadata` which unpacks itself into `Gt`, `Lt`, etc., so this is not an abstract concern. Similarly, `annotated_types.Len` is a `GroupedMetadata` which unpacks itself into `MinLen` (optionally) and `MaxLen`.\n\n### Consuming metadata\n\nWe intend to not be prescriptive as to _how_ the metadata and constraints are used, but as an example of how one might parse constraints from types annotations see our [implementation in `test_main.py`](https://github.com/annotated-types/annotated-types/blob/f59cf6d1b5255a0fe359b93896759a180bec30ae/tests/test_main.py#L94-L103).\n\nIt is up to the implementer to determine how this metadata is used.\nYou could use the metadata for runtime type checking, for generating schemas or to generate example data, amongst other use cases.\n\n## Design & History\n\nThis package was designed at the PyCon 2022 sprints by the maintainers of Pydantic\nand Hypothesis, with the goal of making it as easy as possible for end-users to\nprovide more informative annotations for use by runtime libraries.\n\nIt is deliberately minimal, and following PEP-593 allows considerable downstream\ndiscretion in what (if anything!) they choose to support. Nonetheless, we expect\nthat staying simple and covering _only_ the most common use-cases will give users\nand maintainers the best experience we can. If you'd like more constraints for your\ntypes - follow our lead, by defining them and documenting them downstream!\n", + "description_content_type": "text/markdown", + "author_email": "Adrian Garcia Badaracco <1755071+adriangb@users.noreply.github.com>, Samuel Colvin , Zac Hatfield-Dodds ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 4 - Beta", + "Environment :: Console", + "Environment :: MacOS X", + "Intended Audience :: Developers", + "Intended Audience :: Information Technology", + "License :: OSI Approved :: MIT License", + "Operating System :: POSIX :: Linux", + "Operating System :: Unix", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Topic :: Software Development :: Libraries :: Python Modules", + "Typing :: Typed" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://github.com/annotated-types/annotated-types", + "Source, https://github.com/annotated-types/annotated-types", + "Changelog, https://github.com/annotated-types/annotated-types/releases" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/95/9c/c510029fc6ef33a6275cd2c5d3cecd6613dfd6aa401d57c54f1c18852ccf/setuptools-84.0.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670" + }, + "hash": "sha256=51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "setuptools", + "version": "84.0.0", + "dynamic": [ + "license-file" + ], + "summary": "Most extensible Python build backend with support for C/C++ extension modules", + "description": ".. |pypi-version| image:: https://img.shields.io/pypi/v/setuptools.svg\n :target: https://pypi.org/project/setuptools\n\n.. |py-version| image:: https://img.shields.io/pypi/pyversions/setuptools.svg\n\n.. |test-badge| image:: https://github.com/pypa/setuptools/actions/workflows/main.yml/badge.svg\n :target: https://github.com/pypa/setuptools/actions?query=workflow%3A%22tests%22\n :alt: tests\n\n.. |ruff-badge| image:: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v2.json\n :target: https://github.com/astral-sh/ruff\n :alt: Ruff\n\n.. |docs-badge| image:: https://img.shields.io/readthedocs/setuptools/latest.svg\n :target: https://setuptools.pypa.io\n\n.. |skeleton-badge| image:: https://img.shields.io/badge/skeleton-2026-informational\n :target: https://blog.jaraco.com/skeleton\n\n.. |codecov-badge| image:: https://img.shields.io/codecov/c/github/pypa/setuptools/master.svg?logo=codecov&logoColor=white\n :target: https://codecov.io/gh/pypa/setuptools\n\n.. |tidelift-badge| image:: https://tidelift.com/badges/github/pypa/setuptools?style=flat\n :target: https://tidelift.com/subscription/pkg/pypi-setuptools?utm_source=pypi-setuptools&utm_medium=readme\n\n.. |discord-badge| image:: https://img.shields.io/discord/803025117553754132\n :target: https://discord.com/channels/803025117553754132/815945031150993468\n :alt: Discord\n\n|pypi-version| |py-version| |test-badge| |ruff-badge| |docs-badge| |skeleton-badge| |codecov-badge| |discord-badge|\n\nSee the `Quickstart `_\nand the `User's Guide `_ for\ninstructions on how to use Setuptools.\n\nQuestions and comments should be directed to `GitHub Discussions\n`_.\nBug reports and especially tested patches may be\nsubmitted directly to the `bug tracker\n`_.\n\n\nCode of Conduct\n===============\n\nEveryone interacting in the setuptools project's codebases, issue trackers,\nchat rooms, and fora is expected to follow the\n`PSF Code of Conduct `_.\n\n\nFor Enterprise\n==============\n\nAvailable as part of the Tidelift Subscription.\n\nSetuptools and the maintainers of thousands of other packages are working with Tidelift to deliver one enterprise subscription that covers all of the open source you use.\n\n`Learn more `_.\n", + "description_content_type": "text/x-rst", + "keywords": [ + "CPAN", + "PyPI", + "distutils", + "eggs", + "package", + "management" + ], + "author_email": "Python Packaging Authority ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: System :: Archiving :: Packaging", + "Topic :: System :: Systems Administration", + "Topic :: Utilities" + ], + "requires_dist": [ + "pytest!=8.1.*,>=6; extra == \"test\"", + "virtualenv>=13.0.0; extra == \"test\"", + "wheel>=0.44.0; extra == \"test\"", + "pip>=19.1; extra == \"test\"", + "packaging>=24.2; extra == \"test\"", + "jaraco.envs>=2.2; extra == \"test\"", + "pytest-xdist>=3; extra == \"test\"", + "jaraco.path>=3.7.2; extra == \"test\"", + "build[virtualenv]>=1.0.3; extra == \"test\"", + "filelock>=3.4.0; extra == \"test\"", + "ini2toml[lite]>=0.14; extra == \"test\"", + "tomli-w>=1.0.0; extra == \"test\"", + "pytest-timeout; extra == \"test\"", + "pytest-perf; sys_platform != \"cygwin\" and extra == \"test\"", + "jaraco.develop>=7.21; (python_version >= \"3.9\" and sys_platform != \"cygwin\") and extra == \"test\"", + "pytest-home>=0.5; extra == \"test\"", + "pytest-subprocess; extra == \"test\"", + "pyproject-hooks!=1.1; extra == \"test\"", + "jaraco.test>=5.5; extra == \"test\"", + "sphinx>=3.5; extra == \"doc\"", + "jaraco.packaging>=9.3; extra == \"doc\"", + "rst.linker>=1.9; extra == \"doc\"", + "furo; extra == \"doc\"", + "sphinx-lint; extra == \"doc\"", + "jaraco.tidelift>=1.4; extra == \"doc\"", + "pygments-github-lexers==0.0.5; extra == \"doc\"", + "sphinx-favicon; extra == \"doc\"", + "sphinx-inline-tabs; extra == \"doc\"", + "sphinx-reredirects; extra == \"doc\"", + "sphinxcontrib-towncrier; extra == \"doc\"", + "sphinx-notfound-page<2,>=1; extra == \"doc\"", + "pyproject-hooks!=1.1; extra == \"doc\"", + "towncrier<24.7; extra == \"doc\"", + "packaging>=24.2; extra == \"core\"", + "more_itertools>=8.8; extra == \"core\"", + "jaraco.text>=3.7; extra == \"core\"", + "importlib_metadata>=6; python_version < \"3.10\" and extra == \"core\"", + "tomli>=2.0.1; python_version < \"3.11\" and extra == \"core\"", + "wheel>=0.43.0; extra == \"core\"", + "jaraco.functools>=4; extra == \"core\"", + "more_itertools; extra == \"core\"", + "pytest-checkdocs>=2.14; extra == \"check\"", + "pytest-ruff>=0.2.1; sys_platform != \"cygwin\" and extra == \"check\"", + "ruff>=0.13.0; sys_platform != \"cygwin\" and extra == \"check\"", + "pytest-cov; extra == \"cover\"", + "pytest-enabler>=3.4; extra == \"enabler\"", + "pytest-mypy>=1.0.1; platform_python_implementation != \"PyPy\" and extra == \"type\"", + "mypy==1.18.*; extra == \"type\"", + "importlib_metadata>=7.0.2; python_version < \"3.10\" and extra == \"type\"", + "jaraco.develop>=7.21; sys_platform != \"cygwin\" and extra == \"type\"" + ], + "requires_python": ">=3.10", + "project_url": [ + "Source, https://github.com/pypa/setuptools", + "Documentation, https://setuptools.pypa.io/", + "Changelog, https://setuptools.pypa.io/en/stable/history.html" + ], + "provides_extra": [ + "test", + "doc", + "ssl", + "certs", + "core", + "check", + "cover", + "enabler", + "type" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/4e/d6/1ec1b290f9e0fb067899b61e1d37a30c923068bad260b216dbe37a7d2967/starlette-1.7.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e" + }, + "hash": "sha256=67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "starlette", + "version": "1.7.0", + "summary": "The little ASGI library that shines.", + "description": "

\n \n \n \n \"starlette-logo\"\n \n

\n\n

\n ✨ The little ASGI framework that shines. ✨\n

\n\n---\n\n[![Build Status](https://github.com/Kludex/starlette/workflows/Test%20Suite/badge.svg)](https://github.com/Kludex/starlette/actions)\n[![Package version](https://badge.fury.io/py/starlette.svg)](https://pypi.python.org/pypi/starlette)\n[![Supported Python Version](https://img.shields.io/pypi/pyversions/starlette.svg?color=%2334D058)](https://pypi.org/project/starlette)\n[![Discord](https://img.shields.io/discord/1051468649518616576?logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2)](https://discord.gg/RxKUF5JuHs)\n\n---\n\n**Documentation**: https://starlette.dev\n\n**Source Code**: https://github.com/Kludex/starlette\n\n---\n\n# Starlette\n\nStarlette is a lightweight [ASGI][asgi] framework/toolkit,\nwhich is ideal for building async web services in Python.\n\nIt is production-ready, and gives you the following:\n\n* A lightweight, low-complexity HTTP web framework.\n* WebSocket support.\n* In-process background tasks.\n* Startup and shutdown events.\n* Test client built on `httpx2`.\n* CORS, GZip, Static Files, Streaming responses.\n* Session and Cookie support.\n* 100% test coverage.\n* 100% type annotated codebase.\n* Few hard dependencies.\n* Compatible with `asyncio` and `trio` backends.\n* Great overall performance [against independent benchmarks][techempower].\n\n## Installation\n\n```shell\n$ pip install starlette\n```\n\nYou'll also want to install an ASGI server, such as [uvicorn](https://uvicorn.dev) or any of the [other ASGI server implementations](https://asgi.readthedocs.io/en/latest/implementations.html#servers).\n\n```shell\n$ pip install uvicorn\n```\n\n## Example\n\n```python title=\"main.py\"\nfrom starlette.applications import Starlette\nfrom starlette.responses import JSONResponse\nfrom starlette.routing import Route\n\n\nasync def homepage(request):\n return JSONResponse({'hello': 'world'})\n\nroutes = [\n Route(\"/\", endpoint=homepage)\n]\n\napp = Starlette(debug=True, routes=routes)\n```\n\nThen run the application using Uvicorn:\n\n```shell\n$ uvicorn main:app\n```\n\n## Dependencies\n\nStarlette only requires `anyio`, and the following are optional:\n\n* [`httpx2`][httpx2] - Required if you want to use the `TestClient`.\n* [`jinja2`][jinja2] - Required if you want to use `Jinja2Templates`.\n* [`opentelemetry-api`][opentelemetry-api] - Required for `OpenTelemetryMiddleware`.\n* [`python-multipart`][python-multipart] - Required if you want to support form parsing, with `request.form()`.\n* [`itsdangerous`][itsdangerous] - Required for `SessionMiddleware` support.\n* [`pyyaml`][pyyaml] - Required for `SchemaGenerator` support.\n\nYou can install all of these with `pip install starlette[full]`.\n\n## Framework or Toolkit\n\nStarlette is designed to be used either as a complete framework, or as\nan ASGI toolkit. You can use any of its components independently.\n\n```python\nfrom starlette.responses import PlainTextResponse\n\n\nasync def app(scope, receive, send):\n assert scope['type'] == 'http'\n response = PlainTextResponse('Hello, world!')\n await response(scope, receive, send)\n```\n\nRun the `app` application in `example.py`:\n\n```shell\n$ uvicorn example:app\nINFO: Started server process [11509]\nINFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)\n```\n\nRun uvicorn with `--reload` to enable auto-reloading on code changes.\n\n## Modularity\n\nThe modularity that Starlette is designed on promotes building reusable\ncomponents that can be shared between any ASGI framework. This should enable\nan ecosystem of shared middleware and mountable applications.\n\nThe clean API separation also means it's easier to understand each component\nin isolation.\n\n---\n\n

Starlette is BSD licensed code.
Designed & crafted with care.

— ⭐️ —

\n\n[asgi]: https://asgi.readthedocs.io/en/latest/\n[httpx2]: https://pypi.org/project/httpx2/\n[jinja2]: https://jinja.palletsprojects.com/\n[opentelemetry-api]: https://opentelemetry.io/docs/languages/python/api/\n[python-multipart]: https://multipart.fastapiexpert.com/\n[itsdangerous]: https://itsdangerous.palletsprojects.com/\n[sqlalchemy]: https://www.sqlalchemy.org\n[pyyaml]: https://pyyaml.org/wiki/PyYAMLDocumentation\n[techempower]: https://github.com/TechEmpower/FrameworkBenchmarks\n", + "description_content_type": "text/markdown", + "author_email": "Tom Christie ", + "maintainer_email": "Marcelo Trylesinski ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.md" + ], + "classifier": [ + "Development Status :: 3 - Alpha", + "Environment :: Web Environment", + "Framework :: AnyIO", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Topic :: Internet :: WWW/HTTP" + ], + "requires_dist": [ + "anyio<5,>=4.0.0", + "typing-extensions>=4.10.0; python_version < '3.13'", + "httpx2>=2.0.0; extra == 'full'", + "httpx<0.29.0,>=0.27.0; extra == 'full'", + "itsdangerous; extra == 'full'", + "jinja2; extra == 'full'", + "opentelemetry-api; extra == 'full'", + "python-multipart>=0.0.18; extra == 'full'", + "pyyaml; extra == 'full'" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://github.com/Kludex/starlette", + "Documentation, https://starlette.dev/", + "Changelog, https://starlette.dev/release-notes/", + "Funding, https://github.com/sponsors/Kludex", + "Source, https://github.com/Kludex/starlette" + ], + "provides_extra": [ + "full" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/12/b8/4bd346e22b28902df4d651910f5242c28d84e4a5c2435ca5c3f797ed7e2e/anyio-4.15.1-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101" + }, + "hash": "sha256=6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "anyio", + "version": "4.15.1", + "dynamic": [ + "license-file" + ], + "summary": "High-level concurrency and networking framework on top of asyncio or Trio", + "description": ".. image:: https://github.com/agronholm/anyio/actions/workflows/test.yml/badge.svg\n :target: https://github.com/agronholm/anyio/actions/workflows/test.yml\n :alt: Build Status\n.. image:: https://coveralls.io/repos/github/agronholm/anyio/badge.svg?branch=master\n :target: https://coveralls.io/github/agronholm/anyio?branch=master\n :alt: Code Coverage\n.. image:: https://readthedocs.org/projects/anyio/badge/?version=latest\n :target: https://anyio.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation\n.. image:: https://badges.gitter.im/gitterHQ/gitter.svg\n :target: https://gitter.im/python-trio/AnyIO\n :alt: Gitter chat\n.. image:: https://tidelift.com/badges/package/pypi/anyio\n :target: https://tidelift.com/subscription/pkg/pypi-anyio\n :alt: Tidelift\n\nAnyIO is an asynchronous networking and concurrency library that works on top of either asyncio_ or\nTrio_. It implements Trio-like `structured concurrency`_ (SC) on top of asyncio and works in harmony\nwith the native SC of Trio itself.\n\nApplications and libraries written against AnyIO's API will run unmodified on either asyncio_ or\nTrio_. AnyIO can also be adopted into a library or application incrementally – bit by bit, no full\nrefactoring necessary. It will blend in with the native libraries of your chosen backend.\n\nTo find out why you might want to use AnyIO's APIs instead of asyncio's, you can read about it\n`here `_.\n\nDocumentation\n-------------\n\nView full documentation at: https://anyio.readthedocs.io/\n\nFeatures\n--------\n\nAnyIO offers the following functionality:\n\n* Task groups (nurseries_ in trio terminology)\n* High-level networking (TCP, UDP and UNIX sockets)\n\n * `Happy eyeballs`_ algorithm for TCP connections (more robust than that of asyncio on Python\n 3.8)\n * async/await style UDP sockets (unlike asyncio where you still have to use Transports and\n Protocols)\n\n* A versatile API for byte streams and object streams\n* Inter-task synchronization and communication (locks, conditions, events, semaphores, object\n streams and futures)\n* Worker threads\n* Subprocesses\n* Subinterpreter support for code parallelization (on Python 3.13 and later)\n* Asynchronous file I/O (using worker threads)\n* Signal handling\n* Asynchronous versions of the functools_ and itertools_ modules\n\nAnyIO also comes with its own pytest_ plugin which also supports asynchronous fixtures.\nIt even works with the popular Hypothesis_ library.\n\n.. _asyncio: https://docs.python.org/3/library/asyncio.html\n.. _Trio: https://github.com/python-trio/trio\n.. _structured concurrency: https://en.wikipedia.org/wiki/Structured_concurrency\n.. _nurseries: https://trio.readthedocs.io/en/stable/reference-core.html#nurseries-and-spawning\n.. _Happy eyeballs: https://en.wikipedia.org/wiki/Happy_Eyeballs\n.. _pytest: https://docs.pytest.org/en/latest/\n.. _functools: https://docs.python.org/3/library/functools.html\n.. _itertools: https://docs.python.org/3/library/itertools.html\n.. _Hypothesis: https://hypothesis.works/\n\nSecurity contact information\n----------------------------\n\nTo report a security vulnerability, please use the `Tidelift security contact`_.\nTidelift will coordinate the fix and disclosure.\n\n.. _Tidelift security contact: https://tidelift.com/security\n", + "description_content_type": "text/x-rst", + "author_email": "Alex Grönholm ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Framework :: AnyIO", + "Typing :: Typed", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Programming Language :: Python :: Free Threading :: 2 - Beta" + ], + "requires_dist": [ + "exceptiongroup>=1.0.2; python_version < \"3.11\"", + "idna>=2.8", + "typing_extensions>=4.16.0; python_version < \"3.15\"", + "trio>=0.32.0; extra == \"trio\"" + ], + "requires_python": ">=3.10", + "project_url": [ + "Documentation, https://anyio.readthedocs.io/en/latest/", + "Changelog, https://anyio.readthedocs.io/en/stable/versionhistory.html", + "Source code, https://github.com/agronholm/anyio", + "Issue tracker, https://github.com/agronholm/anyio/issues" + ], + "provides_extra": [ + "trio" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c" + }, + "hash": "sha256=ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "idna", + "version": "3.20", + "summary": "Internationalized Domain Names in Applications (IDNA)", + "description": "# Internationalized Domain Names in Applications (IDNA)\n\nSupport for [Internationalized Domain Names in Applications\n(IDNA)](https://tools.ietf.org/html/rfc5891) and [Unicode IDNA\nCompatibility Processing](https://unicode.org/reports/tr46/). It\nsupersedes the standard library's `encodings.idna`, which only\nimplements the 2003 specification, offering broader script coverage and\nlimiting domains with known security vulnerabilities.\n\n## Usage\n\nPackage may be installed from [PyPI](https://pypi.org/project/idna/) via\nthe typical methods (e.g. `python3 -m pip install idna`)\n\nFor typical usage, the `encode` and `decode` functions will take a\ndomain name argument and perform a conversion to ASCII-compatible encoding\n(known as A-labels), or to Unicode strings (known as U-labels)\nrespectively.\n\n```pycon\n>>> import idna\n>>> idna.encode('ドメイン.テスト')\nb'xn--eckwd4c7c.xn--zckzah'\n>>> print(idna.decode('xn--eckwd4c7c.xn--zckzah'))\nドメイン.テスト\n```\n\nConversions can be applied at a per-label basis using the `ulabel` or\n`alabel` functions for specialized use cases.\n\n\n### Compatibility Mapping (UTS #46)\n\nThis library provides support for [Unicode IDNA Compatibility\nProcessing](https://unicode.org/reports/tr46/) which normalizes input from\ndifferent potential ways a user may input a domain prior to performing the IDNA\nconversion operations. This functionality, known as a\n[mapping](https://tools.ietf.org/html/rfc5895), is considered by the\nspecification to be a local user-interface issue distinct from IDNA\nconversion functionality.\n\nFor example, \"Königsgäßchen\" is not a permissible label as capital letters\nare not allowed. UTS #46 will convert this into lower case prior to applying\nthe IDNA conversion.\n\n```pycon\n>>> import idna\n>>> idna.encode('Königsgäßchen')\n...\nidna.core.InvalidCodepoint: Codepoint U+004B at position 1 of 'Königsgäßchen' not allowed\n>>> idna.encode('Königsgäßchen', uts46=True)\nb'xn--knigsgchen-b4a3dun'\n>>> idna.decode('xn--knigsgchen-b4a3dun')\n'königsgäßchen'\n```\n\nWhen performing a decode operation for display purposes, `decode()`\naccepts a `display=True` argument that leaves any `xn--` label that\nfails to decode unchanged. This is useful for user interface display\nwhere a domain is in use, the A-label form can be presented when it\nis not a valid IDN.\n\n\n## Exceptions\n\nAll errors raised during conversion derive from the `idna.IDNAError`\nbase class. The more specific exceptions are:\n\n* `idna.IDNABidiError` — raised when a label contains an illegal\n combination of left-to-right and right-to-left characters.\n* `idna.InvalidCodepoint` — raised when a label contains a codepoint\n that is INVALID for IDNA.\n* `idna.InvalidCodepointContext` — raised when a CONTEXTO or CONTEXTJ\n codepoint appears in a position whose contextual requirements are\n not satisfied.\n\nExceptions carry machine-readable attributes so that applications do\nnot need to parse the message: `code` is a short, stable identifier\nfor the rule that failed (such as `disallowed_codepoint` or\n`label_too_long`); and, when the failure can be attributed to a\nparticular character, `text` (the label or domain being validated),\n`codepoint` (the offending codepoint as an integer) and `position`\nare set. \n\n\n## Command-line tool\n\nThe package supports command-line usage to convert domain names\nbetween their Unicode and ASCII-compatible forms. It can be run either\nas a module (`python3 -m idna`) or, once installed (such as with `uv\ntool` or `pipx`), via the `idna` script:\n\n```bash\n$ uv tool install idna\n$ idna xn--e1afmkfd.xn--p1ai\nпример.рф\n$ idna пример.рф\nxn--e1afmkfd.xn--p1ai\n```\n\nMode can be specified with `-e`/`--encode` or `-d`/`--decode`, otherwise\nit will be chosen automatically based on the first input. Multiple\ndomains can be supplied either as arguments or through standard input.\nUTS #46 mapping is applied by default, which lets the tool accept\ninputs that aren't strictly valid IDNA 2008 by normalising them first,\npass `--strict` to disable UTS #46.\n\nConversion failures are reported on stderr together with the\noffending input; processing continues with the remaining domains and\nthe tool exits with a non-zero status if any conversion failed.\n\n\n## Additional Notes\n\n* **Python version support**. This library supports Python 3.9 and higher.\n As this library serves as a low-level toolkit for a variety of\n applications, we strive to support all versions of Python that are\n not beyond end-of-life. Free-threaded Python is also supported,\n as the library holds no mutable global state the functions can be\n called concurrently from multiple threads.\n\n* **Unicode version**. The IDNA and UTS #46 lookup tables are generated\n from a specific Unicode release. Some Unicode data depends on the\n running Python's `unicodedata` module, so on an older Python a\n character new to Unicode may be rejected as unknown even if this\n library knows about it.\n\n* **Emoji**. It is an occasional request to support emoji domains in\n this library. Encoding of symbols like emoji is expressly prohibited by\n the IDNA technical standard, and emoji domains are broadly phased\n out across the domain industry due to associated security risks.\n\n* **Regenerating lookup tables**. The IDNA and UTS #46 functionality\n relies upon pre-calculated lookup tables, generated using the\n `idna-data` script in [`tools/`](tools/README.md).\n\n", + "description_content_type": "text/markdown", + "author_email": "Kim Davies ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.md" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Intended Audience :: System Administrators", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Internet :: Name Service (DNS)", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Utilities" + ], + "requires_dist": [ + "ruff >= 0.16.0 ; extra == \"all\"", + "mypy >= 1.11.2 ; extra == \"all\"", + "ty >= 0.0.37 ; extra == \"all\"", + "pytest >= 8.3.2 ; extra == \"all\"", + "hypothesis >= 6.141.1 ; extra == \"all\"", + "coverage >= 7.10.0 ; extra == \"all\"" + ], + "requires_python": ">=3.9", + "project_url": [ + "Changelog, https://github.com/kjd/idna/blob/master/HISTORY.md", + "Issue tracker, https://github.com/kjd/idna/issues", + "Source, https://github.com/kjd/idna" + ], + "provides_extra": [ + "all" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5" + }, + "hash": "sha256=e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "sympy", + "version": "1.14.0", + "dynamic": [ + "author", + "author-email", + "classifier", + "description", + "description-content-type", + "home-page", + "keywords", + "license", + "license-file", + "project-url", + "provides-extra", + "requires-dist", + "requires-python", + "summary" + ], + "summary": "Computer algebra system (CAS) in Python", + "description": "# SymPy\n\n[![pypi version](https://img.shields.io/pypi/v/sympy.svg)](https://pypi.python.org/pypi/sympy)\n[![Join the chat at https://gitter.im/sympy/sympy](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/sympy/sympy?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)\n[![Zenodo Badge](https://zenodo.org/badge/18918/sympy/sympy.svg)](https://zenodo.org/badge/latestdoi/18918/sympy/sympy)\n[![Downloads](https://pepy.tech/badge/sympy/month)](https://pepy.tech/project/sympy)\n[![GitHub Issues](https://img.shields.io/badge/issue_tracking-github-blue.svg)](https://github.com/sympy/sympy/issues)\n[![Git Tutorial](https://img.shields.io/badge/PR-Welcome-%23FF8300.svg?)](https://git-scm.com/book/en/v2/GitHub-Contributing-to-a-Project)\n[![Powered by NumFocus](https://img.shields.io/badge/powered%20by-NumFOCUS-orange.svg?style=flat&colorA=E1523D&colorB=007D8A)](https://numfocus.org)\n[![Commits since last release](https://img.shields.io/github/commits-since/sympy/sympy/latest.svg?longCache=true&style=flat-square&logo=git&logoColor=fff)](https://github.com/sympy/sympy/releases)\n\n[![SymPy Banner](https://github.com/sympy/sympy/raw/master/banner.svg)](https://sympy.org/)\n\n\nSee the [AUTHORS](AUTHORS) file for the list of authors.\n\nAnd many more people helped on the SymPy mailing list, reported bugs,\nhelped organize SymPy's participation in the Google Summer of Code, the\nGoogle Highly Open Participation Contest, Google Code-In, wrote and\nblogged about SymPy...\n\nLicense: New BSD License (see the [LICENSE](LICENSE) file for details) covers all\nfiles in the sympy repository unless stated otherwise.\n\nOur mailing list is at\n.\n\nWe have a community chat at [Gitter](https://gitter.im/sympy/sympy). Feel\nfree to ask us anything there. We have a very welcoming and helpful\ncommunity.\n\n## Download\n\nThe recommended installation method is through Anaconda,\n\n\nYou can also get the latest version of SymPy from\n\n\nTo get the git version do\n\n $ git clone https://github.com/sympy/sympy.git\n\nFor other options (tarballs, debs, etc.), see\n.\n\n## Documentation and Usage\n\nFor in-depth instructions on installation and building the\ndocumentation, see the [SymPy Documentation Style Guide](https://docs.sympy.org/dev/documentation-style-guide.html).\n\nEverything is at:\n\n\n\nYou can generate everything at the above site in your local copy of\nSymPy by:\n\n $ cd doc\n $ make html\n\nThen the docs will be in \\_build/html. If\nyou don't want to read that, here is a short usage:\n\nFrom this directory, start Python and:\n\n``` python\n>>> from sympy import Symbol, cos\n>>> x = Symbol('x')\n>>> e = 1/cos(x)\n>>> print(e.series(x, 0, 10))\n1 + x**2/2 + 5*x**4/24 + 61*x**6/720 + 277*x**8/8064 + O(x**10)\n```\n\nSymPy also comes with a console that is a simple wrapper around the\nclassic python console (or IPython when available) that loads the SymPy\nnamespace and executes some common commands for you.\n\nTo start it, issue:\n\n $ bin/isympy\n\nfrom this directory, if SymPy is not installed or simply:\n\n $ isympy\n\nif SymPy is installed.\n\n## Installation\n\nTo install SymPy using PyPI, run the following command:\n\n $ pip install sympy\n\nTo install SymPy using Anaconda, run the following command:\n\n $ conda install -c anaconda sympy\n\nTo install SymPy from GitHub source, first clone SymPy using `git`:\n\n $ git clone https://github.com/sympy/sympy.git\n\nThen, in the `sympy` repository that you cloned, simply run:\n\n $ pip install .\n\nSee for more information.\n\n## Contributing\n\nWe welcome contributions from anyone, even if you are new to open\nsource. Please read our [Introduction to Contributing](https://docs.sympy.org/dev/contributing/introduction-to-contributing.html)\npage and the [SymPy Documentation Style Guide](https://docs.sympy.org/dev/documentation-style-guide.html). If you\nare new and looking for some way to contribute, a good place to start is\nto look at the issues tagged [Easy to Fix](https://github.com/sympy/sympy/issues?q=is%3Aopen+is%3Aissue+label%3A%22Easy+to+Fix%22).\n\nPlease note that all participants in this project are expected to follow\nour Code of Conduct. By participating in this project you agree to abide\nby its terms. See [CODE\\_OF\\_CONDUCT.md](CODE_OF_CONDUCT.md).\n\n## Tests\n\nTo execute all tests, run:\n\n $./setup.py test\n\nin the current directory.\n\nFor the more fine-grained running of tests or doctests, use `bin/test`\nor respectively `bin/doctest`. The master branch is automatically tested\nby GitHub Actions.\n\nTo test pull requests, use\n[sympy-bot](https://github.com/sympy/sympy-bot).\n\n## Regenerate Experimental LaTeX Parser/Lexer\n\nThe parser and lexer were generated with the [ANTLR4](http://antlr4.org)\ntoolchain in `sympy/parsing/latex/_antlr` and checked into the repo.\nPresently, most users should not need to regenerate these files, but\nif you plan to work on this feature, you will need the `antlr4`\ncommand-line tool (and you must ensure that it is in your `PATH`).\nOne way to get it is:\n\n $ conda install -c conda-forge antlr=4.11.1\n\nAlternatively, follow the instructions on the ANTLR website and download\nthe `antlr-4.11.1-complete.jar`. Then export the `CLASSPATH` as instructed\nand instead of creating `antlr4` as an alias, make it an executable file\nwith the following contents:\n``` bash\n#!/bin/bash\njava -jar /usr/local/lib/antlr-4.11.1-complete.jar \"$@\"\n```\n\nAfter making changes to `sympy/parsing/latex/LaTeX.g4`, run:\n\n $ ./setup.py antlr\n\n## Clean\n\nTo clean everything (thus getting the same tree as in the repository):\n\n $ git clean -Xdf\n\nwhich will clear everything ignored by `.gitignore`, and:\n\n $ git clean -df\n\nto clear all untracked files. You can revert the most recent changes in\ngit with:\n\n $ git reset --hard\n\nWARNING: The above commands will all clear changes you may have made,\nand you will lose them forever. Be sure to check things with `git\nstatus`, `git diff`, `git clean -Xn`, and `git clean -n` before doing any\nof those.\n\n## Bugs\n\nOur issue tracker is at . Please\nreport any bugs that you find. Or, even better, fork the repository on\nGitHub and create a pull request. We welcome all changes, big or small,\nand we will help you make the pull request if you are new to git (just\nask on our mailing list or Gitter Channel). If you further have any queries, you can find answers\non Stack Overflow using the [sympy](https://stackoverflow.com/questions/tagged/sympy) tag.\n\n## Brief History\n\nSymPy was started by Ondřej Čertík in 2005, he wrote some code during\nthe summer, then he wrote some more code during summer 2006. In February\n2007, Fabian Pedregosa joined the project and helped fix many things,\ncontributed documentation, and made it alive again. 5 students (Mateusz\nPaprocki, Brian Jorgensen, Jason Gedge, Robert Schwarz, and Chris Wu)\nimproved SymPy incredibly during summer 2007 as part of the Google\nSummer of Code. Pearu Peterson joined the development during the summer\n2007 and he has made SymPy much more competitive by rewriting the core\nfrom scratch, which has made it from 10x to 100x faster. Jurjen N.E. Bos\nhas contributed pretty-printing and other patches. Fredrik Johansson has\nwritten mpmath and contributed a lot of patches.\n\nSymPy has participated in every Google Summer of Code since 2007. You\ncan see for\nfull details. Each year has improved SymPy by bounds. Most of SymPy's\ndevelopment has come from Google Summer of Code students.\n\nIn 2011, Ondřej Čertík stepped down as lead developer, with Aaron\nMeurer, who also started as a Google Summer of Code student, taking his\nplace. Ondřej Čertík is still active in the community but is too busy\nwith work and family to play a lead development role.\n\nSince then, a lot more people have joined the development and some\npeople have also left. You can see the full list in doc/src/aboutus.rst,\nor online at:\n\n\n\nThe git history goes back to 2007 when development moved from svn to hg.\nTo see the history before that point, look at\n.\n\nYou can use git to see the biggest developers. The command:\n\n $ git shortlog -ns\n\nwill show each developer, sorted by commits to the project. The command:\n\n $ git shortlog -ns --since=\"1 year\"\n\nwill show the top developers from the last year.\n\n## Citation\n\nTo cite SymPy in publications use\n\n> Meurer A, Smith CP, Paprocki M, Čertík O, Kirpichev SB, Rocklin M,\n> Kumar A, Ivanov S, Moore JK, Singh S, Rathnayake T, Vig S, Granger BE,\n> Muller RP, Bonazzi F, Gupta H, Vats S, Johansson F, Pedregosa F, Curry\n> MJ, Terrel AR, Roučka Š, Saboo A, Fernando I, Kulal S, Cimrman R,\n> Scopatz A. (2017) SymPy: symbolic computing in Python. *PeerJ Computer\n> Science* 3:e103 \n\nA BibTeX entry for LaTeX users is\n\n``` bibtex\n@article{10.7717/peerj-cs.103,\n title = {SymPy: symbolic computing in Python},\n author = {Meurer, Aaron and Smith, Christopher P. and Paprocki, Mateusz and \\v{C}ert\\'{i}k, Ond\\v{r}ej and Kirpichev, Sergey B. and Rocklin, Matthew and Kumar, Amit and Ivanov, Sergiu and Moore, Jason K. and Singh, Sartaj and Rathnayake, Thilina and Vig, Sean and Granger, Brian E. and Muller, Richard P. and Bonazzi, Francesco and Gupta, Harsh and Vats, Shivam and Johansson, Fredrik and Pedregosa, Fabian and Curry, Matthew J. and Terrel, Andy R. and Rou\\v{c}ka, \\v{S}t\\v{e}p\\'{a}n and Saboo, Ashutosh and Fernando, Isuru and Kulal, Sumith and Cimrman, Robert and Scopatz, Anthony},\n year = 2017,\n month = Jan,\n keywords = {Python, Computer algebra system, Symbolics},\n abstract = {\n SymPy is an open-source computer algebra system written in pure Python. It is built with a focus on extensibility and ease of use, through both interactive and programmatic applications. These characteristics have led SymPy to become a popular symbolic library for the scientific Python ecosystem. This paper presents the architecture of SymPy, a description of its features, and a discussion of select submodules. The supplementary material provides additional examples and further outlines details of the architecture and features of SymPy.\n },\n volume = 3,\n pages = {e103},\n journal = {PeerJ Computer Science},\n issn = {2376-5992},\n url = {https://doi.org/10.7717/peerj-cs.103},\n doi = {10.7717/peerj-cs.103}\n}\n```\n\nSymPy is BSD licensed, so you are free to use it whatever you like, be\nit academic, commercial, creating forks or derivatives, as long as you\ncopy the BSD statement if you redistribute it (see the LICENSE file for\ndetails). That said, although not required by the SymPy license, if it\nis convenient for you, please cite SymPy when using it in your work and\nalso consider contributing all your changes back, so that we can\nincorporate it and all of us will benefit in the end.\n", + "description_content_type": "text/markdown", + "keywords": [ + "Math", + "CAS" + ], + "home_page": "https://sympy.org", + "author": "SymPy development team", + "author_email": "sympy@googlegroups.com", + "license": "BSD", + "license_file": [ + "LICENSE", + "AUTHORS" + ], + "classifier": [ + "License :: OSI Approved :: BSD License", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Topic :: Scientific/Engineering", + "Topic :: Scientific/Engineering :: Mathematics", + "Topic :: Scientific/Engineering :: Physics", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy" + ], + "requires_dist": [ + "mpmath<1.4,>=1.1.0", + "pytest>=7.1.0; extra == \"dev\"", + "hypothesis>=6.70.0; extra == \"dev\"" + ], + "requires_python": ">=3.9", + "project_url": [ + "Source, https://github.com/sympy/sympy" + ], + "provides_extra": [ + "dev" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c" + }, + "hash": "sha256=a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.1", + "name": "mpmath", + "version": "1.3.0", + "summary": "Python library for arbitrary-precision floating-point arithmetic", + "description": "mpmath\n======\n\n|pypi version| |Build status| |Code coverage status| |Zenodo Badge|\n\n.. |pypi version| image:: https://img.shields.io/pypi/v/mpmath.svg\n :target: https://pypi.python.org/pypi/mpmath\n.. |Build status| image:: https://github.com/fredrik-johansson/mpmath/workflows/test/badge.svg\n :target: https://github.com/fredrik-johansson/mpmath/actions?workflow=test\n.. |Code coverage status| image:: https://codecov.io/gh/fredrik-johansson/mpmath/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/fredrik-johansson/mpmath\n.. |Zenodo Badge| image:: https://zenodo.org/badge/2934512.svg\n :target: https://zenodo.org/badge/latestdoi/2934512\n\nA Python library for arbitrary-precision floating-point arithmetic.\n\nWebsite: http://mpmath.org/\nMain author: Fredrik Johansson \n\nMpmath is free software released under the New BSD License (see the\nLICENSE file for details)\n\n0. History and credits\n----------------------\n\nThe following people (among others) have contributed major patches\nor new features to mpmath:\n\n* Pearu Peterson \n* Mario Pernici \n* Ondrej Certik \n* Vinzent Steinberg \n* Nimish Telang \n* Mike Taschuk \n* Case Van Horsen \n* Jorn Baayen \n* Chris Smith \n* Juan Arias de Reyna \n* Ioannis Tziakos \n* Aaron Meurer \n* Stefan Krastanov \n* Ken Allen \n* Timo Hartmann \n* Sergey B Kirpichev \n* Kris Kuhlman \n* Paul Masson \n* Michael Kagalenko \n* Jonathan Warner \n* Max Gaukler \n* Guillermo Navas-Palencia \n* Nike Dattani \n\nNumerous other people have contributed by reporting bugs,\nrequesting new features, or suggesting improvements to the\ndocumentation.\n\nFor a detailed changelog, including individual contributions,\nsee the CHANGES file.\n\nFredrik's work on mpmath during summer 2008 was sponsored by Google\nas part of the Google Summer of Code program.\n\nFredrik's work on mpmath during summer 2009 was sponsored by the\nAmerican Institute of Mathematics under the support of the National Science\nFoundation Grant No. 0757627 (FRG: L-functions and Modular Forms).\n\nAny opinions, findings, and conclusions or recommendations expressed in this\nmaterial are those of the author(s) and do not necessarily reflect the\nviews of the sponsors.\n\nCredit also goes to:\n\n* The authors of the GMP library and the Python wrapper\n gmpy, enabling mpmath to become much faster at\n high precision\n* The authors of MPFR, pari/gp, MPFUN, and other arbitrary-\n precision libraries, whose documentation has been helpful\n for implementing many of the algorithms in mpmath\n* Wikipedia contributors; Abramowitz & Stegun; Gradshteyn & Ryzhik;\n Wolfram Research for MathWorld and the Wolfram Functions site.\n These are the main references used for special functions\n implementations.\n* George Brandl for developing the Sphinx documentation tool\n used to build mpmath's documentation\n\nRelease history:\n\n* Version 1.3.0 released on March 7, 2023\n* Version 1.2.0 released on February 1, 2021\n* Version 1.1.0 released on December 11, 2018\n* Version 1.0.0 released on September 27, 2017\n* Version 0.19 released on June 10, 2014\n* Version 0.18 released on December 31, 2013\n* Version 0.17 released on February 1, 2011\n* Version 0.16 released on September 24, 2010\n* Version 0.15 released on June 6, 2010\n* Version 0.14 released on February 5, 2010\n* Version 0.13 released on August 13, 2009\n* Version 0.12 released on June 9, 2009\n* Version 0.11 released on January 26, 2009\n* Version 0.10 released on October 15, 2008\n* Version 0.9 released on August 23, 2008\n* Version 0.8 released on April 20, 2008\n* Version 0.7 released on March 12, 2008\n* Version 0.6 released on January 13, 2008\n* Version 0.5 released on November 24, 2007\n* Version 0.4 released on November 3, 2007\n* Version 0.3 released on October 5, 2007\n* Version 0.2 released on October 2, 2007\n* Version 0.1 released on September 27, 2007\n\n1. Download & installation\n--------------------------\n\nMpmath requires Python 2.7 or 3.5 (or later versions). It has been tested\nwith CPython 2.7, 3.5 through 3.7 and for PyPy.\n\nThe latest release of mpmath can be downloaded from the mpmath\nwebsite and from https://github.com/fredrik-johansson/mpmath/releases\n\nIt should also be available in the Python Package Index at\nhttps://pypi.python.org/pypi/mpmath\n\nTo install latest release of Mpmath with pip, simply run\n\n``pip install mpmath``\n\nOr unpack the mpmath archive and run\n\n``python setup.py install``\n\nMpmath can also be installed using\n\n``python -m easy_install mpmath``\n\nThe latest development code is available from\nhttps://github.com/fredrik-johansson/mpmath\n\nSee the main documentation for more detailed instructions.\n\n2. Running tests\n----------------\n\nThe unit tests in mpmath/tests/ can be run via the script\nruntests.py, but it is recommended to run them with py.test\n(https://pytest.org/), especially\nto generate more useful reports in case there are failures.\n\nYou may also want to check out the demo scripts in the demo\ndirectory.\n\nThe master branch is automatically tested by Travis CI.\n\n3. Documentation\n----------------\n\nDocumentation in reStructuredText format is available in the\ndoc directory included with the source package. These files\nare human-readable, but can be compiled to prettier HTML using\nthe build.py script (requires Sphinx, http://sphinx.pocoo.org/).\n\nSee setup.txt in the documentation for more information.\n\nThe most recent documentation is also available in HTML format:\n\nhttp://mpmath.org/doc/current/\n\n4. Known problems\n-----------------\n\nMpmath is a work in progress. Major issues include:\n\n* Some functions may return incorrect values when given extremely\n large arguments or arguments very close to singularities.\n\n* Directed rounding works for arithmetic operations. It is implemented\n heuristically for other operations, and their results may be off by one\n or two units in the last place (even if otherwise accurate).\n\n* Some IEEE 754 features are not available. Inifinities and NaN are\n partially supported; denormal rounding is currently not available\n at all.\n\n* The interface for switching precision and rounding is not finalized.\n The current method is not threadsafe.\n\n5. Help and bug reports\n-----------------------\n\nGeneral questions and comments can be sent to the mpmath mailinglist,\nmpmath@googlegroups.com\n\nYou can also report bugs and send patches to the mpmath issue tracker,\nhttps://github.com/fredrik-johansson/mpmath/issues\n", + "home_page": "http://mpmath.org/", + "author": "Fredrik Johansson", + "author_email": "fredrik.johansson@gmail.com", + "license": "BSD", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "License :: OSI Approved :: BSD License", + "Topic :: Scientific/Engineering :: Mathematics", + "Topic :: Software Development :: Libraries :: Python Modules", + "Programming Language :: Python", + "Programming Language :: Python :: 2", + "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.5", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy" + ], + "requires_dist": [ + "pytest (>=4.6) ; extra == 'develop'", + "pycodestyle ; extra == 'develop'", + "pytest-cov ; extra == 'develop'", + "codecov ; extra == 'develop'", + "wheel ; extra == 'develop'", + "sphinx ; extra == 'docs'", + "gmpy2 (>=2.1.0a4) ; (platform_python_implementation != \"PyPy\") and extra == 'gmpy'", + "pytest (>=4.6) ; extra == 'tests'" + ], + "project_url": [ + "Source, https://github.com/fredrik-johansson/mpmath", + "Tracker, https://github.com/fredrik-johansson/mpmath/issues", + "Documentation, http://mpmath.org/doc/current/" + ], + "provides_extra": [ + "develop", + "docs", + "gmpy", + "tests" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8" + }, + "hash": "sha256=481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "typing_extensions", + "version": "4.16.0", + "summary": "Backported and Experimental Type Hints for Python 3.9+", + "description": "# Typing Extensions\n\n[![Chat at https://gitter.im/python/typing](https://badges.gitter.im/python/typing.svg)](https://gitter.im/python/typing)\n\n[Documentation](https://typing-extensions.readthedocs.io/en/latest/#) –\n[PyPI](https://pypi.org/project/typing-extensions/)\n\n## Overview\n\nThe `typing_extensions` module serves two related purposes:\n\n- Enable use of new type system features on older Python versions. For example,\n `typing.TypeGuard` is new in Python 3.10, but `typing_extensions` allows\n users on previous Python versions to use it too.\n- Enable experimentation with new type system PEPs before they are accepted and\n added to the `typing` module.\n\n`typing_extensions` is treated specially by static type checkers such as\nmypy and pyright. Objects defined in `typing_extensions` are treated the same\nway as equivalent forms in `typing`.\n\n`typing_extensions` uses\n[Semantic Versioning](https://semver.org/). The\nmajor version will be incremented only for backwards-incompatible changes.\nTherefore, it's safe to depend\non `typing_extensions` like this: `typing_extensions ~=x.y`,\nwhere `x.y` is the first version that includes all features you need.\n[This](https://packaging.python.org/en/latest/specifications/version-specifiers/#compatible-release)\nis equivalent to `typing_extensions >=x.y, <(x+1)`. Do not depend on `~= x.y.z`\nunless you really know what you're doing; that defeats the purpose of\nsemantic versioning.\n\n## Included items\n\nSee [the documentation](https://typing-extensions.readthedocs.io/en/latest/#) for a\ncomplete listing of module contents.\n\n## Contributing\n\nSee [CONTRIBUTING.md](https://github.com/python/typing_extensions/blob/main/CONTRIBUTING.md)\nfor how to contribute to `typing_extensions`.\n\n", + "description_content_type": "text/markdown", + "keywords": [ + "annotations", + "backport", + "checker", + "checking", + "function", + "hinting", + "hints", + "type", + "typechecking", + "typehinting", + "typehints", + "typing" + ], + "author_email": "\"Guido van Rossum, Jukka Lehtosalo, Łukasz Langa, Michael Lee\" ", + "license_expression": "PSF-2.0", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Environment :: Console", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Topic :: Software Development" + ], + "requires_python": ">=3.9", + "project_url": [ + "Bug Tracker, https://github.com/python/typing_extensions/issues", + "Changes, https://github.com/python/typing_extensions/blob/main/CHANGELOG.md", + "Documentation, https://typing-extensions.readthedocs.io/", + "Home, https://github.com/python/typing_extensions", + "Q & A, https://github.com/python/typing/discussions", + "Repository, https://github.com/python/typing_extensions" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147" + }, + "hash": "sha256=65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "typing-inspection", + "version": "0.4.4", + "summary": "Runtime typing introspection tools", + "description": "# typing-inspection\n\n[![CI](https://img.shields.io/github/actions/workflow/status/pydantic/typing-inspection/ci.yml?branch=main&logo=github&label=CI)](https://github.com/pydantic/typing-inspection/actions?query=event%3Apush+branch%3Amain+workflow%3ACI)\n[![Coverage](https://coverage-badge.samuelcolvin.workers.dev/pydantic/typing-inspection.svg)](https://coverage-badge.samuelcolvin.workers.dev/redirect/pydantic/typing-inspection)\n[![PyPI](https://img.shields.io/pypi/v/typing-inspection.svg)](https://pypi.org/project/typing-inspection/)\n[![Versions](https://img.shields.io/pypi/pyversions/typing-inspection.svg)](https://github.com/pydantic/typing-inspection)\n[![License](https://img.shields.io/github/license/pydantic/typing-inspection.svg)](https://github.com/pydantic/typing-inspection/blob/main/LICENSE)\n[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)\n\n`typing-inspection` provides tools to inspect type annotations at runtime.\n\n## Installation\n\nFrom [PyPI](https://pypi.org/project/typing-inspection/):\n\n```bash\npip install typing-inspection\n```\n\nThe library can be imported from the `typing_inspection` module.\n", + "description_content_type": "text/markdown", + "author_email": "Victorien Plot ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Programming Language :: Python :: Implementation :: CPython", + "Topic :: Software Development :: Libraries :: Python Modules", + "Typing :: Typed" + ], + "requires_dist": [ + "typing-extensions>=4.15.0" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://github.com/pydantic/typing-inspection", + "Documentation, https://pydantic.github.io/typing-inspection/dev/", + "Source, https://github.com/pydantic/typing-inspection", + "Changelog, https://github.com/pydantic/typing-inspection/blob/main/HISTORY.md" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/7a/6d/db8b86e168fef0cf904737e275bccb683558088ef971e92d3b41ce980699/filelock-4.0.3-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "30cd166e2aee2c7534ce2c33c6367c4cd051b8368e20e2c4eb0c34f699bacfab" + }, + "hash": "sha256=30cd166e2aee2c7534ce2c33c6367c4cd051b8368e20e2c4eb0c34f699bacfab" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "filelock", + "version": "4.0.3", + "summary": "A platform independent file lock.", + "description": "# filelock\n\n[![PyPI](https://img.shields.io/pypi/v/filelock)](https://pypi.org/project/filelock/)\n[![Supported Python versions](https://img.shields.io/pypi/pyversions/filelock.svg)](https://pypi.org/project/filelock/)\n[![Documentation status](https://readthedocs.org/projects/py-filelock/badge/?version=latest)](https://py-filelock.readthedocs.io/en/latest/?badge=latest)\n[![Downloads](https://static.pepy.tech/badge/filelock/month)](https://pepy.tech/project/filelock)\n[![check](https://github.com/tox-dev/py-filelock/actions/workflows/check.yaml/badge.svg)](https://github.com/tox-dev/py-filelock/actions/workflows/check.yaml)\n\nFor more information checkout the [official documentation](https://py-filelock.readthedocs.io/en/latest/index.html).\n", + "description_content_type": "text/markdown", + "keywords": [ + "application", + "cache", + "directory", + "log", + "user" + ], + "maintainer_email": "Bernát Gábor ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Topic :: Internet", + "Topic :: Software Development :: Libraries", + "Topic :: System" + ], + "requires_python": ">=3.10", + "project_url": [ + "Documentation, https://py-filelock.readthedocs.io", + "Homepage, https://github.com/tox-dev/py-filelock", + "Source, https://github.com/tox-dev/py-filelock", + "Tracker, https://github.com/tox-dev/py-filelock/issues" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67" + }, + "hash": "sha256=85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "Jinja2", + "version": "3.1.6", + "summary": "A very fast and expressive template engine.", + "description": "# Jinja\n\nJinja is a fast, expressive, extensible templating engine. Special\nplaceholders in the template allow writing code similar to Python\nsyntax. Then the template is passed data to render the final document.\n\nIt includes:\n\n- Template inheritance and inclusion.\n- Define and import macros within templates.\n- HTML templates can use autoescaping to prevent XSS from untrusted\n user input.\n- A sandboxed environment can safely render untrusted templates.\n- AsyncIO support for generating templates and calling async\n functions.\n- I18N support with Babel.\n- Templates are compiled to optimized Python code just-in-time and\n cached, or can be compiled ahead-of-time.\n- Exceptions point to the correct line in templates to make debugging\n easier.\n- Extensible filters, tests, functions, and even syntax.\n\nJinja's philosophy is that while application logic belongs in Python if\npossible, it shouldn't make the template designer's job difficult by\nrestricting functionality too much.\n\n\n## In A Nutshell\n\n```jinja\n{% extends \"base.html\" %}\n{% block title %}Members{% endblock %}\n{% block content %}\n \n{% endblock %}\n```\n\n## Donate\n\nThe Pallets organization develops and supports Jinja and other popular\npackages. In order to grow the community of contributors and users, and\nallow the maintainers to devote more time to the projects, [please\ndonate today][].\n\n[please donate today]: https://palletsprojects.com/donate\n\n## Contributing\n\nSee our [detailed contributing documentation][contrib] for many ways to\ncontribute, including reporting issues, requesting features, asking or answering\nquestions, and making PRs.\n\n[contrib]: https://palletsprojects.com/contributing/\n\n", + "description_content_type": "text/markdown", + "maintainer_email": "Pallets ", + "license_file": [ + "LICENSE.txt" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Environment :: Web Environment", + "Intended Audience :: Developers", + "License :: OSI Approved :: BSD License", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Topic :: Internet :: WWW/HTTP :: Dynamic Content", + "Topic :: Text Processing :: Markup :: HTML", + "Typing :: Typed" + ], + "requires_dist": [ + "MarkupSafe>=2.0", + "Babel>=2.7 ; extra == \"i18n\"" + ], + "requires_python": ">=3.7", + "project_url": [ + "Changes, https://jinja.palletsprojects.com/changes/", + "Chat, https://discord.gg/pallets", + "Documentation, https://jinja.palletsprojects.com/", + "Donate, https://palletsprojects.com/donate", + "Source, https://github.com/pallets/jinja/" + ], + "provides_extra": [ + "i18n" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", + "archive_info": { + "hashes": { + "sha256": "457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97" + }, + "hash": "sha256=457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "MarkupSafe", + "version": "3.0.3", + "dynamic": [ + "license-file" + ], + "summary": "Safely add untrusted strings to HTML/XML markup.", + "description": "
\"\"
\n\n# MarkupSafe\n\nMarkupSafe implements a text object that escapes characters so it is\nsafe to use in HTML and XML. Characters that have special meanings are\nreplaced so that they display as the actual characters. This mitigates\ninjection attacks, meaning untrusted user input can safely be displayed\non a page.\n\n\n## Examples\n\n```pycon\n>>> from markupsafe import Markup, escape\n\n>>> # escape replaces special characters and wraps in Markup\n>>> escape(\"\")\nMarkup('<script>alert(document.cookie);</script>')\n\n>>> # wrap in Markup to mark text \"safe\" and prevent escaping\n>>> Markup(\"Hello\")\nMarkup('hello')\n\n>>> escape(Markup(\"Hello\"))\nMarkup('hello')\n\n>>> # Markup is a str subclass\n>>> # methods and operators escape their arguments\n>>> template = Markup(\"Hello {name}\")\n>>> template.format(name='\"World\"')\nMarkup('Hello "World"')\n```\n\n## Donate\n\nThe Pallets organization develops and supports MarkupSafe and other\npopular packages. In order to grow the community of contributors and\nusers, and allow the maintainers to devote more time to the projects,\n[please donate today][].\n\n[please donate today]: https://palletsprojects.com/donate\n\n## Contributing\n\nSee our [detailed contributing documentation][contrib] for many ways to\ncontribute, including reporting issues, requesting features, asking or answering\nquestions, and making PRs.\n\n[contrib]: https://palletsprojects.com/contributing/\n", + "description_content_type": "text/markdown", + "maintainer_email": "Pallets ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.txt" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Environment :: Web Environment", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Topic :: Internet :: WWW/HTTP :: Dynamic Content", + "Topic :: Text Processing :: Markup :: HTML", + "Typing :: Typed" + ], + "requires_python": ">=3.9", + "project_url": [ + "Donate, https://palletsprojects.com/donate", + "Documentation, https://markupsafe.palletsprojects.com/", + "Changes, https://markupsafe.palletsprojects.com/page/changes/", + "Source, https://github.com/pallets/markupsafe/", + "Chat, https://discord.gg/pallets" + ] + } + } + ], + "environment": { + "implementation_name": "cpython", + "implementation_version": "3.14.7", + "os_name": "posix", + "platform_machine": "x86_64", + "platform_release": "6.17.0-1022-azure", + "platform_system": "Linux", + "platform_version": "#22-Ubuntu SMP Mon Jul 27 17:24:03 UTC 2026", + "python_full_version": "3.14.7", + "platform_python_implementation": "CPython", + "python_version": "3.14", + "sys_platform": "linux" + } +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-current-source-cpu-rpc-restart-acceptance/probe-results.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-current-source-cpu-rpc-restart-acceptance/probe-results.json new file mode 100644 index 000000000..a8823479c --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-current-source-cpu-rpc-restart-acceptance/probe-results.json @@ -0,0 +1,304 @@ +{ + "recorded_at": "2026-09-26T08:24:22.965459+00:00", + "status": "passed", + "core_status": "passed", + "adapter_status": "not selected", + "environment": { + "release": "2.14.0", + "torch": "2.14.0+cpu", + "build": "cpu", + "adapter": "none", + "python": "3.14", + "interpreter": "/tmp/pumas-torch-native-cpu-7ajvyak2/launcher-data/managed-python/python/0800c1ab76812b8a0a424e27c9a0c6ff818175e26b32d40b165081b5e041a8c5/cpython-3.14.7-linux-x86_64-gnu/bin/python3.14", + "implementation": "cpython", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "machine": "x86_64", + "artifacts": [ + { + "name": "torch", + "version": "2.14.0+cpu", + "url": "https://download-r2.pytorch.org/whl/cpu/torch-2.14.0%2Bcpu-cp314-cp314-manylinux_2_28_x86_64.whl", + "sha256": "f152f41dc5dc462afe0de780e451ebb47ea8b4451f8f919f9537aa8e2cbe1d7e" + }, + { + "name": "fastapi", + "version": "0.141.1", + "url": "https://files.pythonhosted.org/packages/cb/03/10388a42375ee7e4ac9b94eb2c5c569c8b5795e377e701c9ac3ad63de890/fastapi-0.141.1-py3-none-any.whl", + "sha256": "bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3" + }, + { + "name": "uvicorn", + "version": "0.54.0", + "url": "https://files.pythonhosted.org/packages/38/0c/b54a4fdd7f90a3af8b02ebc9ce6712c2c208b7926a2f7bad95c33ebbe943/uvicorn-0.54.0-py3-none-any.whl", + "sha256": "505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf" + }, + { + "name": "psutil", + "version": "7.2.2", + "url": "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", + "sha256": "076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9" + }, + { + "name": "pillow", + "version": "12.3.0", + "url": "https://files.pythonhosted.org/packages/5c/44/c85361f65dbe00eea8576ee467c768d25129989efb76e94f205e9ca9bb46/pillow-12.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", + "sha256": "251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b" + }, + { + "name": "safetensors", + "version": "0.8.0", + "url": "https://files.pythonhosted.org/packages/28/50/f203ff3a3ddfe19308efc83c5a3a29ed02bf786732ec35e68bf9162f3365/safetensors-0.8.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "sha256": "fd6f3f93c9a0a7cc2788ee63fb763353d4bd2e89b0751bc78fcf7dda00bea774" + }, + { + "name": "annotated-doc", + "version": "0.0.5", + "url": "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", + "sha256": "117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101" + }, + { + "name": "click", + "version": "8.5.0", + "url": "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", + "sha256": "255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360" + }, + { + "name": "fsspec", + "version": "2026.9.0", + "url": "https://files.pythonhosted.org/packages/6c/c0/a98505f18594f1bce828bb159cec0fcf9860562f1a2c85913409fc8f3d9e/fsspec-2026.9.0-py3-none-any.whl", + "sha256": "8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f" + }, + { + "name": "h11", + "version": "0.16.0", + "url": "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", + "sha256": "63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86" + }, + { + "name": "networkx", + "version": "3.7", + "url": "https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl", + "sha256": "e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0" + }, + { + "name": "pydantic", + "version": "2.13.5", + "url": "https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl", + "sha256": "346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73" + }, + { + "name": "pydantic-core", + "version": "2.46.5", + "url": "https://files.pythonhosted.org/packages/2c/9b/59634b7ac631c63b2a37760eb6943af3e29573d6b59a4abc5e7f019d4cee/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "sha256": "54d510bac3ee52247af28ed4bb18a1e799f040ac60fd2bf5ccd4c92f1fbe786f" + }, + { + "name": "annotated-types", + "version": "0.8.0", + "url": "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", + "sha256": "f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0" + }, + { + "name": "setuptools", + "version": "84.0.0", + "url": "https://files.pythonhosted.org/packages/95/9c/c510029fc6ef33a6275cd2c5d3cecd6613dfd6aa401d57c54f1c18852ccf/setuptools-84.0.0-py3-none-any.whl", + "sha256": "51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670" + }, + { + "name": "starlette", + "version": "1.7.0", + "url": "https://files.pythonhosted.org/packages/4e/d6/1ec1b290f9e0fb067899b61e1d37a30c923068bad260b216dbe37a7d2967/starlette-1.7.0-py3-none-any.whl", + "sha256": "67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e" + }, + { + "name": "anyio", + "version": "4.15.1", + "url": "https://files.pythonhosted.org/packages/12/b8/4bd346e22b28902df4d651910f5242c28d84e4a5c2435ca5c3f797ed7e2e/anyio-4.15.1-py3-none-any.whl", + "sha256": "6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101" + }, + { + "name": "idna", + "version": "3.20", + "url": "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl", + "sha256": "ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c" + }, + { + "name": "sympy", + "version": "1.14.0", + "url": "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", + "sha256": "e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5" + }, + { + "name": "mpmath", + "version": "1.3.0", + "url": "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", + "sha256": "a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c" + }, + { + "name": "typing-extensions", + "version": "4.16.0", + "url": "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", + "sha256": "481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8" + }, + { + "name": "typing-inspection", + "version": "0.4.4", + "url": "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", + "sha256": "65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147" + }, + { + "name": "filelock", + "version": "4.0.3", + "url": "https://files.pythonhosted.org/packages/7a/6d/db8b86e168fef0cf904737e275bccb683558088ef971e92d3b41ce980699/filelock-4.0.3-py3-none-any.whl", + "sha256": "30cd166e2aee2c7534ce2c33c6367c4cd051b8368e20e2c4eb0c34f699bacfab" + }, + { + "name": "jinja2", + "version": "3.1.6", + "url": "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", + "sha256": "85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67" + }, + { + "name": "markupsafe", + "version": "3.0.3", + "url": "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", + "sha256": "457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97" + } + ] + }, + "context": { + "python": "3.14.7 (main, Sep 1 2026, 14:18:09) [Clang 22.1.3 ]", + "executable": "/tmp/pumas-torch-native-cpu-7ajvyak2/torch-versions/.torch-install-suvIEn/runtime/venv/bin/python", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "hardware": { + "cuda": null, + "hip": null, + "devices": [] + }, + "hardware_fingerprint": "494fb1d79639aecf4bb2b6043473616914037c874c14d9805f8e3f9d38b2c602", + "driver_version": null, + "runtime_files_sha256": { + "control_api.py": "ee5160f121a749d8d11cd929abfb9d98a1a109235dac3690c9e2118f9cca54d0", + "device_manager.py": "9ab6d63eb943989bc19f1fed89098aca27b168536fa2529734d1ee4f37585379", + "diffusion.py": "c4dadfc949c17a460f8fc8a446b03139da0c574b45b3f561403fdf83e495b6d3", + "flux2.py": "39f864e1e15ffb2b697bb95418d474cb98a760feca9acd48a74b5cf05642fea2", + "image_api.py": "bb39ac05aee7ea4d4357360accfa27ee261f58d1cd9cc35af28470012673a7ec", + "loaders/__init__.py": "80cec9242f95b73881b038b890a5d9465a14be86a631b2a0e1bf9efacac543fe", + "loaders/dllm_loader.py": "2c5656bce01a6d133925d02ca72606f8ae951d66186ac07d3fcb7fd5580b1a13", + "loaders/safetensors_loader.py": "661a000b791396067d253a27a26cb5905ae40ce8d50817ba54bc1afce803396f", + "loaders/sherry_loader.py": "360ac3f66c4438e3ffe3d9dc99ef2a27ae69efdd26f8d3564f638ae7802e5b3f", + "model_manager.py": "cfc049050f9003f87d622fe57da5c4ab4efb5105523fcbab926d8770d82be3f8", + "nunchaku_compat.py": "27b42f9cae80e474c0b2162e6bf572f822d525134bf2fc3bddd551c031bb5d70", + "openai_api.py": "a3c712e6307fe3b60d1b7acdcbeb9413b011eb370ad656f862ef9399f3342f8c", + "probe_runtime.py": "9b9e1d81087aefffdb383038724b471daeb0456814e5f2fa17e0b4da46255e25", + "resolve_runtime.py": "e0476a77398ac18059160ca55c8bb74dfc32bbcf9938bab7a5ab329c70b027f1", + "serve.py": "88bf72ea3eac013dc7678bebe0e3b3053c141e8ec1222a210bd18b2a47601af4", + "validation.py": "f53cca26ddbddbc3c924ff07d32aaf9ced6061a7f1628379b4c0db2c9da7feb1" + }, + "interpreter_sha256": "241bf774a81580bb760adf960b48df7e6b23b1de026c9c912d4ca6be1a08241e", + "installed_distributions": { + "torch": "2.14.0+cpu", + "fastapi": "0.141.1", + "uvicorn": "0.54.0", + "psutil": "7.2.2", + "pillow": "12.3.0", + "safetensors": "0.8.0", + "annotated-doc": "0.0.5", + "click": "8.5.0", + "fsspec": "2026.9.0", + "h11": "0.16.0", + "networkx": "3.7", + "pydantic": "2.13.5", + "pydantic-core": "2.46.5", + "annotated-types": "0.8.0", + "setuptools": "84.0.0", + "starlette": "1.7.0", + "anyio": "4.15.1", + "idna": "3.20", + "sympy": "1.14.0", + "mpmath": "1.3.0", + "typing-extensions": "4.16.0", + "typing-inspection": "0.4.4", + "filelock": "4.0.3", + "jinja2": "3.1.6", + "markupsafe": "3.0.3" + }, + "all_installed_distributions": { + "annotated-doc": "0.0.5", + "annotated-types": "0.8.0", + "anyio": "4.15.1", + "click": "8.5.0", + "fastapi": "0.141.1", + "filelock": "4.0.3", + "fsspec": "2026.9.0", + "h11": "0.16.0", + "idna": "3.20", + "jinja2": "3.1.6", + "markupsafe": "3.0.3", + "mpmath": "1.3.0", + "networkx": "3.7", + "pillow": "12.3.0", + "pip": "26.2.1", + "psutil": "7.2.2", + "pydantic": "2.13.5", + "pydantic-core": "2.46.5", + "safetensors": "0.8.0", + "setuptools": "84.0.0", + "starlette": "1.7.0", + "sympy": "1.14.0", + "torch": "2.14.0+cpu", + "typing-extensions": "4.16.0", + "typing-inspection": "0.4.4", + "uvicorn": "0.54.0" + }, + "distributions_sha256": "fb628c6fb5305166cad9332e5cf97765df173d14d44b7a0296950ad749e0254e", + "resolution_sha256": "5d186ed7f2fe7573720ecc9d5ca7397f2aa9abc811cf842401d387b4e4d08cd4", + "sidecar_sha256": "88bf72ea3eac013dc7678bebe0e3b3053c141e8ec1222a210bd18b2a47601af4" + }, + "capabilities": { + "torch_import": { + "status": "passed", + "version": "2.14.0+cpu" + }, + "cpu_tensor": { + "status": "passed" + }, + "cuda_tensor": { + "status": "unavailable", + "scope": "CUDA tensor operation", + "reason": "CUDA is not available" + }, + "sidecar_app": { + "status": "passed", + "health": { + "status": "ok", + "protocol": 3, + "capabilities": [ + "image_generation" + ] + }, + "scope": "in-process app construction and health endpoint" + }, + "flux2_klein": { + "status": "not selected", + "scope": "optional adapter" + }, + "nunchaku_z_image": { + "status": "not selected", + "scope": "optional adapter" + }, + "image_device": { + "status": "unavailable", + "scope": "adapter device requirement", + "reason": "No NVIDIA sm_120 CUDA device detected" + }, + "sidecar_startup": { + "status": "not tested", + "scope": "socket startup requires an explicit trial" + }, + "image_generation": { + "status": "not tested", + "scope": "no model loaded or inference performed" + } + } +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-current-source-cpu-rpc-restart-acceptance/resolution.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-current-source-cpu-rpc-restart-acceptance/resolution.json new file mode 100644 index 000000000..4f6145136 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-current-source-cpu-rpc-restart-acceptance/resolution.json @@ -0,0 +1,163 @@ +{ + "release": "2.14.0", + "torch": "2.14.0+cpu", + "build": "cpu", + "adapter": "none", + "python": "3.14", + "interpreter": "/tmp/pumas-torch-native-cpu-7ajvyak2/launcher-data/managed-python/python/0800c1ab76812b8a0a424e27c9a0c6ff818175e26b32d40b165081b5e041a8c5/cpython-3.14.7-linux-x86_64-gnu/bin/python3.14", + "implementation": "cpython", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "machine": "x86_64", + "artifacts": [ + { + "name": "torch", + "version": "2.14.0+cpu", + "url": "https://download-r2.pytorch.org/whl/cpu/torch-2.14.0%2Bcpu-cp314-cp314-manylinux_2_28_x86_64.whl", + "sha256": "f152f41dc5dc462afe0de780e451ebb47ea8b4451f8f919f9537aa8e2cbe1d7e" + }, + { + "name": "fastapi", + "version": "0.141.1", + "url": "https://files.pythonhosted.org/packages/cb/03/10388a42375ee7e4ac9b94eb2c5c569c8b5795e377e701c9ac3ad63de890/fastapi-0.141.1-py3-none-any.whl", + "sha256": "bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3" + }, + { + "name": "uvicorn", + "version": "0.54.0", + "url": "https://files.pythonhosted.org/packages/38/0c/b54a4fdd7f90a3af8b02ebc9ce6712c2c208b7926a2f7bad95c33ebbe943/uvicorn-0.54.0-py3-none-any.whl", + "sha256": "505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf" + }, + { + "name": "psutil", + "version": "7.2.2", + "url": "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", + "sha256": "076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9" + }, + { + "name": "pillow", + "version": "12.3.0", + "url": "https://files.pythonhosted.org/packages/5c/44/c85361f65dbe00eea8576ee467c768d25129989efb76e94f205e9ca9bb46/pillow-12.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", + "sha256": "251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b" + }, + { + "name": "safetensors", + "version": "0.8.0", + "url": "https://files.pythonhosted.org/packages/28/50/f203ff3a3ddfe19308efc83c5a3a29ed02bf786732ec35e68bf9162f3365/safetensors-0.8.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "sha256": "fd6f3f93c9a0a7cc2788ee63fb763353d4bd2e89b0751bc78fcf7dda00bea774" + }, + { + "name": "annotated-doc", + "version": "0.0.5", + "url": "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", + "sha256": "117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101" + }, + { + "name": "click", + "version": "8.5.0", + "url": "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", + "sha256": "255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360" + }, + { + "name": "fsspec", + "version": "2026.9.0", + "url": "https://files.pythonhosted.org/packages/6c/c0/a98505f18594f1bce828bb159cec0fcf9860562f1a2c85913409fc8f3d9e/fsspec-2026.9.0-py3-none-any.whl", + "sha256": "8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f" + }, + { + "name": "h11", + "version": "0.16.0", + "url": "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", + "sha256": "63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86" + }, + { + "name": "networkx", + "version": "3.7", + "url": "https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl", + "sha256": "e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0" + }, + { + "name": "pydantic", + "version": "2.13.5", + "url": "https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl", + "sha256": "346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73" + }, + { + "name": "pydantic-core", + "version": "2.46.5", + "url": "https://files.pythonhosted.org/packages/2c/9b/59634b7ac631c63b2a37760eb6943af3e29573d6b59a4abc5e7f019d4cee/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "sha256": "54d510bac3ee52247af28ed4bb18a1e799f040ac60fd2bf5ccd4c92f1fbe786f" + }, + { + "name": "annotated-types", + "version": "0.8.0", + "url": "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", + "sha256": "f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0" + }, + { + "name": "setuptools", + "version": "84.0.0", + "url": "https://files.pythonhosted.org/packages/95/9c/c510029fc6ef33a6275cd2c5d3cecd6613dfd6aa401d57c54f1c18852ccf/setuptools-84.0.0-py3-none-any.whl", + "sha256": "51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670" + }, + { + "name": "starlette", + "version": "1.7.0", + "url": "https://files.pythonhosted.org/packages/4e/d6/1ec1b290f9e0fb067899b61e1d37a30c923068bad260b216dbe37a7d2967/starlette-1.7.0-py3-none-any.whl", + "sha256": "67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e" + }, + { + "name": "anyio", + "version": "4.15.1", + "url": "https://files.pythonhosted.org/packages/12/b8/4bd346e22b28902df4d651910f5242c28d84e4a5c2435ca5c3f797ed7e2e/anyio-4.15.1-py3-none-any.whl", + "sha256": "6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101" + }, + { + "name": "idna", + "version": "3.20", + "url": "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl", + "sha256": "ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c" + }, + { + "name": "sympy", + "version": "1.14.0", + "url": "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", + "sha256": "e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5" + }, + { + "name": "mpmath", + "version": "1.3.0", + "url": "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", + "sha256": "a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c" + }, + { + "name": "typing-extensions", + "version": "4.16.0", + "url": "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", + "sha256": "481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8" + }, + { + "name": "typing-inspection", + "version": "0.4.4", + "url": "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", + "sha256": "65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147" + }, + { + "name": "filelock", + "version": "4.0.3", + "url": "https://files.pythonhosted.org/packages/7a/6d/db8b86e168fef0cf904737e275bccb683558088ef971e92d3b41ce980699/filelock-4.0.3-py3-none-any.whl", + "sha256": "30cd166e2aee2c7534ce2c33c6367c4cd051b8368e20e2c4eb0c34f699bacfab" + }, + { + "name": "jinja2", + "version": "3.1.6", + "url": "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", + "sha256": "85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67" + }, + { + "name": "markupsafe", + "version": "3.0.3", + "url": "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", + "sha256": "457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97" + } + ] +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-current-source-cpu-rpc-restart-acceptance/restart-backend-session.txt b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-current-source-cpu-rpc-restart-acceptance/restart-backend-session.txt new file mode 100644 index 000000000..4fbbffa5e --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-current-source-cpu-rpc-restart-acceptance/restart-backend-session.txt @@ -0,0 +1,21 @@ +2026-09-26T08:24:28.249287Z  INFO Starting Pumas RPC Server +2026-09-26T08:24:28.249343Z  INFO Launcher root configured +2026-09-26T08:24:28.299937Z  INFO Rebuilding model index +2026-09-26T08:24:28.300077Z  INFO Rebuilt index with 0 models +2026-09-26T08:24:28.394455Z  INFO IPC server listening on 127.0.0.1:44259 +2026-09-26T08:24:28.394779Z  INFO IPC server started on port 44259 +2026-09-26T08:24:28.395144Z  INFO Started watching model library at "/tmp/pumas-torch-native-cpu-7ajvyak2/shared-resources/models" +2026-09-26T08:24:28.434456Z  INFO Validation complete: 0 valid, 0 removed, 0 orphaned +2026-09-26T08:24:28.434495Z  INFO ollama version manager initialized successfully +2026-09-26T08:24:28.474007Z  INFO Validation complete: 1 valid, 0 removed, 0 orphaned +2026-09-26T08:24:28.475700Z  INFO torch version manager initialized successfully +2026-09-26T08:24:28.512353Z  INFO Validation complete: 0 valid, 0 removed, 0 orphaned +2026-09-26T08:24:28.512387Z  INFO llama-cpp version manager initialized successfully +2026-09-26T08:24:28.512402Z  INFO Initialized 3 version manager(s) +2026-09-26T08:24:28.512587Z  INFO Size calculator initialized +2026-09-26T08:24:28.512712Z  INFO Plugin loader initialized (0 plugins) +2026-09-26T08:24:28.688190Z  INFO Server listening on 127.0.0.1:39643 with max 64 in-flight requests and 33554432 byte request bodies +RPC_PORT=39643 +2026-09-26T08:24:28.688257Z  INFO RPC server running on 127.0.0.1:39643 +2026-09-26T08:24:33.450427Z  INFO Shutdown signal received, exiting +2026-09-26T08:24:33.451181Z  WARN File watcher channel disconnected diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-current-source-cpu-rpc-restart-acceptance/runtime.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-current-source-cpu-rpc-restart-acceptance/runtime.json new file mode 100644 index 000000000..f11b8459d --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-current-source-cpu-rpc-restart-acceptance/runtime.json @@ -0,0 +1,181 @@ +{ + "adapter": "none", + "artifacts": [ + { + "name": "torch", + "sha256": "f152f41dc5dc462afe0de780e451ebb47ea8b4451f8f919f9537aa8e2cbe1d7e", + "url": "https://download-r2.pytorch.org/whl/cpu/torch-2.14.0%2Bcpu-cp314-cp314-manylinux_2_28_x86_64.whl", + "version": "2.14.0+cpu" + }, + { + "name": "fastapi", + "sha256": "bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3", + "url": "https://files.pythonhosted.org/packages/cb/03/10388a42375ee7e4ac9b94eb2c5c569c8b5795e377e701c9ac3ad63de890/fastapi-0.141.1-py3-none-any.whl", + "version": "0.141.1" + }, + { + "name": "uvicorn", + "sha256": "505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf", + "url": "https://files.pythonhosted.org/packages/38/0c/b54a4fdd7f90a3af8b02ebc9ce6712c2c208b7926a2f7bad95c33ebbe943/uvicorn-0.54.0-py3-none-any.whl", + "version": "0.54.0" + }, + { + "name": "psutil", + "sha256": "076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9", + "url": "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", + "version": "7.2.2" + }, + { + "name": "pillow", + "sha256": "251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b", + "url": "https://files.pythonhosted.org/packages/5c/44/c85361f65dbe00eea8576ee467c768d25129989efb76e94f205e9ca9bb46/pillow-12.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", + "version": "12.3.0" + }, + { + "name": "safetensors", + "sha256": "fd6f3f93c9a0a7cc2788ee63fb763353d4bd2e89b0751bc78fcf7dda00bea774", + "url": "https://files.pythonhosted.org/packages/28/50/f203ff3a3ddfe19308efc83c5a3a29ed02bf786732ec35e68bf9162f3365/safetensors-0.8.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "version": "0.8.0" + }, + { + "name": "annotated-doc", + "sha256": "117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101", + "url": "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", + "version": "0.0.5" + }, + { + "name": "click", + "sha256": "255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360", + "url": "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", + "version": "8.5.0" + }, + { + "name": "fsspec", + "sha256": "8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f", + "url": "https://files.pythonhosted.org/packages/6c/c0/a98505f18594f1bce828bb159cec0fcf9860562f1a2c85913409fc8f3d9e/fsspec-2026.9.0-py3-none-any.whl", + "version": "2026.9.0" + }, + { + "name": "h11", + "sha256": "63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", + "url": "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", + "version": "0.16.0" + }, + { + "name": "networkx", + "sha256": "e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0", + "url": "https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl", + "version": "3.7" + }, + { + "name": "pydantic", + "sha256": "346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73", + "url": "https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl", + "version": "2.13.5" + }, + { + "name": "pydantic-core", + "sha256": "54d510bac3ee52247af28ed4bb18a1e799f040ac60fd2bf5ccd4c92f1fbe786f", + "url": "https://files.pythonhosted.org/packages/2c/9b/59634b7ac631c63b2a37760eb6943af3e29573d6b59a4abc5e7f019d4cee/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "version": "2.46.5" + }, + { + "name": "annotated-types", + "sha256": "f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0", + "url": "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", + "version": "0.8.0" + }, + { + "name": "setuptools", + "sha256": "51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670", + "url": "https://files.pythonhosted.org/packages/95/9c/c510029fc6ef33a6275cd2c5d3cecd6613dfd6aa401d57c54f1c18852ccf/setuptools-84.0.0-py3-none-any.whl", + "version": "84.0.0" + }, + { + "name": "starlette", + "sha256": "67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e", + "url": "https://files.pythonhosted.org/packages/4e/d6/1ec1b290f9e0fb067899b61e1d37a30c923068bad260b216dbe37a7d2967/starlette-1.7.0-py3-none-any.whl", + "version": "1.7.0" + }, + { + "name": "anyio", + "sha256": "6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101", + "url": "https://files.pythonhosted.org/packages/12/b8/4bd346e22b28902df4d651910f5242c28d84e4a5c2435ca5c3f797ed7e2e/anyio-4.15.1-py3-none-any.whl", + "version": "4.15.1" + }, + { + "name": "idna", + "sha256": "ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c", + "url": "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl", + "version": "3.20" + }, + { + "name": "sympy", + "sha256": "e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", + "url": "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", + "version": "1.14.0" + }, + { + "name": "mpmath", + "sha256": "a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", + "url": "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", + "version": "1.3.0" + }, + { + "name": "typing-extensions", + "sha256": "481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", + "url": "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", + "version": "4.16.0" + }, + { + "name": "typing-inspection", + "sha256": "65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147", + "url": "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", + "version": "0.4.4" + }, + { + "name": "filelock", + "sha256": "30cd166e2aee2c7534ce2c33c6367c4cd051b8368e20e2c4eb0c34f699bacfab", + "url": "https://files.pythonhosted.org/packages/7a/6d/db8b86e168fef0cf904737e275bccb683558088ef971e92d3b41ce980699/filelock-4.0.3-py3-none-any.whl", + "version": "4.0.3" + }, + { + "name": "jinja2", + "sha256": "85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", + "url": "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", + "version": "3.1.6" + }, + { + "name": "markupsafe", + "sha256": "457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", + "url": "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", + "version": "3.0.3" + } + ], + "build": "cpu", + "capabilities": [ + "image_generation" + ], + "managed_python": { + "distribution": { + "catalogKey": "cpython-3.14.7-linux-x86_64-gnu", + "implementation": "CPython", + "sourceUrl": "https://releases.astral.sh/github/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz", + "targetTriple": "x86_64-unknown-linux-gnu", + "version": "3.14.7" + }, + "executable": { + "path": "/tmp/pumas-torch-native-cpu-7ajvyak2/launcher-data/managed-python/python/0800c1ab76812b8a0a424e27c9a0c6ff818175e26b32d40b165081b5e041a8c5/cpython-3.14.7-linux-x86_64-gnu/bin/python3.14", + "sha256": "241bf774a81580bb760adf960b48df7e6b23b1de026c9c912d4ca6be1a08241e" + }, + "provider": { + "archiveSha256": "89eadd7c76fc063887959510d5ba0ab1264dfd5f1143b925ddb73021a40acf16", + "name": "uv", + "version": "0.12.18" + } + }, + "protocol": 3, + "python": "python3.14", + "qualification": "not verified by Pumas", + "recipe_id": "upstream-preview-v2.14.0-cpu-python3.14-none" +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-packaged-cpu-acceptance/README.md b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-packaged-cpu-acceptance/README.md new file mode 100644 index 000000000..7a3deb07f --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-packaged-cpu-acceptance/README.md @@ -0,0 +1,34 @@ +# Torch 2.14.0 packaged Linux CPU/Core acceptance + +**Status:** Pass for the packaged Linux RPC backend on commit `21041697`. +This exercises the backend packaged into the local v0.7.0 AppImage/deb build; +it does not automate or claim full Electron UI interaction. + +The acceptance harness ran against +`electron/release/linux-unpacked/resources/pumas-rpc`. `smoke-linux-packages.py` +verified that the AppImage and deb contain the same backend bytes and release +notices before this run. + +| Item | Result | +| --- | --- | +| Release/build | Torch `v2.14.0`, official CPU wheel profile | +| Host target | Linux x86_64 GNU | +| Managed interpreter | CPython `3.14.7`, provisioned by pinned uv `0.12.18`; backend `PATH` was cleared | +| Official wheel/dependency artifacts | 25 SHA-256-verified artifacts | +| Installed runtime | `2.14.0+cpu`; CPU tensor result `14` after restart | +| Resolver probe | Passed | +| Sidecar | Protocol 3 trial, generation-owned stop, and restart passed | +| Shutdown/cleanup | Graceful shutdown; disposable launcher root removed safely | + +The exact retained result is [acceptance.json](acceptance.json). The packaged +backend SHA-256 is +`1b42b6cbedc0bf842990a895cf759537f60ba1564e054a8c8b5f7f022e4a2114`. +The local AppImage SHA-256 is +`1398ef0a9da1c0aab90681d3c91674ef88c6229a84984047938e7bd6eb350acd`; the deb +SHA-256 is +`468b6f7c2af00ff8785f80e5486cd5133979e875dd351b4b9f5284ddfd195043`. + +This CPU/Core result does not qualify CUDA, macOS MPS, v2.14.0 image generation +through Tuldok, packaged UI-driven installation, or packaged Windows/macOS +installations. These locally built v0.7.0 artifacts have not been published and +do not change the toolbar-linked public release. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-packaged-cpu-acceptance/acceptance.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-packaged-cpu-acceptance/acceptance.json new file mode 100644 index 000000000..d81040889 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-packaged-cpu-acceptance/acceptance.json @@ -0,0 +1 @@ +{"success": true, "cleanup_safe": true, "version_preflight": {"attempts": [{"number": 1, "status": "requested_tag_found"}], "elapsed_seconds": 1.57, "status": "passed"}, "release": "v2.14.0", "build": "cpu", "python": "python3.14", "cpython_version": "3.14.7", "provider": "uv", "provider_version": "0.12.18", "provider_archive_sha256": "89eadd7c76fc063887959510d5ba0ab1264dfd5f1143b925ddb73021a40acf16", "target": "x86_64-unknown-linux-gnu", "distribution_implementation": "CPython", "distribution_catalog_key": "cpython-3.14.7-linux-x86_64-gnu", "distribution_source_url": "https://releases.astral.sh/github/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz", "executable_path": "/media/jeremy/OrangeCream/Linux Software/repos/owned/ai-systems/Pumas-Library/rust/target/pumas-torch-packaged-acceptance-tmp/pumas-torch-native-cpu-g5a0gdca/launcher-data/managed-python/python/0800c1ab76812b8a0a424e27c9a0c6ff818175e26b32d40b165081b5e041a8c5/cpython-3.14.7-linux-x86_64-gnu/bin/python3.14", "executable_sha256": "241bf774a81580bb760adf960b48df7e6b23b1de026c9c912d4ca6be1a08241e", "artifact_count": 25, "platform": "linux", "architecture": "x86_64", "probe": "passed", "trial": "passed", "sidecar_protocol": 3, "sidecar_generation": "1", "stop_result": true, "stopped": true, "restart": {"same_launcher_root": true, "shutdown": "graceful", "active_version": "v2.14.0", "profile_id": "torch-managed-python-acceptance", "interpreter": "persisted", "managed_python": {"cpython_version": "3.14.7", "provider": "uv", "provider_version": "0.12.18", "provider_archive_sha256": "89eadd7c76fc063887959510d5ba0ab1264dfd5f1143b925ddb73021a40acf16", "target": "x86_64-unknown-linux-gnu", "distribution_implementation": "CPython", "distribution_catalog_key": "cpython-3.14.7-linux-x86_64-gnu", "distribution_source_url": "https://releases.astral.sh/github/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz", "executable_path": "/media/jeremy/OrangeCream/Linux Software/repos/owned/ai-systems/Pumas-Library/rust/target/pumas-torch-packaged-acceptance-tmp/pumas-torch-native-cpu-g5a0gdca/launcher-data/managed-python/python/0800c1ab76812b8a0a424e27c9a0c6ff818175e26b32d40b165081b5e041a8c5/cpython-3.14.7-linux-x86_64-gnu/bin/python3.14", "executable_sha256": "241bf774a81580bb760adf960b48df7e6b23b1de026c9c912d4ca6be1a08241e"}, "cpu_operation": {"version": "2.14.0+cpu", "device": "cpu", "result": 14}, "probe": "passed", "trial": "passed", "sidecar_protocol": 3, "sidecar_generation": "1", "stop_result": true}} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-cpu-rpc-restart-acceptance/README.md b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-cpu-rpc-restart-acceptance/README.md new file mode 100644 index 000000000..482534cca --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-cpu-rpc-restart-acceptance/README.md @@ -0,0 +1,39 @@ +# macOS Torch managed-runtime restart acceptance + +Manual native RPC run +[36223106097](https://github.com/MrScripty/Pumas-Library/actions/runs/36223106097) +on commit `07f7e9f6` passed v2.14.0 CPU/Core installation and restart on +`macos-15` arm64. The run discovered the requested release, resolved and +installed the exact official plain-version `torch-2.14.0` CPython 3.14 macOS +arm64 wheel, and retained 25 hashed artifacts for the core profile. A second +backend reopened the same launcher root, confirmed the persisted version and +managed interpreter, and ran a fresh CPU tensor operation +(`sum([1, 4, 9]) == 14`, Torch `2.14.0`, device `cpu`). The RPC probe passed, +the protocol 3 sidecar trial and generation-owned stop passed, and shutdown was +graceful. + +The managed runtime used Pumas-provisioned CPython 3.14.7 from uv 0.12.18. The +first release-list preflight response was rate-limited with an explicit 913 +second retry delay; the acceptance harness waited the full advertised delay, +then discovered `v2.14.0` on its second attempt within the 1800-second budget. +The [acceptance result](acceptance.json) records this retry, both sessions, and +the managed interpreter identity. + +The acceptance backend ran with host Python, pip, PyPy, and uv absent from its +`PATH`, using an isolated launcher root under the runner's temporary directory. + +[Initial](initial-backend-session.txt) and +[restart](restart-backend-session.txt) backend logs retain both process +lifecycles. [Runtime](runtime.json), [resolution](resolution.json), +[pip resolution](pip-resolution.json), and [probe results](probe-results.json) +retain the exact wheel URL and SHA-256, resolved dependency artifacts, installed +profile, and probes. The [CPython full-archive manifest and raw license +files](../managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/) +retain license-file hashes. The selected install-only archive identity is in +`runtime.json` and `acceptance.json`; the manifest describes a separate full +archive. The generated release attribution now includes this target's +full-archive notice superset while keeping the selected install-only identity +separate. + +This is CPU/Core RPC acceptance. It does not establish MPS acceleration, +packaged desktop installation, or Tuldok image generation. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-cpu-rpc-restart-acceptance/acceptance.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-cpu-rpc-restart-acceptance/acceptance.json new file mode 100644 index 000000000..4ee3839c9 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-cpu-rpc-restart-acceptance/acceptance.json @@ -0,0 +1,70 @@ +{ + "architecture": "arm64", + "artifact_count": 25, + "build": "cpu", + "cleanup_safe": true, + "cpython_version": "3.14.7", + "distribution_catalog_key": "cpython-3.14.7-macos-aarch64-none", + "distribution_implementation": "CPython", + "distribution_source_url": "https://releases.astral.sh/github/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-aarch64-apple-darwin-install_only_stripped.tar.gz", + "executable_path": "/private/var/folders/nj/vtw8zd2j31d1gdrtntc5y4600000gn/T/pumas-torch-native-cpu-5kinhxp0/launcher-data/managed-python/python/39ab90495ce6de1a1c2c546c0f0802acaadfb3727d07f042d0a2d1e90c1b66b3/cpython-3.14.7-macos-aarch64-none/bin/python3.14", + "executable_sha256": "e925fab5e8f595817ff36ff28e214b91520c040d5b7d47249b0199bc5f68015e", + "platform": "darwin", + "probe": "passed", + "provider": "uv", + "provider_archive_sha256": "cf40e0c6a202190ccd9e0406dcfdd5b2d6668a9a5c779b17948963df32aafe5b", + "provider_version": "0.12.18", + "python": "python3.14", + "release": "v2.14.0", + "restart": { + "active_version": "v2.14.0", + "cpu_operation": { + "device": "cpu", + "result": 14, + "version": "2.14.0" + }, + "interpreter": "persisted", + "managed_python": { + "cpython_version": "3.14.7", + "distribution_catalog_key": "cpython-3.14.7-macos-aarch64-none", + "distribution_implementation": "CPython", + "distribution_source_url": "https://releases.astral.sh/github/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-aarch64-apple-darwin-install_only_stripped.tar.gz", + "executable_path": "/private/var/folders/nj/vtw8zd2j31d1gdrtntc5y4600000gn/T/pumas-torch-native-cpu-5kinhxp0/launcher-data/managed-python/python/39ab90495ce6de1a1c2c546c0f0802acaadfb3727d07f042d0a2d1e90c1b66b3/cpython-3.14.7-macos-aarch64-none/bin/python3.14", + "executable_sha256": "e925fab5e8f595817ff36ff28e214b91520c040d5b7d47249b0199bc5f68015e", + "provider": "uv", + "provider_archive_sha256": "cf40e0c6a202190ccd9e0406dcfdd5b2d6668a9a5c779b17948963df32aafe5b", + "provider_version": "0.12.18", + "target": "aarch64-apple-darwin" + }, + "probe": "passed", + "profile_id": "torch-managed-python-acceptance", + "same_launcher_root": true, + "shutdown": "graceful", + "sidecar_generation": "1", + "sidecar_protocol": 3, + "stop_result": true, + "trial": "passed" + }, + "sidecar_generation": "1", + "sidecar_protocol": 3, + "stop_result": true, + "stopped": true, + "success": true, + "target": "aarch64-apple-darwin", + "trial": "passed", + "version_preflight": { + "attempts": [ + { + "number": 1, + "retry_after_secs": 913, + "status": "rate_limited" + }, + { + "number": 2, + "status": "requested_tag_found" + } + ], + "elapsed_seconds": 916.889, + "status": "passed" + } +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-cpu-rpc-restart-acceptance/initial-backend-session.txt b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-cpu-rpc-restart-acceptance/initial-backend-session.txt new file mode 100644 index 000000000..a79c432d8 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-cpu-rpc-restart-acceptance/initial-backend-session.txt @@ -0,0 +1,30 @@ +2026-09-26T06:16:49.171632Z  INFO Starting Pumas RPC Server +2026-09-26T06:16:49.172393Z  INFO Launcher root configured +2026-09-26T06:16:49.230398Z  INFO Created FTS5 table: model_search +2026-09-26T06:16:49.231484Z  INFO Populated FTS5 table from models +2026-09-26T06:16:49.233065Z  INFO Rebuilding model index +2026-09-26T06:16:49.233579Z  INFO Rebuilt index with 0 models +2026-09-26T06:16:49.298071Z  INFO IPC server listening on 127.0.0.1:49185 +2026-09-26T06:16:49.298474Z  INFO IPC server started on port 49185 +2026-09-26T06:16:49.303620Z  INFO Started watching model library at "/private/var/folders/nj/vtw8zd2j31d1gdrtntc5y4600000gn/T/pumas-torch-native-cpu-5kinhxp0/shared-resources/models" +2026-09-26T06:16:49.309473Z  INFO Validation complete: 0 valid, 0 removed, 0 orphaned +2026-09-26T06:16:49.309730Z  INFO ollama version manager initialized successfully +2026-09-26T06:16:49.311409Z  INFO Validation complete: 0 valid, 0 removed, 0 orphaned +2026-09-26T06:16:49.311692Z  INFO torch version manager initialized successfully +2026-09-26T06:16:49.312435Z  INFO Validation complete: 0 valid, 0 removed, 0 orphaned +2026-09-26T06:16:49.312459Z  INFO llama-cpp version manager initialized successfully +2026-09-26T06:16:49.312473Z  INFO Initialized 3 version manager(s) +2026-09-26T06:16:49.312690Z  INFO Size calculator initialized +2026-09-26T06:16:49.312884Z  INFO Plugin loader initialized (0 plugins) +2026-09-26T06:16:49.315668Z  INFO Server listening on 127.0.0.1:49186 with max 64 in-flight requests and 33554432 byte request bodies +RPC_PORT=49186 +2026-09-26T06:16:49.315756Z  INFO RPC server running on 127.0.0.1:49186 +2026-09-26T06:16:49.698239Z  WARN GitHub rate limited (403 Forbidden), retry after: Some(913) seconds +2026-09-26T06:16:49.698370Z  WARN Rate limited by GitHub when fetching versions +2026-09-26T06:32:02.797916Z  WARN Rate limit approaching (remaining: Some(0)/Some(60)), throttling for 2s +2026-09-26T06:32:06.163355Z  INFO Fetched 69 releases from GitHub for pytorch/pytorch +2026-09-26T06:33:14.653283Z  INFO Finalizing installation for v2.14.0 +2026-09-26T06:33:14.658377Z  INFO Installation of v2.14.0 finalized +2026-09-26T06:33:16.428024Z  INFO Set active version: v2.14.0 +2026-09-26T06:33:17.983152Z  INFO Shutdown signal received, exiting +2026-09-26T06:33:17.985984Z  WARN File watcher channel disconnected diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-cpu-rpc-restart-acceptance/pip-resolution.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-cpu-rpc-restart-acceptance/pip-resolution.json new file mode 100644 index 000000000..d6678bfa9 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-cpu-rpc-restart-acceptance/pip-resolution.json @@ -0,0 +1,2082 @@ +{ + "version": "1", + "pip_version": "26.2.1", + "install": [ + { + "download_info": { + "url": "https://download-r2.pytorch.org/whl/cpu/torch-2.14.0-cp314-cp314-macosx_14_0_arm64.whl", + "archive_info": { + "hashes": { + "sha256": "d0f78744000a7863cc3f1eafaf511d4b9944f079f08277de6fefe4b01f4d41b9" + }, + "hash": "sha256=d0f78744000a7863cc3f1eafaf511d4b9944f079f08277de6fefe4b01f4d41b9" + } + }, + "is_direct": true, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.4", + "name": "torch", + "version": "2.14.0", + "summary": "Tensors and Dynamic neural networks in Python with strong GPU acceleration", + "description": "\n \n \n \"PyTorch\n\n\n--------------------------------------------------------------------------------\n\nPyTorch is a Python package that provides two high-level features:\n- Tensor computation (like NumPy) with strong GPU acceleration\n- Deep neural networks built on a tape-based autograd system\n\nYou can reuse your favorite Python packages such as NumPy, SciPy, and Cython to extend PyTorch when needed.\n\nOur trunk health (Continuous Integration signals) can be found at [hud.pytorch.org](https://hud.pytorch.org/ci/pytorch/pytorch/main).\n\n\n\n- [More About PyTorch](#more-about-pytorch)\n - [A GPU-Ready Tensor Library](#a-gpu-ready-tensor-library)\n - [Dynamic Neural Networks: Tape-Based Autograd](#dynamic-neural-networks-tape-based-autograd)\n - [Python First](#python-first)\n - [Imperative Experiences](#imperative-experiences)\n - [Fast and Lean](#fast-and-lean)\n - [Extensions Without Pain](#extensions-without-pain)\n- [Installation](#installation)\n - [Binaries](#binaries)\n - [NVIDIA Jetson Platforms](#nvidia-jetson-platforms)\n - [From Source](#from-source)\n - [Prerequisites](#prerequisites)\n - [NVIDIA CUDA Support](#nvidia-cuda-support)\n - [AMD ROCm Support](#amd-rocm-support)\n - [Intel GPU Support](#intel-gpu-support)\n - [Get the PyTorch Source](#get-the-pytorch-source)\n - [Install Dependencies](#install-dependencies)\n - [Install PyTorch](#install-pytorch)\n - [Adjust Build Options (Optional)](#adjust-build-options-optional)\n - [Docker Image](#docker-image)\n - [Using pre-built images](#using-pre-built-images)\n - [Building the image yourself](#building-the-image-yourself)\n - [Building the Documentation](#building-the-documentation)\n - [Troubleshooting CI Errors](#troubleshooting-ci-errors)\n - [Building a PDF](#building-a-pdf)\n - [Previous Versions](#previous-versions)\n- [Getting Started](#getting-started)\n- [Resources](#resources)\n- [Communication](#communication)\n- [Releases and Contributing](#releases-and-contributing)\n- [The Team](#the-team)\n- [License](#license)\n\n\n\n## More About PyTorch\n\n[Learn the basics of PyTorch](https://pytorch.org/tutorials/beginner/basics/intro.html)\n\nAt a granular level, PyTorch is a library that consists of the following components:\n\n| Component | Description |\n| ---- | --- |\n| [**torch**](https://pytorch.org/docs/stable/torch.html) | A Tensor library like NumPy, with strong GPU support |\n| [**torch.autograd**](https://pytorch.org/docs/stable/autograd.html) | A tape-based automatic differentiation library that supports all differentiable Tensor operations in torch |\n| [**torch.jit**](https://pytorch.org/docs/stable/jit.html) | A compilation stack (TorchScript) to create serializable and optimizable models from PyTorch code |\n| [**torch.nn**](https://pytorch.org/docs/stable/nn.html) | A neural networks library deeply integrated with autograd designed for maximum flexibility |\n| [**torch.multiprocessing**](https://pytorch.org/docs/stable/multiprocessing.html) | Python multiprocessing, but with magical memory sharing of torch Tensors across processes. Useful for data loading and Hogwild training |\n| [**torch.utils**](https://pytorch.org/docs/stable/data.html) | DataLoader and other utility functions for convenience |\n\nUsually, PyTorch is used either as:\n\n- A replacement for NumPy to use the power of GPUs.\n- A deep learning research platform that provides maximum flexibility and speed.\n\nElaborating Further:\n\n### A GPU-Ready Tensor Library\n\nIf you use NumPy, then you have used Tensors (a.k.a. ndarray).\n\n![Tensor illustration](https://github.com/pytorch/pytorch/raw/main/docs/source/_static/img/tensor_illustration.png)\n\nPyTorch provides Tensors that can live either on the CPU or the GPU and accelerates the\ncomputation by a huge amount.\n\nWe provide a wide variety of tensor routines to accelerate and fit your scientific computation needs\nsuch as slicing, indexing, mathematical operations, linear algebra, reductions.\nAnd they are fast!\n\n### Dynamic Neural Networks: Tape-Based Autograd\n\nPyTorch has a unique way of building neural networks: using and replaying a tape recorder.\n\nMost frameworks such as TensorFlow, Theano, Caffe, and CNTK have a static view of the world.\nOne has to build a neural network and reuse the same structure again and again.\nChanging the way the network behaves means that one has to start from scratch.\n\nWith PyTorch, we use a technique called reverse-mode auto-differentiation, which allows you to\nchange the way your network behaves arbitrarily with zero lag or overhead. Our inspiration comes\nfrom several research papers on this topic, as well as current and past work such as\n[torch-autograd](https://github.com/twitter/torch-autograd),\n[autograd](https://github.com/HIPS/autograd),\n[Chainer](https://chainer.org), etc.\n\nWhile this technique is not unique to PyTorch, it's one of the fastest implementations of it to date.\nYou get the best of speed and flexibility for your crazy research.\n\n![Dynamic graph](https://github.com/pytorch/pytorch/raw/main/docs/source/_static/img/dynamic_graph.gif)\n\n### Python First\n\nPyTorch is not a Python binding into a monolithic C++ framework.\nIt is built to be deeply integrated into Python.\nYou can use it naturally like you would use [NumPy](https://www.numpy.org/) / [SciPy](https://www.scipy.org/) / [scikit-learn](https://scikit-learn.org) etc.\nYou can write your new neural network layers in Python itself, using your favorite libraries\nand use packages such as [Cython](https://cython.org/) and [Numba](https://numba.pydata.org/).\nOur goal is to not reinvent the wheel where appropriate.\n\n### Imperative Experiences\n\nPyTorch is designed to be intuitive, linear in thought, and easy to use.\nWhen you execute a line of code, it gets executed. There isn't an asynchronous view of the world.\nWhen you drop into a debugger or receive error messages and stack traces, understanding them is straightforward.\nThe stack trace points to exactly where your code was defined.\nWe hope you never spend hours debugging your code because of bad stack traces or asynchronous and opaque execution engines.\n\n### Fast and Lean\n\nPyTorch has minimal framework overhead. We integrate acceleration libraries\nsuch as [Intel MKL](https://software.intel.com/mkl) and NVIDIA ([cuDNN](https://developer.nvidia.com/cudnn), [NCCL](https://developer.nvidia.com/nccl)) to maximize speed.\nAt the core, its CPU and GPU Tensor and neural network backends\nare mature and have been tested for years.\n\nHence, PyTorch is quite fast — whether you run small or large neural networks.\n\nThe memory usage in PyTorch is extremely efficient compared to Torch or some of the alternatives.\nWe've written custom memory allocators for the GPU to make sure that\nyour deep learning models are maximally memory efficient.\nThis enables you to train bigger deep learning models than before.\n\n### Extensions Without Pain\n\nWriting new neural network modules, or interfacing with PyTorch's Tensor API, was designed to be straightforward\nand with minimal abstractions.\n\nYou can write new neural network layers in Python using the torch API\n[or your favorite NumPy-based libraries such as SciPy](https://pytorch.org/tutorials/advanced/numpy_extensions_tutorial.html).\n\nIf you want to write your layers in C/C++, we provide a convenient extension API that is efficient and with minimal boilerplate.\nNo wrapper code needs to be written. You can see [a tutorial here](https://pytorch.org/tutorials/advanced/cpp_extension.html) and [an example here](https://github.com/pytorch/extension-cpp).\n\n\n## Installation\n\n### Binaries\nCommands to install binaries via Conda or pip wheels are on our website: [https://pytorch.org/get-started/locally/](https://pytorch.org/get-started/locally/)\n\n\n#### NVIDIA Jetson Platforms\n\nPython wheels for NVIDIA's Jetson Nano, Jetson TX1/TX2, Jetson Xavier NX/AGX, and Jetson AGX Orin are provided [here](https://forums.developer.nvidia.com/t/pytorch-for-jetson-version-1-10-now-available/72048) and the L4T container is published [here](https://catalog.ngc.nvidia.com/orgs/nvidia/containers/l4t-pytorch)\n\nThey require JetPack 4.2 and above, and [@dusty-nv](https://github.com/dusty-nv) and [@ptrblck](https://github.com/ptrblck) are maintaining them.\n\n\n### From Source\n\n#### Prerequisites\nIf you are installing from source, you will need:\n- Python 3.10 or later\n- A compiler that fully supports C++20, such as clang or gcc (gcc 11.3.0 or newer is required, on Linux)\n- Visual Studio or Visual Studio Build Tool (Windows only)\n- At least 10 GB of free disk space\n- 30-60 minutes for the initial build (subsequent rebuilds are much faster)\n\n\\* PyTorch CI uses Visual C++ BuildTools, which come with Visual Studio Enterprise,\nProfessional, or Community Editions. You can also install the build tools from\nhttps://visualstudio.microsoft.com/visual-cpp-build-tools/. The build tools *do not*\ncome with Visual Studio Code by default.\n\nAn example of environment setup is shown below:\n\n* Linux:\n\n```bash\n$ source /bin/activate\n$ conda create -y -n \n$ conda activate \n```\n* Windows:\n\n```bash\n$ source \\Scripts\\activate.bat\n$ conda create -y -n \n$ conda activate \n$ call \"C:\\Program Files\\Microsoft Visual Studio\\\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat\" x64\n```\n\nA conda environment is not required. You can also do a PyTorch build in a\nstandard virtual environment, e.g., created with tools like `uv`, provided\nyour system has installed all the necessary dependencies unavailable as pip\npackages (e.g., CUDA, MKL.)\n\n##### NVIDIA CUDA Support\nIf you want to compile with CUDA support, [select a supported version of CUDA from our support matrix](https://pytorch.org/get-started/locally/), then install the following:\n- [NVIDIA CUDA](https://developer.nvidia.com/cuda-downloads)\n- [NVIDIA cuDNN](https://developer.nvidia.com/cudnn) v9.0 or above\n- [Compiler](https://gist.github.com/ax3l/9489132) compatible with CUDA\n\nNote: You could refer to the [cuDNN Support Matrix](https://docs.nvidia.com/deeplearning/cudnn/backend/latest/reference/support-matrix.html) for cuDNN versions with the various supported CUDA, CUDA driver, and NVIDIA hardware.\n\nIf you want to disable CUDA support, export the environment variable `USE_CUDA=0`.\nOther potentially useful environment variables are documented in `cmake/EnvVarForwarding.cmake`. If\nCUDA is installed in a non-standard location, set PATH so that the nvcc you\nwant to use can be found (e.g., `export PATH=/usr/local/cuda-12.8/bin:$PATH`).\n\nIf you are building for NVIDIA's Jetson platforms (Jetson Nano, TX1, TX2, AGX Xavier), Instructions to install PyTorch for Jetson Nano are [available here](https://devtalk.nvidia.com/default/topic/1049071/jetson-nano/pytorch-for-jetson-nano/)\n\n##### AMD ROCm Support\nIf you want to compile with ROCm support, install\n- [AMD ROCm](https://rocm.docs.amd.com/en/latest/deploy/linux/quick_start.html) 4.0 and above installation\n- ROCm is currently supported only for Linux systems.\n\nBy default the build system expects ROCm to be installed in `/opt/rocm`. If ROCm is installed in a different directory, the `ROCM_PATH` environment variable must be set to the ROCm installation directory. The build system automatically detects the AMD GPU architecture. Optionally, the AMD GPU architecture can be explicitly set with the `PYTORCH_ROCM_ARCH` environment variable [AMD GPU architecture](https://rocm.docs.amd.com/projects/install-on-linux/en/latest/reference/system-requirements.html#supported-gpus)\n\nIf you want to disable ROCm support, export the environment variable `USE_ROCM=0`.\nOther potentially useful environment variables are documented in `cmake/EnvVarForwarding.cmake`.\n\n##### Intel GPU Support\nIf you want to compile with Intel GPU support, follow these\n- [PyTorch Prerequisites for Intel GPUs](https://www.intel.com/content/www/us/en/developer/articles/tool/pytorch-prerequisites-for-intel-gpu.html) instructions.\n- Intel GPU is supported for Linux and Windows.\n\nIf you want to disable Intel GPU support, export the environment variable `USE_XPU=0`.\nOther potentially useful environment variables are documented in `cmake/EnvVarForwarding.cmake`.\n\n#### Get the PyTorch Source\n\n```bash\ngit clone https://github.com/pytorch/pytorch\ncd pytorch\n# if you are updating an existing checkout\ngit submodule sync\ngit submodule update --init --recursive\n```\n\n#### Install Dependencies\n\n**Common**\n\n```bash\n# Run this command from the PyTorch directory after cloning the source code using the “Get the PyTorch Source“ section above\npip install --group dev\n```\n\n**On Linux**\n\n```bash\npip install mkl-static mkl-include\n# CUDA only: Add LAPACK support for the GPU if needed\n# magma installation: run with active conda environment. specify CUDA version to install\n.ci/docker/common/install_magma_conda.sh 12.4\n\n# (optional) If using torch.compile with inductor/triton, install the matching version of triton\n# Run from the pytorch directory after cloning\n# For Intel GPU support, please explicitly `export USE_XPU=1` before running command.\nmake triton\n```\n\n**On Windows**\n\n```bash\npip install mkl-static mkl-include\n# Add these packages if torch.distributed is needed.\n# Distributed package support on Windows is a prototype feature and is subject to changes.\nconda install -c conda-forge libuv=1.51\n```\n\n#### Install PyTorch\n\n**On Linux**\n\nIf you're compiling for AMD ROCm then first run this command:\n\n```bash\n# Only run this if you're compiling for ROCm\npython tools/amd_build/build_amd.py\n```\n\nInstall PyTorch\n\n```bash\n# the CMake prefix for conda environment\nexport CMAKE_PREFIX_PATH=\"${CONDA_PREFIX:-'$(dirname $(which conda))/../'}:${CMAKE_PREFIX_PATH}\"\npython -m pip install --no-build-isolation -v -e .\n\n# the CMake prefix for non-conda environment, e.g. Python venv\n# call following after activating the venv\nexport CMAKE_PREFIX_PATH=\"${VIRTUAL_ENV}:${CMAKE_PREFIX_PATH}\"\n```\n\n**On macOS**\n\n```bash\npython -m pip install --no-build-isolation -v -e .\n```\n\n**On Windows**\n\nIf you want to build legacy python code, please refer to [Building on legacy code and CUDA](https://github.com/pytorch/pytorch/blob/main/CONTRIBUTING.md#building-on-legacy-code-and-cuda)\n\n**CPU-only builds**\n\nIn this mode PyTorch computations will run on your CPU, not your GPU.\n\n```cmd\npython -m pip install --no-build-isolation -v -e .\n```\n\nNote on OpenMP: The desired OpenMP implementation is Intel OpenMP (iomp). In order to link against iomp, you'll need to manually download the library and set up the building environment by tweaking `CMAKE_INCLUDE_PATH` and `LIB`. The instruction [here](https://docs.pytorch.org/docs/main/notes/windows.html#building-from-source) is an example for setting up both MKL and Intel OpenMP. Without these configurations for CMake, Microsoft Visual C OpenMP runtime (vcomp) will be used.\n\n**CUDA based build**\n\nIn this mode PyTorch computations will leverage your GPU via CUDA for faster number crunching\n\n[NVTX](https://docs.nvidia.com/gameworks/content/gameworkslibrary/nvtx/nvidia_tools_extension_library_nvtx.htm) is needed to build PyTorch with CUDA.\nNVTX is a part of CUDA distributive, where it is called \"Nsight Compute\". To install it onto an already installed CUDA run CUDA installation once again and check the corresponding checkbox.\nMake sure that CUDA with Nsight Compute is installed after Visual Studio.\n\nCurrently, VS 2017 / 2019, and Ninja are supported as the generator of CMake. If `ninja.exe` is detected in `PATH`, then Ninja will be used as the default generator, otherwise, it will use VS 2017 / 2019.\n
If Ninja is selected as the generator, the latest MSVC will get selected as the underlying toolchain.\n\nAdditional libraries such as\n[Magma](https://developer.nvidia.com/magma), [oneDNN, a.k.a. MKLDNN or DNNL](https://github.com/oneapi-src/oneDNN), and [Sccache](https://github.com/mozilla/sccache) are often needed. Please refer to the [installation-helper](https://github.com/pytorch/pytorch/tree/main/.ci/pytorch/win-test-helpers/installation-helpers) to install them.\n\nYou can refer to the [build_pytorch.bat](https://github.com/pytorch/pytorch/blob/main/.ci/pytorch/win-test-helpers/build_pytorch.bat) script for some other environment variables configurations\n\n```cmd\ncmd\n\n:: Set the environment variables after you have downloaded and unzipped the mkl package,\n:: else CMake would throw an error as `Could NOT find OpenMP`.\nset CMAKE_INCLUDE_PATH={Your directory}\\mkl\\include\nset LIB={Your directory}\\mkl\\lib;%LIB%\n\n:: Read the content in the previous section carefully before you proceed.\n:: [Optional] If you want to override the underlying toolset used by Ninja and Visual Studio with CUDA, please run the following script block.\n:: \"Visual Studio 2019 Developer Command Prompt\" will be run automatically.\n:: Make sure you have CMake >= 3.12 before you do this when you use the Visual Studio generator.\nset CMAKE_GENERATOR_TOOLSET_VERSION=14.27\nset DISTUTILS_USE_SDK=1\nfor /f \"usebackq tokens=*\" %i in (`\"%ProgramFiles(x86)%\\Microsoft Visual Studio\\Installer\\vswhere.exe\" -version [15^,17^) -products * -latest -property installationPath`) do call \"%i\\VC\\Auxiliary\\Build\\vcvarsall.bat\" x64 -vcvars_ver=%CMAKE_GENERATOR_TOOLSET_VERSION%\n\n:: [Optional] If you want to override the CUDA host compiler\nset CUDAHOSTCXX=C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.27.29110\\bin\\HostX64\\x64\\cl.exe\n\npython -m pip install --no-build-isolation -v -e .\n```\n\n**Intel GPU builds**\n\nIn this mode PyTorch with Intel GPU support will be built.\n\nPlease make sure [the common prerequisites](#prerequisites) as well as [the prerequisites for Intel GPU](#intel-gpu-support) are properly installed and the environment variables are configured prior to starting the build. For build tool support, `Visual Studio 2022` is required.\n\nThen PyTorch can be built with the command:\n\n```cmd\n:: CMD Commands:\n:: Set the CMAKE_PREFIX_PATH to help find corresponding packages\n:: %CONDA_PREFIX% only works after `conda activate custom_env`\n\nif defined CMAKE_PREFIX_PATH (\n set \"CMAKE_PREFIX_PATH=%CONDA_PREFIX%\\Library;%CMAKE_PREFIX_PATH%\"\n) else (\n set \"CMAKE_PREFIX_PATH=%CONDA_PREFIX%\\Library\"\n)\n\npython -m pip install --no-build-isolation -v -e .\n```\n\n##### Adjust Build Options (Optional)\n\nYou can adjust the configuration of CMake variables through environment variables, which the\nbuild forwards to CMake (see [`cmake/EnvVarForwarding.cmake`](./cmake/EnvVarForwarding.cmake) for\nthe full list). For example, pointing the build at a specific Conda prefix, CuDNN, or BLAS:\n\nOn Linux\n\n```bash\nexport CMAKE_PREFIX_PATH=\"${CONDA_PREFIX:-'$(dirname $(which conda))/../'}:${CMAKE_PREFIX_PATH}\"\nspin develop\n```\n\nOn macOS\n\n```bash\nexport CMAKE_PREFIX_PATH=\"${CONDA_PREFIX:-'$(dirname $(which conda))/../'}:${CMAKE_PREFIX_PATH}\"\nMACOSX_DEPLOYMENT_TARGET=11.0 spin develop\n```\n\nAfter a first `spin develop`, you can inspect or adjust the CMake cache interactively with\n`ccmake build` (or `cmake-gui build`) and rebuild with `spin develop`; your edits persist, because\nreconfiguration does not use `--fresh` and environment variables only seed cache entries that are\nnot already set. The corollary: once a variable is in the cache, changing its environment variable\nno longer affects it -- edit the cache directly (or delete `build/CMakeCache.txt`) to change it.\nThe build type and compiler are the exception; the build always re-applies them.\n\n### Docker Image\n\n#### Using pre-built images\n\nYou can also pull a pre-built docker image from Docker Hub and run with docker v23.0+\n\n```bash\ndocker run --gpus all --rm -ti --ipc=host pytorch/pytorch:latest\n```\n\nPlease note that PyTorch uses shared memory to share data between processes, so if torch multiprocessing is used (e.g.\nfor multithreaded data loaders) the default shared memory segment size that container runs with is not enough, and you\nshould increase shared memory size either with `--ipc=host` or `--shm-size` command line options to `nvidia-docker run`.\n\n#### Building the image yourself\n\n**NOTE:** Must be built with a Docker version >= 23.0\n\nThe Dockerfile is supplied to build images with CUDA 12.6 support and cuDNN v9.\nYou can pass `PYTHON_VERSION=x.y` make variable to specify which Python version is to be used by Miniconda, or leave it\nunset to use the default, as the Dockerfile uses system Python.\n\n```bash\nmake -f docker.Makefile\n# images are tagged as docker.io/${your_docker_username}/pytorch\n```\n\nYou can also pass the `CMAKE_VARS=\"...\"` environment variable to specify additional CMake variables to be passed to CMake during the build.\nSee [`cmake/EnvVarForwarding.cmake`](./cmake/EnvVarForwarding.cmake) for the list of available variables.\n\n```bash\nmake -f docker.Makefile\n```\n\n### Building the Documentation\n\nTo build documentation in various formats, you will need [Sphinx](https://www.sphinx-doc.org)\nand the `pytorch_sphinx_theme2`.\n\nBefore you build the documentation locally, ensure `torch` is\ninstalled in your environment. For small fixes, you can install the\nnightly version as described in [Getting Started](https://pytorch.org/get-started/locally/).\n\nFor more complex fixes, such as adding a new module and docstrings for\nthe new module, you might need to install torch [from source](#from-source).\nSee [Docstring Guidelines](https://github.com/pytorch/pytorch/wiki/Docstring-Guidelines)\nfor docstring conventions.\n\n```bash\ncd docs/\npip install -r requirements.txt\nmake html\nmake serve\n```\n\nRun `make` to get a list of all available output formats.\n\nIf you get a katex error run `npm install katex`. If it persists, try\n`npm install -g katex`\n\n> [!NOTE]\n> If you see a numpy incompatibility error, run:\n> ```\n> pip install 'numpy<2'\n> ```\n\n\n#### Troubleshooting CI Errors\nYour build may show errors you didn't have locally - here's how to find the errors relevant to the docs.\n\nIf the build has any errors, you will see something like this on the PR:\n\n\"Monosnap\n\nAny doc-related errors will occur in jobs that include \"doc\" somewhere in the title. It doesn't look like any of these jobs are relevant to our docs.\n\n\nLet's take a look anyway. Click on the job to see the logs:\n\n\"Monosnap\n\nAnd we can be sure that this job does not involve docs.\n\nLooking at this build, we can see these jobs are relevant to our docs - and they didn't have any errors:\n\n\"Check\n\nYou might also see a comment on the PR like this:\n\n\"PR\n\nWe can see that some of these issues are relevant to our docs.\n\nOpen the logs by clicking on the `gh` link:\n\n\"View\n\nAnd here we can see there is a doc-related error:\n\n\"Doc\n\nYou can always find the relevant doc builds by going to the `Checks` tab on your PR, and scrolling down to `pull`.\n\n\"checks\"\n\nYou can either click through or toggle the accordion to see all of the jobs here, where you can see the docs jobs highlighted:\n\n\"jobs\"\n\nIf you click through, you'll see the doc jobs at the bottom, like this:\n\n\"View\n\n\n#### Building a PDF\n\nTo compile a PDF of all PyTorch documentation, ensure you have\n`texlive` and LaTeX installed. On macOS, you can install them using:\n\n```\nbrew install --cask mactex\n```\n\nTo create the PDF:\n\n1. Run:\n\n ```\n make latexpdf\n ```\n\n This will generate the necessary files in the `build/latex` directory.\n\n2. Navigate to this directory and execute:\n\n ```\n make LATEXOPTS=\"-interaction=nonstopmode\"\n ```\n\n This will produce a `pytorch.pdf` with the desired content. Run this\n command one more time so that it generates the correct table\n of contents and index.\n\n> [!NOTE]\n> To view the Table of Contents, switch to the **Table of Contents**\n> view in your PDF viewer.\n\n\n### Previous Versions\n\nInstallation instructions and binaries for previous PyTorch versions may be found\non [our website](https://pytorch.org/get-started/previous-versions).\n\n\n## Getting Started\n\nPointers to get you started:\n- [Tutorials: get you started with understanding and using PyTorch](https://pytorch.org/tutorials/)\n- [Examples: easy to understand PyTorch code across all domains](https://github.com/pytorch/examples)\n- [The API Reference](https://pytorch.org/docs/)\n- [Glossary](https://github.com/pytorch/pytorch/blob/main/GLOSSARY.md)\n\n## Resources\n\n* [PyTorch.org](https://pytorch.org/)\n* [PyTorch Tutorials](https://pytorch.org/tutorials/)\n* [PyTorch Examples](https://github.com/pytorch/examples)\n* [PyTorch Models](https://pytorch.org/hub/)\n* [Intro to Deep Learning with PyTorch from Udacity](https://www.udacity.com/course/deep-learning-pytorch--ud188)\n* [Intro to Machine Learning with PyTorch from Udacity](https://www.udacity.com/course/intro-to-machine-learning-nanodegree--nd229)\n* [Deep Neural Networks with PyTorch from Coursera](https://www.coursera.org/learn/deep-neural-networks-with-pytorch)\n* [PyTorch Twitter](https://twitter.com/PyTorch)\n* [PyTorch Blog](https://pytorch.org/blog/)\n* [PyTorch YouTube](https://www.youtube.com/channel/UCWXI5YeOsh03QvJ59PMaXFw)\n\n## Communication\n* Forums: Discuss implementations, research, etc. https://discuss.pytorch.org\n* GitHub Issues: Bug reports, feature requests, install issues, RFCs, thoughts, etc.\n* Slack: The [PyTorch Slack](https://pytorch.slack.com/) hosts a primary audience of moderate to experienced PyTorch users and developers for general chat, online discussions, collaboration, etc. If you are a beginner looking for help, the primary medium is [PyTorch Forums](https://discuss.pytorch.org). If you need a slack invite, please fill this form: https://goo.gl/forms/PP1AGvNHpSaJP8to1\n* Newsletter: No-noise, a one-way email newsletter with important announcements about PyTorch. You can sign-up here: https://eepurl.com/cbG0rv\n* Facebook Page: Important announcements about PyTorch. https://www.facebook.com/pytorch\n* For brand guidelines, please visit our website at [pytorch.org](https://pytorch.org/)\n\n## Releases and Contributing\n\nTypically, PyTorch has three minor releases a year. Please let us know if you encounter a bug by [filing an issue](https://github.com/pytorch/pytorch/issues).\n\nWe appreciate all contributions. If you are planning to contribute back bug-fixes, please do so without any further discussion.\n\nIf you plan to contribute new features, utility functions, or extensions to the core, please first open an issue and discuss the feature with us.\nSending a PR without discussion might end up resulting in a rejected PR because we might be taking the core in a different direction than you might be aware of.\n\nTo learn more about making a contribution to PyTorch, please see our [Contribution page](CONTRIBUTING.md). For more information about PyTorch releases, see [Release page](RELEASE.md).\n\n## The Team\n\nPyTorch is a community-driven project with several skillful engineers and researchers contributing to it.\n\nPyTorch is currently maintained by [Soumith Chintala](https://soumith.ch), [Gregory Chanan](https://github.com/gchanan), [Dmytro Dzhulgakov](https://github.com/dzhulgakov), [Edward Yang](https://github.com/ezyang), [Alban Desmaison](https://github.com/albanD), [Piotr Bialecki](https://github.com/ptrblck) and [Nikita Shulga](https://github.com/malfet) with major contributions coming from hundreds of talented individuals in various forms and means.\nA non-exhaustive but growing list needs to mention: [Trevor Killeen](https://github.com/killeent), [Sasank Chilamkurthy](https://github.com/chsasank), [Sergey Zagoruyko](https://github.com/szagoruyko), [Adam Lerer](https://github.com/adamlerer), [Francisco Massa](https://github.com/fmassa), [Alykhan Tejani](https://github.com/alykhantejani), [Luca Antiga](https://github.com/lantiga), [Alban Desmaison](https://github.com/albanD), [Andreas Koepf](https://github.com/andreaskoepf), [James Bradbury](https://github.com/jekbradbury), [Zeming Lin](https://github.com/ebetica), [Yuandong Tian](https://github.com/yuandong-tian), [Guillaume Lample](https://github.com/glample), [Marat Dukhan](https://github.com/Maratyszcza), [Natalia Gimelshein](https://github.com/ngimel), [Christian Sarofeen](https://github.com/csarofeen), [Martin Raison](https://github.com/martinraison), [Edward Yang](https://github.com/ezyang), [Zachary Devito](https://github.com/zdevito). \n\nNote: This project is unrelated to [hughperkins/pytorch](https://github.com/hughperkins/pytorch) with the same name. Hugh is a valuable contributor to the Torch community and has helped with many things Torch and PyTorch.\n\n## License\n\nPyTorch has a BSD-style license, as found in the [LICENSE](LICENSE) file.\n", + "description_content_type": "text/markdown", + "keywords": [ + "pytorch", + "machine learning" + ], + "author_email": "PyTorch Team ", + "license_expression": "Apache-2.0 AND Apache-2.0 WITH LLVM-exception AND BSD-2-Clause AND BSD-3-Clause AND BSL-1.0 AND MIT", + "license_file": [ + "LICENSE", + "third_party/FP16/LICENSE", + "third_party/FXdiv/LICENSE", + "third_party/NNPACK/LICENSE", + "third_party/NVTX/LICENSE.txt", + "third_party/NVTX/docs/LICENSE.txt", + "third_party/NVTX/python/LICENSE.txt", + "third_party/NVTX/rust/LICENSE", + "third_party/NVTX/tools/docs/github-markdown-css/LICENSE", + "third_party/VulkanMemoryAllocator/LICENSE.txt", + "third_party/XNNPACK/LICENSE", + "third_party/aiter/3rdparty/composable_kernel/LICENSE", + "third_party/aiter/3rdparty/composable_kernel/docs/LICENSE.rst", + "third_party/aiter/LICENSE", + "third_party/benchmark/LICENSE", + "third_party/composable_kernel/LICENSE", + "third_party/composable_kernel/docs/LICENSE.rst", + "third_party/cpp-httplib/LICENSE", + "third_party/cpuinfo/LICENSE", + "third_party/cpuinfo/deps/clog/LICENSE", + "third_party/cudnn_frontend/LICENSE.txt", + "third_party/cutlass/LICENSE.txt", + "third_party/cutlass/python/LICENSE.txt", + "third_party/fbgemm/LICENSE", + "third_party/fbgemm/external/composable_kernel/LICENSE", + "third_party/fbgemm/external/composable_kernel/docs/LICENSE.rst", + "third_party/fbgemm/external/cpuinfo/LICENSE", + "third_party/fbgemm/external/cpuinfo/deps/clog/LICENSE", + "third_party/fbgemm/external/cutlass/LICENSE.txt", + "third_party/fbgemm/external/cutlass/python/LICENSE.txt", + "third_party/fbgemm/external/googletest/LICENSE", + "third_party/fbgemm/external/hipify_torch/LICENSE.txt", + "third_party/fbgemm/fbgemm_gpu/docs/src/general/LICENSE.rst", + "third_party/fbgemm/fbgemm_gpu/experimental/hstu/LICENSE", + "third_party/fbgemm/fbgemm_gpu/src/quantize_ops/mx/LICENSE", + "third_party/fbgemm/fbgemm_gpu/test/quantize/mx/LICENSE", + "third_party/flash-attention/LICENSE", + "third_party/flash-attention/csrc/composable_kernel/LICENSE", + "third_party/flash-attention/csrc/composable_kernel/docs/LICENSE.rst", + "third_party/flash-attention/csrc/cutlass/LICENSE.txt", + "third_party/flash-attention/csrc/cutlass/python/LICENSE.txt", + "third_party/flash-attention/flash_attn/cute/LICENSE", + "third_party/flash-attention/third_party/aiter/3rdparty/composable_kernel/LICENSE", + "third_party/flash-attention/third_party/aiter/3rdparty/composable_kernel/docs/LICENSE.rst", + "third_party/flash-attention/third_party/aiter/LICENSE", + "third_party/flatbuffers/LICENSE", + "third_party/flatbuffers/dart/LICENSE", + "third_party/flatbuffers/swift/LICENSE", + "third_party/fmt/LICENSE", + "third_party/gemmlowp/gemmlowp/LICENSE", + "third_party/gloo/LICENSE", + "third_party/googletest/LICENSE", + "third_party/ideep/LICENSE", + "third_party/ideep/mkl-dnn/LICENSE", + "third_party/ideep/mkl-dnn/third_party/gtest/LICENSE", + "third_party/ideep/mkl-dnn/third_party/opencl/LICENSE", + "third_party/kineto/LICENSE", + "third_party/kineto/libkineto/third_party/dynolog_headers/LICENSE", + "third_party/kineto/libkineto/third_party/fmt/LICENSE", + "third_party/kineto/libkineto/third_party/googletest/LICENSE", + "third_party/llvm-openmp/LICENSE.txt", + "third_party/mimalloc/LICENSE", + "third_party/miniz-3.0.2/LICENSE", + "third_party/mslk/LICENSE", + "third_party/mslk/external/composable_kernel/LICENSE", + "third_party/mslk/external/composable_kernel/docs/LICENSE.rst", + "third_party/mslk/external/cutlass/LICENSE.txt", + "third_party/mslk/external/cutlass/python/LICENSE.txt", + "third_party/mslk/external/googletest/LICENSE", + "third_party/mslk/external/hipify_torch/LICENSE.txt", + "third_party/mslk/mslk/attention/flash_attn/LICENSE", + "third_party/nccl/LICENSE.txt", + "third_party/nccl/bindings/nccl4py/LICENSE.txt", + "third_party/nccl/contrib/nccl_checkpoint/python/LICENSE.txt", + "third_party/nccl/contrib/nccl_ep/LICENSE.txt", + "third_party/nccl/contrib/nccl_ubx/LICENSE.txt", + "third_party/onnx/LICENSE", + "third_party/onnx/third_party/pybind11/LICENSE", + "third_party/perfetto/LICENSE", + "third_party/protobuf/LICENSE", + "third_party/protobuf/third_party/benchmark/LICENSE", + "third_party/protobuf/third_party/googletest/LICENSE", + "third_party/protobuf/third_party/googletest/googlemock/LICENSE", + "third_party/protobuf/third_party/googletest/googlemock/scripts/generator/LICENSE", + "third_party/protobuf/third_party/googletest/googletest/LICENSE", + "third_party/protobuf/third_party/utf8_range/LICENSE", + "third_party/psimd/LICENSE", + "third_party/pthreadpool/LICENSE", + "third_party/pybind11/LICENSE", + "third_party/python-peachpy/LICENSE.rst", + "third_party/sleef/LICENSE.txt", + "third_party/tensorpipe/LICENSE.txt", + "third_party/tensorpipe/third_party/googletest/LICENSE", + "third_party/tensorpipe/third_party/googletest/googlemock/LICENSE", + "third_party/tensorpipe/third_party/googletest/googlemock/scripts/generator/LICENSE", + "third_party/tensorpipe/third_party/googletest/googletest/LICENSE", + "third_party/tensorpipe/third_party/libnop/LICENSE", + "third_party/tensorpipe/third_party/libuv/LICENSE", + "third_party/tensorpipe/third_party/pybind11/LICENSE", + "third_party/tensorpipe/third_party/pybind11/tools/clang/LICENSE.txt" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Intended Audience :: Education", + "Intended Audience :: Science/Research", + "Topic :: Scientific/Engineering", + "Topic :: Scientific/Engineering :: Mathematics", + "Topic :: Scientific/Engineering :: Artificial Intelligence", + "Topic :: Software Development", + "Topic :: Software Development :: Libraries", + "Topic :: Software Development :: Libraries :: Python Modules", + "Programming Language :: C++", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15" + ], + "requires_dist": [ + "filelock", + "typing-extensions>=4.10.0", + "setuptools>=77.0.3", + "sympy>=1.13.3", + "networkx>=2.5.1", + "jinja2", + "fsspec>=0.8.5", + "cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.3; platform_system == \"Linux\"", + "cuda-bindings<14,>=13.0.3; platform_system == \"Linux\" and python_version < \"3.15\"", + "nvidia-cudnn-cu13==9.24.0.43; platform_system == \"Linux\"", + "nvidia-cusparselt-cu13==0.8.1; platform_system == \"Linux\"", + "nvidia-nccl-cu13==2.30.7; platform_system == \"Linux\"", + "nvidia-nvshmem-cu13==3.4.5; platform_system == \"Linux\"", + "triton~=3.8.0; platform_system == \"Linux\" and python_version < \"3.15\"", + "triton~=3.8.0; platform_system == \"Linux\" and python_version < \"3.15\"", + "triton~=3.8.0; platform_system == \"Linux\" and python_version < \"3.15\"", + "triton~=3.8.0; platform_system == \"Linux\" and python_version < \"3.15\"", + "triton~=3.8.0; platform_system == \"Linux\" and python_version < \"3.15\"", + "optree>=0.13.0; extra == \"optree\"", + "opt-einsum>=3.3; extra == \"opt-einsum\"", + "pyyaml; extra == \"pyyaml\"" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://pytorch.org", + "Repository, https://github.com/pytorch/pytorch", + "Documentation, https://pytorch.org/docs", + "Issue Tracker, https://github.com/pytorch/pytorch/issues", + "Forum, https://discuss.pytorch.org" + ], + "provides_extra": [ + "optree", + "opt-einsum", + "pyyaml" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/cb/03/10388a42375ee7e4ac9b94eb2c5c569c8b5795e377e701c9ac3ad63de890/fastapi-0.141.1-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3" + }, + "hash": "sha256=bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.4", + "name": "fastapi", + "version": "0.141.1", + "summary": "FastAPI framework, high performance, easy to learn, fast to code, ready for production", + "description": "

\n \"FastAPI\"\n

\n

\n FastAPI framework, high performance, easy to learn, fast to code, ready for production\n

\n

\n\n \"Test\"\n\n\n \"Coverage\"\n\n\n \"Package\n\n\n \"Supported\n\n

\n\n---\n\n**Documentation**: [https://fastapi.tiangolo.com](https://fastapi.tiangolo.com)\n\n**Source Code**: [https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi)\n\n---\n\nFastAPI is a modern, fast (high-performance), web framework for building APIs with Python based on standard Python type hints.\n\nThe key features are:\n\n* **Fast**: Very high performance, on par with **NodeJS** and **Go** (thanks to Starlette and Pydantic). [One of the fastest Python frameworks available](#performance).\n* **Fast to code**: Increase the speed to develop features by about 200% to 300%. *\n* **Fewer bugs**: Reduce about 40% of human (developer) induced errors. *\n* **Intuitive**: Great editor support. Completion everywhere. Less time debugging.\n* **Easy**: Designed to be easy to use and learn. Less time reading docs.\n* **Short**: Minimize code duplication. Multiple features from each parameter declaration. Fewer bugs.\n* **Robust**: Get production-ready code. With automatic interactive documentation.\n* **Standards-based**: Based on (and fully compatible with) the open standards for APIs: [OpenAPI](https://github.com/OAI/OpenAPI-Specification) (previously known as Swagger) and [JSON Schema](https://json-schema.org/).\n\n* estimation based on tests conducted by an internal development team, building production applications.\n\n## Sponsors\n\n\n### Keystone Sponsor\n\n\n\n### Gold Sponsors\n\n\n\n\n\n\n\n\n\n\n### Silver Sponsors\n\n\n\n\n\n\n\n\n\n\n[Other sponsors](https://fastapi.tiangolo.com/fastapi-people/#sponsors)\n\n## Opinions\n\n\n\n
\n\n\"_[...] I'm using **FastAPI** a ton these days. [...] I'm actually planning to use it for all of my team's **ML services at Microsoft**. Some of them are getting integrated into the core **Windows** product and some **Office** products._\"\n\n
Kabir Khan - Microsoft (ref)
\n\n---\n\n\"_We adopted the **FastAPI** library to spawn a **REST** server that can be queried to obtain **predictions**. [for Ludwig]_\"\n\n
Piero Molino, Yaroslav Dudin, and Sai Sumanth Miryala - Uber (ref)
\n\n---\n\n\"_**Netflix** is pleased to announce the open-source release of our **crisis management** orchestration framework: **Dispatch**! [built with **FastAPI**]_\"\n\n
Kevin Glisson, Marc Vilanova, Forest Monsen - Netflix (ref)
\n\n---\n\n\"_If anyone is looking to build a production Python API, I would highly recommend **FastAPI**. It is **beautifully designed**, **simple to use** and **highly scalable**, it has become a **key component** in our API first development strategy and is driving many automations and services such as our Virtual TAC Engineer._\"\n\n
Deon Pillsbury - Cisco (ref)
\n\n---\n\n
\n\n## FastAPI Conf\n\n[**FastAPI Conf '26**](https://fastapiconf.com) is happening on **October 28, 2026** in **Amsterdam, NL**. All about FastAPI, right from the source. 🎤\n\n\"FastAPI\n\n## FastAPI mini documentary\n\nThere's a [FastAPI mini documentary](https://www.youtube.com/watch?v=mpR8ngthqiE) released at the end of 2025, you can watch it online:\n\n\"FastAPI\n\n## **Typer**, the FastAPI of CLIs\n\n\n\nIf you are building a CLI app to be used in the terminal instead of a web API, check out [**Typer**](https://typer.tiangolo.com/).\n\n**Typer** is FastAPI's little sibling. And it's intended to be the **FastAPI of CLIs**. ⌨️ 🚀\n\n## Requirements\n\nFastAPI stands on the shoulders of giants:\n\n* [Starlette](https://starlette.dev/) for the web parts.\n* [Pydantic](https://pydantic.dev/docs/) for the data parts.\n\n## Installation\n\nFirst, [install `uv`](https://docs.astral.sh/uv/getting-started/installation/), and then add FastAPI to your project:\n\n
\n\n```console\n$ uv add \"fastapi[standard]\"\n\n---> 100%\n```\n\n
\n\n**Note**: Make sure you put `\"fastapi[standard]\"` in quotes to ensure it works in all terminals.\n\nIf you prefer to use `pip`, install `fastapi[standard]` inside a virtual environment. See the [installation guide](tutorial/#install-fastapi) for the alternative steps.\n\n## Example\n\n### Create it\n\nCreate a file `main.py` with:\n\n```Python\nfrom fastapi import FastAPI\n\napp = FastAPI()\n\n\n@app.get(\"/\")\ndef read_root():\n return {\"Hello\": \"World\"}\n\n\n@app.get(\"/items/{item_id}\")\ndef read_item(item_id: int, q: str | None = None):\n return {\"item_id\": item_id, \"q\": q}\n```\n\n
\nOr use async def...\n\nIf your code uses `async` / `await`, use `async def`:\n\n```Python hl_lines=\"7 12\"\nfrom fastapi import FastAPI\n\napp = FastAPI()\n\n\n@app.get(\"/\")\nasync def read_root():\n return {\"Hello\": \"World\"}\n\n\n@app.get(\"/items/{item_id}\")\nasync def read_item(item_id: int, q: str | None = None):\n return {\"item_id\": item_id, \"q\": q}\n```\n\n**Note**:\n\nIf you don't know, check the _\"In a hurry?\"_ section about [`async` and `await` in the docs](https://fastapi.tiangolo.com/async/#in-a-hurry).\n\n
\n\n### Run it\n\nRun the server with:\n\n
\n\n```console\n$ uv run fastapi dev\n\n ╭────────── FastAPI CLI - Development mode ───────────╮\n │ │\n │ Serving at: http://127.0.0.1:8000 │\n │ │\n │ API docs: http://127.0.0.1:8000/docs │\n │ │\n │ Running in development mode, for production use: │\n │ │\n │ fastapi run │\n │ │\n ╰─────────────────────────────────────────────────────╯\n\nINFO: Will watch for changes in these directories: ['/home/user/code/awesomeapp']\nINFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)\nINFO: Started reloader process [2248755] using WatchFiles\nINFO: Started server process [2248757]\nINFO: Waiting for application startup.\nINFO: Application startup complete.\n```\n\n
\n\n
\nAbout the command fastapi dev...\n\nThe command `fastapi dev` reads your `main.py` file automatically, detects the **FastAPI** app in it, and starts a server using [Uvicorn](https://uvicorn.dev).\n\nBy default, `fastapi dev` will start with auto-reload enabled for local development.\n\nYou can read more about it in the [FastAPI CLI docs](https://fastapi.tiangolo.com/fastapi-cli/).\n\n
\n\n### Check it\n\nOpen your browser at [http://127.0.0.1:8000/items/5?q=somequery](http://127.0.0.1:8000/items/5?q=somequery).\n\nYou will see the JSON response as:\n\n```JSON\n{\"item_id\": 5, \"q\": \"somequery\"}\n```\n\nYou already created an API that:\n\n* Receives HTTP requests in the _paths_ `/` and `/items/{item_id}`.\n* Both _paths_ take `GET` operations (also known as HTTP _methods_).\n* The _path_ `/items/{item_id}` has a _path parameter_ `item_id` that should be an `int`.\n* The _path_ `/items/{item_id}` has an optional `str` _query parameter_ `q`.\n\n### Interactive API docs\n\nNow go to [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs).\n\nYou will see the automatic interactive API documentation (provided by [Swagger UI](https://github.com/swagger-api/swagger-ui)):\n\n![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png)\n\n### Alternative API docs\n\nAnd now, go to [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc).\n\nYou will see the alternative automatic documentation (provided by [ReDoc](https://github.com/Redocly/redoc)):\n\n![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png)\n\n## Example upgrade\n\nNow modify the file `main.py` to receive a body from a `PUT` request.\n\nDeclare the body using standard Python types, thanks to Pydantic.\n\n```Python hl_lines=\"2 7-10 23-25\"\nfrom fastapi import FastAPI\nfrom pydantic import BaseModel\n\napp = FastAPI()\n\n\nclass Item(BaseModel):\n name: str\n price: float\n is_offer: bool | None = None\n\n\n@app.get(\"/\")\ndef read_root():\n return {\"Hello\": \"World\"}\n\n\n@app.get(\"/items/{item_id}\")\ndef read_item(item_id: int, q: str | None = None):\n return {\"item_id\": item_id, \"q\": q}\n\n\n@app.put(\"/items/{item_id}\")\ndef update_item(item_id: int, item: Item):\n return {\"item_name\": item.name, \"item_id\": item_id}\n```\n\nThe `fastapi dev` server should reload automatically.\n\n### Interactive API docs upgrade\n\nNow go to [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs).\n\n* The interactive API documentation will be automatically updated, including the new body:\n\n![Swagger UI](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png)\n\n* Click on the button \"Try it out\", it allows you to fill the parameters and directly interact with the API:\n\n![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-04-swagger-03.png)\n\n* Then click on the \"Execute\" button, the user interface will communicate with your API, send the parameters, get the results and show them on the screen:\n\n![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-05-swagger-04.png)\n\n### Alternative API docs upgrade\n\nAnd now, go to [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc).\n\n* The alternative documentation will also reflect the new query parameter and body:\n\n![ReDoc](https://fastapi.tiangolo.com/img/index/index-06-redoc-02.png)\n\n### Recap\n\nIn summary, you declare **once** the types of parameters, body, etc. as function parameters.\n\nYou do that with standard modern Python types.\n\nYou don't have to learn a new syntax, the methods or classes of a specific library, etc.\n\nJust standard **Python**.\n\nFor example, for an `int`:\n\n```Python\nitem_id: int\n```\n\nor for a more complex `Item` model:\n\n```Python\nitem: Item\n```\n\n...and with that single declaration you get:\n\n* Editor support, including:\n * Completion.\n * Type checks.\n* Validation of data:\n * Automatic and clear errors when the data is invalid.\n * Validation even for deeply nested JSON objects.\n* Conversion of input data: coming from the network to Python data and types. Reading from:\n * JSON.\n * Path parameters.\n * Query parameters.\n * Cookies.\n * Headers.\n * Forms.\n * Files.\n* Conversion of output data: converting from Python data and types to network data (as JSON):\n * Convert Python types (`str`, `int`, `float`, `bool`, `list`, etc).\n * `datetime` objects.\n * `UUID` objects.\n * Database models.\n * ...and many more.\n* Automatic interactive API documentation, including 2 alternative user interfaces:\n * Swagger UI.\n * ReDoc.\n\n---\n\nComing back to the previous code example, **FastAPI** will:\n\n* Validate that there is an `item_id` in the path for `GET` and `PUT` requests.\n* Validate that the `item_id` is of type `int` for `GET` and `PUT` requests.\n * If it is not, the client will see a useful, clear error.\n* Check if there is an optional query parameter named `q` (as in `http://127.0.0.1:8000/items/foo?q=somequery`) for `GET` requests.\n * As the `q` parameter is declared with `= None`, it is optional.\n * Without the `None` it would be required (as is the body in the case with `PUT`).\n* For `PUT` requests to `/items/{item_id}`, read the body as JSON:\n * Check that it has a required attribute `name` that should be a `str`.\n * Check that it has a required attribute `price` that has to be a `float`.\n * Check that it has an optional attribute `is_offer`, that should be a `bool`, if present.\n * All this would also work for deeply nested JSON objects.\n* Convert from and to JSON automatically.\n* Document everything with OpenAPI, that can be used by:\n * Interactive documentation systems.\n * Automatic client code generation systems, for many languages.\n* Provide 2 interactive documentation web interfaces directly.\n\n---\n\nWe just scratched the surface, but you already get the idea of how it all works.\n\nTry changing the line with:\n\n```Python\n return {\"item_name\": item.name, \"item_id\": item_id}\n```\n\n...from:\n\n```Python\n ... \"item_name\": item.name ...\n```\n\n...to:\n\n```Python\n ... \"item_price\": item.price ...\n```\n\n...and see how your editor will auto-complete the attributes and know their types:\n\n![editor support](https://fastapi.tiangolo.com/img/vscode-completion.png)\n\nFor a more complete example including more features, see the Tutorial - User Guide.\n\n**Spoiler alert**: the tutorial - user guide includes:\n\n* Declaration of **parameters** from other different places such as: **headers**, **cookies**, **form fields** and **files**.\n* How to set **validation constraints** such as `maximum_length` or `regex`.\n* A very powerful and easy to use **Dependency Injection** system.\n* Security and authentication, including support for **OAuth2** with **JWT tokens** and **HTTP Basic** auth.\n* More advanced (but equally easy) techniques for declaring **deeply nested JSON models** (thanks to Pydantic).\n* **GraphQL** integration with [Strawberry](https://strawberry.rocks) and other libraries.\n* Many extra features (thanks to Starlette) such as:\n * **WebSockets**\n * extremely easy tests based on HTTPX and `pytest`\n * **CORS**\n * **Cookie Sessions**\n * ...and more.\n\n### Deploy your app (optional)\n\nYou can optionally deploy your FastAPI app to [FastAPI Cloud](https://fastapicloud.com) with a single command. 🚀\n\n
\n\n```console\n$ uv run fastapi deploy\n\nDeploying to FastAPI Cloud...\n\n✅ Deployment successful!\n\n🐔 Ready the chicken! Your app is ready at https://myapp.fastapicloud.dev\n```\n\n
\n\nThe CLI will automatically detect your FastAPI application and deploy it to the cloud. If you are not logged in, your browser will open to complete the authentication process.\n\nThat's it! Now you can access your app at that URL. ✨\n\n#### About FastAPI Cloud\n\n**[FastAPI Cloud](https://fastapicloud.com)** is built by the same author and team behind **FastAPI**.\n\nIt streamlines the process of **building**, **deploying**, and **accessing** an API with minimal effort.\n\nIt brings the same **developer experience** of building apps with FastAPI to **deploying** them to the cloud. 🎉\n\nFastAPI Cloud is the primary sponsor and funding provider for the *FastAPI and friends* open source projects. ✨\n\n#### Deploy to other cloud providers\n\nFastAPI is open source and based on standards. You can deploy FastAPI apps to any cloud provider you choose.\n\nFollow your cloud provider's guides to deploy FastAPI apps with them. 🤓\n\n## Performance\n\nIndependent TechEmpower benchmarks show **FastAPI** applications running under Uvicorn as [one of the fastest Python frameworks available](https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7), only below Starlette and Uvicorn themselves (used internally by FastAPI). (*)\n\nTo understand more about it, see the section [Benchmarks](https://fastapi.tiangolo.com/benchmarks/).\n\n## Dependencies\n\nFastAPI depends on Pydantic and Starlette.\n\n### `standard` Dependencies\n\nWhen you install FastAPI with `uv add \"fastapi[standard]\"` it comes with the `standard` group of optional dependencies:\n\nUsed by Pydantic:\n\n* [`email-validator`](https://github.com/JoshData/python-email-validator) - for email validation.\n\nUsed by Starlette:\n\n* [`httpx`](https://www.python-httpx.org) - Required if you want to use the `TestClient`.\n* [`jinja2`](https://jinja.palletsprojects.com) - Required if you want to use the default template configuration.\n* [`python-multipart`](https://github.com/Kludex/python-multipart) - Required if you want to support form \"parsing\", with `request.form()`.\n\nUsed by FastAPI:\n\n* [`uvicorn`](https://uvicorn.dev) - for the server that loads and serves your application. This includes `uvicorn[standard]`, which includes some dependencies (e.g. `uvloop`) needed for high performance serving.\n* `fastapi-cli[standard]` - to provide the `fastapi` command.\n * This includes `fastapi-cloud-cli`, which allows you to deploy your FastAPI application to [FastAPI Cloud](https://fastapicloud.com).\n\n### Without `standard` Dependencies\n\nIf you don't want to include the `standard` optional dependencies, you can install with `uv add fastapi` instead of `uv add \"fastapi[standard]\"`.\n\n### Without `fastapi-cloud-cli`\n\nIf you want to install FastAPI with the standard dependencies but without the `fastapi-cloud-cli`, you can install with `uv add \"fastapi[standard-no-fastapi-cloud-cli]\"`.\n\n### Additional Optional Dependencies\n\nThere are some additional dependencies you might want to install.\n\nAdditional optional Pydantic dependencies:\n\n* [`pydantic-settings`](https://pydantic.dev/docs/validation/latest/concepts/pydantic_settings/) - for settings management.\n* [`pydantic-extra-types`](https://github.com/pydantic/pydantic-extra-types) - for extra types to be used with Pydantic.\n\nAdditional optional FastAPI dependencies:\n\n* [`orjson`](https://github.com/ijl/orjson) - Required if you want to use `ORJSONResponse`.\n* [`ujson`](https://github.com/ultrajson/ultrajson) - Required if you want to use `UJSONResponse`.\n\n## License\n\nThis project is licensed under the terms of the MIT license.\n", + "description_content_type": "text/markdown", + "author_email": "=?utf-8?q?Sebasti=C3=A1n_Ram=C3=ADrez?= ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Intended Audience :: Information Technology", + "Intended Audience :: System Administrators", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python", + "Topic :: Internet", + "Topic :: Software Development :: Libraries :: Application Frameworks", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Software Development :: Libraries", + "Topic :: Software Development", + "Typing :: Typed", + "Development Status :: 4 - Beta", + "Environment :: Web Environment", + "Framework :: AsyncIO", + "Framework :: FastAPI", + "Framework :: Pydantic", + "Framework :: Pydantic :: 2", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Topic :: Internet :: WWW/HTTP :: HTTP Servers", + "Topic :: Internet :: WWW/HTTP" + ], + "requires_dist": [ + "starlette>=0.46.0", + "pydantic>=2.9.0", + "typing-extensions>=4.8.0", + "typing-inspection>=0.4.2", + "annotated-doc>=0.0.2", + "fastapi-cli[standard]>=0.0.32; extra == \"standard\"", + "fastar>=0.9.0; extra == \"standard\"", + "httpx<1.0.0,>=0.23.0; extra == \"standard\"", + "jinja2>=3.1.5; extra == \"standard\"", + "python-multipart>=0.0.18; extra == \"standard\"", + "email-validator>=2.0.0; extra == \"standard\"", + "uvicorn[standard]>=0.12.0; extra == \"standard\"", + "pydantic-settings>=2.0.0; extra == \"standard\"", + "pydantic-extra-types>=2.0.0; extra == \"standard\"", + "fastapi-cli[standard-no-fastapi-cloud-cli]>=0.0.32; extra == \"standard-no-fastapi-cloud-cli\"", + "httpx<1.0.0,>=0.23.0; extra == \"standard-no-fastapi-cloud-cli\"", + "jinja2>=3.1.5; extra == \"standard-no-fastapi-cloud-cli\"", + "python-multipart>=0.0.18; extra == \"standard-no-fastapi-cloud-cli\"", + "email-validator>=2.0.0; extra == \"standard-no-fastapi-cloud-cli\"", + "uvicorn[standard]>=0.12.0; extra == \"standard-no-fastapi-cloud-cli\"", + "pydantic-settings>=2.0.0; extra == \"standard-no-fastapi-cloud-cli\"", + "pydantic-extra-types>=2.0.0; extra == \"standard-no-fastapi-cloud-cli\"", + "fastapi-cli[standard]>=0.0.32; extra == \"all\"", + "httpx<1.0.0,>=0.23.0; extra == \"all\"", + "jinja2>=3.1.5; extra == \"all\"", + "python-multipart>=0.0.18; extra == \"all\"", + "itsdangerous>=1.1.0; extra == \"all\"", + "pyyaml>=5.3.1; extra == \"all\"", + "email-validator>=2.0.0; extra == \"all\"", + "uvicorn[standard]>=0.12.0; extra == \"all\"", + "pydantic-settings>=2.0.0; extra == \"all\"", + "pydantic-extra-types>=2.0.0; extra == \"all\"" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://github.com/fastapi/fastapi", + "Documentation, https://fastapi.tiangolo.com/", + "Repository, https://github.com/fastapi/fastapi", + "Issues, https://github.com/fastapi/fastapi/issues", + "Changelog, https://fastapi.tiangolo.com/release-notes/" + ], + "provides_extra": [ + "standard", + "standard-no-fastapi-cloud-cli", + "all" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/38/0c/b54a4fdd7f90a3af8b02ebc9ce6712c2c208b7926a2f7bad95c33ebbe943/uvicorn-0.54.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf" + }, + "hash": "sha256=505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.5", + "name": "uvicorn", + "version": "0.54.0", + "summary": "The lightning-fast ASGI server.", + "description": "

\n uvicorn\n

\n\n

\nAn ASGI web server, for Python.\n

\n\n---\n\n[![Build Status](https://github.com/Kludex/uvicorn/workflows/Test%20Suite/badge.svg)](https://github.com/Kludex/uvicorn/actions)\n[![Package version](https://badge.fury.io/py/uvicorn.svg)](https://pypi.python.org/pypi/uvicorn)\n[![Supported Python Version](https://img.shields.io/pypi/pyversions/uvicorn.svg?color=%2334D058)](https://pypi.org/project/uvicorn)\n[![Discord](https://img.shields.io/discord/1051468649518616576?logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2)](https://discord.gg/RxKUF5JuHs)\n\n---\n\n**Documentation**: [https://uvicorn.dev](https://uvicorn.dev)\n\n**Source Code**: [https://www.github.com/Kludex/uvicorn](https://www.github.com/Kludex/uvicorn)\n\n---\n\nUvicorn is an ASGI web server implementation for Python.\n\nUntil recently Python has lacked a minimal low-level server/application interface for\nasync frameworks. The [ASGI specification][asgi] fills this gap, and means we're now able to\nstart building a common set of tooling usable across all async frameworks.\n\nUvicorn currently supports HTTP/1.1, HTTP/2 and WebSockets.\n\n## Quickstart\n\nInstall using `pip`:\n\n```shell\n$ pip install uvicorn\n```\n\nThis will install uvicorn with minimal (pure Python) dependencies.\n\n```shell\n$ pip install 'uvicorn[standard]'\n```\n\nThis will install uvicorn with \"Cython-based\" dependencies (where possible) and other \"optional extras\".\n\nIn this context, \"Cython-based\" means the following:\n\n- the event loop `uvloop` will be installed and used if possible.\n- the http protocol will be handled by `httptools` if possible.\n\nMoreover, \"optional extras\" means that:\n\n- the websocket protocol will be handled by `websockets` (should you want to use `wsproto` you'd need to install it manually) if possible.\n- the `--reload` flag in development mode will use `watchfiles`.\n- `python-dotenv` will be installed should you want to use the `--env-file` option.\n- `PyYAML` will be installed to allow you to provide a `.yaml` file to `--log-config`, if desired.\n\nCreate an application, in `example.py`:\n\n```python\nasync def app(scope, receive, send):\n assert scope['type'] == 'http'\n\n await send({\n 'type': 'http.response.start',\n 'status': 200,\n 'headers': [\n (b'content-type', b'text/plain'),\n ],\n })\n await send({\n 'type': 'http.response.body',\n 'body': b'Hello, world!',\n })\n```\n\nRun the server:\n\n```shell\n$ uvicorn example:app\n```\n\n---\n\n## Why ASGI?\n\nMost well established Python Web frameworks started out as WSGI-based frameworks.\n\nWSGI applications are a single, synchronous callable that takes a request and returns a response.\nThis doesn’t allow for long-lived connections, like you get with long-poll HTTP or WebSocket connections,\nwhich WSGI doesn't support well.\n\nHaving an async concurrency model also allows for options such as lightweight background tasks,\nand can be less of a limiting factor for endpoints that have long periods being blocked on network\nI/O such as dealing with slow HTTP requests.\n\n---\n\n## Alternative ASGI servers\n\nA strength of the ASGI protocol is that it decouples the server implementation\nfrom the application framework. This allows for an ecosystem of interoperating\nwebservers and application frameworks.\n\n### Daphne\n\nThe first ASGI server implementation, originally developed to power Django Channels, is [the Daphne webserver][daphne].\n\nIt is run widely in production, and supports HTTP/1.1, HTTP/2, and WebSockets.\n\nAny of the example applications given here can equally well be run using `daphne` instead.\n\n```\n$ pip install daphne\n$ daphne app:App\n```\n\n### Hypercorn\n\n[Hypercorn][hypercorn] was initially part of the Quart web framework, before\nbeing separated out into a standalone ASGI server.\n\nHypercorn supports HTTP/1.1, HTTP/2, and WebSockets.\n\nIt also supports [the excellent `trio` async framework][trio], as an alternative to `asyncio`.\n\n```\n$ pip install hypercorn\n$ hypercorn app:App\n```\n\n### Mangum\n\n[Mangum][mangum] is an adapter for using ASGI applications with AWS Lambda & API Gateway.\n\n### Granian\n\n[Granian][granian] is an ASGI compatible Rust HTTP server which supports HTTP/2, TLS and WebSockets.\n\n---\n\n

Uvicorn is BSD licensed code.
Designed & crafted with care.

— 🦄 —

\n\n[asgi]: https://asgi.readthedocs.io/en/latest/\n[daphne]: https://github.com/django/daphne\n[hypercorn]: https://github.com/pgjones/hypercorn\n[trio]: https://trio.readthedocs.io\n[mangum]: https://github.com/jordaneremieff/mangum\n[granian]: https://github.com/emmett-framework/granian\n", + "description_content_type": "text/markdown", + "author_email": "Tom Christie ", + "maintainer_email": "Marcelo Trylesinski ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.md" + ], + "classifier": [ + "Development Status :: 4 - Beta", + "Environment :: Web Environment", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Internet :: WWW/HTTP" + ], + "requires_dist": [ + "click>=7.0", + "h11>=0.8", + "typing-extensions>=4.0; python_version < '3.11'", + "httptools>=0.8.0; extra == 'standard'", + "python-dotenv>=0.13; extra == 'standard'", + "pyyaml>=5.1; extra == 'standard'", + "uvloop>=0.15.1; (sys_platform != 'win32' and (sys_platform != 'cygwin' and platform_python_implementation != 'PyPy')) and extra == 'standard'", + "watchfiles>=0.20; extra == 'standard'", + "websockets>=13.0; extra == 'standard'" + ], + "requires_python": ">=3.10", + "project_url": [ + "Changelog, https://uvicorn.dev/release-notes", + "Funding, https://github.com/sponsors/Kludex", + "Homepage, https://uvicorn.dev/", + "Source, https://github.com/Kludex/uvicorn" + ], + "provides_extra": [ + "standard" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", + "archive_info": { + "hashes": { + "sha256": "1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979" + }, + "hash": "sha256=1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "psutil", + "version": "7.2.2", + "platform": [ + "Platform Independent" + ], + "summary": "Cross-platform lib for process and system monitoring.", + "description": "| |downloads| |stars| |forks| |contributors| |packages|\n| |version| |license| |stackoverflow| |twitter| |tidelift|\n| |github-actions-wheels| |github-actions-bsd|\n\n.. |downloads| image:: https://img.shields.io/pypi/dm/psutil.svg\n :target: https://clickpy.clickhouse.com/dashboard/psutil\n :alt: Downloads\n\n.. |stars| image:: https://img.shields.io/github/stars/giampaolo/psutil.svg\n :target: https://github.com/giampaolo/psutil/stargazers\n :alt: Github stars\n\n.. |forks| image:: https://img.shields.io/github/forks/giampaolo/psutil.svg\n :target: https://github.com/giampaolo/psutil/network/members\n :alt: Github forks\n\n.. |contributors| image:: https://img.shields.io/github/contributors/giampaolo/psutil.svg\n :target: https://github.com/giampaolo/psutil/graphs/contributors\n :alt: Contributors\n\n.. |stackoverflow| image:: https://img.shields.io/badge/stackoverflow-Ask%20questions-blue.svg\n :target: https://stackoverflow.com/questions/tagged/psutil\n :alt: Stackoverflow\n\n.. |github-actions-wheels| image:: https://img.shields.io/github/actions/workflow/status/giampaolo/psutil/.github/workflows/build.yml.svg?label=Linux%2C%20macOS%2C%20Windows\n :target: https://github.com/giampaolo/psutil/actions?query=workflow%3Abuild\n :alt: Linux, macOS, Windows\n\n.. |github-actions-bsd| image:: https://img.shields.io/github/actions/workflow/status/giampaolo/psutil/.github/workflows/bsd.yml.svg?label=FreeBSD,%20NetBSD,%20OpenBSD\n :target: https://github.com/giampaolo/psutil/actions?query=workflow%3Absd-tests\n :alt: FreeBSD, NetBSD, OpenBSD\n\n.. |version| image:: https://img.shields.io/pypi/v/psutil.svg?label=pypi\n :target: https://pypi.org/project/psutil\n :alt: Latest version\n\n.. |packages| image:: https://repology.org/badge/tiny-repos/python:psutil.svg\n :target: https://repology.org/metapackage/python:psutil/versions\n :alt: Binary packages\n\n.. |license| image:: https://img.shields.io/pypi/l/psutil.svg\n :target: https://github.com/giampaolo/psutil/blob/master/LICENSE\n :alt: License\n\n.. |twitter| image:: https://img.shields.io/twitter/follow/grodola?style=flat\n :target: https://twitter.com/grodola\n :alt: Twitter Follow\n\n.. |tidelift| image:: https://tidelift.com/badges/github/giampaolo/psutil?style=flat\n :target: https://tidelift.com/subscription/pkg/pypi-psutil?utm_source=pypi-psutil&utm_medium=referral&utm_campaign=readme\n :alt: Tidelift\n\n-----\n\nQuick links\n===========\n\n- `Home page `_\n- `Install `_\n- `Documentation `_\n- `Download `_\n- `Forum `_\n- `StackOverflow `_\n- `Blog `_\n- `What's new `_\n\n\nSummary\n=======\n\npsutil (process and system utilities) is a cross-platform library for\nretrieving information on **running processes** and **system utilization**\n(CPU, memory, disks, network, sensors) in Python.\nIt is useful mainly for **system monitoring**, **profiling and limiting process\nresources** and **management of running processes**.\nIt implements many functionalities offered by classic UNIX command line tools\nsuch as *ps, top, iotop, lsof, netstat, ifconfig, free* and others.\npsutil currently supports the following platforms:\n\n- **Linux**\n- **Windows**\n- **macOS**\n- **FreeBSD, OpenBSD**, **NetBSD**\n- **Sun Solaris**\n- **AIX**\n\nSupported Python versions are cPython 3.6+ and `PyPy `__.\nLatest psutil version supporting Python 2.7 is\n`psutil 6.1.1 `__.\n\nExample usages\n==============\n\nThis represents pretty much the whole psutil API.\n\nCPU\n---\n\n.. code-block:: python\n\n >>> import psutil\n >>>\n >>> psutil.cpu_times()\n scputimes(user=3961.46, nice=169.729, system=2150.659, idle=16900.540, iowait=629.59, irq=0.0, softirq=19.42, steal=0.0, guest=0, guest_nice=0.0)\n >>>\n >>> for x in range(3):\n ... psutil.cpu_percent(interval=1)\n ...\n 4.0\n 5.9\n 3.8\n >>>\n >>> for x in range(3):\n ... psutil.cpu_percent(interval=1, percpu=True)\n ...\n [4.0, 6.9, 3.7, 9.2]\n [7.0, 8.5, 2.4, 2.1]\n [1.2, 9.0, 9.9, 7.2]\n >>>\n >>> for x in range(3):\n ... psutil.cpu_times_percent(interval=1, percpu=False)\n ...\n scputimes(user=1.5, nice=0.0, system=0.5, idle=96.5, iowait=1.5, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)\n scputimes(user=1.0, nice=0.0, system=0.0, idle=99.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)\n scputimes(user=2.0, nice=0.0, system=0.0, idle=98.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)\n >>>\n >>> psutil.cpu_count()\n 4\n >>> psutil.cpu_count(logical=False)\n 2\n >>>\n >>> psutil.cpu_stats()\n scpustats(ctx_switches=20455687, interrupts=6598984, soft_interrupts=2134212, syscalls=0)\n >>>\n >>> psutil.cpu_freq()\n scpufreq(current=931.42925, min=800.0, max=3500.0)\n >>>\n >>> psutil.getloadavg() # also on Windows (emulated)\n (3.14, 3.89, 4.67)\n\nMemory\n------\n\n.. code-block:: python\n\n >>> psutil.virtual_memory()\n svmem(total=10367352832, available=6472179712, percent=37.6, used=8186245120, free=2181107712, active=4748992512, inactive=2758115328, buffers=790724608, cached=3500347392, shared=787554304)\n >>> psutil.swap_memory()\n sswap(total=2097147904, used=296128512, free=1801019392, percent=14.1, sin=304193536, sout=677842944)\n >>>\n\nDisks\n-----\n\n.. code-block:: python\n\n >>> psutil.disk_partitions()\n [sdiskpart(device='/dev/sda1', mountpoint='/', fstype='ext4', opts='rw,nosuid'),\n sdiskpart(device='/dev/sda2', mountpoint='/home', fstype='ext', opts='rw')]\n >>>\n >>> psutil.disk_usage('/')\n sdiskusage(total=21378641920, used=4809781248, free=15482871808, percent=22.5)\n >>>\n >>> psutil.disk_io_counters(perdisk=False)\n sdiskio(read_count=719566, write_count=1082197, read_bytes=18626220032, write_bytes=24081764352, read_time=5023392, write_time=63199568, read_merged_count=619166, write_merged_count=812396, busy_time=4523412)\n >>>\n\nNetwork\n-------\n\n.. code-block:: python\n\n >>> psutil.net_io_counters(pernic=True)\n {'eth0': netio(bytes_sent=485291293, bytes_recv=6004858642, packets_sent=3251564, packets_recv=4787798, errin=0, errout=0, dropin=0, dropout=0),\n 'lo': netio(bytes_sent=2838627, bytes_recv=2838627, packets_sent=30567, packets_recv=30567, errin=0, errout=0, dropin=0, dropout=0)}\n >>>\n >>> psutil.net_connections(kind='tcp')\n [sconn(fd=115, family=, type=, laddr=addr(ip='10.0.0.1', port=48776), raddr=addr(ip='93.186.135.91', port=80), status='ESTABLISHED', pid=1254),\n sconn(fd=117, family=, type=, laddr=addr(ip='10.0.0.1', port=43761), raddr=addr(ip='72.14.234.100', port=80), status='CLOSING', pid=2987),\n ...]\n >>>\n >>> psutil.net_if_addrs()\n {'lo': [snicaddr(family=, address='127.0.0.1', netmask='255.0.0.0', broadcast='127.0.0.1', ptp=None),\n snicaddr(family=, address='::1', netmask='ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', broadcast=None, ptp=None),\n snicaddr(family=, address='00:00:00:00:00:00', netmask=None, broadcast='00:00:00:00:00:00', ptp=None)],\n 'wlan0': [snicaddr(family=, address='192.168.1.3', netmask='255.255.255.0', broadcast='192.168.1.255', ptp=None),\n snicaddr(family=, address='fe80::c685:8ff:fe45:641%wlan0', netmask='ffff:ffff:ffff:ffff::', broadcast=None, ptp=None),\n snicaddr(family=, address='c4:85:08:45:06:41', netmask=None, broadcast='ff:ff:ff:ff:ff:ff', ptp=None)]}\n >>>\n >>> psutil.net_if_stats()\n {'lo': snicstats(isup=True, duplex=, speed=0, mtu=65536, flags='up,loopback,running'),\n 'wlan0': snicstats(isup=True, duplex=, speed=100, mtu=1500, flags='up,broadcast,running,multicast')}\n >>>\n\nSensors\n-------\n\n.. code-block:: python\n\n >>> import psutil\n >>> psutil.sensors_temperatures()\n {'acpitz': [shwtemp(label='', current=47.0, high=103.0, critical=103.0)],\n 'asus': [shwtemp(label='', current=47.0, high=None, critical=None)],\n 'coretemp': [shwtemp(label='Physical id 0', current=52.0, high=100.0, critical=100.0),\n shwtemp(label='Core 0', current=45.0, high=100.0, critical=100.0)]}\n >>>\n >>> psutil.sensors_fans()\n {'asus': [sfan(label='cpu_fan', current=3200)]}\n >>>\n >>> psutil.sensors_battery()\n sbattery(percent=93, secsleft=16628, power_plugged=False)\n >>>\n\nOther system info\n-----------------\n\n.. code-block:: python\n\n >>> import psutil\n >>> psutil.users()\n [suser(name='giampaolo', terminal='pts/2', host='localhost', started=1340737536.0, pid=1352),\n suser(name='giampaolo', terminal='pts/3', host='localhost', started=1340737792.0, pid=1788)]\n >>>\n >>> psutil.boot_time()\n 1365519115.0\n >>>\n\nProcess management\n------------------\n\n.. code-block:: python\n\n >>> import psutil\n >>> psutil.pids()\n [1, 2, 3, 4, 5, 6, 7, 46, 48, 50, 51, 178, 182, 222, 223, 224, 268, 1215,\n 1216, 1220, 1221, 1243, 1244, 1301, 1601, 2237, 2355, 2637, 2774, 3932,\n 4176, 4177, 4185, 4187, 4189, 4225, 4243, 4245, 4263, 4282, 4306, 4311,\n 4312, 4313, 4314, 4337, 4339, 4357, 4358, 4363, 4383, 4395, 4408, 4433,\n 4443, 4445, 4446, 5167, 5234, 5235, 5252, 5318, 5424, 5644, 6987, 7054,\n 7055, 7071]\n >>>\n >>> p = psutil.Process(7055)\n >>> p\n psutil.Process(pid=7055, name='python3', status='running', started='09:04:44')\n >>> p.pid\n 7055\n >>> p.name()\n 'python3'\n >>> p.exe()\n '/usr/bin/python3'\n >>> p.cwd()\n '/home/giampaolo'\n >>> p.cmdline()\n ['/usr/bin/python3', 'main.py']\n >>>\n >>> p.ppid()\n 7054\n >>> p.parent()\n psutil.Process(pid=4699, name='bash', status='sleeping', started='09:06:44')\n >>> p.parents()\n [psutil.Process(pid=4699, name='bash', started='09:06:44'),\n psutil.Process(pid=4689, name='gnome-terminal-server', status='sleeping', started='0:06:44'),\n psutil.Process(pid=1, name='systemd', status='sleeping', started='05:56:55')]\n >>> p.children(recursive=True)\n [psutil.Process(pid=29835, name='python3', status='sleeping', started='11:45:38'),\n psutil.Process(pid=29836, name='python3', status='waking', started='11:43:39')]\n >>>\n >>> p.status()\n 'running'\n >>> p.create_time()\n 1267551141.5019531\n >>> p.terminal()\n '/dev/pts/0'\n >>>\n >>> p.username()\n 'giampaolo'\n >>> p.uids()\n puids(real=1000, effective=1000, saved=1000)\n >>> p.gids()\n pgids(real=1000, effective=1000, saved=1000)\n >>>\n >>> p.cpu_times()\n pcputimes(user=1.02, system=0.31, children_user=0.32, children_system=0.1, iowait=0.0)\n >>> p.cpu_percent(interval=1.0)\n 12.1\n >>> p.cpu_affinity()\n [0, 1, 2, 3]\n >>> p.cpu_affinity([0, 1]) # set\n >>> p.cpu_num()\n 1\n >>>\n >>> p.memory_info()\n pmem(rss=10915840, vms=67608576, shared=3313664, text=2310144, lib=0, data=7262208, dirty=0)\n >>> p.memory_full_info() # \"real\" USS memory usage (Linux, macOS, Win only)\n pfullmem(rss=10199040, vms=52133888, shared=3887104, text=2867200, lib=0, data=5967872, dirty=0, uss=6545408, pss=6872064, swap=0)\n >>> p.memory_percent()\n 0.7823\n >>> p.memory_maps()\n [pmmap_grouped(path='/lib/x8664-linux-gnu/libutil-2.15.so', rss=32768, size=2125824, pss=32768, shared_clean=0, shared_dirty=0, private_clean=20480, private_dirty=12288, referenced=32768, anonymous=12288, swap=0),\n pmmap_grouped(path='/lib/x8664-linux-gnu/libc-2.15.so', rss=3821568, size=3842048, pss=3821568, shared_clean=0, shared_dirty=0, private_clean=0, private_dirty=3821568, referenced=3575808, anonymous=3821568, swap=0),\n pmmap_grouped(path='[heap]', rss=32768, size=139264, pss=32768, shared_clean=0, shared_dirty=0, private_clean=0, private_dirty=32768, referenced=32768, anonymous=32768, swap=0),\n pmmap_grouped(path='[stack]', rss=2465792, size=2494464, pss=2465792, shared_clean=0, shared_dirty=0, private_clean=0, private_dirty=2465792, referenced=2277376, anonymous=2465792, swap=0),\n ...]\n >>>\n >>> p.io_counters()\n pio(read_count=478001, write_count=59371, read_bytes=700416, write_bytes=69632, read_chars=456232, write_chars=517543)\n >>>\n >>> p.open_files()\n [popenfile(path='/home/giampaolo/monit.py', fd=3, position=0, mode='r', flags=32768),\n popenfile(path='/var/log/monit.log', fd=4, position=235542, mode='a', flags=33793)]\n >>>\n >>> p.net_connections(kind='tcp')\n [pconn(fd=115, family=, type=, laddr=addr(ip='10.0.0.1', port=48776), raddr=addr(ip='93.186.135.91', port=80), status='ESTABLISHED'),\n pconn(fd=117, family=, type=, laddr=addr(ip='10.0.0.1', port=43761), raddr=addr(ip='72.14.234.100', port=80), status='CLOSING')]\n >>>\n >>> p.threads()\n [pthread(id=5234, user_time=22.5, system_time=9.2891),\n pthread(id=5237, user_time=0.0707, system_time=1.1)]\n >>>\n >>> p.num_threads()\n 4\n >>> p.num_fds()\n 8\n >>> p.num_ctx_switches()\n pctxsw(voluntary=78, involuntary=19)\n >>>\n >>> p.nice()\n 0\n >>> p.nice(10) # set\n >>>\n >>> p.ionice(psutil.IOPRIO_CLASS_IDLE) # IO priority (Win and Linux only)\n >>> p.ionice()\n pionice(ioclass=, value=0)\n >>>\n >>> p.rlimit(psutil.RLIMIT_NOFILE, (5, 5)) # set resource limits (Linux only)\n >>> p.rlimit(psutil.RLIMIT_NOFILE)\n (5, 5)\n >>>\n >>> p.environ()\n {'LC_PAPER': 'it_IT.UTF-8', 'SHELL': '/bin/bash', 'GREP_OPTIONS': '--color=auto',\n 'XDG_CONFIG_DIRS': '/etc/xdg/xdg-ubuntu:/usr/share/upstart/xdg:/etc/xdg',\n ...}\n >>>\n >>> p.as_dict()\n {'status': 'running', 'num_ctx_switches': pctxsw(voluntary=63, involuntary=1), 'pid': 5457, ...}\n >>> p.is_running()\n True\n >>> p.suspend()\n >>> p.resume()\n >>>\n >>> p.terminate()\n >>> p.kill()\n >>> p.wait(timeout=3)\n \n >>>\n >>> psutil.test()\n USER PID %CPU %MEM VSZ RSS TTY START TIME COMMAND\n root 1 0.0 0.0 24584 2240 Jun17 00:00 init\n root 2 0.0 0.0 0 0 Jun17 00:00 kthreadd\n ...\n giampaolo 31475 0.0 0.0 20760 3024 /dev/pts/0 Jun19 00:00 python2.4\n giampaolo 31721 0.0 2.2 773060 181896 00:04 10:30 chrome\n root 31763 0.0 0.0 0 0 00:05 00:00 kworker/0:1\n >>>\n\nFurther process APIs\n--------------------\n\n.. code-block:: python\n\n >>> import psutil\n >>> for proc in psutil.process_iter(['pid', 'name']):\n ... print(proc.info)\n ...\n {'pid': 1, 'name': 'systemd'}\n {'pid': 2, 'name': 'kthreadd'}\n {'pid': 3, 'name': 'ksoftirqd/0'}\n ...\n >>>\n >>> psutil.pid_exists(3)\n True\n >>>\n >>> def on_terminate(proc):\n ... print(\"process {} terminated\".format(proc))\n ...\n >>> # waits for multiple processes to terminate\n >>> gone, alive = psutil.wait_procs(procs_list, timeout=3, callback=on_terminate)\n >>>\n\nHeap info\n---------\n\n.. code-block:: python\n\n >>> import psutil\n >>> psutil.heap_info()\n pheap(heap_used=5177792, mmap_used=819200)\n >>> psutil.heap_trim()\n\nSee also `psleak `__\n\nWindows services\n----------------\n\n.. code-block:: python\n\n >>> list(psutil.win_service_iter())\n [,\n ,\n ,\n ,\n ...]\n >>> s = psutil.win_service_get('alg')\n >>> s.as_dict()\n {'binpath': 'C:\\\\Windows\\\\System32\\\\alg.exe',\n 'description': 'Provides support for 3rd party protocol plug-ins for Internet Connection Sharing',\n 'display_name': 'Application Layer Gateway Service',\n 'name': 'alg',\n 'pid': None,\n 'start_type': 'manual',\n 'status': 'stopped',\n 'username': 'NT AUTHORITY\\\\LocalService'}\n\nProjects using psutil\n=====================\n\nHere's some I find particularly interesting:\n\n- https://github.com/giampaolo/psleak\n- https://github.com/google/grr\n- https://github.com/facebook/osquery/\n- https://github.com/nicolargo/glances\n- https://github.com/aristocratos/bpytop\n- https://github.com/Jahaja/psdash\n- https://github.com/ajenti/ajenti\n- https://github.com/home-assistant/home-assistant/\n\nPortings\n========\n\n- Go: https://github.com/shirou/gopsutil\n- C: https://github.com/hamon-in/cpslib\n- Rust: https://github.com/rust-psutil/rust-psutil\n- Nim: https://github.com/johnscillieri/psutil-nim\n\n\n\n", + "description_content_type": "text/x-rst", + "keywords": [ + "ps", + "top", + "kill", + "free", + "lsof", + "netstat", + "nice", + "tty", + "ionice", + "uptime", + "taskmgr", + "process", + "df", + "iotop", + "iostat", + "ifconfig", + "taskset", + "who", + "pidof", + "pmap", + "smem", + "pstree", + "monitoring", + "ulimit", + "prlimit", + "smem", + "performance", + "metrics", + "agent", + "observability" + ], + "home_page": "https://github.com/giampaolo/psutil", + "author": "Giampaolo Rodola", + "author_email": "g.rodola@gmail.com", + "license": "BSD-3-Clause", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Environment :: Console", + "Intended Audience :: Developers", + "Intended Audience :: Information Technology", + "Intended Audience :: System Administrators", + "Operating System :: MacOS :: MacOS X", + "Operating System :: Microsoft :: Windows :: Windows 10", + "Operating System :: Microsoft :: Windows :: Windows 11", + "Operating System :: Microsoft :: Windows :: Windows 7", + "Operating System :: Microsoft :: Windows :: Windows 8", + "Operating System :: Microsoft :: Windows :: Windows 8.1", + "Operating System :: Microsoft :: Windows :: Windows Server 2003", + "Operating System :: Microsoft :: Windows :: Windows Server 2008", + "Operating System :: Microsoft :: Windows :: Windows Vista", + "Operating System :: Microsoft :: Windows", + "Operating System :: Microsoft", + "Operating System :: OS Independent", + "Operating System :: POSIX :: AIX", + "Operating System :: POSIX :: BSD :: FreeBSD", + "Operating System :: POSIX :: BSD :: NetBSD", + "Operating System :: POSIX :: BSD :: OpenBSD", + "Operating System :: POSIX :: BSD", + "Operating System :: POSIX :: Linux", + "Operating System :: POSIX :: SunOS/Solaris", + "Operating System :: POSIX", + "Programming Language :: C", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Programming Language :: Python", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Software Development :: Libraries", + "Topic :: System :: Benchmark", + "Topic :: System :: Hardware", + "Topic :: System :: Monitoring", + "Topic :: System :: Networking :: Monitoring :: Hardware Watchdog", + "Topic :: System :: Networking :: Monitoring", + "Topic :: System :: Networking", + "Topic :: System :: Operating System", + "Topic :: System :: Systems Administration", + "Topic :: Utilities" + ], + "requires_dist": [ + "psleak ; extra == 'dev'", + "pytest ; extra == 'dev'", + "pytest-instafail ; extra == 'dev'", + "pytest-xdist ; extra == 'dev'", + "setuptools ; extra == 'dev'", + "abi3audit ; extra == 'dev'", + "black ; extra == 'dev'", + "check-manifest ; extra == 'dev'", + "coverage ; extra == 'dev'", + "packaging ; extra == 'dev'", + "pylint ; extra == 'dev'", + "pyperf ; extra == 'dev'", + "pypinfo ; extra == 'dev'", + "pytest-cov ; extra == 'dev'", + "requests ; extra == 'dev'", + "rstcheck ; extra == 'dev'", + "ruff ; extra == 'dev'", + "sphinx ; extra == 'dev'", + "sphinx-rtd-theme ; extra == 'dev'", + "toml-sort ; extra == 'dev'", + "twine ; extra == 'dev'", + "validate-pyproject[all] ; extra == 'dev'", + "virtualenv ; extra == 'dev'", + "vulture ; extra == 'dev'", + "wheel ; extra == 'dev'", + "colorama ; (os_name == \"nt\") and extra == 'dev'", + "pyreadline3 ; (os_name == \"nt\") and extra == 'dev'", + "pywin32 ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'dev'", + "wheel ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'dev'", + "wmi ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'dev'", + "psleak ; extra == 'test'", + "pytest ; extra == 'test'", + "pytest-instafail ; extra == 'test'", + "pytest-xdist ; extra == 'test'", + "setuptools ; extra == 'test'", + "pywin32 ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'test'", + "wheel ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'test'", + "wmi ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'test'" + ], + "requires_python": ">=3.6", + "provides_extra": [ + "dev", + "test" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/c7/da/32c752228ae345f489e3a42499d817b6c3996da7e8a3bc7a04fc806b243b/pillow-12.3.0-cp314-cp314-macosx_11_0_arm64.whl", + "archive_info": { + "hashes": { + "sha256": "e158cb00350dc278f3b91551101aa7d12415a66ebf2c91d8d5ac14e56ddd3ad0" + }, + "hash": "sha256=e158cb00350dc278f3b91551101aa7d12415a66ebf2c91d8d5ac14e56ddd3ad0" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.4", + "name": "pillow", + "version": "12.3.0", + "dynamic": [ + "license-file" + ], + "summary": "Python Imaging Library (fork)", + "description": "

\n \"Pillow\n

\n\n# Pillow\n\n## Python Imaging Library (Fork)\n\nPillow is the friendly PIL fork by [Jeffrey 'Alex' Clark and\ncontributors](https://github.com/python-pillow/Pillow/graphs/contributors).\nPIL is the Python Imaging Library by Fredrik Lundh and contributors.\nDevelopment is supported by:\n- [Tidelift](https://tidelift.com/subscription/pkg/pypi-pillow?utm_source=pypi-pillow&utm_medium=readme&utm_campaign=enterprise) (since 2018)\n- [Thanks.dev](https://thanks.dev) (since 2023)\n- [GitHub Sponsors](https://github.com/sponsors/python-pillow) (since 2026)\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
docs\n \n
tests\n \n \n \n \n \n \n \n \n
package\n \n \n \n \n \n
social\n \n \n
\n\n## Overview\n\nThe Python Imaging Library adds image processing capabilities to your Python interpreter.\n\nThis library provides extensive file format support, an efficient internal representation, and fairly powerful image processing capabilities.\n\nThe core image library is designed for fast access to data stored in a few basic pixel formats. It should provide a solid foundation for a general image processing tool.\n\n## More information\n\n- [Documentation](https://pillow.readthedocs.io/)\n - [Installation](https://pillow.readthedocs.io/en/latest/installation/basic-installation.html)\n - [Handbook](https://pillow.readthedocs.io/en/latest/handbook/index.html)\n- [Contribute](https://github.com/python-pillow/Pillow/blob/main/.github/CONTRIBUTING.md)\n - [Issues](https://github.com/python-pillow/Pillow/issues)\n - [Pull requests](https://github.com/python-pillow/Pillow/pulls)\n- [Release notes](https://pillow.readthedocs.io/en/stable/releasenotes/index.html)\n- [Changelog](https://github.com/python-pillow/Pillow/releases)\n - [Pre-fork](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst#pre-fork)\n\n## Report a vulnerability\n\nTo report sensitive vulnerability information, report it [privately on GitHub](https://github.com/python-pillow/Pillow/security/advisories/new).\n\nIf you cannot use GitHub, use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure.\n\nDO NOT report sensitive vulnerability information in public.\n", + "description_content_type": "text/markdown", + "keywords": [ + "Imaging" + ], + "author_email": "Jeffrey 'Alex' Clark ", + "license_expression": "MIT-CMU", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 6 - Mature", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Multimedia :: Graphics", + "Topic :: Multimedia :: Graphics :: Capture :: Digital Camera", + "Topic :: Multimedia :: Graphics :: Capture :: Screen Capture", + "Topic :: Multimedia :: Graphics :: Graphics Conversion", + "Topic :: Multimedia :: Graphics :: Viewers", + "Typing :: Typed" + ], + "requires_dist": [ + "furo; extra == \"docs\"", + "olefile; extra == \"docs\"", + "sphinx>=8.2; extra == \"docs\"", + "sphinx-autobuild; extra == \"docs\"", + "sphinx-copybutton; extra == \"docs\"", + "sphinx-inline-tabs; extra == \"docs\"", + "sphinxext-opengraph; extra == \"docs\"", + "olefile; extra == \"fpx\"", + "olefile; extra == \"mic\"", + "arro3-compute; extra == \"test-arrow\"", + "arro3-core; extra == \"test-arrow\"", + "nanoarrow; extra == \"test-arrow\"", + "pyarrow; extra == \"test-arrow\"", + "coverage>=7.4.2; extra == \"tests\"", + "defusedxml; extra == \"tests\"", + "markdown2; extra == \"tests\"", + "olefile; extra == \"tests\"", + "packaging; extra == \"tests\"", + "pytest; extra == \"tests\"", + "pytest-cov; extra == \"tests\"", + "pytest-timeout; extra == \"tests\"", + "pytest-xdist; extra == \"tests\"", + "setuptools; extra == \"tests\"", + "trove-classifiers>=2024.10.12; extra == \"tests\"", + "defusedxml; extra == \"xmp\"" + ], + "requires_python": ">=3.10", + "project_url": [ + "Release notes, https://pillow.readthedocs.io/en/stable/releasenotes/index.html", + "Changelog, https://github.com/python-pillow/Pillow/releases", + "Documentation, https://pillow.readthedocs.io", + "Funding, https://tidelift.com/subscription/pkg/pypi-pillow?utm_source=pypi-pillow&utm_medium=pypi", + "Homepage, https://python-pillow.github.io", + "Mastodon, https://fosstodon.org/@pillow", + "Source, https://github.com/python-pillow/Pillow" + ], + "provides_extra": [ + "docs", + "fpx", + "mic", + "test-arrow", + "tests", + "xmp" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/f5/b1/fa7c600e7dceae12e9606c7578cbc9ff1e1ed55844883ee5c92205e86226/safetensors-0.8.0-cp310-abi3-macosx_11_0_arm64.whl", + "archive_info": { + "hashes": { + "sha256": "c80201d22cbf405b80647a60ada77bba06c8fba2da2743ba1e89cdcc39a81f25" + }, + "hash": "sha256=c80201d22cbf405b80647a60ada77bba06c8fba2da2743ba1e89cdcc39a81f25" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.4", + "name": "safetensors", + "version": "0.8.0", + "description": "## Installation\n\n```\npip install safetensors\n```\n\n\n## Usage\n\n### Numpy\n\n```python\nfrom safetensors.numpy import save_file, load_file\nimport numpy as np\n\ntensors = {\n \"a\": np.zeros((2, 2)),\n \"b\": np.zeros((2, 3), dtype=np.uint8)\n}\n\nsave_file(tensors, \"./model.safetensors\")\n\n\n# Now loading\nloaded = load_file(\"./model.safetensors\")\n```\n\n### Torch\n\n```python\nfrom safetensors.torch import save_file, load_file\nimport torch\n\ntensors = {\n \"a\": torch.zeros((2, 2)),\n \"b\": torch.zeros((2, 3), dtype=torch.uint8)\n}\n\nsave_file(tensors, \"./model.safetensors\")\n\n\n# Now loading\nloaded = load_file(\"./model.safetensors\")\n```\n\n### Developing\n\n```\n# inside ./safetensors/bindings/python\npip install .[dev]\n```\nShould be enough to install this library locally.\n\n### Testing\n\n```\n# inside ./safetensors/bindings/python\npip install .[dev]\npytest -sv tests/\n```\n\n", + "description_content_type": "text/markdown; charset=UTF-8; variant=GFM", + "author_email": "Nicolas Patry , Luc Georges , Daniël De Kok ", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Intended Audience :: Education", + "Intended Audience :: Science/Research", + "License :: OSI Approved :: Apache Software License", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Topic :: Scientific/Engineering :: Artificial Intelligence", + "Typing :: Typed" + ], + "requires_dist": [ + "safetensors[torch] ; extra == 'all'", + "safetensors[numpy] ; extra == 'all'", + "safetensors[jax] ; extra == 'all'", + "safetensors[paddlepaddle] ; extra == 'all'", + "safetensors[convert] ; extra == 'all'", + "safetensors[quality] ; extra == 'all'", + "safetensors[testing] ; extra == 'all'", + "safetensors[torch] ; extra == 'convert'", + "huggingface-hub>=1.4 ; extra == 'convert'", + "safetensors[all] ; extra == 'dev'", + "safetensors[pinned-tf] ; extra == 'dev'", + "safetensors[numpy] ; extra == 'jax'", + "flax>=0.6.3 ; extra == 'jax'", + "jax>=0.3.25 ; extra == 'jax'", + "jaxlib>=0.3.25 ; extra == 'jax'", + "mlx>=0.0.9 ; extra == 'mlx'", + "numpy>=1.24.6 ; extra == 'numpy'", + "safetensors[numpy] ; extra == 'paddlepaddle'", + "paddlepaddle>=2.4.1 ; extra == 'paddlepaddle'", + "safetensors[numpy] ; extra == 'pinned-tf'", + "tensorflow==2.18.0 ; extra == 'pinned-tf'", + "ruff ; extra == 'quality'", + "safetensors[numpy] ; extra == 'tensorflow'", + "tensorflow>=2.11.0 ; extra == 'tensorflow'", + "safetensors[numpy] ; extra == 'testing'", + "h5py>=3.7.0 ; extra == 'testing'", + "setuptools-rust>=1.12.0 ; extra == 'testing'", + "pytest>=9.0 ; extra == 'testing'", + "pytest-benchmark>=5.2 ; extra == 'testing'", + "hypothesis>=6.70.2 ; extra == 'testing'", + "fsspec>=2024.6.0 ; extra == 'testing'", + "s3fs>=2024.6.0 ; extra == 'testing'", + "safetensors[numpy] ; extra == 'tf-nightly'", + "tf-nightly ; extra == 'tf-nightly'", + "safetensors[numpy] ; extra == 'torch'", + "torch>=2.4 ; extra == 'torch'" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://github.com/huggingface/safetensors", + "Source, https://github.com/huggingface/safetensors" + ], + "provides_extra": [ + "all", + "convert", + "dev", + "jax", + "mlx", + "numpy", + "paddlepaddle", + "pinned-tf", + "quality", + "tensorflow", + "testing", + "tf-nightly", + "torch" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101" + }, + "hash": "sha256=117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "annotated-doc", + "version": "0.0.5", + "summary": "Document parameters, class attributes, return types, and variables inline, with Annotated.", + "description": "# Annotated Doc\n\nDocument parameters, class attributes, return types, and variables inline, with `Annotated`.\n\n\n \"Test\"\n\n\n \"Coverage\"\n\n\n \"Package\n\n\n \"Supported\n\n\n## Installation\n\n```bash\npip install annotated-doc\n```\n\nOr with `uv`:\n\n```Python\nuv add annotated-doc\n```\n\n## Usage\n\nImport `Doc` and pass a single literal string with the documentation for the specific parameter, class attribute, return type, or variable.\n\nFor example, to document a parameter `name` in a function `hi` you could do:\n\n```Python\nfrom typing import Annotated\n\nfrom annotated_doc import Doc\n\ndef hi(name: Annotated[str, Doc(\"Who to say hi to\")]) -> None:\n print(f\"Hi, {name}!\")\n```\n\nYou can also use it to document class attributes:\n\n```Python\nfrom typing import Annotated\n\nfrom annotated_doc import Doc\n\nclass User:\n name: Annotated[str, Doc(\"The user's name\")]\n age: Annotated[int, Doc(\"The user's age\")]\n```\n\nThe same way, you could document return types and variables, or anything that could have a type annotation with `Annotated`.\n\n## Who Uses This\n\n`annotated-doc` was made for:\n\n* [FastAPI](https://fastapi.tiangolo.com/)\n* [Typer](https://typer.tiangolo.com/)\n* [SQLModel](https://sqlmodel.tiangolo.com/)\n* [Asyncer](https://asyncer.tiangolo.com/)\n\n`annotated-doc` is supported by [griffe-typingdoc](https://github.com/mkdocstrings/griffe-typingdoc), which powers reference documentation like the one in the [FastAPI Reference](https://fastapi.tiangolo.com/reference/).\n\n## Reasons not to use `annotated-doc`\n\nYou are already comfortable with one of the existing docstring formats, like:\n\n* Sphinx\n* numpydoc\n* Google\n* Keras\n\nYour team is already comfortable using them.\n\nYou prefer having the documentation about parameters all together in a docstring, separated from the code defining them.\n\nYou care about a specific set of users, using one specific editor, and that editor already has support for the specific docstring format you use.\n\n## Reasons to use `annotated-doc`\n\n* No micro-syntax to learn for newcomers, it’s **just Python** syntax.\n* **Editing** would be already fully supported by default by any editor (current or future) supporting Python syntax, including syntax errors, syntax highlighting, etc.\n* **Rendering** would be relatively straightforward to implement by static tools (tools that don't need runtime execution), as the information can be extracted from the AST they normally already create.\n* **Deduplication of information**: the name of a parameter would be defined in a single place, not duplicated inside of a docstring.\n* **Elimination** of the possibility of having **inconsistencies** when removing a parameter or class variable and **forgetting to remove** its documentation.\n* **Minimization** of the probability of adding a new parameter or class variable and **forgetting to add its documentation**.\n* **Elimination** of the possibility of having **inconsistencies** between the **name** of a parameter in the **signature** and the name in the docstring when it is renamed.\n* **Access** to the documentation string for each symbol at **runtime**, including existing (older) Python versions.\n* A more formalized way to document other symbols, like type aliases, that could use Annotated.\n* **Support** for apps using FastAPI, Typer and others.\n* **AI Accessibility**: AI tools will have an easier way understanding each parameter as the distance from documentation to parameter is much closer.\n\n## History\n\nI ([@tiangolo](https://github.com/tiangolo)) originally wanted for this to be part of the Python standard library (in [PEP 727](https://peps.python.org/pep-0727/)), but the proposal was withdrawn as there was a fair amount of negative feedback and opposition.\n\nThe conclusion was that this was better done as an external effort, in a third-party library.\n\nSo, here it is, with a simpler approach, as a third-party library, in a way that can be used by others, starting with FastAPI and friends.\n\n## License\n\nThis project is licensed under the terms of the MIT license.\n", + "description_content_type": "text/markdown", + "author_email": "=?utf-8?q?Sebasti=C3=A1n_Ram=C3=ADrez?= ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Intended Audience :: Information Technology", + "Intended Audience :: System Administrators", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python", + "Topic :: Internet", + "Topic :: Software Development :: Libraries :: Application Frameworks", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Software Development :: Libraries", + "Topic :: Software Development", + "Typing :: Typed", + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14" + ], + "requires_python": ">=3.9", + "project_url": [ + "Homepage, https://github.com/fastapi/annotated-doc", + "Documentation, https://github.com/fastapi/annotated-doc", + "Repository, https://github.com/fastapi/annotated-doc", + "Issues, https://github.com/fastapi/annotated-doc/issues", + "Changelog, https://github.com/fastapi/annotated-doc/release-notes.md" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360" + }, + "hash": "sha256=255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "click", + "version": "8.5.0", + "summary": "Composable command line interface toolkit", + "description": "
\"\"
\n\n# Click\n\nClick is a Python package for creating beautiful command line interfaces\nin a composable way with as little code as necessary. It's the \"Command\nLine Interface Creation Kit\". It's highly configurable but comes with\nsensible defaults out of the box.\n\nIt aims to make the process of writing command line tools quick and fun\nwhile also preventing any frustration caused by the inability to\nimplement an intended CLI API.\n\nClick in three points:\n\n- Arbitrary nesting of commands\n- Automatic help page generation\n- Supports lazy loading of subcommands at runtime\n\n\n## A Simple Example\n\n```python\nimport click\n\n@click.command()\n@click.option(\"--count\", default=1, help=\"Number of greetings.\")\n@click.option(\"--name\", prompt=\"Your name\", help=\"The person to greet.\")\ndef hello(count, name):\n \"\"\"Simple program that greets NAME for a total of COUNT times.\"\"\"\n for _ in range(count):\n click.echo(f\"Hello, {name}!\")\n\nif __name__ == '__main__':\n hello()\n```\n\n```\n$ python hello.py --count=3\nYour name: Click\nHello, Click!\nHello, Click!\nHello, Click!\n```\n\n\n## Donate\n\nThe Pallets organization develops and supports Click and other popular\npackages. In order to grow the community of contributors and users, and\nallow the maintainers to devote more time to the projects, [please\ndonate today][].\n\n[please donate today]: https://palletsprojects.com/donate\n\n## Contributing\n\nSee our [detailed contributing documentation][contrib] for many ways to\ncontribute, including reporting issues, requesting features, asking or answering\nquestions, and making PRs.\n\n[contrib]: https://palletsprojects.com/contributing/\n\n", + "description_content_type": "text/markdown", + "maintainer_email": "Pallets ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.txt" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Typing :: Typed" + ], + "requires_python": ">=3.10", + "project_url": [ + "Changes, https://click.palletsprojects.com/page/changes/", + "Chat, https://discord.gg/pallets", + "Documentation, https://click.palletsprojects.com/", + "Donate, https://palletsprojects.com/donate", + "Source, https://github.com/pallets/click/" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/6c/c0/a98505f18594f1bce828bb159cec0fcf9860562f1a2c85913409fc8f3d9e/fsspec-2026.9.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f" + }, + "hash": "sha256=8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "fsspec", + "version": "2026.9.0", + "summary": "File-system specification", + "description": "# filesystem_spec\n\n[![PyPI version](https://badge.fury.io/py/fsspec.svg)](https://pypi.python.org/pypi/fsspec/)\n[![Anaconda-Server Badge](https://anaconda.org/conda-forge/fsspec/badges/version.svg)](https://anaconda.org/conda-forge/fsspec)\n![Build](https://github.com/fsspec/filesystem_spec/workflows/CI/badge.svg)\n[![Docs](https://readthedocs.org/projects/filesystem-spec/badge/?version=latest)](https://filesystem-spec.readthedocs.io/en/latest/?badge=latest)\n\nA specification for pythonic filesystems.\n\n## Install\n\n```bash\npip install fsspec\n```\n\nwould install the base fsspec. Various optionally supported features might require specification of custom\nextra require, e.g. `pip install fsspec[ssh]` will install dependencies for `ssh` backends support.\nUse `pip install fsspec[full]` for installation of all known extra dependencies.\n\nUp-to-date package also provided through conda-forge distribution:\n\n```bash\nconda install -c conda-forge fsspec\n```\n\n\n## Purpose\n\nTo produce a template or specification for a file-system interface, that specific implementations should follow,\nso that applications making use of them can rely on a common behaviour and not have to worry about the specific\ninternal implementation decisions with any given backend. Many such implementations are included in this package,\nor in sister projects such as `s3fs` and `gcsfs`.\n\nIn addition, if this is well-designed, then additional functionality, such as a key-value store or FUSE\nmounting of the file-system implementation may be available for all implementations \"for free\".\n\n## Documentation\n\nPlease refer to [RTD](https://filesystem-spec.readthedocs.io/en/latest/?badge=latest)\n\n## Develop\n\nfsspec uses GitHub Actions for CI. Environment files can be found\nin the \"ci/\" directory. Note that the main environment is called \"py38\",\nbut it is expected that the version of python installed be adjustable at\nCI runtime. For local use, pick a version suitable for you.\n\n```bash\n# For a new environment (mamba / conda).\nmamba create -n fsspec -c conda-forge python=3.10 -y\nconda activate fsspec\n\n# Standard dev install with docs and tests.\npip install -e \".[dev,doc,test]\"\n\n# Full tests except for downstream\npip install s3fs\npip uninstall s3fs\npip install -e .[dev,doc,test_full]\npip install s3fs --no-deps\npytest -v\n\n# Downstream tests.\nsh install_s3fs.sh\n# Windows powershell.\ninstall_s3fs.sh\n```\n\n### Testing\n\nTests can be run in the dev environment, if activated, via ``pytest fsspec``.\n\nThe full fsspec suite requires a system-level docker, docker-compose, and fuse\ninstallation. If only making changes to one backend implementation, it is\nnot generally necessary to run all tests locally.\n\nIt is expected that contributors ensure that any change to fsspec does not\ncause issues or regressions for either other fsspec-related packages such\nas gcsfs and s3fs, nor for downstream users of fsspec. The \"downstream\" CI\nrun and corresponding environment file run a set of tests from the dask\ntest suite, and very minimal tests against pandas and zarr from the\ntest_downstream.py module in this repo.\n\n### Code Formatting\n\nfsspec uses [Black](https://black.readthedocs.io/en/stable) to ensure\na consistent code format throughout the project.\nRun ``black fsspec`` from the root of the filesystem_spec repository to\nauto-format your code. Additionally, many editors have plugins that will apply\n``black`` as you edit files. ``black`` is included in the ``tox`` environments.\n\nOptionally, you may wish to setup [pre-commit hooks](https://pre-commit.com) to\nautomatically run ``black`` when you make a git commit.\nRun ``pre-commit install --install-hooks`` from the root of the\nfilesystem_spec repository to setup pre-commit hooks. ``black`` will now be run\nbefore you commit, reformatting any changed files. You can format without\ncommitting via ``pre-commit run`` or skip these checks with ``git commit\n--no-verify``.\n\n## Support\n\nWork on this repository is supported in part by:\n\n\"Anaconda, Inc. - Advancing AI through open source.\"\n\n\"anaconda\n", + "description_content_type": "text/markdown", + "keywords": [ + "file" + ], + "maintainer_email": "Martin Durant ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14" + ], + "requires_dist": [ + "adlfs; extra == 'abfs'", + "adlfs; extra == 'adl'", + "pyarrow>=1; extra == 'arrow'", + "dask; extra == 'dask'", + "distributed; extra == 'dask'", + "pre-commit; extra == 'dev'", + "ruff>=0.5; extra == 'dev'", + "numpydoc; extra == 'doc'", + "sphinx; extra == 'doc'", + "sphinx-design; extra == 'doc'", + "sphinx-rtd-theme; extra == 'doc'", + "yarl; extra == 'doc'", + "dropbox; extra == 'dropbox'", + "dropboxdrivefs; extra == 'dropbox'", + "requests; extra == 'dropbox'", + "adlfs; extra == 'full'", + "aiohttp!=4.0.0a0,!=4.0.0a1; extra == 'full'", + "dask; extra == 'full'", + "distributed; extra == 'full'", + "dropbox; extra == 'full'", + "dropboxdrivefs; extra == 'full'", + "fusepy; extra == 'full'", + "gcsfs>=2026.4.0; extra == 'full'", + "libarchive-c; extra == 'full'", + "ocifs; extra == 'full'", + "panel; extra == 'full'", + "paramiko; extra == 'full'", + "pyarrow>=1; extra == 'full'", + "pygit2; extra == 'full'", + "requests; extra == 'full'", + "s3fs>=2026.6.0; extra == 'full'", + "smbprotocol; extra == 'full'", + "tqdm; extra == 'full'", + "fusepy; extra == 'fuse'", + "gcsfs>=2026.4.0; extra == 'gcs'", + "pygit2; extra == 'git'", + "requests; extra == 'github'", + "gcsfs>=2026.4.0; extra == 'gs'", + "panel; extra == 'gui'", + "pyarrow>=1; extra == 'hdfs'", + "aiohttp!=4.0.0a0,!=4.0.0a1; extra == 'http'", + "libarchive-c; extra == 'libarchive'", + "ocifs; extra == 'oci'", + "s3fs>=2026.6.0; extra == 's3'", + "paramiko; extra == 'sftp'", + "smbprotocol; extra == 'smb'", + "paramiko; extra == 'ssh'", + "aiohttp!=4.0.0a0,!=4.0.0a1; extra == 'test'", + "numpy; extra == 'test'", + "pytest; extra == 'test'", + "pytest-asyncio!=0.22.0; extra == 'test'", + "pytest-benchmark; extra == 'test'", + "pytest-cov; extra == 'test'", + "pytest-mock; extra == 'test'", + "pytest-recording; extra == 'test'", + "pytest-rerunfailures; extra == 'test'", + "requests; extra == 'test'", + "aiobotocore<3.0.0,>=2.5.4; extra == 'test-downstream'", + "dask[dataframe,test]; extra == 'test-downstream'", + "moto[server]<5,>4; extra == 'test-downstream'", + "pytest-timeout; extra == 'test-downstream'", + "xarray; extra == 'test-downstream'", + "zarr; extra == 'test-downstream'", + "adlfs; extra == 'test-full'", + "aiohttp!=4.0.0a0,!=4.0.0a1; extra == 'test-full'", + "backports-zstd; (python_version < '3.14') and extra == 'test-full'", + "cloudpickle; extra == 'test-full'", + "dask; extra == 'test-full'", + "distributed; extra == 'test-full'", + "dropbox; extra == 'test-full'", + "dropboxdrivefs; extra == 'test-full'", + "fastparquet; extra == 'test-full'", + "fusepy; extra == 'test-full'", + "gcsfs>=2026.4.0; extra == 'test-full'", + "jinja2; extra == 'test-full'", + "kerchunk; extra == 'test-full'", + "libarchive-c; extra == 'test-full'", + "lz4; extra == 'test-full'", + "notebook; extra == 'test-full'", + "numpy; extra == 'test-full'", + "ocifs; extra == 'test-full'", + "pandas<3.0.0; extra == 'test-full'", + "panel; extra == 'test-full'", + "paramiko; extra == 'test-full'", + "pyarrow>=1; extra == 'test-full'", + "pyftpdlib; extra == 'test-full'", + "pygit2; extra == 'test-full'", + "pytest; extra == 'test-full'", + "pytest-asyncio!=0.22.0; extra == 'test-full'", + "pytest-benchmark; extra == 'test-full'", + "pytest-cov; extra == 'test-full'", + "pytest-mock; extra == 'test-full'", + "pytest-recording; extra == 'test-full'", + "pytest-rerunfailures; extra == 'test-full'", + "python-snappy; extra == 'test-full'", + "requests; extra == 'test-full'", + "s3fs>=2026.6.0; extra == 'test-full'", + "smbprotocol; extra == 'test-full'", + "tqdm; extra == 'test-full'", + "urllib3; extra == 'test-full'", + "zarr<3.2.0; extra == 'test-full'", + "zstandard; (python_version < '3.14') and extra == 'test-full'", + "tqdm; extra == 'tqdm'" + ], + "requires_python": ">=3.10", + "project_url": [ + "Changelog, https://filesystem-spec.readthedocs.io/en/latest/changelog.html", + "Documentation, https://filesystem-spec.readthedocs.io/en/latest/", + "Homepage, https://github.com/fsspec/filesystem_spec" + ], + "provides_extra": [ + "abfs", + "adl", + "arrow", + "dask", + "dev", + "doc", + "dropbox", + "entrypoints", + "full", + "fuse", + "gcs", + "git", + "github", + "gs", + "gui", + "hdfs", + "http", + "libarchive", + "oci", + "s3", + "sftp", + "smb", + "ssh", + "test", + "test-downstream", + "test-full", + "tqdm" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86" + }, + "hash": "sha256=63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "h11", + "version": "0.16.0", + "dynamic": [ + "author", + "author-email", + "classifier", + "description", + "home-page", + "license", + "license-file", + "requires-python", + "summary" + ], + "summary": "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1", + "description": "h11\n===\n\n.. image:: https://travis-ci.org/python-hyper/h11.svg?branch=master\n :target: https://travis-ci.org/python-hyper/h11\n :alt: Automated test status\n\n.. image:: https://codecov.io/gh/python-hyper/h11/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/python-hyper/h11\n :alt: Test coverage\n\n.. image:: https://readthedocs.org/projects/h11/badge/?version=latest\n :target: http://h11.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation Status\n\nThis is a little HTTP/1.1 library written from scratch in Python,\nheavily inspired by `hyper-h2 `_.\n\nIt's a \"bring-your-own-I/O\" library; h11 contains no IO code\nwhatsoever. This means you can hook h11 up to your favorite network\nAPI, and that could be anything you want: synchronous, threaded,\nasynchronous, or your own implementation of `RFC 6214\n`_ -- h11 won't judge you.\n(Compare this to the current state of the art, where every time a `new\nnetwork API `_ comes along then someone\ngets to start over reimplementing the entire HTTP protocol from\nscratch.) Cory Benfield made an `excellent blog post describing the\nbenefits of this approach\n`_, or if you like video\nthen here's his `PyCon 2016 talk on the same theme\n`_.\n\nThis also means that h11 is not immediately useful out of the box:\nit's a toolkit for building programs that speak HTTP, not something\nthat could directly replace ``requests`` or ``twisted.web`` or\nwhatever. But h11 makes it much easier to implement something like\n``requests`` or ``twisted.web``.\n\nAt a high level, working with h11 goes like this:\n\n1) First, create an ``h11.Connection`` object to track the state of a\n single HTTP/1.1 connection.\n\n2) When you read data off the network, pass it to\n ``conn.receive_data(...)``; you'll get back a list of objects\n representing high-level HTTP \"events\".\n\n3) When you want to send a high-level HTTP event, create the\n corresponding \"event\" object and pass it to ``conn.send(...)``;\n this will give you back some bytes that you can then push out\n through the network.\n\nFor example, a client might instantiate and then send a\n``h11.Request`` object, then zero or more ``h11.Data`` objects for the\nrequest body (e.g., if this is a POST), and then a\n``h11.EndOfMessage`` to indicate the end of the message. Then the\nserver would then send back a ``h11.Response``, some ``h11.Data``, and\nits own ``h11.EndOfMessage``. If either side violates the protocol,\nyou'll get a ``h11.ProtocolError`` exception.\n\nh11 is suitable for implementing both servers and clients, and has a\npleasantly symmetric API: the events you send as a client are exactly\nthe ones that you receive as a server and vice-versa.\n\n`Here's an example of a tiny HTTP client\n`_\n\nIt also has `a fine manual `_.\n\nFAQ\n---\n\n*Whyyyyy?*\n\nI wanted to play with HTTP in `Curio\n`__ and `Trio\n`__, which at the time didn't have any\nHTTP libraries. So I thought, no big deal, Python has, like, a dozen\ndifferent implementations of HTTP, surely I can find one that's\nreusable. I didn't find one, but I did find Cory's call-to-arms\nblog-post. So I figured, well, fine, if I have to implement HTTP from\nscratch, at least I can make sure no-one *else* has to ever again.\n\n*Should I use it?*\n\nMaybe. You should be aware that it's a very young project. But, it's\nfeature complete and has an exhaustive test-suite and complete docs,\nso the next step is for people to try using it and see how it goes\n:-). If you do then please let us know -- if nothing else we'll want\nto talk to you before making any incompatible changes!\n\n*What are the features/limitations?*\n\nRoughly speaking, it's trying to be a robust, complete, and non-hacky\nimplementation of the first \"chapter\" of the HTTP/1.1 spec: `RFC 7230:\nHTTP/1.1 Message Syntax and Routing\n`_. That is, it mostly focuses on\nimplementing HTTP at the level of taking bytes on and off the wire,\nand the headers related to that, and tries to be anal about spec\nconformance. It doesn't know about higher-level concerns like URL\nrouting, conditional GETs, cross-origin cookie policies, or content\nnegotiation. But it does know how to take care of framing,\ncross-version differences in keep-alive handling, and the \"obsolete\nline folding\" rule, so you can focus your energies on the hard /\ninteresting parts for your application, and it tries to support the\nfull specification in the sense that any useful HTTP/1.1 conformant\napplication should be able to use h11.\n\nIt's pure Python, and has no dependencies outside of the standard\nlibrary.\n\nIt has a test suite with 100.0% coverage for both statements and\nbranches.\n\nCurrently it supports Python 3 (testing on 3.8-3.12) and PyPy 3.\nThe last Python 2-compatible version was h11 0.11.x.\n(Originally it had a Cython wrapper for `http-parser\n`_ and a beautiful nested state\nmachine implemented with ``yield from`` to postprocess the output. But\nI had to take these out -- the new *parser* needs fewer lines-of-code\nthan the old *parser wrapper*, is written in pure Python, uses no\nexotic language syntax, and has more features. It's sad, really; that\nold state machine was really slick. I just need a few sentences here\nto mourn that.)\n\nI don't know how fast it is. I haven't benchmarked or profiled it yet,\nso it's probably got a few pointless hot spots, and I've been trying\nto err on the side of simplicity and robustness instead of\nmicro-optimization. But at the architectural level I tried hard to\navoid fundamentally bad decisions, e.g., I believe that all the\nparsing algorithms remain linear-time even in the face of pathological\ninput like slowloris, and there are no byte-by-byte loops. (I also\nbelieve that it maintains bounded memory usage in the face of\narbitrary/pathological input.)\n\nThe whole library is ~800 lines-of-code. You can read and understand\nthe whole thing in less than an hour. Most of the energy invested in\nthis so far has been spent on trying to keep things simple by\nminimizing special-cases and ad hoc state manipulation; even though it\nis now quite small and simple, I'm still annoyed that I haven't\nfigured out how to make it even smaller and simpler. (Unfortunately,\nHTTP does not lend itself to simplicity.)\n\nThe API is ~feature complete and I don't expect the general outlines\nto change much, but you can't judge an API's ergonomics until you\nactually document and use it, so I'd expect some changes in the\ndetails.\n\n*How do I try it?*\n\n.. code-block:: sh\n\n $ pip install h11\n $ git clone git@github.com:python-hyper/h11\n $ cd h11/examples\n $ python basic-client.py\n\nand go from there.\n\n*License?*\n\nMIT\n\n*Code of conduct?*\n\nContributors are requested to follow our `code of conduct\n`_ in\nall project spaces.\n", + "home_page": "https://github.com/python-hyper/h11", + "author": "Nathaniel J. Smith", + "author_email": "njs@pobox.com", + "license": "MIT", + "license_file": [ + "LICENSE.txt" + ], + "classifier": [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Topic :: Internet :: WWW/HTTP", + "Topic :: System :: Networking" + ], + "requires_python": ">=3.8" + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0" + }, + "hash": "sha256=e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "networkx", + "version": "3.7", + "dynamic": [ + "license-file" + ], + "platform": [ + "Linux", + "Mac OSX", + "Windows", + "Unix" + ], + "summary": "Python package for creating and manipulating graphs and networks", + "description": "NetworkX\n========\n\n\n.. image::\n https://github.com/networkx/networkx/actions/workflows/test.yml/badge.svg?branch=main\n :target: https://github.com/networkx/networkx/actions/workflows/test.yml\n\n.. image::\n https://img.shields.io/pypi/v/networkx.svg?\n :target: https://pypi.python.org/pypi/networkx\n\n.. image::\n https://img.shields.io/pypi/l/networkx.svg?\n :target: https://github.com/networkx/networkx/blob/main/LICENSE.txt\n\n.. image::\n https://img.shields.io/pypi/pyversions/networkx.svg?\n :target: https://pypi.python.org/pypi/networkx\n\n.. image::\n https://insights.linuxfoundation.org/api/badge/health-score?project=networkx\n :target: https://insights.linuxfoundation.org/project/networkx\n\n\nNetworkX is a Python package for the creation, manipulation,\nand study of the structure, dynamics, and functions\nof complex networks.\n\n- **Website (including documentation):** https://networkx.org\n- **Mailing list:** https://groups.google.com/forum/#!forum/networkx-discuss\n- **Source:** https://github.com/networkx/networkx\n- **Bug reports:** https://github.com/networkx/networkx/issues\n- **Report a security vulnerability:** https://tidelift.com/security\n- **Tutorial:** https://networkx.org/documentation/latest/tutorial.html\n- **GitHub Discussions:** https://github.com/networkx/networkx/discussions\n- **Discord (Scientific Python) invite link:** https://discord.com/invite/vur45CbwMz\n- **NetworkX meetings calendar (open to all):** https://scientific-python.org/calendars/networkx.ics\n\nSimple example\n--------------\n\nFind the shortest path between two nodes in an undirected graph:\n\n.. code:: pycon\n\n >>> import networkx as nx\n >>> G = nx.Graph()\n >>> G.add_edge(\"A\", \"B\", weight=4)\n >>> G.add_edge(\"B\", \"D\", weight=2)\n >>> G.add_edge(\"A\", \"C\", weight=3)\n >>> G.add_edge(\"C\", \"D\", weight=4)\n >>> nx.shortest_path(G, \"A\", \"D\", weight=\"weight\")\n ['A', 'B', 'D']\n\nInstall\n-------\n\nInstall the latest released version of NetworkX:\n\n.. code:: shell\n\n $ pip install networkx\n\nInstall with all optional dependencies:\n\n.. code:: shell\n\n $ pip install networkx[default]\n\nFor additional details,\nplease see the `installation guide `_.\n\nBugs\n----\n\nPlease report any bugs that you find `here `_.\nOr, even better, fork the repository on `GitHub `_\nand create a pull request (PR). We welcome all changes, big or small, and we\nwill help you make the PR if you are new to `git` (just ask on the issue and/or\nsee the `contributor guide `_).\n\nLicense\n-------\n\nReleased under the `3-clause BSD license `_::\n\n Copyright (c) 2004-2026, NetworkX Developers\n Aric Hagberg \n Dan Schult \n Pieter Swart \n", + "description_content_type": "text/x-rst", + "keywords": [ + "Networks", + "Graph Theory", + "Mathematics", + "network", + "graph", + "discrete mathematics", + "math" + ], + "author_email": "Aric Hagberg ", + "maintainer_email": "NetworkX Developers ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.txt" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Intended Audience :: Science/Research", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Programming Language :: Python :: 3 :: Only", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Scientific/Engineering :: Bio-Informatics", + "Topic :: Scientific/Engineering :: Information Analysis", + "Topic :: Scientific/Engineering :: Mathematics", + "Topic :: Scientific/Engineering :: Physics" + ], + "requires_dist": [ + "asv>=0.6.5; extra == \"benchmarking\"", + "py-rattler<0.22,>=0.21; extra == \"benchmarking\"", + "virtualenv; extra == \"benchmarking\"", + "numpy>=2.2; extra == \"default\"", + "scipy>=1.15; extra == \"default\"", + "matplotlib>=3.10; extra == \"default\"", + "pandas>=2.3; extra == \"default\"", + "pre-commit>=4.1; extra == \"developer\"", + "mypy>=1.15; extra == \"developer\"", + "sphinx>=8.0; extra == \"doc\"", + "pydata-sphinx-theme>=0.16; extra == \"doc\"", + "sphinx-gallery>=0.18; extra == \"doc\"", + "numpydoc>=1.8.0; extra == \"doc\"", + "pillow>=10; extra == \"doc\"", + "texext>=0.6.7; extra == \"doc\"", + "myst-nb>=1.1; extra == \"doc\"", + "intersphinx-registry; extra == \"doc\"", + "osmnx>=2.0.0; extra == \"example\"", + "momepy>=0.7.2; extra == \"example\"", + "contextily>=1.6; extra == \"example\"", + "seaborn>=0.13; extra == \"example\"", + "cairocffi>=1.7; extra == \"example\"", + "igraph>=0.11; extra == \"example\"", + "scikit-learn>=1.6; extra == \"example\"", + "iplotx>=0.9.0; extra == \"example\"", + "hiveplotlib>=0.28; extra == \"example\"", + "lxml>=4.6; extra == \"extra\"", + "pygraphviz>=2.0; extra == \"extra\"", + "pydot>=3.0.1; extra == \"extra\"", + "sympy>=1.10; extra == \"extra\"", + "build>=0.10; extra == \"release\"", + "twine>=4.0; extra == \"release\"", + "wheel>=0.40; extra == \"release\"", + "changelist==0.5; extra == \"release\"", + "pytest>=7.2; extra == \"test\"", + "pytest-cov>=4.0; extra == \"test\"", + "pytest-xdist>=3.0; extra == \"test\"", + "pytest-mpl; extra == \"test-extras\"", + "pytest-randomly; extra == \"test-extras\"" + ], + "requires_python": "!=3.14.1,>=3.12", + "project_url": [ + "Homepage, https://networkx.org/", + "Bug Tracker, https://github.com/networkx/networkx/issues", + "Documentation, https://networkx.org/documentation/stable/", + "Source Code, https://github.com/networkx/networkx" + ], + "provides_extra": [ + "benchmarking", + "default", + "developer", + "doc", + "example", + "extra", + "release", + "test", + "test-extras" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73" + }, + "hash": "sha256=346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "pydantic", + "version": "2.13.5", + "summary": "Data validation using Python type hints", + "description": "# Pydantic Validation\n\n[![CI](https://img.shields.io/github/actions/workflow/status/pydantic/pydantic/ci.yml?branch=main&logo=github&label=CI)](https://github.com/pydantic/pydantic/actions?query=event%3Apush+branch%3Amain+workflow%3ACI)\n[![Coverage](https://coverage-badge.samuelcolvin.workers.dev/pydantic/pydantic.svg)](https://coverage-badge.samuelcolvin.workers.dev/redirect/pydantic/pydantic)\n[![pypi](https://img.shields.io/pypi/v/pydantic.svg)](https://pypi.python.org/pypi/pydantic)\n[![CondaForge](https://img.shields.io/conda/v/conda-forge/pydantic.svg)](https://anaconda.org/conda-forge/pydantic)\n[![downloads](https://static.pepy.tech/badge/pydantic/month)](https://pepy.tech/project/pydantic)\n[![versions](https://img.shields.io/pypi/pyversions/pydantic.svg)](https://github.com/pydantic/pydantic)\n[![license](https://img.shields.io/github/license/pydantic/pydantic.svg)](https://github.com/pydantic/pydantic/blob/main/LICENSE)\n[![Pydantic v2](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/pydantic/pydantic/main/docs/badge/v2.json)](https://docs.pydantic.dev/latest/contributing/#badges)\n[![llms.txt](https://img.shields.io/badge/llms.txt-green)](https://docs.pydantic.dev/latest/llms.txt)\n\nData validation using Python type hints.\n\nFast and extensible, Pydantic plays nicely with your linters/IDE/brain.\nDefine how data should be in pure, canonical Python 3.9+; validate it with Pydantic.\n\n## Pydantic Logfire :fire:\n\nWe've launched Pydantic Logfire to help you monitor your applications.\n[Learn more](https://pydantic.dev/logfire/?utm_source=pydantic_validation)\n\n## Pydantic V1.10 vs. V2\n\nPydantic V2 is a ground-up rewrite that offers many new features, performance improvements, and some breaking changes compared to Pydantic V1.\n\nIf you're using Pydantic V1 you may want to look at the\n[pydantic V1.10 Documentation](https://docs.pydantic.dev/) or,\n[`1.10.X-fixes` git branch](https://github.com/pydantic/pydantic/tree/1.10.X-fixes). Pydantic V2 also ships with the latest version of Pydantic V1 built in so that you can incrementally upgrade your code base and projects: `from pydantic import v1 as pydantic_v1`.\n\n## Help\n\nSee [documentation](https://docs.pydantic.dev/) for more details.\n\n## Installation\n\nInstall using `pip install -U pydantic` or `conda install pydantic -c conda-forge`.\nFor more installation options to make Pydantic even faster,\nsee the [Install](https://docs.pydantic.dev/install/) section in the documentation.\n\n## A Simple Example\n\n```python\nfrom datetime import datetime\nfrom typing import Optional\nfrom pydantic import BaseModel\n\nclass User(BaseModel):\n id: int\n name: str = 'John Doe'\n signup_ts: Optional[datetime] = None\n friends: list[int] = []\n\nexternal_data = {'id': '123', 'signup_ts': '2017-06-01 12:22', 'friends': [1, '2', b'3']}\nuser = User(**external_data)\nprint(user)\n#> User id=123 name='John Doe' signup_ts=datetime.datetime(2017, 6, 1, 12, 22) friends=[1, 2, 3]\nprint(user.id)\n#> 123\n```\n\n## Contributing\n\nFor guidance on setting up a development environment and how to make a\ncontribution to Pydantic, see\n[Contributing to Pydantic](https://docs.pydantic.dev/contributing/).\n\n## Reporting a Security Vulnerability\n\nSee our [security policy](https://github.com/pydantic/pydantic/security/policy).\n\n## Changelog\n\n\n\n\n\n## v2.13.5 (2026-08-28)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.5)\n\n### What's Changed\n\n#### Fixes\n\n* Allow reuse of validators when plugins are set by [@Viicos](https://github.com/Viicos) in [#13535](https://github.com/pydantic/pydantic/pull/13535)\n* Fix missing GC traversal on some `pydantic-core` struct fields by [@Viicos](https://github.com/Viicos) in [#13624](https://github.com/pydantic/pydantic/pull/13624)\n* Fix missing GC traversal in `pydantic-core` for `GeneralFieldsSerializer` by [@Viicos](https://github.com/Viicos) in [#13629](https://github.com/pydantic/pydantic/pull/13629)\n* Count validated model fields once in smart unions by [@tamird](https://github.com/tamird) in [#13731](https://github.com/pydantic/pydantic/pull/13731)\n\n## v2.13.4 (2026-05-06)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.4)\n\n### What's Changed\n\n#### Packaging\n\n* Bump libc from 0.2.155 to 0.2.185 by [@Viicos](https://github.com/Viicos) in [#13109](https://github.com/pydantic/pydantic/pull/13109)\n* Adapt `pydantic-core` linker flags on macOS by [@washingtoneg](https://github.com/washingtoneg) and [@Viicos](https://github.com/Viicos) in [#13147](https://github.com/pydantic/pydantic/pull/13147)\n\n#### Fixes\n\n* Preserve `RootModel` core metadata by [@Viicos](https://github.com/Viicos) in [#13129](https://github.com/pydantic/pydantic/pull/13129)\n\n## v2.13.3 (2026-04-20)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.3)\n\n### What's Changed\n\n#### Fixes\n\n* Handle `AttributeError` subclasses with `from_attributes` by [@Viicos](https://github.com/Viicos) in [#13096](https://github.com/pydantic/pydantic/pull/13096)\n\n## v2.13.2 (2026-04-17)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.2)\n\n### What's Changed\n\n#### Fixes\n\n* Fix `ValidationInfo.field_name` missing with `model_validate_json()` by [@Viicos](https://github.com/Viicos) in [#13084](https://github.com/pydantic/pydantic/pull/13084)\n\n## v2.13.1 (2026-04-15)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.1)\n\n### What's Changed\n\n#### Fixes\n\n* Fix `ValidationInfo.data` missing with `model_validate_json()` by [@davidhewitt](https://github.com/davidhewitt) in [#13079](https://github.com/pydantic/pydantic/pull/13079)\n\n## v2.13.0 (2026-04-13)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.0)\n\nThe highlights of the v2.13 release are available in the [blog post](https://pydantic.dev/articles/pydantic-v2-13-release).\nSeveral minor changes (considered non-breaking changes according to our [versioning policy](https://pydantic.dev/docs/validation/2.13/get-started/version-policy/#pydantic-v2))\nare also included in this release. Make sure to look into them before upgrading.\n\nThis release contains the updated `pydantic.v1` namespace, matching version 1.10.26 which includes support for Python 3.14.\n\n### What's Changed\n\nSee the beta releases for all changes sinces 2.12.\n\n#### New Features\n\n* Allow default factories of private attributes to take validated model data by [@Viicos](https://github.com/Viicos) in [#13013](https://github.com/pydantic/pydantic/pull/13013)\n\n#### Changes\n\n* Warn when serializing fixed length tuples with too few items by [@arvindsaripalli](https://github.com/arvindsaripalli) in [#13016](https://github.com/pydantic/pydantic/pull/13016)\n\n#### Fixes\n\n* Change type of `Any` when synthesizing `_build_sources` for `BaseSettings.__init__()` signature in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#13049](https://github.com/pydantic/pydantic/pull/13049)\n* Fix model equality when using runtime `extra` configuration by [@Viicos](https://github.com/Viicos) in [#13062](https://github.com/pydantic/pydantic/pull/13062)\n\n#### Packaging\n\n* Add zizmor for GitHub Actions workflow linting by [@Viicos](https://github.com/Viicos) in [#13039](https://github.com/pydantic/pydantic/pull/13039)\n* Update jiter to v0.14.0 to fix a segmentation fault on musl Linux by [@Viicos](https://github.com/Viicos) in [#13064](https://github.com/pydantic/pydantic/pull/13064)\n\n### New Contributors\n\n* [@arvindsaripalli](https://github.com/arvindsaripalli) made their first contribution in [#13016](https://github.com/pydantic/pydantic/pull/13016)\n\n## v2.13.0b3 (2026-03-31)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.0b3)\n\n### What's Changed\n\n#### New Features\n\n* Add `ascii_only` option to `StringConstraints` by [@ai-man-codes](https://github.com/ai-man-codes) in [#12907](https://github.com/pydantic/pydantic/pull/12907)\n* Support `exclude_if` in computed fields by [@andresliszt](https://github.com/andresliszt) in [#12748](https://github.com/pydantic/pydantic/pull/12748)\n* Push down constraints in unions involving `MISSING` sentinel by [@Viicos](https://github.com/Viicos) in [#12908](https://github.com/pydantic/pydantic/pull/12908)\n\n#### Changes\n\n* Track extra fields set after init in `model_fields_set` by [@navalprakhar](https://github.com/navalprakhar) in [#12817](https://github.com/pydantic/pydantic/pull/12817)\n* Do not include annotations that are not part of named tuple fields by [@galuszkak](https://github.com/galuszkak) in [#12951](https://github.com/pydantic/pydantic/pull/12951)\n* No longer fall back to trying all union members when the variant selected by discriminator fails to serialize by [@navalprakhar](https://github.com/navalprakhar) in [#12825](https://github.com/pydantic/pydantic/pull/12825)\n\n#### Fixes\n\n* Support discriminator metadata outside union type alias by [@Viicos](https://github.com/Viicos) in [#12785](https://github.com/pydantic/pydantic/pull/12785)\n* Respect `extras_schema` when only `extra_fields_behavior` is set on the config in JSON Schema generation for typed dictionaries by [@Viicos](https://github.com/Viicos) in [#12810](https://github.com/pydantic/pydantic/pull/12810)\n* Ensure `__pydantic_private__` is set in `model_construct()` with user-defined `model_post_init()` by [@nightcityblade](https://github.com/nightcityblade) in [#12816](https://github.com/pydantic/pydantic/pull/12816)\n* Handle all schema generation errors in `InstanceOf` by [@Viicos](https://github.com/Viicos) in [#12705](https://github.com/pydantic/pydantic/pull/12705)\n* Allow dynamic models created with `create_model()` to be used as annotations in the Mypy plugin by [@Br1an67](https://github.com/Br1an67) in [#12879](https://github.com/pydantic/pydantic/pull/12879)\n* Check for `PlaceholderNode` in Mypy plugin by [@Viicos](https://github.com/Viicos) in [#12929](https://github.com/pydantic/pydantic/pull/12929)\n* Try other branches in smart union in case of omit errors by [@mikeedjones](https://github.com/mikeedjones) in [#12758](https://github.com/pydantic/pydantic/pull/12758)\n* Patch unset attributes with `MISSING` during model serialization with `exclude_unset` by [@davidhewitt](https://github.com/davidhewitt) in [#12905](https://github.com/pydantic/pydantic/pull/12905)\n* Ensure custom `__init__()` is called when using `model_validate_strings()` by [@siewcapital](https://github.com/siewcapital) in [#12897](https://github.com/pydantic/pydantic/pull/12897)\n\n#### Packaging\n\n* Add riscv64 build target for manylinux by [@boosterl](https://github.com/boosterl) in [#12723](https://github.com/pydantic/pydantic/pull/12723)\n\n### New Contributors\n\n* [@kelsonbrito50](https://github.com/kelsonbrito50) made their first contribution in [#12860](https://github.com/pydantic/pydantic/pull/12860)\n* [@boosterl](https://github.com/boosterl) made their first contribution in [#12723](https://github.com/pydantic/pydantic/pull/12723)\n* [@adityagiri3600](https://github.com/adityagiri3600) made their first contribution in [#12868](https://github.com/pydantic/pydantic/pull/12868)\n* [@navalprakhar](https://github.com/navalprakhar) made their first contribution in [#12817](https://github.com/pydantic/pydantic/pull/12817)\n* [@Br1an67](https://github.com/Br1an67) made their first contribution in [#12879](https://github.com/pydantic/pydantic/pull/12879)\n* [@rmorshea](https://github.com/rmorshea) made their first contribution in [#12910](https://github.com/pydantic/pydantic/pull/12910)\n* [@N3XT3R1337](https://github.com/N3XT3R1337) made their first contribution in [#12922](https://github.com/pydantic/pydantic/pull/12922)\n* [@ai-man-codes](https://github.com/ai-man-codes) made their first contribution in [#12907](https://github.com/pydantic/pydantic/pull/12907)\n* [@Yume05-dev](https://github.com/Yume05-dev) made their first contribution in [#12953](https://github.com/pydantic/pydantic/pull/12953)\n* [@galuszkak](https://github.com/galuszkak) made their first contribution in [#12951](https://github.com/pydantic/pydantic/pull/12951)\n* [@siewcapital](https://github.com/siewcapital) made their first contribution in [#12897](https://github.com/pydantic/pydantic/pull/12897)\n\n## v2.13.0b2 (2026-02-24)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.0b2)\n\n### What's Changed\n\n#### Fixes\n\n* Fix backported V1 namespace by [@Viicos](https://github.com/Viicos) in [#12855](https://github.com/pydantic/pydantic/pull/12855)\n* Allow any type form to be used in `validate_as()` by [@bledden](https://github.com/bledden) in [#12846](https://github.com/pydantic/pydantic/pull/12846)\n* Fix walrus operator precedence in `UrlConstraints.__get_pydantic_core_schema__()` by [@bysiber](https://github.com/bysiber) in [#12826](https://github.com/pydantic/pydantic/pull/12826)\n\n### New Contributors\n\n* [@bledden](https://github.com/bledden) made their first contribution in [#12846](https://github.com/pydantic/pydantic/pull/12846)\n* [@bysiber](https://github.com/bysiber) made their first contribution in [#12827](https://github.com/pydantic/pydantic/pull/12827)\n\n## v2.13.0b1 (2026-02-23)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.0b1)\n\nThis is the first beta release of the 2.13 version, mainly providing bug fixes and performance improvements\nfor validation and serialization.\n\nNotable changes include:\n\n* Add a new `polymorphic_serialization` option, solving issues with `serialize_as_any` introduced in 2.12.\n* Latest V1.10.26 release under the `pydantic.v1` namespace. This version includes support for Python 3.14.\n* The [`pydantic-core`](https://github.com/pydantic/pydantic-core/) repository was merged inside the main `pydantic` one.\n\n### What's Changed\n\n#### New Features\n\n* Add `polymorphic_serialization` option by [@davidhewitt](https://github.com/davidhewitt) in [#12518](https://github.com/pydantic/pydantic/pull/12518)\n* Support Root models with `Literal` root types as discriminator field types by [@YassinNouh21](https://github.com/YassinNouh21) in [#12680](https://github.com/pydantic/pydantic/pull/12680)\n\n#### Changes\n\n* Migrate `pydantic-core` CI by [@Viicos](https://github.com/Viicos) in [#12752](https://github.com/pydantic/pydantic/pull/12752)\n* Import `pydantic-core` into pydantic by [@davidhewitt](https://github.com/davidhewitt) in [#12481](https://github.com/pydantic/pydantic/pull/12481)\n* Backport V1 changes up to v1.10.26 by [@Viicos](https://github.com/Viicos) in [#12663](https://github.com/pydantic/pydantic/pull/12663)\n* Use the `complex()` constructor unconditionally when validating `complex` Python data by [@tanmaymunjal](https://github.com/tanmaymunjal) in [#12498](https://github.com/pydantic/pydantic/pull/12498)\n* Add support for three-tuple input for `Decimal` by [@tanmaymunjal](https://github.com/tanmaymunjal) in [#12500](https://github.com/pydantic/pydantic/pull/12500)\n* Align `@field_serializer` logic with `@field_validator` by [@Viicos](https://github.com/Viicos) in [#12577](https://github.com/pydantic/pydantic/pull/12577)\n* Make `PydanticUserError` a `RuntimeError` instead of a `TypeError` by [@poliakovva](https://github.com/poliakovva) in [#12579](https://github.com/pydantic/pydantic/pull/12579)\n* Remove redundant serialization attempts in nested unions by [@davidhewitt](https://github.com/davidhewitt) in [#12604](https://github.com/pydantic/pydantic/pull/12604)\n* Copy `root` value when making root model shallow copies by [@YassinNouh21](https://github.com/YassinNouh21) in [#12679](https://github.com/pydantic/pydantic/pull/12679)\n* Ensure deterministic JSON schema defaults by sorting sets by [@drshvik](https://github.com/drshvik) in [#12760](https://github.com/pydantic/pydantic/pull/12760)\n\n#### Performance\n\n* Refactor `DecoratorInfos.build()` implementation by [@Viicos](https://github.com/Viicos) in [#12536](https://github.com/pydantic/pydantic/pull/12536)\n* Cache compiled regex in `pydantic-core` by [@Viicos](https://github.com/Viicos) in [#12549](https://github.com/pydantic/pydantic/pull/12549)\n* Optimize creation of `Literal` validators by [@davidhewitt](https://github.com/davidhewitt) in [#12569](https://github.com/pydantic/pydantic/pull/12569)\n* Optimize implementation of `LookupKey` by [@davidhewitt](https://github.com/davidhewitt) in [#12571](https://github.com/pydantic/pydantic/pull/12571)\n* Use python strings for field names by [@davidhewitt](https://github.com/davidhewitt) in [#12631](https://github.com/pydantic/pydantic/pull/12631)\n* Optimize datetime formatting code by [@davidhewitt](https://github.com/davidhewitt) in [#12626](https://github.com/pydantic/pydantic/pull/12626)\n* Validate JSON model data by iteration by [@davidhewitt](https://github.com/davidhewitt) in [#12550](https://github.com/pydantic/pydantic/pull/12550)\n* Optimize annotations evaluation of Pydantic models by [@Viicos](https://github.com/Viicos) in [#12681](https://github.com/pydantic/pydantic/pull/12681)\n* Optimize `FieldInfo._copy()` by [@Viicos](https://github.com/Viicos) in [#12727](https://github.com/pydantic/pydantic/pull/12727)\n\n#### Fixes\n\n* Fix `FieldInfo` rebuilding when parameterizing generic models with an `Annotated` type by [@Viicos](https://github.com/Viicos) in [#12463](https://github.com/pydantic/pydantic/pull/12463)\n* Fix nested model schema deduplication in JSON schema generation by [@marwan-alloreview](https://github.com/marwan-alloreview) in [#12494](https://github.com/pydantic/pydantic/pull/12494)\n* Fix `InitVar` being ignored when using with the `pydantic.Field()` function by [@Viicos](https://github.com/Viicos) in [#12495](https://github.com/pydantic/pydantic/pull/12495)\n* Fix support for enums with `NamedTuple` as values by [@Viicos](https://github.com/Viicos) in [#12506](https://github.com/pydantic/pydantic/pull/12506)\n* Do not delete mock validator/serializer in `rebuild_dataclass()` by [@Viicos](https://github.com/Viicos) in [#12513](https://github.com/pydantic/pydantic/pull/12513)\n* Require test suite to pass with free threading, switch back to global generic types cache by [@davidhewitt](https://github.com/davidhewitt) in [#12537](https://github.com/pydantic/pydantic/pull/12537)\n* Refactor `__pydantic_extra__` annotation handling by [@Viicos](https://github.com/Viicos) in [#12563](https://github.com/pydantic/pydantic/pull/12563)\n* Do not add claim of UUID \"safety\" provision by [@davidhewitt](https://github.com/davidhewitt) in [#12567](https://github.com/pydantic/pydantic/pull/12567)\n* Use Python hash to perform lookup in tagged union serializer by [@davidhewitt](https://github.com/davidhewitt) in [#12594](https://github.com/pydantic/pydantic/pull/12594)\n* Do not emit serialization warning `MISSING` sentinel is present in a nested model by [@Viicos](https://github.com/Viicos) in [#12635](https://github.com/pydantic/pydantic/pull/12635)\n* Do not eagerly evaluate annotations in signature logic by [@Viicos](https://github.com/Viicos) in [#12660](https://github.com/pydantic/pydantic/pull/12660)\n* Fix serialization of typed dict unions when `exclude_none` is set by [@davidhewitt](https://github.com/davidhewitt) in [#12677](https://github.com/pydantic/pydantic/pull/12677)\n* Do not reuse prebuilt serializers/validators on rebuilds by [@lmmx](https://github.com/lmmx) in [#12689](https://github.com/pydantic/pydantic/pull/12689)\n* Fix type annotation of `field_definitions` in `create_model()` by [@lehmann-hqs](https://github.com/lehmann-hqs) in [#12734](https://github.com/pydantic/pydantic/pull/12734)\n* Fix incorrect dataclass constructor signature when overriding class `kw_only` with `Field()` by [@jfadia](https://github.com/jfadia) in [#12741](https://github.com/pydantic/pydantic/pull/12741)\n* Use `typing.Union` when replacing types under Python 3.14 by [@Viicos](https://github.com/Viicos) in [#12733](https://github.com/pydantic/pydantic/pull/12733)\n* Improve ImportString error when internal imports fail by [@tsembp](https://github.com/tsembp) in [#12740](https://github.com/pydantic/pydantic/pull/12740)\n* Fix serializing complex numbers with negative zero imaginary part by [@lhnwrk](https://github.com/lhnwrk) in [#12770](https://github.com/pydantic/pydantic/pull/12770)\n* Preserve custom docstrings on stdlib dataclasses in JSON schema by [@nightcityblade](https://github.com/nightcityblade) in [#12815](https://github.com/pydantic/pydantic/pull/12815)\n\n#### Packaging\n\n* Bump Rust url dependency from 2.5.4 to 2.5.7 in `pydantic-core` by [@dependabot](https://github.com/dependabot)[bot] in [#12508](https://github.com/pydantic/pydantic/pull/12508)\n* Bump Rust minimum version to 1.88, use edition 2024 by [@davidhewitt](https://github.com/davidhewitt) and [@Viicos](https://github.com/Viicos) in [#12551](https://github.com/pydantic/pydantic/pull/12551) and [#12752](https://github.com/pydantic/pydantic/pull/12752)\n* Bump PyO3 to 0.28, jiter to 0.13 by [@davidhewitt](https://github.com/davidhewitt) in [#12767](https://github.com/pydantic/pydantic/pull/12767)\n\n### New Contributors\n\n* [@marwan-alloreview](https://github.com/marwan-alloreview) made their first contribution in [#12494](https://github.com/pydantic/pydantic/pull/12494)\n* [@tanmaymunjal](https://github.com/tanmaymunjal) made their first contribution in [#12498](https://github.com/pydantic/pydantic/pull/12498)\n* [@poliakovva](https://github.com/poliakovva) made their first contribution in [#12579](https://github.com/pydantic/pydantic/pull/12579)\n* [@lehmann-hqs](https://github.com/lehmann-hqs) made their first contribution in [#12734](https://github.com/pydantic/pydantic/pull/12734)\n* [@jfadia](https://github.com/jfadia) made their first contribution in [#12741](https://github.com/pydantic/pydantic/pull/12741)\n* [@tsembp](https://github.com/tsembp) made their first contribution in [#12740](https://github.com/pydantic/pydantic/pull/12740)\n* [@drshvik](https://github.com/drshvik) made their first contribution in [#12760](https://github.com/pydantic/pydantic/pull/12760)\n* [@lhnwrk](https://github.com/lhnwrk) made their first contribution in [#12770](https://github.com/pydantic/pydantic/pull/12770)\n* [@nightcityblade](https://github.com/nightcityblade) made their first contribution in [#12815](https://github.com/pydantic/pydantic/pull/12811)\n\n## v2.12.5 (2025-11-26)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.5)\n\nThis is the fifth 2.12 patch release, addressing an issue with the `MISSING` sentinel and providing several documentation improvements.\n\nThe next 2.13 minor release will be published in a couple weeks, and will include a new *polymorphic serialization* feature addressing\nthe remaining unexpected changes to the *serialize as any* behavior.\n\n* Fix pickle error when using `model_construct()` on a model with `MISSING` as a default value by [@ornariece](https://github.com/ornariece) in [#12522](https://github.com/pydantic/pydantic/pull/12522).\n* Several updates to the documentation by [@Viicos](https://github.com/Viicos).\n\n## v2.12.4 (2025-11-05)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.4)\n\nThis is the fourth 2.12 patch release, fixing more regressions, and reverting a change in the `build()` method\nof the [`AnyUrl` and Dsn types](https://docs.pydantic.dev/latest/api/networks/).\n\nThis patch release also fixes an issue with the serialization of IP address types, when `serialize_as_any` is used. The next patch release\nwill try to address the remaining issues with *serialize as any* behavior by introducing a new *polymorphic serialization* feature, that\nshould be used in most cases in place of *serialize as any*.\n\n* Fix issue with forward references in parent `TypedDict` classes by [@Viicos](https://github.com/Viicos) in [#12427](https://github.com/pydantic/pydantic/pull/12427).\n\n This issue is only relevant on Python 3.14 and greater.\n\n* Exclude fields with `exclude_if` from JSON Schema required fields by [@Viicos](https://github.com/Viicos) in [#12430](https://github.com/pydantic/pydantic/pull/12430)\n* Revert URL percent-encoding of credentials in the `build()` method\n of the [`AnyUrl` and Dsn types](https://docs.pydantic.dev/latest/api/networks/) by [@davidhewitt](https://github.com/davidhewitt) in\n [pydantic-core#1833](https://github.com/pydantic/pydantic-core/pull/1833).\n\n This was initially considered as a bugfix, but caused regressions and as such was fully reverted. The next release will include\n an opt-in option to percent-encode components of the URL.\n\n* Add type inference for IP address types by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1868](https://github.com/pydantic/pydantic-core/pull/1868).\n\n The 2.12 changes to the `serialize_as_any` behavior made it so that IP address types could not properly serialize to JSON.\n\n* Avoid getting default values from defaultdict by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1853](https://github.com/pydantic/pydantic-core/pull/1853).\n\n This fixes a subtle regression in the validation behavior of the [`collections.defaultdict`](https://docs.python.org/3/library/collections.html#collections.defaultdict)\n type.\n\n* Fix issue with field serializers on nested typed dictionaries by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1879](https://github.com/pydantic/pydantic-core/pull/1879).\n* Add more `pydantic-core` builds for the three-threaded version of Python 3.14 by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1864](https://github.com/pydantic/pydantic-core/pull/1864).\n\n## v2.12.3 (2025-10-17)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.3)\n\n### What's Changed\n\nThis is the third 2.12 patch release, fixing issues related to the `FieldInfo` class, and reverting a change to the supported\n[*after* model validator](https://docs.pydantic.dev/latest/concepts/validators/#model-validators) function signatures.\n\n* Raise a warning when an invalid after model validator function signature is raised by [@Viicos](https://github.com/Viicos) in [#12414](https://github.com/pydantic/pydantic/pull/12414).\n Starting in 2.12.0, using class methods for *after* model validators raised an error, but the error wasn't raised concistently. We decided\n to emit a deprecation warning instead.\n* Add [`FieldInfo.asdict()`](https://docs.pydantic.dev/latest/api/fields/#pydantic.fields.FieldInfo.asdict) method, improve documentation around `FieldInfo` by [@Viicos](https://github.com/Viicos) in [#12411](https://github.com/pydantic/pydantic/pull/12411).\n This also add back support for mutations on `FieldInfo` classes, that are reused as `Annotated` metadata. **However**, note that this is still\n *not* a supported pattern. Instead, please refer to the [added example](https://docs.pydantic.dev/latest/examples/dynamic_models/) in the documentation.\n\nThe [blog post](https://pydantic.dev/articles/pydantic-v2-12-release#changes) section on changes was also updated to document the changes related to `serialize_as_any`.\n\n## v2.12.2 (2025-10-14)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.2)\n\n### What's Changed\n\n#### Fixes\n\n* Release a new `pydantic-core` version, as a corrupted CPython 3.10 `manylinux2014_aarch64` wheel got uploaded ([pydantic-core#1843](https://github.com/pydantic/pydantic-core/pull/1843)).\n* Fix issue with recursive generic models with a parent model class by [@Viicos](https://github.com/Viicos) in [#12398](https://github.com/pydantic/pydantic/pull/12398)\n\n## v2.12.1 (2025-10-13)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.1)\n\n### What's Changed\n\nThis is the first 2.12 patch release, addressing most (but not all yet) regressions from the initial 2.12.0 release.\n\n#### Fixes\n\n* Do not evaluate annotations when inspecting validators and serializers by [@Viicos](https://github.com/Viicos) in [#12355](https://github.com/pydantic/pydantic/pull/12355)\n* Make sure `None` is converted as `NoneType` in Python 3.14 by [@Viicos](https://github.com/Viicos) in [#12370](https://github.com/pydantic/pydantic/pull/12370)\n* Backport V1 runtime warning when using Python 3.14 by [@Viicos](https://github.com/Viicos) in [#12367](https://github.com/pydantic/pydantic/pull/12367)\n* Fix error message for invalid validator signatures by [@Viicos](https://github.com/Viicos) in [#12366](https://github.com/pydantic/pydantic/pull/12366)\n* Populate field name in `ValidationInfo` for validation of default value by [@Viicos](https://github.com/Viicos) in [pydantic-core#1826](https://github.com/pydantic/pydantic-core/pull/1826)\n* Encode credentials in `MultiHostUrl` builder by [@willswire](https://github.com/willswire) in [pydantic-core#1829](https://github.com/pydantic/pydantic-core/pull/1829)\n* Respect field serializers when using `serialize_as_any` serialization flag by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1829](https://github.com/pydantic/pydantic-core/pull/1829)\n* Fix various `RootModel` serialization issues by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1836](https://github.com/pydantic/pydantic-core/pull/1836)\n\n### New Contributors\n\n* [@willswire](https://github.com/willswire) made their first contribution in [pydantic-core#1829](https://github.com/pydantic/pydantic-core/pull/1829)\n\n## v2.12.0 (2025-10-07)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.0)\n\nThis is the final 2.12 release. It features the work of 20 external contributors and provides useful new features, along with initial Python 3.14 support.\nSeveral minor changes (considered non-breaking changes according to our [versioning policy](https://docs.pydantic.dev/2.12/version-policy/#pydantic-v2))\nare also included in this release. Make sure to look into them before upgrading.\n\n**Note that Pydantic V1 is not compatible with Python 3.14 and greater**.\n\n### What's Changed\n\nSee the beta releases for all changes sinces 2.11.\n\n#### New Features\n\n* Add `extra` parameter to the validate functions by [@anvilpete](https://github.com/anvilpete) in [#12233](https://github.com/pydantic/pydantic/pull/12233)\n* Add `exclude_computed_fields` serialization option by [@Viicos](https://github.com/Viicos) in [#12334](https://github.com/pydantic/pydantic/pull/12334)\n* Add `preverse_empty_path` URL options by [@Viicos](https://github.com/Viicos) in [#12336](https://github.com/pydantic/pydantic/pull/12336)\n* Add `union_format` parameter to JSON Schema generation by [@Viicos](https://github.com/Viicos) in [#12147](https://github.com/pydantic/pydantic/pull/12147)\n* Add `__qualname__` parameter for `create_model` by [@Atry](https://github.com/Atry) in [#12001](https://github.com/pydantic/pydantic/pull/12001)\n\n#### Fixes\n\n* Do not try to infer name from lambda definitions in pipelines API by [@Viicos](https://github.com/Viicos) in [#12289](https://github.com/pydantic/pydantic/pull/12289)\n* Use proper namespace for functions in `TypeAdapter` by [@Viicos](https://github.com/Viicos) in [#12324](https://github.com/pydantic/pydantic/pull/12324)\n* Use `Any` for context type annotation in `TypeAdapter` by [@inducer](https://github.com/inducer) in [#12279](https://github.com/pydantic/pydantic/pull/12279)\n* Expose `FieldInfo` in `pydantic.fields.__all__` by [@Viicos](https://github.com/Viicos) in [#12339](https://github.com/pydantic/pydantic/pull/12339)\n* Respect `validation_alias` in `@validate_call` by [@Viicos](https://github.com/Viicos) in [#12340](https://github.com/pydantic/pydantic/pull/12340)\n* Use `Any` as context annotation in plugin API by [@Viicos](https://github.com/Viicos) in [#12341](https://github.com/pydantic/pydantic/pull/12341)\n* Use proper `stacklevel` in warnings when possible by [@Viicos](https://github.com/Viicos) in [#12342](https://github.com/pydantic/pydantic/pull/12342)\n\n#### Packaging\n\n* Update V1 copy to v1.10.24 by [@Viicos](https://github.com/Viicos) in [#12338](https://github.com/pydantic/pydantic/pull/12338)\n\n### New Contributors\n\n* [@anvilpete](https://github.com/anvilpete) made their first contribution in [#12233](https://github.com/pydantic/pydantic/pull/12233)\n* [@JonathanWindell](https://github.com/JonathanWindell) made their first contribution in [#12327](https://github.com/pydantic/pydantic/pull/12327)\n* [@inducer](https://github.com/inducer) made their first contribution in [#12279](https://github.com/pydantic/pydantic/pull/12279)\n* [@Atry](https://github.com/Atry) made their first contribution in [#12001](https://github.com/pydantic/pydantic/pull/12001)\n\n## v2.12.0b1 (2025-10-03)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.0b1)\n\nThis is the first beta release of the upcoming 2.12 release.\n\n### What's Changed\n\n#### New Features\n\n* Add support for `exclude_if` at the field level by [@andresliszt](https://github.com/andresliszt) in [#12141](https://github.com/pydantic/pydantic/pull/12141)\n* Add `ValidateAs` annotation helper by [@Viicos](https://github.com/Viicos) in [#11942](https://github.com/pydantic/pydantic/pull/11942)\n* Add configuration options for validation and JSON serialization of temporal types by [@ollz272](https://github.com/ollz272) in [#12068](https://github.com/pydantic/pydantic/pull/12068)\n* Add support for PEP 728 by [@Viicos](https://github.com/Viicos) in [#12179](https://github.com/pydantic/pydantic/pull/12179)\n* Add field name in serialization error by [@NicolasPllr1](https://github.com/NicolasPllr1) in [pydantic-core#1799](https://github.com/pydantic/pydantic-core/pull/1799)\n* Add option to preserve empty URL paths by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1789](https://github.com/pydantic/pydantic-core/pull/1789)\n\n#### Changes\n\n* Raise error if an incompatible `pydantic-core` version is installed by [@Viicos](https://github.com/Viicos) in [#12196](https://github.com/pydantic/pydantic/pull/12196)\n* Remove runtime warning for experimental features by [@Viicos](https://github.com/Viicos) in [#12265](https://github.com/pydantic/pydantic/pull/12265)\n* Warn if registering virtual subclasses on Pydantic models by [@Viicos](https://github.com/Viicos) in [#11669](https://github.com/pydantic/pydantic/pull/11669)\n\n#### Fixes\n\n* Fix `__getattr__()` behavior on Pydantic models when a property raised an `AttributeError` and extra values are present by [@raspuchin](https://github.com/raspuchin) in [#12106](https://github.com/pydantic/pydantic/pull/12106)\n* Add test to prevent regression with Pydantic models used as annotated metadata by [@Viicos](https://github.com/Viicos) in [#12133](https://github.com/pydantic/pydantic/pull/12133)\n* Allow to use property setters on Pydantic dataclasses with `validate_assignment` set by [@Viicos](https://github.com/Viicos) in [#12173](https://github.com/pydantic/pydantic/pull/12173)\n* Fix mypy v2 plugin for upcoming mypy release by [@cdce8p](https://github.com/cdce8p) in [#12209](https://github.com/pydantic/pydantic/pull/12209)\n* Respect custom title in functions JSON Schema by [@Viicos](https://github.com/Viicos) in [#11892](https://github.com/pydantic/pydantic/pull/11892)\n* Fix `ImportString` JSON serialization for objects with a `name` attribute by [@chr1sj0nes](https://github.com/chr1sj0nes) in [#12219](https://github.com/pydantic/pydantic/pull/12219)\n* Do not error on fields overridden by methods in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#12290](https://github.com/pydantic/pydantic/pull/12290)\n\n#### Packaging\n\n* Bump `pydantic-core` to v2.40.1 by [@Viicos](https://github.com/Viicos) in [#12314](https://github.com/pydantic/pydantic/pull/12314)\n\n### New Contributors\n\n* [@raspuchin](https://github.com/raspuchin) made their first contribution in [#12106](https://github.com/pydantic/pydantic/pull/12106)\n* [@chr1sj0nes](https://github.com/chr1sj0nes) made their first contribution in [#12219](https://github.com/pydantic/pydantic/pull/12219)\n\n## v2.12.0a1 (2025-07-26)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.0a1)\n\nThis is the first alpha release of the upcoming 2.12 release, which adds initial support for Python 3.14.\n\n### What's Changed\n\n#### New Features\n\n* Add `__pydantic_on_complete__()` hook that is called once model is fully ready to be used by [@DouweM](https://github.com/DouweM) in [#11762](https://github.com/pydantic/pydantic/pull/11762)\n* Add initial support for Python 3.14 by [@Viicos](https://github.com/Viicos) in [#11991](https://github.com/pydantic/pydantic/pull/11991)\n* Add regex patterns to JSON schema for `Decimal` type by [@Dima-Bulavenko](https://github.com/Dima-Bulavenko) in [#11987](https://github.com/pydantic/pydantic/pull/11987)\n* Add support for `doc` attribute on dataclass fields by [@Viicos](https://github.com/Viicos) in [#12077](https://github.com/pydantic/pydantic/pull/12077)\n* Add experimental `MISSING` sentinel by [@Viicos](https://github.com/Viicos) in [#11883](https://github.com/pydantic/pydantic/pull/11883)\n\n#### Changes\n\n* Allow config and bases to be specified together in `create_model()` by [@Viicos](https://github.com/Viicos) in [#11714](https://github.com/pydantic/pydantic/pull/11714)\n* Move some field logic out of the `GenerateSchema` class by [@Viicos](https://github.com/Viicos) in [#11733](https://github.com/pydantic/pydantic/pull/11733)\n* Always make use of `inspect.getsourcelines()` for docstring extraction on Python 3.13 and greater by [@Viicos](https://github.com/Viicos) in [#11829](https://github.com/pydantic/pydantic/pull/11829)\n* Only support the latest Mypy version by [@Viicos](https://github.com/Viicos) in [#11832](https://github.com/pydantic/pydantic/pull/11832)\n* Do not implicitly convert after model validators to class methods by [@Viicos](https://github.com/Viicos) in [#11957](https://github.com/pydantic/pydantic/pull/11957)\n* Refactor `FieldInfo` creation implementation by [@Viicos](https://github.com/Viicos) in [#11898](https://github.com/pydantic/pydantic/pull/11898)\n* Make `Secret` covariant by [@bluenote10](https://github.com/bluenote10) in [#12008](https://github.com/pydantic/pydantic/pull/12008)\n* Emit warning when field-specific metadata is used in invalid contexts by [@Viicos](https://github.com/Viicos) in [#12028](https://github.com/pydantic/pydantic/pull/12028)\n\n#### Fixes\n\n* Properly fetch plain serializer function when serializing default value in JSON Schema by [@Viicos](https://github.com/Viicos) in [#11721](https://github.com/pydantic/pydantic/pull/11721)\n* Remove generics cache workaround by [@Viicos](https://github.com/Viicos) in [#11755](https://github.com/pydantic/pydantic/pull/11755)\n* Remove coercion of decimal constraints by [@Viicos](https://github.com/Viicos) in [#11772](https://github.com/pydantic/pydantic/pull/11772)\n* Fix crash when expanding root type in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11735](https://github.com/pydantic/pydantic/pull/11735)\n* Only mark model as complete once all fields are complete by [@DouweM](https://github.com/DouweM) in [#11759](https://github.com/pydantic/pydantic/pull/11759)\n* Do not provide `field_name` in validator core schemas by [@DouweM](https://github.com/DouweM) in [#11761](https://github.com/pydantic/pydantic/pull/11761)\n* Fix issue with recursive generic models by [@Viicos](https://github.com/Viicos) in [#11775](https://github.com/pydantic/pydantic/pull/11775)\n* Fix qualified name comparison of private attributes during namespace inspection by [@karta9821](https://github.com/karta9821) in [#11803](https://github.com/pydantic/pydantic/pull/11803)\n* Make sure Pydantic dataclasses with slots and `validate_assignment` can be unpickled by [@Viicos](https://github.com/Viicos) in [#11769](https://github.com/pydantic/pydantic/pull/11769)\n* Traverse `function-before` schemas during schema gathering by [@Viicos](https://github.com/Viicos) in [#11801](https://github.com/pydantic/pydantic/pull/11801)\n* Fix check for stdlib dataclasses by [@Viicos](https://github.com/Viicos) in [#11822](https://github.com/pydantic/pydantic/pull/11822)\n* Check if `FieldInfo` is complete after applying type variable map by [@Viicos](https://github.com/Viicos) in [#11855](https://github.com/pydantic/pydantic/pull/11855)\n* Do not delete mock validator/serializer in `model_rebuild()` by [@Viicos](https://github.com/Viicos) in [#11890](https://github.com/pydantic/pydantic/pull/11890)\n* Rebuild dataclass fields before schema generation by [@Viicos](https://github.com/Viicos) in [#11949](https://github.com/pydantic/pydantic/pull/11949)\n* Always store the original field assignment on `FieldInfo` by [@Viicos](https://github.com/Viicos) in [#11946](https://github.com/pydantic/pydantic/pull/11946)\n* Do not use deprecated methods as default field values by [@Viicos](https://github.com/Viicos) in [#11914](https://github.com/pydantic/pydantic/pull/11914)\n* Allow callable discriminator to be applied on PEP 695 type aliases by [@Viicos](https://github.com/Viicos) in [#11941](https://github.com/pydantic/pydantic/pull/11941)\n* Suppress core schema generation warning when using `SkipValidation` by [@ygsh0816](https://github.com/ygsh0816) in [#12002](https://github.com/pydantic/pydantic/pull/12002)\n* Do not emit typechecking error for invalid `Field()` default with `validate_default` set to `True` by [@Viicos](https://github.com/Viicos) in [#11988](https://github.com/pydantic/pydantic/pull/11988)\n* Refactor logic to support Pydantic's `Field()` function in dataclasses by [@Viicos](https://github.com/Viicos) in [#12051](https://github.com/pydantic/pydantic/pull/12051)\n\n#### Packaging\n\n* Update project metadata to use PEP 639 by [@Viicos](https://github.com/Viicos) in [#11694](https://github.com/pydantic/pydantic/pull/11694)\n* Bump `mkdocs-llmstxt` to v0.2.0 by [@Viicos](https://github.com/Viicos) in [#11725](https://github.com/pydantic/pydantic/pull/11725)\n* Bump `pydantic-core` to v2.35.1 by [@Viicos](https://github.com/Viicos) in [#11963](https://github.com/pydantic/pydantic/pull/11963)\n* Bump dawidd6/action-download-artifact from 10 to 11 by [@dependabot](https://github.com/dependabot)[bot] in [#12033](https://github.com/pydantic/pydantic/pull/12033)\n* Bump astral-sh/setup-uv from 5 to 6 by [@dependabot](https://github.com/dependabot)[bot] in [#11826](https://github.com/pydantic/pydantic/pull/11826)\n* Update mypy to 1.17.0 by [@Viicos](https://github.com/Viicos) in [#12076](https://github.com/pydantic/pydantic/pull/12076)\n\n### New Contributors\n\n* [@parth-paradkar](https://github.com/parth-paradkar) made their first contribution in [#11695](https://github.com/pydantic/pydantic/pull/11695)\n* [@dqkqd](https://github.com/dqkqd) made their first contribution in [#11739](https://github.com/pydantic/pydantic/pull/11739)\n* [@fhightower](https://github.com/fhightower) made their first contribution in [#11722](https://github.com/pydantic/pydantic/pull/11722)\n* [@gbaian10](https://github.com/gbaian10) made their first contribution in [#11766](https://github.com/pydantic/pydantic/pull/11766)\n* [@DouweM](https://github.com/DouweM) made their first contribution in [#11759](https://github.com/pydantic/pydantic/pull/11759)\n* [@bowenliang123](https://github.com/bowenliang123) made their first contribution in [#11719](https://github.com/pydantic/pydantic/pull/11719)\n* [@rawwar](https://github.com/rawwar) made their first contribution in [#11799](https://github.com/pydantic/pydantic/pull/11799)\n* [@karta9821](https://github.com/karta9821) made their first contribution in [#11803](https://github.com/pydantic/pydantic/pull/11803)\n* [@jinnovation](https://github.com/jinnovation) made their first contribution in [#11834](https://github.com/pydantic/pydantic/pull/11834)\n* [@zmievsa](https://github.com/zmievsa) made their first contribution in [#11861](https://github.com/pydantic/pydantic/pull/11861)\n* [@Otto-AA](https://github.com/Otto-AA) made their first contribution in [#11860](https://github.com/pydantic/pydantic/pull/11860)\n* [@ygsh0816](https://github.com/ygsh0816) made their first contribution in [#12002](https://github.com/pydantic/pydantic/pull/12002)\n* [@lukland](https://github.com/lukland) made their first contribution in [#12015](https://github.com/pydantic/pydantic/pull/12015)\n* [@Dima-Bulavenko](https://github.com/Dima-Bulavenko) made their first contribution in [#11987](https://github.com/pydantic/pydantic/pull/11987)\n* [@GSemikozov](https://github.com/GSemikozov) made their first contribution in [#12050](https://github.com/pydantic/pydantic/pull/12050)\n* [@hannah-heywa](https://github.com/hannah-heywa) made their first contribution in [#12082](https://github.com/pydantic/pydantic/pull/12082)\n\n## v2.11.10 (2025-10-04)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.10)\n\n### What's Changed\n\n#### Fixes\n\n* Backport v1.10.24 changes by [@Viicos](https://github.com/Viicos)\n\n## v2.11.9 (2025-09-13)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.9)\n\n### What's Changed\n\n#### Fixes\n\n* Backport v1.10.23 changes by [@Viicos](https://github.com/Viicos)\n\n## v2.11.8 (2025-09-13)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.8)\n\n### What's Changed\n\n#### Fixes\n\n* Fix mypy plugin for mypy 1.18 by [@cdce8p](https://github.com/cdce8p) in [#12209](https://github.com/pydantic/pydantic/pull/12209)\n\n## v2.11.7 (2025-06-14)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.7)\n\n### What's Changed\n\n#### Fixes\n\n* Copy `FieldInfo` instance if necessary during `FieldInfo` build by [@Viicos](https://github.com/Viicos) in [#11898](https://github.com/pydantic/pydantic/pull/11898)\n\n## v2.11.6 (2025-06-13)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.6)\n\n### What's Changed\n\n#### Fixes\n\n* Rebuild dataclass fields before schema generation by [@Viicos](https://github.com/Viicos) in [#11949](https://github.com/pydantic/pydantic/pull/11949)\n* Always store the original field assignment on `FieldInfo` by [@Viicos](https://github.com/Viicos) in [#11946](https://github.com/pydantic/pydantic/pull/11946)\n\n## v2.11.5 (2025-05-22)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.5)\n\n### What's Changed\n\n#### Fixes\n\n* Check if `FieldInfo` is complete after applying type variable map by [@Viicos](https://github.com/Viicos) in [#11855](https://github.com/pydantic/pydantic/pull/11855)\n* Do not delete mock validator/serializer in `model_rebuild()` by [@Viicos](https://github.com/Viicos) in [#11890](https://github.com/pydantic/pydantic/pull/11890)\n* Do not duplicate metadata on model rebuild by [@Viicos](https://github.com/Viicos) in [#11902](https://github.com/pydantic/pydantic/pull/11902)\n\n## v2.11.4 (2025-04-29)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.4)\n\n### What's Changed\n\n#### Changes\n\n* Allow config and bases to be specified together in `create_model()` by [@Viicos](https://github.com/Viicos) in [#11714](https://github.com/pydantic/pydantic/pull/11714).\n This change was backported as it was previously possible (although not meant to be supported)\n to provide `model_config` as a field, which would make it possible to provide both configuration\n and bases.\n\n#### Fixes\n\n* Remove generics cache workaround by [@Viicos](https://github.com/Viicos) in [#11755](https://github.com/pydantic/pydantic/pull/11755)\n* Remove coercion of decimal constraints by [@Viicos](https://github.com/Viicos) in [#11772](https://github.com/pydantic/pydantic/pull/11772)\n* Fix crash when expanding root type in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11735](https://github.com/pydantic/pydantic/pull/11735)\n* Fix issue with recursive generic models by [@Viicos](https://github.com/Viicos) in [#11775](https://github.com/pydantic/pydantic/pull/11775)\n* Traverse `function-before` schemas during schema gathering by [@Viicos](https://github.com/Viicos) in [#11801](https://github.com/pydantic/pydantic/pull/11801)\n\n#### Packaging\n\n* Bump `mkdocs-llmstxt` to v0.2.0 by [@Viicos](https://github.com/Viicos) in [#11725](https://github.com/pydantic/pydantic/pull/11725)\n\n## v2.11.3 (2025-04-08)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.3)\n\n### What's Changed\n\n#### Fixes\n\n* Preserve field description when rebuilding model fields by [@Viicos](https://github.com/Viicos) in [#11698](https://github.com/pydantic/pydantic/pull/11698)\n\n#### Packaging\n\n* Update V1 copy to v1.10.21 by [@Viicos](https://github.com/Viicos) in [#11706](https://github.com/pydantic/pydantic/pull/11706)\n\n## v2.11.2 (2025-04-03)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.2)\n\n### What's Changed\n\n#### Fixes\n\n* Bump `pydantic-core` to v2.33.1 by [@Viicos](https://github.com/Viicos) in [#11678](https://github.com/pydantic/pydantic/pull/11678)\n* Make sure `__pydantic_private__` exists before setting private attributes by [@Viicos](https://github.com/Viicos) in [#11666](https://github.com/pydantic/pydantic/pull/11666)\n* Do not override `FieldInfo._complete` when using field from parent class by [@Viicos](https://github.com/Viicos) in [#11668](https://github.com/pydantic/pydantic/pull/11668)\n* Provide the available definitions when applying discriminated unions by [@Viicos](https://github.com/Viicos) in [#11670](https://github.com/pydantic/pydantic/pull/11670)\n* Do not expand root type in the mypy plugin for variables by [@Viicos](https://github.com/Viicos) in [#11676](https://github.com/pydantic/pydantic/pull/11676)\n* Mention the attribute name in model fields deprecation message by [@Viicos](https://github.com/Viicos) in [#11674](https://github.com/pydantic/pydantic/pull/11674)\n* Properly validate parameterized mappings by [@Viicos](https://github.com/Viicos) in [#11658](https://github.com/pydantic/pydantic/pull/11658)\n\n## v2.11.1 (2025-03-28)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.1)\n\n### What's Changed\n\n#### Fixes\n\n* Do not override `'definitions-ref'` schemas containing serialization schemas or metadata by [@Viicos](https://github.com/Viicos) in [#11644](https://github.com/pydantic/pydantic/pull/11644)\n\n## v2.11.0 (2025-03-27)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0)\n\n### What's Changed\n\nPydantic v2.11 is a version strongly focused on build time performance of Pydantic models (and core schema generation in general).\nSee the [blog post](https://pydantic.dev/articles/pydantic-v2-11-release) for more details.\n\n#### New Features\n\n* Add `encoded_string()` method to the URL types by [@YassinNouh21](https://github.com/YassinNouh21) in [#11580](https://github.com/pydantic/pydantic/pull/11580)\n* Add support for `defer_build` with `@validate_call` decorator by [@Viicos](https://github.com/Viicos) in [#11584](https://github.com/pydantic/pydantic/pull/11584)\n* Allow `@with_config` decorator to be used with keyword arguments by [@Viicos](https://github.com/Viicos) in [#11608](https://github.com/pydantic/pydantic/pull/11608)\n* Simplify customization of default value inclusion in JSON Schema generation by [@Viicos](https://github.com/Viicos) in [#11634](https://github.com/pydantic/pydantic/pull/11634)\n* Add `generate_arguments_schema()` function by [@Viicos](https://github.com/Viicos) in [#11572](https://github.com/pydantic/pydantic/pull/11572)\n\n#### Fixes\n\n* Allow generic typed dictionaries to be used for unpacked variadic keyword parameters by [@Viicos](https://github.com/Viicos) in [#11571](https://github.com/pydantic/pydantic/pull/11571)\n* Fix runtime error when computing model string representation involving cached properties and self-referenced models by [@Viicos](https://github.com/Viicos) in [#11579](https://github.com/pydantic/pydantic/pull/11579)\n* Preserve other steps when using the ellipsis in the pipeline API by [@Viicos](https://github.com/Viicos) in [#11626](https://github.com/pydantic/pydantic/pull/11626)\n* Fix deferred discriminator application logic by [@Viicos](https://github.com/Viicos) in [#11591](https://github.com/pydantic/pydantic/pull/11591)\n\n#### Packaging\n\n* Bump `pydantic-core` to v2.33.0 by [@Viicos](https://github.com/Viicos) in [#11631](https://github.com/pydantic/pydantic/pull/11631)\n\n### New Contributors\n\n* [@cmenon12](https://github.com/cmenon12) made their first contribution in [#11562](https://github.com/pydantic/pydantic/pull/11562)\n* [@Jeukoh](https://github.com/Jeukoh) made their first contribution in [#11611](https://github.com/pydantic/pydantic/pull/11611)\n\n## v2.11.0b2 (2025-03-17)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0b2)\n\n### What's Changed\n\n#### New Features\n\n* Add experimental support for free threading by [@Viicos](https://github.com/Viicos) in [#11516](https://github.com/pydantic/pydantic/pull/11516)\n\n#### Fixes\n\n* Fix `NotRequired` qualifier not taken into account in stringified annotation by [@Viicos](https://github.com/Viicos) in [#11559](https://github.com/pydantic/pydantic/pull/11559)\n\n#### Packaging\n\n* Bump `pydantic-core` to v2.32.0 by [@Viicos](https://github.com/Viicos) in [#11567](https://github.com/pydantic/pydantic/pull/11567)\n\n### New Contributors\n\n* [@joren485](https://github.com/joren485) made their first contribution in [#11547](https://github.com/pydantic/pydantic/pull/11547)\n\n## v2.11.0b1 (2025-03-06)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0b1)\n\n### What's Changed\n\n#### New Features\n\n* Support unsubstituted type variables with both a default and a bound or constraints by [@FyZzyss](https://github.com/FyZzyss) in https://github.com/pydantic/pydantic/pull/10789\n* Add a `default_factory_takes_validated_data` property to `FieldInfo` by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11034\n* Raise a better error when a generic alias is used inside `type[]` by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11088\n* Properly support PEP 695 generics syntax by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11189\n* Properly support type variable defaults by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11332\n* Add support for validating v6, v7, v8 UUIDs by [@astei](https://github.com/astei) in https://github.com/pydantic/pydantic/pull/11436\n* Improve alias configuration APIs by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11468\n\n#### Changes\n\n* Rework `create_model` field definitions format by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11032\n* Raise a deprecation warning when a field is annotated as final with a default value by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11168\n* Deprecate accessing `model_fields` and `model_computed_fields` on instances by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11169\n* **Breaking Change:** Move core schema generation logic for path types inside the `GenerateSchema` class by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/10846\n* Remove Python 3.8 Support by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11258\n* Optimize calls to `get_type_ref` by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/10863\n* Disable `pydantic-core` core schema validation by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11271\n\n#### Performance\n\n* Only evaluate `FieldInfo` annotations if required during schema building by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/10769\n* Improve `__setattr__` performance of Pydantic models by caching setter functions by [@MarkusSintonen](https://github.com/MarkusSintonen) in https://github.com/pydantic/pydantic/pull/10868\n* Improve annotation application performance by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11186\n* Improve performance of `_typing_extra` module by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11255\n* Refactor and optimize schema cleaning logic by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11244\n* Create a single dictionary when creating a `CoreConfig` instance by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11384\n* Bump `pydantic-core` and thus use `SchemaValidator` and `SchemaSerializer` caching by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11402\n* Reuse cached core schemas for parametrized generic Pydantic models by [@MarkusSintonen](https://github.com/MarkusSintonen) in https://github.com/pydantic/pydantic/pull/11434\n\n#### Fixes\n\n* Improve `TypeAdapter` instance repr by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/10872\n* Use the correct frame when instantiating a parametrized `TypeAdapter` by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/10893\n* Infer final fields with a default value as class variables in the mypy plugin by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11121\n* Recursively unpack `Literal` values if using PEP 695 type aliases by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11114\n* Override `__subclasscheck__` on `ModelMetaclass` to avoid memory leak and performance issues by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11116\n* Remove unused `_extract_get_pydantic_json_schema()` parameter by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11155\n* Improve discriminated union error message for invalid union variants by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11161\n* Unpack PEP 695 type aliases if using the `Annotated` form by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11109\n* Add missing stacklevel in `deprecated_instance_property` warning by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11200\n* Copy `WithJsonSchema` schema to avoid sharing mutated data by [@thejcannon](https://github.com/thejcannon) in https://github.com/pydantic/pydantic/pull/11014\n* Do not cache parametrized models when in the process of parametrizing another model by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/10704\n* Add discriminated union related metadata entries to the `CoreMetadata` definition by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11216\n* Consolidate schema definitions logic in the `_Definitions` class by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11208\n* Support initializing root model fields with values of the `root` type in the mypy plugin by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11212\n* Fix various issues with dataclasses and `use_attribute_docstrings` by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11246\n* Only compute normalized decimal places if necessary in `decimal_places_validator` by [@misrasaurabh1](https://github.com/misrasaurabh1) in https://github.com/pydantic/pydantic/pull/11281\n* Add support for `validation_alias` in the mypy plugin by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11295\n* Fix JSON Schema reference collection with `\"examples\"` keys by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11305\n* Do not transform model serializer functions as class methods in the mypy plugin by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11298\n* Simplify `GenerateJsonSchema.literal_schema()` implementation by [@misrasaurabh1](https://github.com/misrasaurabh1) in https://github.com/pydantic/pydantic/pull/11321\n* Add additional allowed schemes for `ClickHouseDsn` by [@Maze21127](https://github.com/Maze21127) in https://github.com/pydantic/pydantic/pull/11319\n* Coerce decimal constraints to `Decimal` instances by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11350\n* Use the correct JSON Schema mode when handling function schemas by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11367\n* Improve exception message when encountering recursion errors during type evaluation by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11356\n* Always include `additionalProperties: True` for arbitrary dictionary schemas by [@austinyu](https://github.com/austinyu) in https://github.com/pydantic/pydantic/pull/11392\n* Expose `fallback` parameter in serialization methods by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11398\n* Fix path serialization behavior by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11416\n* Do not reuse validators and serializers during model rebuild by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11429\n* Collect model fields when rebuilding a model by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11388\n* Allow cached properties to be altered on frozen models by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11432\n* Fix tuple serialization for `Sequence` types by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11435\n* Fix: do not check for `__get_validators__` on classes where `__get_pydantic_core_schema__` is also defined by [@tlambert03](https://github.com/tlambert03) in https://github.com/pydantic/pydantic/pull/11444\n* Allow callable instances to be used as serializers by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11451\n* Improve error thrown when overriding field with a property by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11459\n* Fix JSON Schema generation with referenceable core schemas holding JSON metadata by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11475\n* Support strict specification on union member types by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11481\n* Implicitly set `validate_by_name` to `True` when `validate_by_alias` is `False` by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11503\n* Change type of `Any` when synthesizing `BaseSettings.__init__` signature in the mypy plugin by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11497\n* Support type variable defaults referencing other type variables by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11520\n* Fix `ValueError` on year zero by [@davidhewitt](https://github.com/davidhewitt) in https://github.com/pydantic/pydantic-core/pull/1583\n* `dataclass` `InitVar` shouldn't be required on serialization by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic-core/pull/1602\n\n#### Packaging\n\n* Add a `check_pydantic_core_version()` function by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11324\n* Remove `greenlet` development dependency by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11351\n* Use the `typing-inspection` library by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11479\n* Bump `pydantic-core` to `v2.31.1` by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11526\n\n## New Contributors\n\n* [@FyZzyss](https://github.com/FyZzyss) made their first contribution in https://github.com/pydantic/pydantic/pull/10789\n* [@tamird](https://github.com/tamird) made their first contribution in https://github.com/pydantic/pydantic/pull/10948\n* [@felixxm](https://github.com/felixxm) made their first contribution in https://github.com/pydantic/pydantic/pull/11077\n* [@alexprabhat99](https://github.com/alexprabhat99) made their first contribution in https://github.com/pydantic/pydantic/pull/11082\n* [@Kharianne](https://github.com/Kharianne) made their first contribution in https://github.com/pydantic/pydantic/pull/11111\n* [@mdaffad](https://github.com/mdaffad) made their first contribution in https://github.com/pydantic/pydantic/pull/11177\n* [@thejcannon](https://github.com/thejcannon) made their first contribution in https://github.com/pydantic/pydantic/pull/11014\n* [@thomasfrimannkoren](https://github.com/thomasfrimannkoren) made their first contribution in https://github.com/pydantic/pydantic/pull/11251\n* [@usernameMAI](https://github.com/usernameMAI) made their first contribution in https://github.com/pydantic/pydantic/pull/11275\n* [@ananiavito](https://github.com/ananiavito) made their first contribution in https://github.com/pydantic/pydantic/pull/11302\n* [@pawamoy](https://github.com/pawamoy) made their first contribution in https://github.com/pydantic/pydantic/pull/11311\n* [@Maze21127](https://github.com/Maze21127) made their first contribution in https://github.com/pydantic/pydantic/pull/11319\n* [@kauabh](https://github.com/kauabh) made their first contribution in https://github.com/pydantic/pydantic/pull/11369\n* [@jaceklaskowski](https://github.com/jaceklaskowski) made their first contribution in https://github.com/pydantic/pydantic/pull/11353\n* [@tmpbeing](https://github.com/tmpbeing) made their first contribution in https://github.com/pydantic/pydantic/pull/11375\n* [@petyosi](https://github.com/petyosi) made their first contribution in https://github.com/pydantic/pydantic/pull/11405\n* [@austinyu](https://github.com/austinyu) made their first contribution in https://github.com/pydantic/pydantic/pull/11392\n* [@mikeedjones](https://github.com/mikeedjones) made their first contribution in https://github.com/pydantic/pydantic/pull/11402\n* [@astei](https://github.com/astei) made their first contribution in https://github.com/pydantic/pydantic/pull/11436\n* [@dsayling](https://github.com/dsayling) made their first contribution in https://github.com/pydantic/pydantic/pull/11522\n* [@sobolevn](https://github.com/sobolevn) made their first contribution in https://github.com/pydantic/pydantic-core/pull/1645\n\n## v2.11.0a2 (2025-02-10)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0a2)\n\n### What's Changed\n\nPydantic v2.11 is a version strongly focused on build time performance of Pydantic models (and core schema generation in general).\nThis is another early alpha release, meant to collect early feedback from users having issues with core schema builds.\n\n#### Performance\n\n* Create a single dictionary when creating a `CoreConfig` instance by [@sydney-runkle](https://github.com/sydney-runkle) in [#11384](https://github.com/pydantic/pydantic/pull/11384)\n\n#### Fixes\n\n* Use the correct JSON Schema mode when handling function schemas by [@Viicos](https://github.com/Viicos) in [#11367](https://github.com/pydantic/pydantic/pull/11367)\n* Fix JSON Schema reference logic with `examples` keys by [@Viicos](https://github.com/Viicos) in [#11366](https://github.com/pydantic/pydantic/pull/11366)\n* Improve exception message when encountering recursion errors during type evaluation by [@Viicos](https://github.com/Viicos) in [#11356](https://github.com/pydantic/pydantic/pull/11356)\n* Always include `additionalProperties: True` for arbitrary dictionary schemas by [@austinyu](https://github.com/austinyu) in [#11392](https://github.com/pydantic/pydantic/pull/11392)\n* Expose `fallback` parameter in serialization methods by [@Viicos](https://github.com/Viicos) in [#11398](https://github.com/pydantic/pydantic/pull/11398)\n* Fix path serialization behavior by [@sydney-runkle](https://github.com/sydney-runkle) in [#11416](https://github.com/pydantic/pydantic/pull/11416)\n\n#### Packaging\n\n* Bump `ruff` from 0.9.2 to 0.9.5 by [@Viicos](https://github.com/Viicos) in [#11407](https://github.com/pydantic/pydantic/pull/11407)\n* Bump `pydantic-core` to v2.29.0 by [@mikeedjones](https://github.com/mikeedjones) in [#11402](https://github.com/pydantic/pydantic/pull/11402)\n* Use locally-built rust with symbols & pgo by [@davidhewitt](https://github.com/davidhewitt) in [#11403](https://github.com/pydantic/pydantic/pull/11403)\n\n### New Contributors\n\n* [@kauabh](https://github.com/kauabh) made their first contribution in [#11369](https://github.com/pydantic/pydantic/pull/11369)\n* [@jaceklaskowski](https://github.com/jaceklaskowski) made their first contribution in [#11353](https://github.com/pydantic/pydantic/pull/11353)\n* [@tmpbeing](https://github.com/tmpbeing) made their first contribution in [#11375](https://github.com/pydantic/pydantic/pull/11375)\n* [@petyosi](https://github.com/petyosi) made their first contribution in [#11405](https://github.com/pydantic/pydantic/pull/11405)\n* [@austinyu](https://github.com/austinyu) made their first contribution in [#11392](https://github.com/pydantic/pydantic/pull/11392)\n* [@mikeedjones](https://github.com/mikeedjones) made their first contribution in [#11402](https://github.com/pydantic/pydantic/pull/11402)\n\n## v2.11.0a1 (2025-01-30)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0a1)\n\n### What's Changed\n\nPydantic v2.11 is a version strongly focused on build time performance of Pydantic models (and core schema generation in general).\nThis is an early alpha release, meant to collect early feedback from users having issues with core schema builds.\n\n#### New Features\n\n* Support unsubstituted type variables with both a default and a bound or constraints by [@FyZzyss](https://github.com/FyZzyss) in [#10789](https://github.com/pydantic/pydantic/pull/10789)\n* Add a `default_factory_takes_validated_data` property to `FieldInfo` by [@Viicos](https://github.com/Viicos) in [#11034](https://github.com/pydantic/pydantic/pull/11034)\n* Raise a better error when a generic alias is used inside `type[]` by [@Viicos](https://github.com/Viicos) in [#11088](https://github.com/pydantic/pydantic/pull/11088)\n* Properly support PEP 695 generics syntax by [@Viicos](https://github.com/Viicos) in [#11189](https://github.com/pydantic/pydantic/pull/11189)\n* Properly support type variable defaults by [@Viicos](https://github.com/Viicos) in [#11332](https://github.com/pydantic/pydantic/pull/11332)\n\n#### Changes\n\n* Rework `create_model` field definitions format by [@Viicos](https://github.com/Viicos) in [#11032](https://github.com/pydantic/pydantic/pull/11032)\n* Raise a deprecation warning when a field is annotated as final with a default value by [@Viicos](https://github.com/Viicos) in [#11168](https://github.com/pydantic/pydantic/pull/11168)\n* Deprecate accessing `model_fields` and `model_computed_fields` on instances by [@Viicos](https://github.com/Viicos) in [#11169](https://github.com/pydantic/pydantic/pull/11169)\n* Move core schema generation logic for path types inside the `GenerateSchema` class by [@sydney-runkle](https://github.com/sydney-runkle) in [#10846](https://github.com/pydantic/pydantic/pull/10846)\n* Move `deque` schema gen to `GenerateSchema` class by [@sydney-runkle](https://github.com/sydney-runkle) in [#11239](https://github.com/pydantic/pydantic/pull/11239)\n* Move `Mapping` schema gen to `GenerateSchema` to complete removal of `prepare_annotations_for_known_type` workaround by [@sydney-runkle](https://github.com/sydney-runkle) in [#11247](https://github.com/pydantic/pydantic/pull/11247)\n* Remove Python 3.8 Support by [@sydney-runkle](https://github.com/sydney-runkle) in [#11258](https://github.com/pydantic/pydantic/pull/11258)\n* Disable `pydantic-core` core schema validation by [@sydney-runkle](https://github.com/sydney-runkle) in [#11271](https://github.com/pydantic/pydantic/pull/11271)\n\n#### Performance\n\n* Only evaluate `FieldInfo` annotations if required during schema building by [@Viicos](https://github.com/Viicos) in [#10769](https://github.com/pydantic/pydantic/pull/10769)\n* Optimize calls to `get_type_ref` by [@Viicos](https://github.com/Viicos) in [#10863](https://github.com/pydantic/pydantic/pull/10863)\n* Improve `__setattr__` performance of Pydantic models by caching setter functions by [@MarkusSintonen](https://github.com/MarkusSintonen) in [#10868](https://github.com/pydantic/pydantic/pull/10868)\n* Improve annotation application performance by [@Viicos](https://github.com/Viicos) in [#11186](https://github.com/pydantic/pydantic/pull/11186)\n* Improve performance of `_typing_extra` module by [@Viicos](https://github.com/Viicos) in [#11255](https://github.com/pydantic/pydantic/pull/11255)\n* Refactor and optimize schema cleaning logic by [@Viicos](https://github.com/Viicos) and [@MarkusSintonen](https://github.com/MarkusSintonen) in [#11244](https://github.com/pydantic/pydantic/pull/11244)\n\n#### Fixes\n\n* Add validation tests for `_internal/_validators.py` by [@tkasuz](https://github.com/tkasuz) in [#10763](https://github.com/pydantic/pydantic/pull/10763)\n* Improve `TypeAdapter` instance repr by [@sydney-runkle](https://github.com/sydney-runkle) in [#10872](https://github.com/pydantic/pydantic/pull/10872)\n* Revert \"ci: use locally built pydantic-core with debug symbols by [@sydney-runkle](https://github.com/sydney-runkle) in [#10942](https://github.com/pydantic/pydantic/pull/10942)\n* Re-enable all FastAPI tests by [@tamird](https://github.com/tamird) in [#10948](https://github.com/pydantic/pydantic/pull/10948)\n* Fix typo in HISTORY.md. by [@felixxm](https://github.com/felixxm) in [#11077](https://github.com/pydantic/pydantic/pull/11077)\n* Infer final fields with a default value as class variables in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11121](https://github.com/pydantic/pydantic/pull/11121)\n* Recursively unpack `Literal` values if using PEP 695 type aliases by [@Viicos](https://github.com/Viicos) in [#11114](https://github.com/pydantic/pydantic/pull/11114)\n* Override `__subclasscheck__` on `ModelMetaclass` to avoid memory leak and performance issues by [@Viicos](https://github.com/Viicos) in [#11116](https://github.com/pydantic/pydantic/pull/11116)\n* Remove unused `_extract_get_pydantic_json_schema()` parameter by [@Viicos](https://github.com/Viicos) in [#11155](https://github.com/pydantic/pydantic/pull/11155)\n* Add FastAPI and SQLModel to third-party tests by [@sydney-runkle](https://github.com/sydney-runkle) in [#11044](https://github.com/pydantic/pydantic/pull/11044)\n* Fix conditional expressions syntax for third-party tests by [@Viicos](https://github.com/Viicos) in [#11162](https://github.com/pydantic/pydantic/pull/11162)\n* Move FastAPI tests to third-party workflow by [@Viicos](https://github.com/Viicos) in [#11164](https://github.com/pydantic/pydantic/pull/11164)\n* Improve discriminated union error message for invalid union variants by [@Viicos](https://github.com/Viicos) in [#11161](https://github.com/pydantic/pydantic/pull/11161)\n* Unpack PEP 695 type aliases if using the `Annotated` form by [@Viicos](https://github.com/Viicos) in [#11109](https://github.com/pydantic/pydantic/pull/11109)\n* Include `openapi-python-client` check in issue creation for third-party failures, use `main` branch by [@sydney-runkle](https://github.com/sydney-runkle) in [#11182](https://github.com/pydantic/pydantic/pull/11182)\n* Add pandera third-party tests by [@Viicos](https://github.com/Viicos) in [#11193](https://github.com/pydantic/pydantic/pull/11193)\n* Add ODMantic third-party tests by [@sydney-runkle](https://github.com/sydney-runkle) in [#11197](https://github.com/pydantic/pydantic/pull/11197)\n* Add missing stacklevel in `deprecated_instance_property` warning by [@Viicos](https://github.com/Viicos) in [#11200](https://github.com/pydantic/pydantic/pull/11200)\n* Copy `WithJsonSchema` schema to avoid sharing mutated data by [@thejcannon](https://github.com/thejcannon) in [#11014](https://github.com/pydantic/pydantic/pull/11014)\n* Do not cache parametrized models when in the process of parametrizing another model by [@Viicos](https://github.com/Viicos) in [#10704](https://github.com/pydantic/pydantic/pull/10704)\n* Re-enable Beanie third-party tests by [@Viicos](https://github.com/Viicos) in [#11214](https://github.com/pydantic/pydantic/pull/11214)\n* Add discriminated union related metadata entries to the `CoreMetadata` definition by [@Viicos](https://github.com/Viicos) in [#11216](https://github.com/pydantic/pydantic/pull/11216)\n* Consolidate schema definitions logic in the `_Definitions` class by [@Viicos](https://github.com/Viicos) in [#11208](https://github.com/pydantic/pydantic/pull/11208)\n* Support initializing root model fields with values of the `root` type in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11212](https://github.com/pydantic/pydantic/pull/11212)\n* Fix various issues with dataclasses and `use_attribute_docstrings` by [@Viicos](https://github.com/Viicos) in [#11246](https://github.com/pydantic/pydantic/pull/11246)\n* Only compute normalized decimal places if necessary in `decimal_places_validator` by [@misrasaurabh1](https://github.com/misrasaurabh1) in [#11281](https://github.com/pydantic/pydantic/pull/11281)\n* Fix two misplaced sentences in validation errors documentation by [@ananiavito](https://github.com/ananiavito) in [#11302](https://github.com/pydantic/pydantic/pull/11302)\n* Fix mkdocstrings inventory example in documentation by [@pawamoy](https://github.com/pawamoy) in [#11311](https://github.com/pydantic/pydantic/pull/11311)\n* Add support for `validation_alias` in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11295](https://github.com/pydantic/pydantic/pull/11295)\n* Do not transform model serializer functions as class methods in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11298](https://github.com/pydantic/pydantic/pull/11298)\n* Simplify `GenerateJsonSchema.literal_schema()` implementation by [@misrasaurabh1](https://github.com/misrasaurabh1) in [#11321](https://github.com/pydantic/pydantic/pull/11321)\n* Add additional allowed schemes for `ClickHouseDsn` by [@Maze21127](https://github.com/Maze21127) in [#11319](https://github.com/pydantic/pydantic/pull/11319)\n* Coerce decimal constraints to `Decimal` instances by [@Viicos](https://github.com/Viicos) in [#11350](https://github.com/pydantic/pydantic/pull/11350)\n* Fix `ValueError` on year zero by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1583](https://github.com/pydantic/pydantic-core/pull/1583)\n\n#### Packaging\n\n* Bump dawidd6/action-download-artifact from 6 to 7 by [@dependabot](https://github.com/dependabot) in [#11018](https://github.com/pydantic/pydantic/pull/11018)\n* Re-enable memray related tests on Python 3.12+ by [@Viicos](https://github.com/Viicos) in [#11191](https://github.com/pydantic/pydantic/pull/11191)\n* Bump astral-sh/setup-uv to 5 by [@dependabot](https://github.com/dependabot) in [#11205](https://github.com/pydantic/pydantic/pull/11205)\n* Bump `ruff` to v0.9.0 by [@sydney-runkle](https://github.com/sydney-runkle) in [#11254](https://github.com/pydantic/pydantic/pull/11254)\n* Regular `uv.lock` deps update by [@sydney-runkle](https://github.com/sydney-runkle) in [#11333](https://github.com/pydantic/pydantic/pull/11333)\n* Add a `check_pydantic_core_version()` function by [@Viicos](https://github.com/Viicos) in [#11324](https://github.com/pydantic/pydantic/pull/11324)\n* Remove `greenlet` development dependency by [@Viicos](https://github.com/Viicos) in [#11351](https://github.com/pydantic/pydantic/pull/11351)\n* Bump `pydantic-core` to v2.28.0 by [@Viicos](https://github.com/Viicos) in [#11364](https://github.com/pydantic/pydantic/pull/11364)\n\n### New Contributors\n\n* [@FyZzyss](https://github.com/FyZzyss) made their first contribution in [#10789](https://github.com/pydantic/pydantic/pull/10789)\n* [@tamird](https://github.com/tamird) made their first contribution in [#10948](https://github.com/pydantic/pydantic/pull/10948)\n* [@felixxm](https://github.com/felixxm) made their first contribution in [#11077](https://github.com/pydantic/pydantic/pull/11077)\n* [@alexprabhat99](https://github.com/alexprabhat99) made their first contribution in [#11082](https://github.com/pydantic/pydantic/pull/11082)\n* [@Kharianne](https://github.com/Kharianne) made their first contribution in [#11111](https://github.com/pydantic/pydantic/pull/11111)\n* [@mdaffad](https://github.com/mdaffad) made their first contribution in [#11177](https://github.com/pydantic/pydantic/pull/11177)\n* [@thejcannon](https://github.com/thejcannon) made their first contribution in [#11014](https://github.com/pydantic/pydantic/pull/11014)\n* [@thomasfrimannkoren](https://github.com/thomasfrimannkoren) made their first contribution in [#11251](https://github.com/pydantic/pydantic/pull/11251)\n* [@usernameMAI](https://github.com/usernameMAI) made their first contribution in [#11275](https://github.com/pydantic/pydantic/pull/11275)\n* [@ananiavito](https://github.com/ananiavito) made their first contribution in [#11302](https://github.com/pydantic/pydantic/pull/11302)\n* [@pawamoy](https://github.com/pawamoy) made their first contribution in [#11311](https://github.com/pydantic/pydantic/pull/11311)\n* [@Maze21127](https://github.com/Maze21127) made their first contribution in [#11319](https://github.com/pydantic/pydantic/pull/11319)\n\n## v2.10.6 (2025-01-23)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.6)\n\n### What's Changed\n\n#### Fixes\n\n* Fix JSON Schema reference collection with `'examples'` keys by [@Viicos](https://github.com/Viicos) in [#11325](https://github.com/pydantic/pydantic/pull/11325)\n* Fix url python serialization by [@sydney-runkle](https://github.com/sydney-runkle) in [#11331](https://github.com/pydantic/pydantic/pull/11331)\n\n## v2.10.5 (2025-01-08)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.5)\n\n### What's Changed\n\n#### Fixes\n\n* Remove custom MRO implementation of Pydantic models by [@Viicos](https://github.com/Viicos) in [#11184](https://github.com/pydantic/pydantic/pull/11184)\n* Fix URL serialization for unions by [@sydney-runkle](https://github.com/sydney-runkle) in [#11233](https://github.com/pydantic/pydantic/pull/11233)\n\n## v2.10.4 (2024-12-18)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.4)\n\n### What's Changed\n\n#### Fixes\n\n* Fix for comparison of `AnyUrl` objects by [@alexprabhat99](https://github.com/alexprabhat99) in [#11082](https://github.com/pydantic/pydantic/pull/11082)\n* Properly fetch PEP 695 type params for functions, do not fetch annotations from signature by [@Viicos](https://github.com/Viicos) in [#11093](https://github.com/pydantic/pydantic/pull/11093)\n* Include JSON Schema input core schema in function schemas by [@Viicos](https://github.com/Viicos) in [#11085](https://github.com/pydantic/pydantic/pull/11085)\n* Add `len` to `_BaseUrl` to avoid TypeError by [@Kharianne](https://github.com/Kharianne) in [#11111](https://github.com/pydantic/pydantic/pull/11111)\n* Make sure the type reference is removed from the seen references by [@Viicos](https://github.com/Viicos) in [#11143](https://github.com/pydantic/pydantic/pull/11143)\n\n### New Contributors\n\n* [@FyZzyss](https://github.com/FyZzyss) made their first contribution in [#10789](https://github.com/pydantic/pydantic/pull/10789)\n* [@tamird](https://github.com/tamird) made their first contribution in [#10948](https://github.com/pydantic/pydantic/pull/10948)\n* [@felixxm](https://github.com/felixxm) made their first contribution in [#11077](https://github.com/pydantic/pydantic/pull/11077)\n* [@alexprabhat99](https://github.com/alexprabhat99) made their first contribution in [#11082](https://github.com/pydantic/pydantic/pull/11082)\n* [@Kharianne](https://github.com/Kharianne) made their first contribution in [#11111](https://github.com/pydantic/pydantic/pull/11111)\n\n#### Packaging\n\n* Bump `pydantic-core` to v2.27.2 by [@davidhewitt](https://github.com/davidhewitt) in [#11138](https://github.com/pydantic/pydantic/pull/11138)\n\n## v2.10.3 (2024-12-03)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.3)\n\n### What's Changed\n\n#### Fixes\n\n* Set fields when `defer_build` is set on Pydantic dataclasses by [@Viicos](https://github.com/Viicos) in [#10984](https://github.com/pydantic/pydantic/pull/10984)\n* Do not resolve the JSON Schema reference for `dict` core schema keys by [@Viicos](https://github.com/Viicos) in [#10989](https://github.com/pydantic/pydantic/pull/10989)\n* Use the globals of the function when evaluating the return type for `PlainSerializer` and `WrapSerializer` functions by [@Viicos](https://github.com/Viicos) in [#11008](https://github.com/pydantic/pydantic/pull/11008)\n* Fix host required enforcement for urls to be compatible with v2.9 behavior by [@sydney-runkle](https://github.com/sydney-runkle) in [#11027](https://github.com/pydantic/pydantic/pull/11027)\n* Add a `default_factory_takes_validated_data` property to `FieldInfo` by [@Viicos](https://github.com/Viicos) in [#11034](https://github.com/pydantic/pydantic/pull/11034)\n* Fix url json schema in `serialization` mode by [@sydney-runkle](https://github.com/sydney-runkle) in [#11035](https://github.com/pydantic/pydantic/pull/11035)\n\n## v2.10.2 (2024-11-25)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.2)\n\n### What's Changed\n\n#### Fixes\n\n* Only evaluate FieldInfo annotations if required during schema building by [@Viicos](https://github.com/Viicos) in [#10769](https://github.com/pydantic/pydantic/pull/10769)\n* Do not evaluate annotations for private fields by [@Viicos](https://github.com/Viicos) in [#10962](https://github.com/pydantic/pydantic/pull/10962)\n* Support serialization as any for `Secret` types and `Url` types by [@sydney-runkle](https://github.com/sydney-runkle) in [#10947](https://github.com/pydantic/pydantic/pull/10947)\n* Fix type hint of `Field.default` to be compatible with Python 3.8 and 3.9 by [@Viicos](https://github.com/Viicos) in [#10972](https://github.com/pydantic/pydantic/pull/10972)\n* Add hashing support for URL types by [@sydney-runkle](https://github.com/sydney-runkle) in [#10975](https://github.com/pydantic/pydantic/pull/10975)\n* Hide `BaseModel.__replace__` definition from type checkers by [@Viicos](https://github.com/Viicos) in [#10979](https://github.com/pydantic/pydantic/pull/10979)\n\n## v2.10.1 (2024-11-21)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.1)\n\n### What's Changed\n\n#### Fixes\n\n* Use the correct frame when instantiating a parametrized `TypeAdapter` by [@Viicos](https://github.com/Viicos) in [#10893](https://github.com/pydantic/pydantic/pull/10893)\n* Relax check for validated data in `default_factory` utils by [@sydney-runkle](https://github.com/sydney-runkle) in [#10909](https://github.com/pydantic/pydantic/pull/10909)\n* Fix type checking issue with `model_fields` and `model_computed_fields` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10911](https://github.com/pydantic/pydantic/pull/10911)\n* Use the parent configuration during schema generation for stdlib `dataclass`es by [@sydney-runkle](https://github.com/sydney-runkle) in [#10928](https://github.com/pydantic/pydantic/pull/10928)\n* Use the `globals` of the function when evaluating the return type of serializers and `computed_field`s by [@Viicos](https://github.com/Viicos) in [#10929](https://github.com/pydantic/pydantic/pull/10929)\n* Fix URL constraint application by [@sydney-runkle](https://github.com/sydney-runkle) in [#10922](https://github.com/pydantic/pydantic/pull/10922)\n* Fix URL equality with different validation methods by [@sydney-runkle](https://github.com/sydney-runkle) in [#10934](https://github.com/pydantic/pydantic/pull/10934)\n* Fix JSON schema title when specified as `''` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10936](https://github.com/pydantic/pydantic/pull/10936)\n* Fix `python` mode serialization for `complex` inference by [@sydney-runkle](https://github.com/sydney-runkle) in [pydantic-core#1549](https://github.com/pydantic/pydantic-core/pull/1549)\n\n#### Packaging\n\n* Bump `pydantic-core` version to `v2.27.1` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10938](https://github.com/pydantic/pydantic/pull/10938)\n\n### New Contributors\n\n## v2.10.0 (2024-11-20)\n\nThe code released in v2.10.0 is practically identical to that of v2.10.0b2.\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.0)\n\nSee the [v2.10 release blog post](https://pydantic.dev/articles/pydantic-v2-10-release) for the highlights!\n\n### What's Changed\n\n#### New Features\n\n* Support `fractions.Fraction` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10318](https://github.com/pydantic/pydantic/pull/10318)\n* Support `Hashable` for json validation by [@sydney-runkle](https://github.com/sydney-runkle) in [#10324](https://github.com/pydantic/pydantic/pull/10324)\n* Add a `SocketPath` type for `linux` systems by [@theunkn0wn1](https://github.com/theunkn0wn1) in [#10378](https://github.com/pydantic/pydantic/pull/10378)\n* Allow arbitrary refs in JSON schema `examples` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10417](https://github.com/pydantic/pydantic/pull/10417)\n* Support `defer_build` for Pydantic dataclasses by [@Viicos](https://github.com/Viicos) in [#10313](https://github.com/pydantic/pydantic/pull/10313)\n* Adding v1 / v2 incompatibility warning for nested v1 model by [@sydney-runkle](https://github.com/sydney-runkle) in [#10431](https://github.com/pydantic/pydantic/pull/10431)\n* Add support for unpacked `TypedDict` to type hint variadic keyword arguments with `@validate_call` by [@Viicos](https://github.com/Viicos) in [#10416](https://github.com/pydantic/pydantic/pull/10416)\n* Support compiled patterns in `protected_namespaces` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10522](https://github.com/pydantic/pydantic/pull/10522)\n* Add support for `propertyNames` in JSON schema by [@FlorianSW](https://github.com/FlorianSW) in [#10478](https://github.com/pydantic/pydantic/pull/10478)\n* Adding `__replace__` protocol for Python 3.13+ support by [@sydney-runkle](https://github.com/sydney-runkle) in [#10596](https://github.com/pydantic/pydantic/pull/10596)\n* Expose public `sort` method for JSON schema generation by [@sydney-runkle](https://github.com/sydney-runkle) in [#10595](https://github.com/pydantic/pydantic/pull/10595)\n* Add runtime validation of `@validate_call` callable argument by [@kc0506](https://github.com/kc0506) in [#10627](https://github.com/pydantic/pydantic/pull/10627)\n* Add `experimental_allow_partial` support by [@samuelcolvin](https://github.com/samuelcolvin) in [#10748](https://github.com/pydantic/pydantic/pull/10748)\n* Support default factories taking validated data as an argument by [@Viicos](https://github.com/Viicos) in [#10678](https://github.com/pydantic/pydantic/pull/10678)\n* Allow subclassing `ValidationError` and `PydanticCustomError` by [@Youssefares](https://github.com/Youssefares) in [pydantic/pydantic-core#1413](https://github.com/pydantic/pydantic-core/pull/1413)\n* Add `trailing-strings` support to `experimental_allow_partial` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10825](https://github.com/pydantic/pydantic/pull/10825)\n* Add `rebuild()` method for `TypeAdapter` and simplify `defer_build` patterns by [@sydney-runkle](https://github.com/sydney-runkle) in [#10537](https://github.com/pydantic/pydantic/pull/10537)\n* Improve `TypeAdapter` instance repr by [@sydney-runkle](https://github.com/sydney-runkle) in [#10872](https://github.com/pydantic/pydantic/pull/10872)\n\n#### Changes\n\n* Don't allow customization of `SchemaGenerator` until interface is more stable by [@sydney-runkle](https://github.com/sydney-runkle) in [#10303](https://github.com/pydantic/pydantic/pull/10303)\n* Cleanly `defer_build` on `TypeAdapters`, removing experimental flag by [@sydney-runkle](https://github.com/sydney-runkle) in [#10329](https://github.com/pydantic/pydantic/pull/10329)\n* Fix `mro` of generic subclass by [@kc0506](https://github.com/kc0506) in [#10100](https://github.com/pydantic/pydantic/pull/10100)\n* Strip whitespaces on JSON Schema title generation by [@sydney-runkle](https://github.com/sydney-runkle) in [#10404](https://github.com/pydantic/pydantic/pull/10404)\n* Use `b64decode` and `b64encode` for `Base64Bytes` type by [@sydney-runkle](https://github.com/sydney-runkle) in [#10486](https://github.com/pydantic/pydantic/pull/10486)\n* Relax protected namespace config default by [@sydney-runkle](https://github.com/sydney-runkle) in [#10441](https://github.com/pydantic/pydantic/pull/10441)\n* Revalidate parametrized generics if instance's origin is subclass of OG class by [@sydney-runkle](https://github.com/sydney-runkle) in [#10666](https://github.com/pydantic/pydantic/pull/10666)\n* Warn if configuration is specified on the `@dataclass` decorator and with the `__pydantic_config__` attribute by [@sydney-runkle](https://github.com/sydney-runkle) in [#10406](https://github.com/pydantic/pydantic/pull/10406)\n* Recommend against using `Ellipsis` (...) with `Field` by [@Viicos](https://github.com/Viicos) in [#10661](https://github.com/pydantic/pydantic/pull/10661)\n* Migrate to subclassing instead of annotated approach for pydantic url types by [@sydney-runkle](https://github.com/sydney-runkle) in [#10662](https://github.com/pydantic/pydantic/pull/10662)\n* Change JSON schema generation of `Literal`s and `Enums` by [@Viicos](https://github.com/Viicos) in [#10692](https://github.com/pydantic/pydantic/pull/10692)\n* Simplify unions involving `Any` or `Never` when replacing type variables by [@Viicos](https://github.com/Viicos) in [#10338](https://github.com/pydantic/pydantic/pull/10338)\n* Do not require padding when decoding `base64` bytes by [@bschoenmaeckers](https://github.com/bschoenmaeckers) in [pydantic/pydantic-core#1448](https://github.com/pydantic/pydantic-core/pull/1448)\n* Support dates all the way to 1BC by [@changhc](https://github.com/changhc) in [pydantic/speedate#77](https://github.com/pydantic/speedate/pull/77)\n\n#### Performance\n\n* Schema cleaning: skip unnecessary copies during schema walking by [@Viicos](https://github.com/Viicos) in [#10286](https://github.com/pydantic/pydantic/pull/10286)\n* Refactor namespace logic for annotations evaluation by [@Viicos](https://github.com/Viicos) in [#10530](https://github.com/pydantic/pydantic/pull/10530)\n* Improve email regexp on edge cases by [@AlekseyLobanov](https://github.com/AlekseyLobanov) in [#10601](https://github.com/pydantic/pydantic/pull/10601)\n* `CoreMetadata` refactor with an emphasis on documentation, schema build time performance, and reducing complexity by [@sydney-runkle](https://github.com/sydney-runkle) in [#10675](https://github.com/pydantic/pydantic/pull/10675)\n\n#### Packaging\n\n* Bump `pydantic-core` to `v2.27.0` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10825](https://github.com/pydantic/pydantic/pull/10825)\n* Replaced pdm with uv by [@frfahim](https://github.com/frfahim) in [#10727](https://github.com/pydantic/pydantic/pull/10727)\n\n#### Fixes\n\n* Remove guarding check on `computed_field` with `field_serializer` by [@nix010](https://github.com/nix010) in [#10390](https://github.com/pydantic/pydantic/pull/10390)\n* Fix `Predicate` issue in `v2.9.0` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10321](https://github.com/pydantic/pydantic/pull/10321)\n* Fixing `annotated-types` bound by [@sydney-runkle](https://github.com/sydney-runkle) in [#10327](https://github.com/pydantic/pydantic/pull/10327)\n* Turn `tzdata` install requirement into optional `timezone` dependency by [@jakob-keller](https://github.com/jakob-keller) in [#10331](https://github.com/pydantic/pydantic/pull/10331)\n* Use correct types namespace when building `namedtuple` core schemas by [@Viicos](https://github.com/Viicos) in [#10337](https://github.com/pydantic/pydantic/pull/10337)\n* Fix evaluation of stringified annotations during namespace inspection by [@Viicos](https://github.com/Viicos) in [#10347](https://github.com/pydantic/pydantic/pull/10347)\n* Fix `IncEx` type alias definition by [@Viicos](https://github.com/Viicos) in [#10339](https://github.com/pydantic/pydantic/pull/10339)\n* Do not error when trying to evaluate annotations of private attributes by [@Viicos](https://github.com/Viicos) in [#10358](https://github.com/pydantic/pydantic/pull/10358)\n* Fix nested type statement by [@kc0506](https://github.com/kc0506) in [#10369](https://github.com/pydantic/pydantic/pull/10369)\n* Improve typing of `ModelMetaclass.mro` by [@Viicos](https://github.com/Viicos) in [#10372](https://github.com/pydantic/pydantic/pull/10372)\n* Fix class access of deprecated `computed_field`s by [@Viicos](https://github.com/Viicos) in [#10391](https://github.com/pydantic/pydantic/pull/10391)\n* Make sure `inspect.iscoroutinefunction` works on coroutines decorated with `@validate_call` by [@MovisLi](https://github.com/MovisLi) in [#10374](https://github.com/pydantic/pydantic/pull/10374)\n* Fix `NameError` when using `validate_call` with PEP 695 on a class by [@kc0506](https://github.com/kc0506) in [#10380](https://github.com/pydantic/pydantic/pull/10380)\n* Fix `ZoneInfo` with various invalid types by [@sydney-runkle](https://github.com/sydney-runkle) in [#10408](https://github.com/pydantic/pydantic/pull/10408)\n* Fix `PydanticUserError` on empty `model_config` with annotations by [@cdwilson](https://github.com/cdwilson) in [#10412](https://github.com/pydantic/pydantic/pull/10412)\n* Fix variance issue in `_IncEx` type alias, only allow `True` by [@Viicos](https://github.com/Viicos) in [#10414](https://github.com/pydantic/pydantic/pull/10414)\n* Fix serialization schema generation when using `PlainValidator` by [@Viicos](https://github.com/Viicos) in [#10427](https://github.com/pydantic/pydantic/pull/10427)\n* Fix schema generation error when serialization schema holds references by [@Viicos](https://github.com/Viicos) in [#10444](https://github.com/pydantic/pydantic/pull/10444)\n* Inline references if possible when generating schema for `json_schema_input_type` by [@Viicos](https://github.com/Viicos) in [#10439](https://github.com/pydantic/pydantic/pull/10439)\n* Fix recursive arguments in `Representation` by [@Viicos](https://github.com/Viicos) in [#10480](https://github.com/pydantic/pydantic/pull/10480)\n* Fix representation for builtin function types by [@kschwab](https://github.com/kschwab) in [#10479](https://github.com/pydantic/pydantic/pull/10479)\n* Add python validators for decimal constraints (`max_digits` and `decimal_places`) by [@sydney-runkle](https://github.com/sydney-runkle) in [#10506](https://github.com/pydantic/pydantic/pull/10506)\n* Only fetch `__pydantic_core_schema__` from the current class during schema generation by [@Viicos](https://github.com/Viicos) in [#10518](https://github.com/pydantic/pydantic/pull/10518)\n* Fix `stacklevel` on deprecation warnings for `BaseModel` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10520](https://github.com/pydantic/pydantic/pull/10520)\n* Fix warning `stacklevel` in `BaseModel.__init__` by [@Viicos](https://github.com/Viicos) in [#10526](https://github.com/pydantic/pydantic/pull/10526)\n* Improve error handling for in-evaluable refs for discriminator application by [@sydney-runkle](https://github.com/sydney-runkle) in [#10440](https://github.com/pydantic/pydantic/pull/10440)\n* Change the signature of `ConfigWrapper.core_config` to take the title directly by [@Viicos](https://github.com/Viicos) in [#10562](https://github.com/pydantic/pydantic/pull/10562)\n* Do not use the previous config from the stack for dataclasses without config by [@Viicos](https://github.com/Viicos) in [#10576](https://github.com/pydantic/pydantic/pull/10576)\n* Fix serialization for IP types with `mode='python'` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10594](https://github.com/pydantic/pydantic/pull/10594)\n* Support constraint application for `Base64Etc` types by [@sydney-runkle](https://github.com/sydney-runkle) in [#10584](https://github.com/pydantic/pydantic/pull/10584)\n* Fix `validate_call` ignoring `Field` in `Annotated` by [@kc0506](https://github.com/kc0506) in [#10610](https://github.com/pydantic/pydantic/pull/10610)\n* Raise an error when `Self` is invalid by [@kc0506](https://github.com/kc0506) in [#10609](https://github.com/pydantic/pydantic/pull/10609)\n* Using `core_schema.InvalidSchema` instead of metadata injection + checks by [@sydney-runkle](https://github.com/sydney-runkle) in [#10523](https://github.com/pydantic/pydantic/pull/10523)\n* Tweak type alias logic by [@kc0506](https://github.com/kc0506) in [#10643](https://github.com/pydantic/pydantic/pull/10643)\n* Support usage of `type` with `typing.Self` and type aliases by [@kc0506](https://github.com/kc0506) in [#10621](https://github.com/pydantic/pydantic/pull/10621)\n* Use overloads for `Field` and `PrivateAttr` functions by [@Viicos](https://github.com/Viicos) in [#10651](https://github.com/pydantic/pydantic/pull/10651)\n* Clean up the `mypy` plugin implementation by [@Viicos](https://github.com/Viicos) in [#10669](https://github.com/pydantic/pydantic/pull/10669)\n* Properly check for `typing_extensions` variant of `TypeAliasType` by [@Daraan](https://github.com/Daraan) in [#10713](https://github.com/pydantic/pydantic/pull/10713)\n* Allow any mapping in `BaseModel.model_copy()` by [@Viicos](https://github.com/Viicos) in [#10751](https://github.com/pydantic/pydantic/pull/10751)\n* Fix `isinstance` behavior for urls by [@sydney-runkle](https://github.com/sydney-runkle) in [#10766](https://github.com/pydantic/pydantic/pull/10766)\n* Ensure `cached_property` can be set on Pydantic models by [@Viicos](https://github.com/Viicos) in [#10774](https://github.com/pydantic/pydantic/pull/10774)\n* Fix equality checks for primitives in literals by [@sydney-runkle](https://github.com/sydney-runkle) in [pydantic/pydantic-core#1459](https://github.com/pydantic/pydantic-core/pull/1459)\n* Properly enforce `host_required` for URLs by [@Viicos](https://github.com/Viicos) in [pydantic/pydantic-core#1488](https://github.com/pydantic/pydantic-core/pull/1488)\n* Fix when `coerce_numbers_to_str` enabled and string has invalid Unicode character by [@andrey-berenda](https://github.com/andrey-berenda) in [pydantic/pydantic-core#1515](https://github.com/pydantic/pydantic-core/pull/1515)\n* Fix serializing `complex` values in `Enum`s by [@changhc](https://github.com/changhc) in [pydantic/pydantic-core#1524](https://github.com/pydantic/pydantic-core/pull/1524)\n* Refactor `_typing_extra` module by [@Viicos](https://github.com/Viicos) in [#10725](https://github.com/pydantic/pydantic/pull/10725)\n* Support intuitive equality for urls by [@sydney-runkle](https://github.com/sydney-runkle) in [#10798](https://github.com/pydantic/pydantic/pull/10798)\n* Add `bytearray` to `TypeAdapter.validate_json` signature by [@samuelcolvin](https://github.com/samuelcolvin) in [#10802](https://github.com/pydantic/pydantic/pull/10802)\n* Ensure class access of method descriptors is performed when used as a default with `Field` by [@Viicos](https://github.com/Viicos) in [#10816](https://github.com/pydantic/pydantic/pull/10816)\n* Fix circular import with `validate_call` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10807](https://github.com/pydantic/pydantic/pull/10807)\n* Fix error when using type aliases referencing other type aliases by [@Viicos](https://github.com/Viicos) in [#10809](https://github.com/pydantic/pydantic/pull/10809)\n* Fix `IncEx` type alias to be compatible with mypy by [@Viicos](https://github.com/Viicos) in [#10813](https://github.com/pydantic/pydantic/pull/10813)\n* Make `__signature__` a lazy property, do not deepcopy defaults by [@Viicos](https://github.com/Viicos) in [#10818](https://github.com/pydantic/pydantic/pull/10818)\n* Make `__signature__` lazy for dataclasses, too by [@sydney-runkle](https://github.com/sydney-runkle) in [#10832](https://github.com/pydantic/pydantic/pull/10832)\n* Subclass all single host url classes from `AnyUrl` to preserve behavior from v2.9 by [@sydney-runkle](https://github.com/sydney-runkle) in [#10856](https://github.com/pydantic/pydantic/pull/10856)\n\n### New Contributors\n\n* [@jakob-keller](https://github.com/jakob-keller) made their first contribution in [#10331](https://github.com/pydantic/pydantic/pull/10331)\n* [@MovisLi](https://github.com/MovisLi) made their first contribution in [#10374](https://github.com/pydantic/pydantic/pull/10374)\n* [@joaopalmeiro](https://github.com/joaopalmeiro) made their first contribution in [#10405](https://github.com/pydantic/pydantic/pull/10405)\n* [@theunkn0wn1](https://github.com/theunkn0wn1) made their first contribution in [#10378](https://github.com/pydantic/pydantic/pull/10378)\n* [@cdwilson](https://github.com/cdwilson) made their first contribution in [#10412](https://github.com/pydantic/pydantic/pull/10412)\n* [@dlax](https://github.com/dlax) made their first contribution in [#10421](https://github.com/pydantic/pydantic/pull/10421)\n* [@kschwab](https://github.com/kschwab) made their first contribution in [#10479](https://github.com/pydantic/pydantic/pull/10479)\n* [@santibreo](https://github.com/santibreo) made their first contribution in [#10453](https://github.com/pydantic/pydantic/pull/10453)\n* [@FlorianSW](https://github.com/FlorianSW) made their first contribution in [#10478](https://github.com/pydantic/pydantic/pull/10478)\n* [@tkasuz](https://github.com/tkasuz) made their first contribution in [#10555](https://github.com/pydantic/pydantic/pull/10555)\n* [@AlekseyLobanov](https://github.com/AlekseyLobanov) made their first contribution in [#10601](https://github.com/pydantic/pydantic/pull/10601)\n* [@NiclasvanEyk](https://github.com/NiclasvanEyk) made their first contribution in [#10667](https://github.com/pydantic/pydantic/pull/10667)\n* [@mschoettle](https://github.com/mschoettle) made their first contribution in [#10677](https://github.com/pydantic/pydantic/pull/10677)\n* [@Daraan](https://github.com/Daraan) made their first contribution in [#10713](https://github.com/pydantic/pydantic/pull/10713)\n* [@k4nar](https://github.com/k4nar) made their first contribution in [#10736](https://github.com/pydantic/pydantic/pull/10736)\n* [@UriyaHarpeness](https://github.com/UriyaHarpeness) made their first contribution in [#10740](https://github.com/pydantic/pydantic/pull/10740)\n* [@frfahim](https://github.com/frfahim) made their first contribution in [#10727](https://github.com/pydantic/pydantic/pull/10727)\n\n## v2.10.0b2 (2024-11-13)\n\nPre-release, see [the GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.0b2) for details.\n\n## v2.10.0b1 (2024-11-06)\n\nPre-release, see [the GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.0b1) for details.\n\n\n... see [here](https://docs.pydantic.dev/changelog/#v0322-2019-08-17) for earlier changes.\n", + "description_content_type": "text/markdown", + "author_email": "Samuel Colvin , Eric Jolibois , Hasan Ramezani , Adrian Garcia Badaracco <1755071+adriangb@users.noreply.github.com>, Terrence Dorsey , David Montague , Serge Matveenko , Marcelo Trylesinski , Sydney Runkle , David Hewitt , Alex Hall , Victorien Plot ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Framework :: Hypothesis", + "Framework :: Pydantic", + "Intended Audience :: Developers", + "Intended Audience :: Information Technology", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Internet", + "Topic :: Software Development :: Libraries :: Python Modules" + ], + "requires_dist": [ + "annotated-types>=0.6.0", + "pydantic-core==2.46.5", + "typing-extensions>=4.14.1", + "typing-inspection>=0.4.2", + "email-validator>=2.0.0; extra == 'email'", + "tzdata; (python_version >= '3.9' and platform_system == 'Windows') and extra == 'timezone'" + ], + "requires_python": ">=3.9", + "project_url": [ + "Homepage, https://github.com/pydantic/pydantic", + "Documentation, https://docs.pydantic.dev", + "Funding, https://github.com/sponsors/samuelcolvin", + "Source, https://github.com/pydantic/pydantic", + "Changelog, https://docs.pydantic.dev/latest/changelog/" + ], + "provides_extra": [ + "email", + "timezone" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/ae/d5/d8a4eb6d6c7f66b91dd37c576d76e9e60fba900caf5372c17bcf949febc2/pydantic_core-2.46.5-cp314-cp314-macosx_11_0_arm64.whl", + "archive_info": { + "hashes": { + "sha256": "1a353f84de772f423b5ffb11d7ae352fbbef0f446f3c0b0af0f8236d7233606e" + }, + "hash": "sha256=1a353f84de772f423b5ffb11d7ae352fbbef0f446f3c0b0af0f8236d7233606e" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "pydantic_core", + "version": "2.46.5", + "summary": "Core functionality for Pydantic validation and serialization", + "description": "# pydantic-core\n\n[![CI](https://github.com/pydantic/pydantic-core/workflows/ci/badge.svg?event=push)](https://github.com/pydantic/pydantic-core/actions?query=event%3Apush+branch%3Amain+workflow%3Aci)\n[![Coverage](https://codecov.io/gh/pydantic/pydantic-core/branch/main/graph/badge.svg)](https://codecov.io/gh/pydantic/pydantic-core)\n[![pypi](https://img.shields.io/pypi/v/pydantic-core.svg)](https://pypi.python.org/pypi/pydantic-core)\n[![versions](https://img.shields.io/pypi/pyversions/pydantic-core.svg)](https://github.com/pydantic/pydantic-core)\n[![license](https://img.shields.io/github/license/pydantic/pydantic-core.svg)](https://github.com/pydantic/pydantic-core/blob/main/LICENSE)\n\nThis package provides the core functionality for [pydantic](https://docs.pydantic.dev) validation and serialization.\n\nPydantic-core is currently around 17x faster than pydantic V1.\nSee [`tests/benchmarks/`](./tests/benchmarks/) for details.\n\n## Example of direct usage\n\n*NOTE: You should not need to use pydantic-core directly; instead, use pydantic, which in turn uses pydantic-core.*\n\n```py\nfrom pydantic_core import SchemaValidator, ValidationError\n\n\nv = SchemaValidator(\n {\n 'type': 'typed-dict',\n 'fields': {\n 'name': {\n 'type': 'typed-dict-field',\n 'schema': {\n 'type': 'str',\n },\n },\n 'age': {\n 'type': 'typed-dict-field',\n 'schema': {\n 'type': 'int',\n 'ge': 18,\n },\n },\n 'is_developer': {\n 'type': 'typed-dict-field',\n 'schema': {\n 'type': 'default',\n 'schema': {'type': 'bool'},\n 'default': True,\n },\n },\n },\n }\n)\n\nr1 = v.validate_python({'name': 'Samuel', 'age': 35})\nassert r1 == {'name': 'Samuel', 'age': 35, 'is_developer': True}\n\n# pydantic-core can also validate JSON directly\nr2 = v.validate_json('{\"name\": \"Samuel\", \"age\": 35}')\nassert r1 == r2\n\ntry:\n v.validate_python({'name': 'Samuel', 'age': 11})\nexcept ValidationError as e:\n print(e)\n \"\"\"\n 1 validation error for model\n age\n Input should be greater than or equal to 18\n [type=greater_than_equal, context={ge: 18}, input_value=11, input_type=int]\n \"\"\"\n```\n\n## Getting Started\n\n### Prerequisites\n\nYou'll need:\n\n1. **[Rust](https://rustup.rs/)** - Rust stable (or nightly for coverage)\n2. **[uv](https://docs.astral.sh/uv/getting-started/installation/)** - Fast Python package manager (will install Python 3.9+ automatically)\n3. **[git](https://git-scm.com/)** - For version control\n4. **[make](https://www.gnu.org/software/make/)** - For running development commands (or use `nmake` on Windows)\n\n### Quick Start\n\n```bash\n# Clone the repository (or from your fork)\ngit clone git@github.com:pydantic/pydantic-core.git\ncd pydantic-core\n\n# Install all dependencies using uv, setup pre-commit hooks, and build the development version\nmake install\n```\n\nVerify your installation by running:\n\n```bash\nmake\n```\n\nThis runs a full development cycle: formatting, building, linting, and testing\n\n### Development Commands\n\nRun `make help` to see all available commands, or use these common ones:\n\n```bash\nmake build-dev # to build the package during development\nmake build-prod # to perform an optimised build for benchmarking\nmake test # to run the tests\nmake testcov # to run the tests and generate a coverage report\nmake lint # to run the linter\nmake format # to format python and rust code\nmake all # to run to run build-dev + format + lint + test\n```\n\n### Useful Resources\n\n* [`python/pydantic_core/_pydantic_core.pyi`](./python/pydantic_core/_pydantic_core.pyi) - Python API types\n* [`python/pydantic_core/core_schema.py`](./python/pydantic_core/core_schema.py) - Core schema definitions\n* [`tests/`](./tests) - Comprehensive usage examples\n\n## Profiling\n\nIt's possible to profile the code using the [`flamegraph` utility from `flamegraph-rs`](https://github.com/flamegraph-rs/flamegraph). (Tested on Linux.) You can install this with `cargo install flamegraph`.\n\nRun `make build-profiling` to install a release build with debugging symbols included (needed for profiling).\n\nOnce that is built, you can profile pytest benchmarks with (e.g.):\n\n```bash\nflamegraph -- pytest tests/benchmarks/test_micro_benchmarks.py -k test_list_of_ints_core_py --benchmark-enable\n```\n\nThe `flamegraph` command will produce an interactive SVG at `flamegraph.svg`.\n\n## Releasing\n\nTBC (needs to be integrated into `pydantic` repository release process).\n\n", + "description_content_type": "text/markdown; charset=UTF-8; variant=GFM", + "home_page": "https://github.com/pydantic/pydantic", + "author_email": "Samuel Colvin , Adrian Garcia Badaracco <1755071+adriangb@users.noreply.github.com>, David Montague , David Hewitt , Sydney Runkle , Victorien Plot ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 3 - Alpha", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Programming Language :: Python :: Implementation :: GraalPy", + "Programming Language :: Rust", + "Framework :: Pydantic", + "Intended Audience :: Developers", + "Intended Audience :: Information Technology", + "Operating System :: POSIX :: Linux", + "Operating System :: Microsoft :: Windows", + "Operating System :: MacOS", + "Typing :: Typed" + ], + "requires_dist": [ + "typing-extensions>=4.14.1" + ], + "requires_python": ">=3.9", + "project_url": [ + "Funding, https://github.com/sponsors/samuelcolvin", + "Homepage, https://github.com/pydantic", + "Source, https://github.com/pydantic/pydantic/tree/main/pydantic-core" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0" + }, + "hash": "sha256=f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "annotated-types", + "version": "0.8.0", + "summary": "Reusable constraint types to use with typing.Annotated", + "description": "# annotated-types\n\n[![CI](https://github.com/annotated-types/annotated-types/workflows/CI/badge.svg?event=push)](https://github.com/annotated-types/annotated-types/actions?query=event%3Apush+branch%3Amain+workflow%3ACI)\n[![pypi](https://img.shields.io/pypi/v/annotated-types.svg)](https://pypi.python.org/pypi/annotated-types)\n[![versions](https://img.shields.io/pypi/pyversions/annotated-types.svg)](https://github.com/annotated-types/annotated-types)\n[![license](https://img.shields.io/github/license/annotated-types/annotated-types.svg)](https://github.com/annotated-types/annotated-types/blob/main/LICENSE)\n\n[PEP-593](https://peps.python.org/pep-0593/) added `typing.Annotated` as a way of\nadding context-specific metadata to existing types, and specifies that\n`Annotated[T, x]` _should_ be treated as `T` by any tool or library without special\nlogic for `x`.\n\nThis package provides metadata objects which can be used to represent common\nconstraints such as upper and lower bounds on scalar values and collection sizes,\na `Predicate` marker for runtime checks, and\ndescriptions of how we intend these metadata to be interpreted. In some cases,\nwe also note alternative representations which do not require this package.\n\n## Install\n\n```bash\npip install annotated-types\n```\n\n## Examples\n\n```python\nfrom typing import Annotated\nfrom annotated_types import Gt, Len, Predicate\n\nclass MyClass:\n age: Annotated[int, Gt(18)] # Valid: 19, 20, ...\n # Invalid: 17, 18, \"19\", 19.0, ...\n factors: list[Annotated[int, Predicate(is_prime)]] # Valid: 2, 3, 5, 7, 11, ...\n # Invalid: 4, 8, -2, 5.0, \"prime\", ...\n\n my_list: Annotated[list[int], Len(0, 10)] # Valid: [], [10, 20, 30, 40, 50]\n # Invalid: (1, 2), [\"abc\"], [0] * 20\n```\n\n## Documentation\n\n_While `annotated-types` avoids runtime checks for performance, users should not\nconstruct invalid combinations such as `MultipleOf(\"non-numeric\")` or `Annotated[int, Len(3)]`.\nDownstream implementors may choose to raise an error, emit a warning, silently ignore\na metadata item, etc., if the metadata objects described below are used with an\nincompatible type - or for any other reason!_\n\n### Gt, Ge, Lt, Le\n\nExpress inclusive and/or exclusive bounds on orderable values - which may be numbers,\ndates, times, strings, sets, etc. Note that the boundary value need not be of the\nsame type that was annotated, so long as they can be compared: `Annotated[int, Gt(1.5)]`\nis fine, for example, and implies that the value is an integer x such that `x > 1.5`.\n\nWe suggest that implementors may also interpret `functools.partial(operator.le, 1.5)`\nas being equivalent to `Gt(1.5)`, for users who wish to avoid a runtime dependency on\nthe `annotated-types` package.\n\nTo be explicit, these types have the following meanings:\n\n* `Gt(x)` - value must be \"Greater Than\" `x` - equivalent to exclusive minimum\n* `Ge(x)` - value must be \"Greater than or Equal\" to `x` - equivalent to inclusive minimum\n* `Lt(x)` - value must be \"Less Than\" `x` - equivalent to exclusive maximum\n* `Le(x)` - value must be \"Less than or Equal\" to `x` - equivalent to inclusive maximum\n\n### Interval\n\n`Interval(gt, ge, lt, le)` allows you to specify an upper and lower bound with a single\nmetadata object. `None` attributes should be ignored, and non-`None` attributes\ntreated as per the single bounds above.\n\n### MultipleOf\n\n`MultipleOf(multiple_of=x)` might be interpreted in two ways:\n\n1. Python semantics, implying `value % multiple_of == 0`, or\n2. [JSONschema semantics](https://json-schema.org/draft/2020-12/json-schema-validation.html#rfc.section.6.2.1),\n where `int(value / multiple_of) == value / multiple_of`.\n\nWe encourage users to be aware of these two common interpretations and their\ndistinct behaviours, especially since very large or non-integer numbers make\nit easy to cause silent data corruption due to floating-point imprecision.\n\nWe encourage libraries to carefully document which interpretation they implement.\n\n### MinLen, MaxLen, Len\n\n`Len()` implies that `min_length <= len(value) <= max_length` - lower and upper bounds are inclusive.\n\nAs well as `Len()` which can optionally include upper and lower bounds, we also\nprovide `MinLen(x)` and `MaxLen(y)` which are equivalent to `Len(min_length=x)`\nand `Len(max_length=y)` respectively.\n\n`Len`, `MinLen`, and `MaxLen` may be used with any type which supports `len(value)`.\n\nExamples of usage:\n\n* `Annotated[list, MaxLen(10)]` (or `Annotated[list, Len(max_length=10)]`) - list must have a length of 10 or less\n* `Annotated[str, MaxLen(10)]` - string must have a length of 10 or less\n* `Annotated[list, MinLen(3)]` (or `Annotated[list, Len(min_length=3)]`) - list must have a length of 3 or more\n* `Annotated[list, Len(4, 6)]` - list must have a length of 4, 5, or 6\n* `Annotated[list, Len(8, 8)]` - list must have a length of exactly 8\n\n#### Changed in v0.4.0\n\n* `min_inclusive` has been renamed to `min_length`, no change in meaning\n* `max_exclusive` has been renamed to `max_length`, upper bound is now **inclusive** instead of **exclusive**\n* The recommendation that slices are interpreted as `Len` has been removed due to ambiguity and different semantic\n meaning of the upper bound in slices vs. `Len`\n\nSee [issue #23](https://github.com/annotated-types/annotated-types/issues/23) for discussion.\n\n### Timezone\n\n`Timezone` can be used with a `datetime` or a `time` to express which timezones\nare allowed. `Annotated[datetime, Timezone(None)]` must be a naive datetime.\n`Timezone[...]` ([literal ellipsis](https://docs.python.org/3/library/constants.html#Ellipsis))\nexpresses that any timezone-aware datetime is allowed. You may also pass a specific\ntimezone string or [`tzinfo`](https://docs.python.org/3/library/datetime.html#tzinfo-objects)\nobject such as `Timezone(timezone.utc)` or `Timezone(\"Africa/Abidjan\")` to express that you only\nallow a specific timezone, though we note that this is often a symptom of fragile design.\n\n#### Changed in v0.x.x\n\n* `Timezone` accepts [`tzinfo`](https://docs.python.org/3/library/datetime.html#tzinfo-objects) objects instead of\n `timezone`, extending compatibility to [`zoneinfo`](https://docs.python.org/3/library/zoneinfo.html) and third party libraries.\n\n### Unit\n\n`Unit(unit: str)` expresses that the annotated numeric value is the magnitude of\na quantity with the specified unit. For example, `Annotated[float, Unit(\"m/s\")]`\nwould be a float representing a velocity in meters per second.\n\nPlease note that `annotated_types` itself makes no attempt to parse or validate\nthe unit string in any way. That is left entirely to downstream libraries,\nsuch as [`pint`](https://pint.readthedocs.io) or\n[`astropy.units`](https://docs.astropy.org/en/stable/units/).\n\nAn example of how a library might use this metadata:\n\n```python\nfrom annotated_types import Unit\nfrom typing import Annotated, TypeVar, Callable, Any, get_origin, get_args\n\n# given a type annotated with a unit:\nMeters = Annotated[float, Unit(\"m\")]\n\n\n# you can cast the annotation to a specific unit type with any\n# callable that accepts a string and returns the desired type\nT = TypeVar(\"T\")\ndef cast_unit(tp: Any, unit_cls: Callable[[str], T]) -> T | None:\n if get_origin(tp) is Annotated:\n for arg in get_args(tp):\n if isinstance(arg, Unit):\n return unit_cls(arg.unit)\n return None\n\n\n# using `pint`\nimport pint\npint_unit = cast_unit(Meters, pint.Unit)\n\n\n# using `astropy.units`\nimport astropy.units as u\nastropy_unit = cast_unit(Meters, u.Unit)\n```\n\n### Predicate\n\n`Predicate(func: Callable)` expresses that `func(value)` is truthy for valid values.\nUsers should prefer the statically inspectable metadata above, but if you need\nthe full power and flexibility of arbitrary runtime predicates... here it is.\n\nFor some common constraints, we provide generic types:\n\n* `LowerCase = Annotated[T, Predicate(str.islower)]`\n* `UpperCase = Annotated[T, Predicate(str.isupper)]`\n* `IsDigit = Annotated[T, Predicate(str.isdigit)]`\n* `IsFinite = Annotated[T, Predicate(math.isfinite)]`\n* `IsNotFinite = Annotated[T, Predicate(Not(math.isfinite))]`\n* `IsNan = Annotated[T, Predicate(math.isnan)]`\n* `IsNotNan = Annotated[T, Predicate(Not(math.isnan))]`\n* `IsInfinite = Annotated[T, Predicate(math.isinf)]`\n* `IsNotInfinite = Annotated[T, Predicate(Not(math.isinf))]`\n\nso that you can write e.g. `x: IsFinite[float] = 2.0` instead of the longer\n(but exactly equivalent) `x: Annotated[float, Predicate(math.isfinite)] = 2.0`.\n\nSome libraries might have special logic to handle known or understandable predicates,\nfor example by checking for `str.isdigit` and using its presence to both call custom\nlogic to enforce digit-only strings, and customise some generated external schema.\nUsers are therefore encouraged to avoid indirection like `lambda s: s.lower()`, in\nfavor of introspectable methods such as `str.lower` or `re.compile(\"pattern\").search`.\n\nTo enable basic negation of commonly used predicates like `math.isnan` without introducing introspection that makes it impossible for implementers to introspect the predicate we provide a `Not` wrapper that simply negates the predicate in an introspectable manner. Several of the predicates listed above are created in this manner.\n\nWe do not specify what behaviour should be expected for predicates that raise\nan exception. For example `Annotated[int, Predicate(str.isdigit)]` might silently\nskip invalid constraints, or statically raise an error; or it might try calling it\nand then propagate or discard the resulting\n`TypeError: descriptor 'isdigit' for 'str' objects doesn't apply to a 'int' object`\nexception. We encourage libraries to document the behaviour they choose.\n\n### Doc\n\n`doc()` can be used to add documentation information in `Annotated`, for function and method parameters, variables, class attributes, return types, and any place where `Annotated` can be used.\n\nIt expects a value that can be statically analyzed, as the main use case is for static analysis, editors, documentation generators, and similar tools.\n\nIt returns a `DocInfo` class with a single attribute `documentation` containing the value passed to `doc()`.\n\nThis is the early adopter's alternative form of the [`typing-doc` proposal](https://github.com/tiangolo/fastapi/blob/typing-doc/typing_doc.md).\n\n### Integrating downstream types with `GroupedMetadata`\n\nImplementers may choose to provide a convenience wrapper that groups multiple pieces of metadata.\nThis can help reduce verbosity and cognitive overhead for users.\nFor example, an implementer like Pydantic might provide a `Field` or `Meta` type that accepts keyword arguments and transforms these into low-level metadata:\n\n```python\nfrom dataclasses import dataclass\nfrom typing import Iterator\nfrom annotated_types import GroupedMetadata, Ge\n\n@dataclass\nclass Field(GroupedMetadata):\n ge: int | None = None\n description: str | None = None\n\n def __iter__(self) -> Iterator[object]:\n # Iterating over a GroupedMetadata object should yield annotated-types\n # constraint metadata objects which describe it as fully as possible,\n # and may include other unknown objects too.\n if self.ge is not None:\n yield Ge(self.ge)\n if self.description is not None:\n yield Description(self.description)\n```\n\nLibraries consuming annotated-types constraints should check for `GroupedMetadata` and unpack it by iterating over the object and treating the results as if they had been \"unpacked\" in the `Annotated` type. The same logic should be applied to the [PEP 646 `Unpack` type](https://peps.python.org/pep-0646/), so that `Annotated[T, Field(...)]`, `Annotated[T, Unpack[Field(...)]]` and `Annotated[T, *Field(...)]` are all treated consistently.\n\nLibraries consuming annotated-types should also ignore any metadata they do not recongize that came from unpacking a `GroupedMetadata`, just like they ignore unrecognized metadata in `Annotated` itself.\n\nOur own `annotated_types.Interval` class is a `GroupedMetadata` which unpacks itself into `Gt`, `Lt`, etc., so this is not an abstract concern. Similarly, `annotated_types.Len` is a `GroupedMetadata` which unpacks itself into `MinLen` (optionally) and `MaxLen`.\n\n### Consuming metadata\n\nWe intend to not be prescriptive as to _how_ the metadata and constraints are used, but as an example of how one might parse constraints from types annotations see our [implementation in `test_main.py`](https://github.com/annotated-types/annotated-types/blob/f59cf6d1b5255a0fe359b93896759a180bec30ae/tests/test_main.py#L94-L103).\n\nIt is up to the implementer to determine how this metadata is used.\nYou could use the metadata for runtime type checking, for generating schemas or to generate example data, amongst other use cases.\n\n## Design & History\n\nThis package was designed at the PyCon 2022 sprints by the maintainers of Pydantic\nand Hypothesis, with the goal of making it as easy as possible for end-users to\nprovide more informative annotations for use by runtime libraries.\n\nIt is deliberately minimal, and following PEP-593 allows considerable downstream\ndiscretion in what (if anything!) they choose to support. Nonetheless, we expect\nthat staying simple and covering _only_ the most common use-cases will give users\nand maintainers the best experience we can. If you'd like more constraints for your\ntypes - follow our lead, by defining them and documenting them downstream!\n", + "description_content_type": "text/markdown", + "author_email": "Adrian Garcia Badaracco <1755071+adriangb@users.noreply.github.com>, Samuel Colvin , Zac Hatfield-Dodds ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 4 - Beta", + "Environment :: Console", + "Environment :: MacOS X", + "Intended Audience :: Developers", + "Intended Audience :: Information Technology", + "License :: OSI Approved :: MIT License", + "Operating System :: POSIX :: Linux", + "Operating System :: Unix", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Topic :: Software Development :: Libraries :: Python Modules", + "Typing :: Typed" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://github.com/annotated-types/annotated-types", + "Source, https://github.com/annotated-types/annotated-types", + "Changelog, https://github.com/annotated-types/annotated-types/releases" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/95/9c/c510029fc6ef33a6275cd2c5d3cecd6613dfd6aa401d57c54f1c18852ccf/setuptools-84.0.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670" + }, + "hash": "sha256=51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "setuptools", + "version": "84.0.0", + "dynamic": [ + "license-file" + ], + "summary": "Most extensible Python build backend with support for C/C++ extension modules", + "description": ".. |pypi-version| image:: https://img.shields.io/pypi/v/setuptools.svg\n :target: https://pypi.org/project/setuptools\n\n.. |py-version| image:: https://img.shields.io/pypi/pyversions/setuptools.svg\n\n.. |test-badge| image:: https://github.com/pypa/setuptools/actions/workflows/main.yml/badge.svg\n :target: https://github.com/pypa/setuptools/actions?query=workflow%3A%22tests%22\n :alt: tests\n\n.. |ruff-badge| image:: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v2.json\n :target: https://github.com/astral-sh/ruff\n :alt: Ruff\n\n.. |docs-badge| image:: https://img.shields.io/readthedocs/setuptools/latest.svg\n :target: https://setuptools.pypa.io\n\n.. |skeleton-badge| image:: https://img.shields.io/badge/skeleton-2026-informational\n :target: https://blog.jaraco.com/skeleton\n\n.. |codecov-badge| image:: https://img.shields.io/codecov/c/github/pypa/setuptools/master.svg?logo=codecov&logoColor=white\n :target: https://codecov.io/gh/pypa/setuptools\n\n.. |tidelift-badge| image:: https://tidelift.com/badges/github/pypa/setuptools?style=flat\n :target: https://tidelift.com/subscription/pkg/pypi-setuptools?utm_source=pypi-setuptools&utm_medium=readme\n\n.. |discord-badge| image:: https://img.shields.io/discord/803025117553754132\n :target: https://discord.com/channels/803025117553754132/815945031150993468\n :alt: Discord\n\n|pypi-version| |py-version| |test-badge| |ruff-badge| |docs-badge| |skeleton-badge| |codecov-badge| |discord-badge|\n\nSee the `Quickstart `_\nand the `User's Guide `_ for\ninstructions on how to use Setuptools.\n\nQuestions and comments should be directed to `GitHub Discussions\n`_.\nBug reports and especially tested patches may be\nsubmitted directly to the `bug tracker\n`_.\n\n\nCode of Conduct\n===============\n\nEveryone interacting in the setuptools project's codebases, issue trackers,\nchat rooms, and fora is expected to follow the\n`PSF Code of Conduct `_.\n\n\nFor Enterprise\n==============\n\nAvailable as part of the Tidelift Subscription.\n\nSetuptools and the maintainers of thousands of other packages are working with Tidelift to deliver one enterprise subscription that covers all of the open source you use.\n\n`Learn more `_.\n", + "description_content_type": "text/x-rst", + "keywords": [ + "CPAN", + "PyPI", + "distutils", + "eggs", + "package", + "management" + ], + "author_email": "Python Packaging Authority ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: System :: Archiving :: Packaging", + "Topic :: System :: Systems Administration", + "Topic :: Utilities" + ], + "requires_dist": [ + "pytest!=8.1.*,>=6; extra == \"test\"", + "virtualenv>=13.0.0; extra == \"test\"", + "wheel>=0.44.0; extra == \"test\"", + "pip>=19.1; extra == \"test\"", + "packaging>=24.2; extra == \"test\"", + "jaraco.envs>=2.2; extra == \"test\"", + "pytest-xdist>=3; extra == \"test\"", + "jaraco.path>=3.7.2; extra == \"test\"", + "build[virtualenv]>=1.0.3; extra == \"test\"", + "filelock>=3.4.0; extra == \"test\"", + "ini2toml[lite]>=0.14; extra == \"test\"", + "tomli-w>=1.0.0; extra == \"test\"", + "pytest-timeout; extra == \"test\"", + "pytest-perf; sys_platform != \"cygwin\" and extra == \"test\"", + "jaraco.develop>=7.21; (python_version >= \"3.9\" and sys_platform != \"cygwin\") and extra == \"test\"", + "pytest-home>=0.5; extra == \"test\"", + "pytest-subprocess; extra == \"test\"", + "pyproject-hooks!=1.1; extra == \"test\"", + "jaraco.test>=5.5; extra == \"test\"", + "sphinx>=3.5; extra == \"doc\"", + "jaraco.packaging>=9.3; extra == \"doc\"", + "rst.linker>=1.9; extra == \"doc\"", + "furo; extra == \"doc\"", + "sphinx-lint; extra == \"doc\"", + "jaraco.tidelift>=1.4; extra == \"doc\"", + "pygments-github-lexers==0.0.5; extra == \"doc\"", + "sphinx-favicon; extra == \"doc\"", + "sphinx-inline-tabs; extra == \"doc\"", + "sphinx-reredirects; extra == \"doc\"", + "sphinxcontrib-towncrier; extra == \"doc\"", + "sphinx-notfound-page<2,>=1; extra == \"doc\"", + "pyproject-hooks!=1.1; extra == \"doc\"", + "towncrier<24.7; extra == \"doc\"", + "packaging>=24.2; extra == \"core\"", + "more_itertools>=8.8; extra == \"core\"", + "jaraco.text>=3.7; extra == \"core\"", + "importlib_metadata>=6; python_version < \"3.10\" and extra == \"core\"", + "tomli>=2.0.1; python_version < \"3.11\" and extra == \"core\"", + "wheel>=0.43.0; extra == \"core\"", + "jaraco.functools>=4; extra == \"core\"", + "more_itertools; extra == \"core\"", + "pytest-checkdocs>=2.14; extra == \"check\"", + "pytest-ruff>=0.2.1; sys_platform != \"cygwin\" and extra == \"check\"", + "ruff>=0.13.0; sys_platform != \"cygwin\" and extra == \"check\"", + "pytest-cov; extra == \"cover\"", + "pytest-enabler>=3.4; extra == \"enabler\"", + "pytest-mypy>=1.0.1; platform_python_implementation != \"PyPy\" and extra == \"type\"", + "mypy==1.18.*; extra == \"type\"", + "importlib_metadata>=7.0.2; python_version < \"3.10\" and extra == \"type\"", + "jaraco.develop>=7.21; sys_platform != \"cygwin\" and extra == \"type\"" + ], + "requires_python": ">=3.10", + "project_url": [ + "Source, https://github.com/pypa/setuptools", + "Documentation, https://setuptools.pypa.io/", + "Changelog, https://setuptools.pypa.io/en/stable/history.html" + ], + "provides_extra": [ + "test", + "doc", + "ssl", + "certs", + "core", + "check", + "cover", + "enabler", + "type" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/4e/d6/1ec1b290f9e0fb067899b61e1d37a30c923068bad260b216dbe37a7d2967/starlette-1.7.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e" + }, + "hash": "sha256=67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "starlette", + "version": "1.7.0", + "summary": "The little ASGI library that shines.", + "description": "

\n \n \n \n \"starlette-logo\"\n \n

\n\n

\n ✨ The little ASGI framework that shines. ✨\n

\n\n---\n\n[![Build Status](https://github.com/Kludex/starlette/workflows/Test%20Suite/badge.svg)](https://github.com/Kludex/starlette/actions)\n[![Package version](https://badge.fury.io/py/starlette.svg)](https://pypi.python.org/pypi/starlette)\n[![Supported Python Version](https://img.shields.io/pypi/pyversions/starlette.svg?color=%2334D058)](https://pypi.org/project/starlette)\n[![Discord](https://img.shields.io/discord/1051468649518616576?logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2)](https://discord.gg/RxKUF5JuHs)\n\n---\n\n**Documentation**: https://starlette.dev\n\n**Source Code**: https://github.com/Kludex/starlette\n\n---\n\n# Starlette\n\nStarlette is a lightweight [ASGI][asgi] framework/toolkit,\nwhich is ideal for building async web services in Python.\n\nIt is production-ready, and gives you the following:\n\n* A lightweight, low-complexity HTTP web framework.\n* WebSocket support.\n* In-process background tasks.\n* Startup and shutdown events.\n* Test client built on `httpx2`.\n* CORS, GZip, Static Files, Streaming responses.\n* Session and Cookie support.\n* 100% test coverage.\n* 100% type annotated codebase.\n* Few hard dependencies.\n* Compatible with `asyncio` and `trio` backends.\n* Great overall performance [against independent benchmarks][techempower].\n\n## Installation\n\n```shell\n$ pip install starlette\n```\n\nYou'll also want to install an ASGI server, such as [uvicorn](https://uvicorn.dev) or any of the [other ASGI server implementations](https://asgi.readthedocs.io/en/latest/implementations.html#servers).\n\n```shell\n$ pip install uvicorn\n```\n\n## Example\n\n```python title=\"main.py\"\nfrom starlette.applications import Starlette\nfrom starlette.responses import JSONResponse\nfrom starlette.routing import Route\n\n\nasync def homepage(request):\n return JSONResponse({'hello': 'world'})\n\nroutes = [\n Route(\"/\", endpoint=homepage)\n]\n\napp = Starlette(debug=True, routes=routes)\n```\n\nThen run the application using Uvicorn:\n\n```shell\n$ uvicorn main:app\n```\n\n## Dependencies\n\nStarlette only requires `anyio`, and the following are optional:\n\n* [`httpx2`][httpx2] - Required if you want to use the `TestClient`.\n* [`jinja2`][jinja2] - Required if you want to use `Jinja2Templates`.\n* [`opentelemetry-api`][opentelemetry-api] - Required for `OpenTelemetryMiddleware`.\n* [`python-multipart`][python-multipart] - Required if you want to support form parsing, with `request.form()`.\n* [`itsdangerous`][itsdangerous] - Required for `SessionMiddleware` support.\n* [`pyyaml`][pyyaml] - Required for `SchemaGenerator` support.\n\nYou can install all of these with `pip install starlette[full]`.\n\n## Framework or Toolkit\n\nStarlette is designed to be used either as a complete framework, or as\nan ASGI toolkit. You can use any of its components independently.\n\n```python\nfrom starlette.responses import PlainTextResponse\n\n\nasync def app(scope, receive, send):\n assert scope['type'] == 'http'\n response = PlainTextResponse('Hello, world!')\n await response(scope, receive, send)\n```\n\nRun the `app` application in `example.py`:\n\n```shell\n$ uvicorn example:app\nINFO: Started server process [11509]\nINFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)\n```\n\nRun uvicorn with `--reload` to enable auto-reloading on code changes.\n\n## Modularity\n\nThe modularity that Starlette is designed on promotes building reusable\ncomponents that can be shared between any ASGI framework. This should enable\nan ecosystem of shared middleware and mountable applications.\n\nThe clean API separation also means it's easier to understand each component\nin isolation.\n\n---\n\n

Starlette is BSD licensed code.
Designed & crafted with care.

— ⭐️ —

\n\n[asgi]: https://asgi.readthedocs.io/en/latest/\n[httpx2]: https://pypi.org/project/httpx2/\n[jinja2]: https://jinja.palletsprojects.com/\n[opentelemetry-api]: https://opentelemetry.io/docs/languages/python/api/\n[python-multipart]: https://multipart.fastapiexpert.com/\n[itsdangerous]: https://itsdangerous.palletsprojects.com/\n[sqlalchemy]: https://www.sqlalchemy.org\n[pyyaml]: https://pyyaml.org/wiki/PyYAMLDocumentation\n[techempower]: https://github.com/TechEmpower/FrameworkBenchmarks\n", + "description_content_type": "text/markdown", + "author_email": "Tom Christie ", + "maintainer_email": "Marcelo Trylesinski ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.md" + ], + "classifier": [ + "Development Status :: 3 - Alpha", + "Environment :: Web Environment", + "Framework :: AnyIO", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Topic :: Internet :: WWW/HTTP" + ], + "requires_dist": [ + "anyio<5,>=4.0.0", + "typing-extensions>=4.10.0; python_version < '3.13'", + "httpx2>=2.0.0; extra == 'full'", + "httpx<0.29.0,>=0.27.0; extra == 'full'", + "itsdangerous; extra == 'full'", + "jinja2; extra == 'full'", + "opentelemetry-api; extra == 'full'", + "python-multipart>=0.0.18; extra == 'full'", + "pyyaml; extra == 'full'" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://github.com/Kludex/starlette", + "Documentation, https://starlette.dev/", + "Changelog, https://starlette.dev/release-notes/", + "Funding, https://github.com/sponsors/Kludex", + "Source, https://github.com/Kludex/starlette" + ], + "provides_extra": [ + "full" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/12/b8/4bd346e22b28902df4d651910f5242c28d84e4a5c2435ca5c3f797ed7e2e/anyio-4.15.1-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101" + }, + "hash": "sha256=6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "anyio", + "version": "4.15.1", + "dynamic": [ + "license-file" + ], + "summary": "High-level concurrency and networking framework on top of asyncio or Trio", + "description": ".. image:: https://github.com/agronholm/anyio/actions/workflows/test.yml/badge.svg\n :target: https://github.com/agronholm/anyio/actions/workflows/test.yml\n :alt: Build Status\n.. image:: https://coveralls.io/repos/github/agronholm/anyio/badge.svg?branch=master\n :target: https://coveralls.io/github/agronholm/anyio?branch=master\n :alt: Code Coverage\n.. image:: https://readthedocs.org/projects/anyio/badge/?version=latest\n :target: https://anyio.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation\n.. image:: https://badges.gitter.im/gitterHQ/gitter.svg\n :target: https://gitter.im/python-trio/AnyIO\n :alt: Gitter chat\n.. image:: https://tidelift.com/badges/package/pypi/anyio\n :target: https://tidelift.com/subscription/pkg/pypi-anyio\n :alt: Tidelift\n\nAnyIO is an asynchronous networking and concurrency library that works on top of either asyncio_ or\nTrio_. It implements Trio-like `structured concurrency`_ (SC) on top of asyncio and works in harmony\nwith the native SC of Trio itself.\n\nApplications and libraries written against AnyIO's API will run unmodified on either asyncio_ or\nTrio_. AnyIO can also be adopted into a library or application incrementally – bit by bit, no full\nrefactoring necessary. It will blend in with the native libraries of your chosen backend.\n\nTo find out why you might want to use AnyIO's APIs instead of asyncio's, you can read about it\n`here `_.\n\nDocumentation\n-------------\n\nView full documentation at: https://anyio.readthedocs.io/\n\nFeatures\n--------\n\nAnyIO offers the following functionality:\n\n* Task groups (nurseries_ in trio terminology)\n* High-level networking (TCP, UDP and UNIX sockets)\n\n * `Happy eyeballs`_ algorithm for TCP connections (more robust than that of asyncio on Python\n 3.8)\n * async/await style UDP sockets (unlike asyncio where you still have to use Transports and\n Protocols)\n\n* A versatile API for byte streams and object streams\n* Inter-task synchronization and communication (locks, conditions, events, semaphores, object\n streams and futures)\n* Worker threads\n* Subprocesses\n* Subinterpreter support for code parallelization (on Python 3.13 and later)\n* Asynchronous file I/O (using worker threads)\n* Signal handling\n* Asynchronous versions of the functools_ and itertools_ modules\n\nAnyIO also comes with its own pytest_ plugin which also supports asynchronous fixtures.\nIt even works with the popular Hypothesis_ library.\n\n.. _asyncio: https://docs.python.org/3/library/asyncio.html\n.. _Trio: https://github.com/python-trio/trio\n.. _structured concurrency: https://en.wikipedia.org/wiki/Structured_concurrency\n.. _nurseries: https://trio.readthedocs.io/en/stable/reference-core.html#nurseries-and-spawning\n.. _Happy eyeballs: https://en.wikipedia.org/wiki/Happy_Eyeballs\n.. _pytest: https://docs.pytest.org/en/latest/\n.. _functools: https://docs.python.org/3/library/functools.html\n.. _itertools: https://docs.python.org/3/library/itertools.html\n.. _Hypothesis: https://hypothesis.works/\n\nSecurity contact information\n----------------------------\n\nTo report a security vulnerability, please use the `Tidelift security contact`_.\nTidelift will coordinate the fix and disclosure.\n\n.. _Tidelift security contact: https://tidelift.com/security\n", + "description_content_type": "text/x-rst", + "author_email": "Alex Grönholm ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Framework :: AnyIO", + "Typing :: Typed", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Programming Language :: Python :: Free Threading :: 2 - Beta" + ], + "requires_dist": [ + "exceptiongroup>=1.0.2; python_version < \"3.11\"", + "idna>=2.8", + "typing_extensions>=4.16.0; python_version < \"3.15\"", + "trio>=0.32.0; extra == \"trio\"" + ], + "requires_python": ">=3.10", + "project_url": [ + "Documentation, https://anyio.readthedocs.io/en/latest/", + "Changelog, https://anyio.readthedocs.io/en/stable/versionhistory.html", + "Source code, https://github.com/agronholm/anyio", + "Issue tracker, https://github.com/agronholm/anyio/issues" + ], + "provides_extra": [ + "trio" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c" + }, + "hash": "sha256=ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "idna", + "version": "3.20", + "summary": "Internationalized Domain Names in Applications (IDNA)", + "description": "# Internationalized Domain Names in Applications (IDNA)\n\nSupport for [Internationalized Domain Names in Applications\n(IDNA)](https://tools.ietf.org/html/rfc5891) and [Unicode IDNA\nCompatibility Processing](https://unicode.org/reports/tr46/). It\nsupersedes the standard library's `encodings.idna`, which only\nimplements the 2003 specification, offering broader script coverage and\nlimiting domains with known security vulnerabilities.\n\n## Usage\n\nPackage may be installed from [PyPI](https://pypi.org/project/idna/) via\nthe typical methods (e.g. `python3 -m pip install idna`)\n\nFor typical usage, the `encode` and `decode` functions will take a\ndomain name argument and perform a conversion to ASCII-compatible encoding\n(known as A-labels), or to Unicode strings (known as U-labels)\nrespectively.\n\n```pycon\n>>> import idna\n>>> idna.encode('ドメイン.テスト')\nb'xn--eckwd4c7c.xn--zckzah'\n>>> print(idna.decode('xn--eckwd4c7c.xn--zckzah'))\nドメイン.テスト\n```\n\nConversions can be applied at a per-label basis using the `ulabel` or\n`alabel` functions for specialized use cases.\n\n\n### Compatibility Mapping (UTS #46)\n\nThis library provides support for [Unicode IDNA Compatibility\nProcessing](https://unicode.org/reports/tr46/) which normalizes input from\ndifferent potential ways a user may input a domain prior to performing the IDNA\nconversion operations. This functionality, known as a\n[mapping](https://tools.ietf.org/html/rfc5895), is considered by the\nspecification to be a local user-interface issue distinct from IDNA\nconversion functionality.\n\nFor example, \"Königsgäßchen\" is not a permissible label as capital letters\nare not allowed. UTS #46 will convert this into lower case prior to applying\nthe IDNA conversion.\n\n```pycon\n>>> import idna\n>>> idna.encode('Königsgäßchen')\n...\nidna.core.InvalidCodepoint: Codepoint U+004B at position 1 of 'Königsgäßchen' not allowed\n>>> idna.encode('Königsgäßchen', uts46=True)\nb'xn--knigsgchen-b4a3dun'\n>>> idna.decode('xn--knigsgchen-b4a3dun')\n'königsgäßchen'\n```\n\nWhen performing a decode operation for display purposes, `decode()`\naccepts a `display=True` argument that leaves any `xn--` label that\nfails to decode unchanged. This is useful for user interface display\nwhere a domain is in use, the A-label form can be presented when it\nis not a valid IDN.\n\n\n## Exceptions\n\nAll errors raised during conversion derive from the `idna.IDNAError`\nbase class. The more specific exceptions are:\n\n* `idna.IDNABidiError` — raised when a label contains an illegal\n combination of left-to-right and right-to-left characters.\n* `idna.InvalidCodepoint` — raised when a label contains a codepoint\n that is INVALID for IDNA.\n* `idna.InvalidCodepointContext` — raised when a CONTEXTO or CONTEXTJ\n codepoint appears in a position whose contextual requirements are\n not satisfied.\n\nExceptions carry machine-readable attributes so that applications do\nnot need to parse the message: `code` is a short, stable identifier\nfor the rule that failed (such as `disallowed_codepoint` or\n`label_too_long`); and, when the failure can be attributed to a\nparticular character, `text` (the label or domain being validated),\n`codepoint` (the offending codepoint as an integer) and `position`\nare set. \n\n\n## Command-line tool\n\nThe package supports command-line usage to convert domain names\nbetween their Unicode and ASCII-compatible forms. It can be run either\nas a module (`python3 -m idna`) or, once installed (such as with `uv\ntool` or `pipx`), via the `idna` script:\n\n```bash\n$ uv tool install idna\n$ idna xn--e1afmkfd.xn--p1ai\nпример.рф\n$ idna пример.рф\nxn--e1afmkfd.xn--p1ai\n```\n\nMode can be specified with `-e`/`--encode` or `-d`/`--decode`, otherwise\nit will be chosen automatically based on the first input. Multiple\ndomains can be supplied either as arguments or through standard input.\nUTS #46 mapping is applied by default, which lets the tool accept\ninputs that aren't strictly valid IDNA 2008 by normalising them first,\npass `--strict` to disable UTS #46.\n\nConversion failures are reported on stderr together with the\noffending input; processing continues with the remaining domains and\nthe tool exits with a non-zero status if any conversion failed.\n\n\n## Additional Notes\n\n* **Python version support**. This library supports Python 3.9 and higher.\n As this library serves as a low-level toolkit for a variety of\n applications, we strive to support all versions of Python that are\n not beyond end-of-life. Free-threaded Python is also supported,\n as the library holds no mutable global state the functions can be\n called concurrently from multiple threads.\n\n* **Unicode version**. The IDNA and UTS #46 lookup tables are generated\n from a specific Unicode release. Some Unicode data depends on the\n running Python's `unicodedata` module, so on an older Python a\n character new to Unicode may be rejected as unknown even if this\n library knows about it.\n\n* **Emoji**. It is an occasional request to support emoji domains in\n this library. Encoding of symbols like emoji is expressly prohibited by\n the IDNA technical standard, and emoji domains are broadly phased\n out across the domain industry due to associated security risks.\n\n* **Regenerating lookup tables**. The IDNA and UTS #46 functionality\n relies upon pre-calculated lookup tables, generated using the\n `idna-data` script in [`tools/`](tools/README.md).\n\n", + "description_content_type": "text/markdown", + "author_email": "Kim Davies ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.md" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Intended Audience :: System Administrators", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Internet :: Name Service (DNS)", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Utilities" + ], + "requires_dist": [ + "ruff >= 0.16.0 ; extra == \"all\"", + "mypy >= 1.11.2 ; extra == \"all\"", + "ty >= 0.0.37 ; extra == \"all\"", + "pytest >= 8.3.2 ; extra == \"all\"", + "hypothesis >= 6.141.1 ; extra == \"all\"", + "coverage >= 7.10.0 ; extra == \"all\"" + ], + "requires_python": ">=3.9", + "project_url": [ + "Changelog, https://github.com/kjd/idna/blob/master/HISTORY.md", + "Issue tracker, https://github.com/kjd/idna/issues", + "Source, https://github.com/kjd/idna" + ], + "provides_extra": [ + "all" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5" + }, + "hash": "sha256=e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "sympy", + "version": "1.14.0", + "dynamic": [ + "author", + "author-email", + "classifier", + "description", + "description-content-type", + "home-page", + "keywords", + "license", + "license-file", + "project-url", + "provides-extra", + "requires-dist", + "requires-python", + "summary" + ], + "summary": "Computer algebra system (CAS) in Python", + "description": "# SymPy\n\n[![pypi version](https://img.shields.io/pypi/v/sympy.svg)](https://pypi.python.org/pypi/sympy)\n[![Join the chat at https://gitter.im/sympy/sympy](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/sympy/sympy?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)\n[![Zenodo Badge](https://zenodo.org/badge/18918/sympy/sympy.svg)](https://zenodo.org/badge/latestdoi/18918/sympy/sympy)\n[![Downloads](https://pepy.tech/badge/sympy/month)](https://pepy.tech/project/sympy)\n[![GitHub Issues](https://img.shields.io/badge/issue_tracking-github-blue.svg)](https://github.com/sympy/sympy/issues)\n[![Git Tutorial](https://img.shields.io/badge/PR-Welcome-%23FF8300.svg?)](https://git-scm.com/book/en/v2/GitHub-Contributing-to-a-Project)\n[![Powered by NumFocus](https://img.shields.io/badge/powered%20by-NumFOCUS-orange.svg?style=flat&colorA=E1523D&colorB=007D8A)](https://numfocus.org)\n[![Commits since last release](https://img.shields.io/github/commits-since/sympy/sympy/latest.svg?longCache=true&style=flat-square&logo=git&logoColor=fff)](https://github.com/sympy/sympy/releases)\n\n[![SymPy Banner](https://github.com/sympy/sympy/raw/master/banner.svg)](https://sympy.org/)\n\n\nSee the [AUTHORS](AUTHORS) file for the list of authors.\n\nAnd many more people helped on the SymPy mailing list, reported bugs,\nhelped organize SymPy's participation in the Google Summer of Code, the\nGoogle Highly Open Participation Contest, Google Code-In, wrote and\nblogged about SymPy...\n\nLicense: New BSD License (see the [LICENSE](LICENSE) file for details) covers all\nfiles in the sympy repository unless stated otherwise.\n\nOur mailing list is at\n.\n\nWe have a community chat at [Gitter](https://gitter.im/sympy/sympy). Feel\nfree to ask us anything there. We have a very welcoming and helpful\ncommunity.\n\n## Download\n\nThe recommended installation method is through Anaconda,\n\n\nYou can also get the latest version of SymPy from\n\n\nTo get the git version do\n\n $ git clone https://github.com/sympy/sympy.git\n\nFor other options (tarballs, debs, etc.), see\n.\n\n## Documentation and Usage\n\nFor in-depth instructions on installation and building the\ndocumentation, see the [SymPy Documentation Style Guide](https://docs.sympy.org/dev/documentation-style-guide.html).\n\nEverything is at:\n\n\n\nYou can generate everything at the above site in your local copy of\nSymPy by:\n\n $ cd doc\n $ make html\n\nThen the docs will be in \\_build/html. If\nyou don't want to read that, here is a short usage:\n\nFrom this directory, start Python and:\n\n``` python\n>>> from sympy import Symbol, cos\n>>> x = Symbol('x')\n>>> e = 1/cos(x)\n>>> print(e.series(x, 0, 10))\n1 + x**2/2 + 5*x**4/24 + 61*x**6/720 + 277*x**8/8064 + O(x**10)\n```\n\nSymPy also comes with a console that is a simple wrapper around the\nclassic python console (or IPython when available) that loads the SymPy\nnamespace and executes some common commands for you.\n\nTo start it, issue:\n\n $ bin/isympy\n\nfrom this directory, if SymPy is not installed or simply:\n\n $ isympy\n\nif SymPy is installed.\n\n## Installation\n\nTo install SymPy using PyPI, run the following command:\n\n $ pip install sympy\n\nTo install SymPy using Anaconda, run the following command:\n\n $ conda install -c anaconda sympy\n\nTo install SymPy from GitHub source, first clone SymPy using `git`:\n\n $ git clone https://github.com/sympy/sympy.git\n\nThen, in the `sympy` repository that you cloned, simply run:\n\n $ pip install .\n\nSee for more information.\n\n## Contributing\n\nWe welcome contributions from anyone, even if you are new to open\nsource. Please read our [Introduction to Contributing](https://docs.sympy.org/dev/contributing/introduction-to-contributing.html)\npage and the [SymPy Documentation Style Guide](https://docs.sympy.org/dev/documentation-style-guide.html). If you\nare new and looking for some way to contribute, a good place to start is\nto look at the issues tagged [Easy to Fix](https://github.com/sympy/sympy/issues?q=is%3Aopen+is%3Aissue+label%3A%22Easy+to+Fix%22).\n\nPlease note that all participants in this project are expected to follow\nour Code of Conduct. By participating in this project you agree to abide\nby its terms. See [CODE\\_OF\\_CONDUCT.md](CODE_OF_CONDUCT.md).\n\n## Tests\n\nTo execute all tests, run:\n\n $./setup.py test\n\nin the current directory.\n\nFor the more fine-grained running of tests or doctests, use `bin/test`\nor respectively `bin/doctest`. The master branch is automatically tested\nby GitHub Actions.\n\nTo test pull requests, use\n[sympy-bot](https://github.com/sympy/sympy-bot).\n\n## Regenerate Experimental LaTeX Parser/Lexer\n\nThe parser and lexer were generated with the [ANTLR4](http://antlr4.org)\ntoolchain in `sympy/parsing/latex/_antlr` and checked into the repo.\nPresently, most users should not need to regenerate these files, but\nif you plan to work on this feature, you will need the `antlr4`\ncommand-line tool (and you must ensure that it is in your `PATH`).\nOne way to get it is:\n\n $ conda install -c conda-forge antlr=4.11.1\n\nAlternatively, follow the instructions on the ANTLR website and download\nthe `antlr-4.11.1-complete.jar`. Then export the `CLASSPATH` as instructed\nand instead of creating `antlr4` as an alias, make it an executable file\nwith the following contents:\n``` bash\n#!/bin/bash\njava -jar /usr/local/lib/antlr-4.11.1-complete.jar \"$@\"\n```\n\nAfter making changes to `sympy/parsing/latex/LaTeX.g4`, run:\n\n $ ./setup.py antlr\n\n## Clean\n\nTo clean everything (thus getting the same tree as in the repository):\n\n $ git clean -Xdf\n\nwhich will clear everything ignored by `.gitignore`, and:\n\n $ git clean -df\n\nto clear all untracked files. You can revert the most recent changes in\ngit with:\n\n $ git reset --hard\n\nWARNING: The above commands will all clear changes you may have made,\nand you will lose them forever. Be sure to check things with `git\nstatus`, `git diff`, `git clean -Xn`, and `git clean -n` before doing any\nof those.\n\n## Bugs\n\nOur issue tracker is at . Please\nreport any bugs that you find. Or, even better, fork the repository on\nGitHub and create a pull request. We welcome all changes, big or small,\nand we will help you make the pull request if you are new to git (just\nask on our mailing list or Gitter Channel). If you further have any queries, you can find answers\non Stack Overflow using the [sympy](https://stackoverflow.com/questions/tagged/sympy) tag.\n\n## Brief History\n\nSymPy was started by Ondřej Čertík in 2005, he wrote some code during\nthe summer, then he wrote some more code during summer 2006. In February\n2007, Fabian Pedregosa joined the project and helped fix many things,\ncontributed documentation, and made it alive again. 5 students (Mateusz\nPaprocki, Brian Jorgensen, Jason Gedge, Robert Schwarz, and Chris Wu)\nimproved SymPy incredibly during summer 2007 as part of the Google\nSummer of Code. Pearu Peterson joined the development during the summer\n2007 and he has made SymPy much more competitive by rewriting the core\nfrom scratch, which has made it from 10x to 100x faster. Jurjen N.E. Bos\nhas contributed pretty-printing and other patches. Fredrik Johansson has\nwritten mpmath and contributed a lot of patches.\n\nSymPy has participated in every Google Summer of Code since 2007. You\ncan see for\nfull details. Each year has improved SymPy by bounds. Most of SymPy's\ndevelopment has come from Google Summer of Code students.\n\nIn 2011, Ondřej Čertík stepped down as lead developer, with Aaron\nMeurer, who also started as a Google Summer of Code student, taking his\nplace. Ondřej Čertík is still active in the community but is too busy\nwith work and family to play a lead development role.\n\nSince then, a lot more people have joined the development and some\npeople have also left. You can see the full list in doc/src/aboutus.rst,\nor online at:\n\n\n\nThe git history goes back to 2007 when development moved from svn to hg.\nTo see the history before that point, look at\n.\n\nYou can use git to see the biggest developers. The command:\n\n $ git shortlog -ns\n\nwill show each developer, sorted by commits to the project. The command:\n\n $ git shortlog -ns --since=\"1 year\"\n\nwill show the top developers from the last year.\n\n## Citation\n\nTo cite SymPy in publications use\n\n> Meurer A, Smith CP, Paprocki M, Čertík O, Kirpichev SB, Rocklin M,\n> Kumar A, Ivanov S, Moore JK, Singh S, Rathnayake T, Vig S, Granger BE,\n> Muller RP, Bonazzi F, Gupta H, Vats S, Johansson F, Pedregosa F, Curry\n> MJ, Terrel AR, Roučka Š, Saboo A, Fernando I, Kulal S, Cimrman R,\n> Scopatz A. (2017) SymPy: symbolic computing in Python. *PeerJ Computer\n> Science* 3:e103 \n\nA BibTeX entry for LaTeX users is\n\n``` bibtex\n@article{10.7717/peerj-cs.103,\n title = {SymPy: symbolic computing in Python},\n author = {Meurer, Aaron and Smith, Christopher P. and Paprocki, Mateusz and \\v{C}ert\\'{i}k, Ond\\v{r}ej and Kirpichev, Sergey B. and Rocklin, Matthew and Kumar, Amit and Ivanov, Sergiu and Moore, Jason K. and Singh, Sartaj and Rathnayake, Thilina and Vig, Sean and Granger, Brian E. and Muller, Richard P. and Bonazzi, Francesco and Gupta, Harsh and Vats, Shivam and Johansson, Fredrik and Pedregosa, Fabian and Curry, Matthew J. and Terrel, Andy R. and Rou\\v{c}ka, \\v{S}t\\v{e}p\\'{a}n and Saboo, Ashutosh and Fernando, Isuru and Kulal, Sumith and Cimrman, Robert and Scopatz, Anthony},\n year = 2017,\n month = Jan,\n keywords = {Python, Computer algebra system, Symbolics},\n abstract = {\n SymPy is an open-source computer algebra system written in pure Python. It is built with a focus on extensibility and ease of use, through both interactive and programmatic applications. These characteristics have led SymPy to become a popular symbolic library for the scientific Python ecosystem. This paper presents the architecture of SymPy, a description of its features, and a discussion of select submodules. The supplementary material provides additional examples and further outlines details of the architecture and features of SymPy.\n },\n volume = 3,\n pages = {e103},\n journal = {PeerJ Computer Science},\n issn = {2376-5992},\n url = {https://doi.org/10.7717/peerj-cs.103},\n doi = {10.7717/peerj-cs.103}\n}\n```\n\nSymPy is BSD licensed, so you are free to use it whatever you like, be\nit academic, commercial, creating forks or derivatives, as long as you\ncopy the BSD statement if you redistribute it (see the LICENSE file for\ndetails). That said, although not required by the SymPy license, if it\nis convenient for you, please cite SymPy when using it in your work and\nalso consider contributing all your changes back, so that we can\nincorporate it and all of us will benefit in the end.\n", + "description_content_type": "text/markdown", + "keywords": [ + "Math", + "CAS" + ], + "home_page": "https://sympy.org", + "author": "SymPy development team", + "author_email": "sympy@googlegroups.com", + "license": "BSD", + "license_file": [ + "LICENSE", + "AUTHORS" + ], + "classifier": [ + "License :: OSI Approved :: BSD License", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Topic :: Scientific/Engineering", + "Topic :: Scientific/Engineering :: Mathematics", + "Topic :: Scientific/Engineering :: Physics", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy" + ], + "requires_dist": [ + "mpmath<1.4,>=1.1.0", + "pytest>=7.1.0; extra == \"dev\"", + "hypothesis>=6.70.0; extra == \"dev\"" + ], + "requires_python": ">=3.9", + "project_url": [ + "Source, https://github.com/sympy/sympy" + ], + "provides_extra": [ + "dev" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c" + }, + "hash": "sha256=a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.1", + "name": "mpmath", + "version": "1.3.0", + "summary": "Python library for arbitrary-precision floating-point arithmetic", + "description": "mpmath\n======\n\n|pypi version| |Build status| |Code coverage status| |Zenodo Badge|\n\n.. |pypi version| image:: https://img.shields.io/pypi/v/mpmath.svg\n :target: https://pypi.python.org/pypi/mpmath\n.. |Build status| image:: https://github.com/fredrik-johansson/mpmath/workflows/test/badge.svg\n :target: https://github.com/fredrik-johansson/mpmath/actions?workflow=test\n.. |Code coverage status| image:: https://codecov.io/gh/fredrik-johansson/mpmath/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/fredrik-johansson/mpmath\n.. |Zenodo Badge| image:: https://zenodo.org/badge/2934512.svg\n :target: https://zenodo.org/badge/latestdoi/2934512\n\nA Python library for arbitrary-precision floating-point arithmetic.\n\nWebsite: http://mpmath.org/\nMain author: Fredrik Johansson \n\nMpmath is free software released under the New BSD License (see the\nLICENSE file for details)\n\n0. History and credits\n----------------------\n\nThe following people (among others) have contributed major patches\nor new features to mpmath:\n\n* Pearu Peterson \n* Mario Pernici \n* Ondrej Certik \n* Vinzent Steinberg \n* Nimish Telang \n* Mike Taschuk \n* Case Van Horsen \n* Jorn Baayen \n* Chris Smith \n* Juan Arias de Reyna \n* Ioannis Tziakos \n* Aaron Meurer \n* Stefan Krastanov \n* Ken Allen \n* Timo Hartmann \n* Sergey B Kirpichev \n* Kris Kuhlman \n* Paul Masson \n* Michael Kagalenko \n* Jonathan Warner \n* Max Gaukler \n* Guillermo Navas-Palencia \n* Nike Dattani \n\nNumerous other people have contributed by reporting bugs,\nrequesting new features, or suggesting improvements to the\ndocumentation.\n\nFor a detailed changelog, including individual contributions,\nsee the CHANGES file.\n\nFredrik's work on mpmath during summer 2008 was sponsored by Google\nas part of the Google Summer of Code program.\n\nFredrik's work on mpmath during summer 2009 was sponsored by the\nAmerican Institute of Mathematics under the support of the National Science\nFoundation Grant No. 0757627 (FRG: L-functions and Modular Forms).\n\nAny opinions, findings, and conclusions or recommendations expressed in this\nmaterial are those of the author(s) and do not necessarily reflect the\nviews of the sponsors.\n\nCredit also goes to:\n\n* The authors of the GMP library and the Python wrapper\n gmpy, enabling mpmath to become much faster at\n high precision\n* The authors of MPFR, pari/gp, MPFUN, and other arbitrary-\n precision libraries, whose documentation has been helpful\n for implementing many of the algorithms in mpmath\n* Wikipedia contributors; Abramowitz & Stegun; Gradshteyn & Ryzhik;\n Wolfram Research for MathWorld and the Wolfram Functions site.\n These are the main references used for special functions\n implementations.\n* George Brandl for developing the Sphinx documentation tool\n used to build mpmath's documentation\n\nRelease history:\n\n* Version 1.3.0 released on March 7, 2023\n* Version 1.2.0 released on February 1, 2021\n* Version 1.1.0 released on December 11, 2018\n* Version 1.0.0 released on September 27, 2017\n* Version 0.19 released on June 10, 2014\n* Version 0.18 released on December 31, 2013\n* Version 0.17 released on February 1, 2011\n* Version 0.16 released on September 24, 2010\n* Version 0.15 released on June 6, 2010\n* Version 0.14 released on February 5, 2010\n* Version 0.13 released on August 13, 2009\n* Version 0.12 released on June 9, 2009\n* Version 0.11 released on January 26, 2009\n* Version 0.10 released on October 15, 2008\n* Version 0.9 released on August 23, 2008\n* Version 0.8 released on April 20, 2008\n* Version 0.7 released on March 12, 2008\n* Version 0.6 released on January 13, 2008\n* Version 0.5 released on November 24, 2007\n* Version 0.4 released on November 3, 2007\n* Version 0.3 released on October 5, 2007\n* Version 0.2 released on October 2, 2007\n* Version 0.1 released on September 27, 2007\n\n1. Download & installation\n--------------------------\n\nMpmath requires Python 2.7 or 3.5 (or later versions). It has been tested\nwith CPython 2.7, 3.5 through 3.7 and for PyPy.\n\nThe latest release of mpmath can be downloaded from the mpmath\nwebsite and from https://github.com/fredrik-johansson/mpmath/releases\n\nIt should also be available in the Python Package Index at\nhttps://pypi.python.org/pypi/mpmath\n\nTo install latest release of Mpmath with pip, simply run\n\n``pip install mpmath``\n\nOr unpack the mpmath archive and run\n\n``python setup.py install``\n\nMpmath can also be installed using\n\n``python -m easy_install mpmath``\n\nThe latest development code is available from\nhttps://github.com/fredrik-johansson/mpmath\n\nSee the main documentation for more detailed instructions.\n\n2. Running tests\n----------------\n\nThe unit tests in mpmath/tests/ can be run via the script\nruntests.py, but it is recommended to run them with py.test\n(https://pytest.org/), especially\nto generate more useful reports in case there are failures.\n\nYou may also want to check out the demo scripts in the demo\ndirectory.\n\nThe master branch is automatically tested by Travis CI.\n\n3. Documentation\n----------------\n\nDocumentation in reStructuredText format is available in the\ndoc directory included with the source package. These files\nare human-readable, but can be compiled to prettier HTML using\nthe build.py script (requires Sphinx, http://sphinx.pocoo.org/).\n\nSee setup.txt in the documentation for more information.\n\nThe most recent documentation is also available in HTML format:\n\nhttp://mpmath.org/doc/current/\n\n4. Known problems\n-----------------\n\nMpmath is a work in progress. Major issues include:\n\n* Some functions may return incorrect values when given extremely\n large arguments or arguments very close to singularities.\n\n* Directed rounding works for arithmetic operations. It is implemented\n heuristically for other operations, and their results may be off by one\n or two units in the last place (even if otherwise accurate).\n\n* Some IEEE 754 features are not available. Inifinities and NaN are\n partially supported; denormal rounding is currently not available\n at all.\n\n* The interface for switching precision and rounding is not finalized.\n The current method is not threadsafe.\n\n5. Help and bug reports\n-----------------------\n\nGeneral questions and comments can be sent to the mpmath mailinglist,\nmpmath@googlegroups.com\n\nYou can also report bugs and send patches to the mpmath issue tracker,\nhttps://github.com/fredrik-johansson/mpmath/issues\n", + "home_page": "http://mpmath.org/", + "author": "Fredrik Johansson", + "author_email": "fredrik.johansson@gmail.com", + "license": "BSD", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "License :: OSI Approved :: BSD License", + "Topic :: Scientific/Engineering :: Mathematics", + "Topic :: Software Development :: Libraries :: Python Modules", + "Programming Language :: Python", + "Programming Language :: Python :: 2", + "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.5", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy" + ], + "requires_dist": [ + "pytest (>=4.6) ; extra == 'develop'", + "pycodestyle ; extra == 'develop'", + "pytest-cov ; extra == 'develop'", + "codecov ; extra == 'develop'", + "wheel ; extra == 'develop'", + "sphinx ; extra == 'docs'", + "gmpy2 (>=2.1.0a4) ; (platform_python_implementation != \"PyPy\") and extra == 'gmpy'", + "pytest (>=4.6) ; extra == 'tests'" + ], + "project_url": [ + "Source, https://github.com/fredrik-johansson/mpmath", + "Tracker, https://github.com/fredrik-johansson/mpmath/issues", + "Documentation, http://mpmath.org/doc/current/" + ], + "provides_extra": [ + "develop", + "docs", + "gmpy", + "tests" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8" + }, + "hash": "sha256=481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "typing_extensions", + "version": "4.16.0", + "summary": "Backported and Experimental Type Hints for Python 3.9+", + "description": "# Typing Extensions\n\n[![Chat at https://gitter.im/python/typing](https://badges.gitter.im/python/typing.svg)](https://gitter.im/python/typing)\n\n[Documentation](https://typing-extensions.readthedocs.io/en/latest/#) –\n[PyPI](https://pypi.org/project/typing-extensions/)\n\n## Overview\n\nThe `typing_extensions` module serves two related purposes:\n\n- Enable use of new type system features on older Python versions. For example,\n `typing.TypeGuard` is new in Python 3.10, but `typing_extensions` allows\n users on previous Python versions to use it too.\n- Enable experimentation with new type system PEPs before they are accepted and\n added to the `typing` module.\n\n`typing_extensions` is treated specially by static type checkers such as\nmypy and pyright. Objects defined in `typing_extensions` are treated the same\nway as equivalent forms in `typing`.\n\n`typing_extensions` uses\n[Semantic Versioning](https://semver.org/). The\nmajor version will be incremented only for backwards-incompatible changes.\nTherefore, it's safe to depend\non `typing_extensions` like this: `typing_extensions ~=x.y`,\nwhere `x.y` is the first version that includes all features you need.\n[This](https://packaging.python.org/en/latest/specifications/version-specifiers/#compatible-release)\nis equivalent to `typing_extensions >=x.y, <(x+1)`. Do not depend on `~= x.y.z`\nunless you really know what you're doing; that defeats the purpose of\nsemantic versioning.\n\n## Included items\n\nSee [the documentation](https://typing-extensions.readthedocs.io/en/latest/#) for a\ncomplete listing of module contents.\n\n## Contributing\n\nSee [CONTRIBUTING.md](https://github.com/python/typing_extensions/blob/main/CONTRIBUTING.md)\nfor how to contribute to `typing_extensions`.\n\n", + "description_content_type": "text/markdown", + "keywords": [ + "annotations", + "backport", + "checker", + "checking", + "function", + "hinting", + "hints", + "type", + "typechecking", + "typehinting", + "typehints", + "typing" + ], + "author_email": "\"Guido van Rossum, Jukka Lehtosalo, Łukasz Langa, Michael Lee\" ", + "license_expression": "PSF-2.0", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Environment :: Console", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Topic :: Software Development" + ], + "requires_python": ">=3.9", + "project_url": [ + "Bug Tracker, https://github.com/python/typing_extensions/issues", + "Changes, https://github.com/python/typing_extensions/blob/main/CHANGELOG.md", + "Documentation, https://typing-extensions.readthedocs.io/", + "Home, https://github.com/python/typing_extensions", + "Q & A, https://github.com/python/typing/discussions", + "Repository, https://github.com/python/typing_extensions" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147" + }, + "hash": "sha256=65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "typing-inspection", + "version": "0.4.4", + "summary": "Runtime typing introspection tools", + "description": "# typing-inspection\n\n[![CI](https://img.shields.io/github/actions/workflow/status/pydantic/typing-inspection/ci.yml?branch=main&logo=github&label=CI)](https://github.com/pydantic/typing-inspection/actions?query=event%3Apush+branch%3Amain+workflow%3ACI)\n[![Coverage](https://coverage-badge.samuelcolvin.workers.dev/pydantic/typing-inspection.svg)](https://coverage-badge.samuelcolvin.workers.dev/redirect/pydantic/typing-inspection)\n[![PyPI](https://img.shields.io/pypi/v/typing-inspection.svg)](https://pypi.org/project/typing-inspection/)\n[![Versions](https://img.shields.io/pypi/pyversions/typing-inspection.svg)](https://github.com/pydantic/typing-inspection)\n[![License](https://img.shields.io/github/license/pydantic/typing-inspection.svg)](https://github.com/pydantic/typing-inspection/blob/main/LICENSE)\n[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)\n\n`typing-inspection` provides tools to inspect type annotations at runtime.\n\n## Installation\n\nFrom [PyPI](https://pypi.org/project/typing-inspection/):\n\n```bash\npip install typing-inspection\n```\n\nThe library can be imported from the `typing_inspection` module.\n", + "description_content_type": "text/markdown", + "author_email": "Victorien Plot ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Programming Language :: Python :: Implementation :: CPython", + "Topic :: Software Development :: Libraries :: Python Modules", + "Typing :: Typed" + ], + "requires_dist": [ + "typing-extensions>=4.15.0" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://github.com/pydantic/typing-inspection", + "Documentation, https://pydantic.github.io/typing-inspection/dev/", + "Source, https://github.com/pydantic/typing-inspection", + "Changelog, https://github.com/pydantic/typing-inspection/blob/main/HISTORY.md" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/7a/6d/db8b86e168fef0cf904737e275bccb683558088ef971e92d3b41ce980699/filelock-4.0.3-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "30cd166e2aee2c7534ce2c33c6367c4cd051b8368e20e2c4eb0c34f699bacfab" + }, + "hash": "sha256=30cd166e2aee2c7534ce2c33c6367c4cd051b8368e20e2c4eb0c34f699bacfab" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "filelock", + "version": "4.0.3", + "summary": "A platform independent file lock.", + "description": "# filelock\n\n[![PyPI](https://img.shields.io/pypi/v/filelock)](https://pypi.org/project/filelock/)\n[![Supported Python versions](https://img.shields.io/pypi/pyversions/filelock.svg)](https://pypi.org/project/filelock/)\n[![Documentation status](https://readthedocs.org/projects/py-filelock/badge/?version=latest)](https://py-filelock.readthedocs.io/en/latest/?badge=latest)\n[![Downloads](https://static.pepy.tech/badge/filelock/month)](https://pepy.tech/project/filelock)\n[![check](https://github.com/tox-dev/py-filelock/actions/workflows/check.yaml/badge.svg)](https://github.com/tox-dev/py-filelock/actions/workflows/check.yaml)\n\nFor more information checkout the [official documentation](https://py-filelock.readthedocs.io/en/latest/index.html).\n", + "description_content_type": "text/markdown", + "keywords": [ + "application", + "cache", + "directory", + "log", + "user" + ], + "maintainer_email": "Bernát Gábor ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Topic :: Internet", + "Topic :: Software Development :: Libraries", + "Topic :: System" + ], + "requires_python": ">=3.10", + "project_url": [ + "Documentation, https://py-filelock.readthedocs.io", + "Homepage, https://github.com/tox-dev/py-filelock", + "Source, https://github.com/tox-dev/py-filelock", + "Tracker, https://github.com/tox-dev/py-filelock/issues" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67" + }, + "hash": "sha256=85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "Jinja2", + "version": "3.1.6", + "summary": "A very fast and expressive template engine.", + "description": "# Jinja\n\nJinja is a fast, expressive, extensible templating engine. Special\nplaceholders in the template allow writing code similar to Python\nsyntax. Then the template is passed data to render the final document.\n\nIt includes:\n\n- Template inheritance and inclusion.\n- Define and import macros within templates.\n- HTML templates can use autoescaping to prevent XSS from untrusted\n user input.\n- A sandboxed environment can safely render untrusted templates.\n- AsyncIO support for generating templates and calling async\n functions.\n- I18N support with Babel.\n- Templates are compiled to optimized Python code just-in-time and\n cached, or can be compiled ahead-of-time.\n- Exceptions point to the correct line in templates to make debugging\n easier.\n- Extensible filters, tests, functions, and even syntax.\n\nJinja's philosophy is that while application logic belongs in Python if\npossible, it shouldn't make the template designer's job difficult by\nrestricting functionality too much.\n\n\n## In A Nutshell\n\n```jinja\n{% extends \"base.html\" %}\n{% block title %}Members{% endblock %}\n{% block content %}\n \n{% endblock %}\n```\n\n## Donate\n\nThe Pallets organization develops and supports Jinja and other popular\npackages. In order to grow the community of contributors and users, and\nallow the maintainers to devote more time to the projects, [please\ndonate today][].\n\n[please donate today]: https://palletsprojects.com/donate\n\n## Contributing\n\nSee our [detailed contributing documentation][contrib] for many ways to\ncontribute, including reporting issues, requesting features, asking or answering\nquestions, and making PRs.\n\n[contrib]: https://palletsprojects.com/contributing/\n\n", + "description_content_type": "text/markdown", + "maintainer_email": "Pallets ", + "license_file": [ + "LICENSE.txt" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Environment :: Web Environment", + "Intended Audience :: Developers", + "License :: OSI Approved :: BSD License", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Topic :: Internet :: WWW/HTTP :: Dynamic Content", + "Topic :: Text Processing :: Markup :: HTML", + "Typing :: Typed" + ], + "requires_dist": [ + "MarkupSafe>=2.0", + "Babel>=2.7 ; extra == \"i18n\"" + ], + "requires_python": ">=3.7", + "project_url": [ + "Changes, https://jinja.palletsprojects.com/changes/", + "Chat, https://discord.gg/pallets", + "Documentation, https://jinja.palletsprojects.com/", + "Donate, https://palletsprojects.com/donate", + "Source, https://github.com/pallets/jinja/" + ], + "provides_extra": [ + "i18n" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", + "archive_info": { + "hashes": { + "sha256": "c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026" + }, + "hash": "sha256=c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "MarkupSafe", + "version": "3.0.3", + "dynamic": [ + "license-file" + ], + "summary": "Safely add untrusted strings to HTML/XML markup.", + "description": "
\"\"
\n\n# MarkupSafe\n\nMarkupSafe implements a text object that escapes characters so it is\nsafe to use in HTML and XML. Characters that have special meanings are\nreplaced so that they display as the actual characters. This mitigates\ninjection attacks, meaning untrusted user input can safely be displayed\non a page.\n\n\n## Examples\n\n```pycon\n>>> from markupsafe import Markup, escape\n\n>>> # escape replaces special characters and wraps in Markup\n>>> escape(\"\")\nMarkup('<script>alert(document.cookie);</script>')\n\n>>> # wrap in Markup to mark text \"safe\" and prevent escaping\n>>> Markup(\"Hello\")\nMarkup('hello')\n\n>>> escape(Markup(\"Hello\"))\nMarkup('hello')\n\n>>> # Markup is a str subclass\n>>> # methods and operators escape their arguments\n>>> template = Markup(\"Hello {name}\")\n>>> template.format(name='\"World\"')\nMarkup('Hello "World"')\n```\n\n## Donate\n\nThe Pallets organization develops and supports MarkupSafe and other\npopular packages. In order to grow the community of contributors and\nusers, and allow the maintainers to devote more time to the projects,\n[please donate today][].\n\n[please donate today]: https://palletsprojects.com/donate\n\n## Contributing\n\nSee our [detailed contributing documentation][contrib] for many ways to\ncontribute, including reporting issues, requesting features, asking or answering\nquestions, and making PRs.\n\n[contrib]: https://palletsprojects.com/contributing/\n", + "description_content_type": "text/markdown", + "maintainer_email": "Pallets ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.txt" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Environment :: Web Environment", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Topic :: Internet :: WWW/HTTP :: Dynamic Content", + "Topic :: Text Processing :: Markup :: HTML", + "Typing :: Typed" + ], + "requires_python": ">=3.9", + "project_url": [ + "Donate, https://palletsprojects.com/donate", + "Documentation, https://markupsafe.palletsprojects.com/", + "Changes, https://markupsafe.palletsprojects.com/page/changes/", + "Source, https://github.com/pallets/markupsafe/", + "Chat, https://discord.gg/pallets" + ] + } + } + ], + "environment": { + "implementation_name": "cpython", + "implementation_version": "3.14.7", + "os_name": "posix", + "platform_machine": "arm64", + "platform_release": "24.6.0", + "platform_system": "Darwin", + "platform_version": "Darwin Kernel Version 24.6.0: Tue Jul 21 20:51:34 PDT 2026; root:xnu-11417.140.69.711.44~1/RELEASE_ARM64_VMAPPLE", + "python_full_version": "3.14.7", + "platform_python_implementation": "CPython", + "python_version": "3.14", + "sys_platform": "darwin" + } +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-cpu-rpc-restart-acceptance/probe-results.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-cpu-rpc-restart-acceptance/probe-results.json new file mode 100644 index 000000000..3d4528752 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-cpu-rpc-restart-acceptance/probe-results.json @@ -0,0 +1,304 @@ +{ + "recorded_at": "2026-09-26T06:33:14.211913+00:00", + "status": "passed", + "core_status": "passed", + "adapter_status": "not selected", + "environment": { + "release": "2.14.0", + "torch": "2.14.0", + "build": "cpu", + "adapter": "none", + "python": "3.14", + "interpreter": "/private/var/folders/nj/vtw8zd2j31d1gdrtntc5y4600000gn/T/pumas-torch-native-cpu-5kinhxp0/launcher-data/managed-python/python/39ab90495ce6de1a1c2c546c0f0802acaadfb3727d07f042d0a2d1e90c1b66b3/cpython-3.14.7-macos-aarch64-none/bin/python3.14", + "implementation": "cpython", + "platform": "macOS-15.7.9-arm64-64bit", + "machine": "arm64", + "artifacts": [ + { + "name": "torch", + "version": "2.14.0", + "url": "https://download-r2.pytorch.org/whl/cpu/torch-2.14.0-cp314-cp314-macosx_14_0_arm64.whl", + "sha256": "d0f78744000a7863cc3f1eafaf511d4b9944f079f08277de6fefe4b01f4d41b9" + }, + { + "name": "fastapi", + "version": "0.141.1", + "url": "https://files.pythonhosted.org/packages/cb/03/10388a42375ee7e4ac9b94eb2c5c569c8b5795e377e701c9ac3ad63de890/fastapi-0.141.1-py3-none-any.whl", + "sha256": "bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3" + }, + { + "name": "uvicorn", + "version": "0.54.0", + "url": "https://files.pythonhosted.org/packages/38/0c/b54a4fdd7f90a3af8b02ebc9ce6712c2c208b7926a2f7bad95c33ebbe943/uvicorn-0.54.0-py3-none-any.whl", + "sha256": "505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf" + }, + { + "name": "psutil", + "version": "7.2.2", + "url": "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", + "sha256": "1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979" + }, + { + "name": "pillow", + "version": "12.3.0", + "url": "https://files.pythonhosted.org/packages/c7/da/32c752228ae345f489e3a42499d817b6c3996da7e8a3bc7a04fc806b243b/pillow-12.3.0-cp314-cp314-macosx_11_0_arm64.whl", + "sha256": "e158cb00350dc278f3b91551101aa7d12415a66ebf2c91d8d5ac14e56ddd3ad0" + }, + { + "name": "safetensors", + "version": "0.8.0", + "url": "https://files.pythonhosted.org/packages/f5/b1/fa7c600e7dceae12e9606c7578cbc9ff1e1ed55844883ee5c92205e86226/safetensors-0.8.0-cp310-abi3-macosx_11_0_arm64.whl", + "sha256": "c80201d22cbf405b80647a60ada77bba06c8fba2da2743ba1e89cdcc39a81f25" + }, + { + "name": "annotated-doc", + "version": "0.0.5", + "url": "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", + "sha256": "117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101" + }, + { + "name": "click", + "version": "8.5.0", + "url": "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", + "sha256": "255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360" + }, + { + "name": "fsspec", + "version": "2026.9.0", + "url": "https://files.pythonhosted.org/packages/6c/c0/a98505f18594f1bce828bb159cec0fcf9860562f1a2c85913409fc8f3d9e/fsspec-2026.9.0-py3-none-any.whl", + "sha256": "8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f" + }, + { + "name": "h11", + "version": "0.16.0", + "url": "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", + "sha256": "63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86" + }, + { + "name": "networkx", + "version": "3.7", + "url": "https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl", + "sha256": "e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0" + }, + { + "name": "pydantic", + "version": "2.13.5", + "url": "https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl", + "sha256": "346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73" + }, + { + "name": "pydantic-core", + "version": "2.46.5", + "url": "https://files.pythonhosted.org/packages/ae/d5/d8a4eb6d6c7f66b91dd37c576d76e9e60fba900caf5372c17bcf949febc2/pydantic_core-2.46.5-cp314-cp314-macosx_11_0_arm64.whl", + "sha256": "1a353f84de772f423b5ffb11d7ae352fbbef0f446f3c0b0af0f8236d7233606e" + }, + { + "name": "annotated-types", + "version": "0.8.0", + "url": "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", + "sha256": "f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0" + }, + { + "name": "setuptools", + "version": "84.0.0", + "url": "https://files.pythonhosted.org/packages/95/9c/c510029fc6ef33a6275cd2c5d3cecd6613dfd6aa401d57c54f1c18852ccf/setuptools-84.0.0-py3-none-any.whl", + "sha256": "51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670" + }, + { + "name": "starlette", + "version": "1.7.0", + "url": "https://files.pythonhosted.org/packages/4e/d6/1ec1b290f9e0fb067899b61e1d37a30c923068bad260b216dbe37a7d2967/starlette-1.7.0-py3-none-any.whl", + "sha256": "67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e" + }, + { + "name": "anyio", + "version": "4.15.1", + "url": "https://files.pythonhosted.org/packages/12/b8/4bd346e22b28902df4d651910f5242c28d84e4a5c2435ca5c3f797ed7e2e/anyio-4.15.1-py3-none-any.whl", + "sha256": "6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101" + }, + { + "name": "idna", + "version": "3.20", + "url": "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl", + "sha256": "ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c" + }, + { + "name": "sympy", + "version": "1.14.0", + "url": "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", + "sha256": "e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5" + }, + { + "name": "mpmath", + "version": "1.3.0", + "url": "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", + "sha256": "a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c" + }, + { + "name": "typing-extensions", + "version": "4.16.0", + "url": "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", + "sha256": "481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8" + }, + { + "name": "typing-inspection", + "version": "0.4.4", + "url": "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", + "sha256": "65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147" + }, + { + "name": "filelock", + "version": "4.0.3", + "url": "https://files.pythonhosted.org/packages/7a/6d/db8b86e168fef0cf904737e275bccb683558088ef971e92d3b41ce980699/filelock-4.0.3-py3-none-any.whl", + "sha256": "30cd166e2aee2c7534ce2c33c6367c4cd051b8368e20e2c4eb0c34f699bacfab" + }, + { + "name": "jinja2", + "version": "3.1.6", + "url": "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", + "sha256": "85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67" + }, + { + "name": "markupsafe", + "version": "3.0.3", + "url": "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", + "sha256": "c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026" + } + ] + }, + "context": { + "python": "3.14.7 (main, Sep 1 2026, 14:05:28) [Clang 22.1.3 ]", + "executable": "/var/folders/nj/vtw8zd2j31d1gdrtntc5y4600000gn/T/pumas-torch-native-cpu-5kinhxp0/torch-versions/.torch-install-3SsQxF/runtime/venv/bin/python", + "platform": "macOS-15.7.9-arm64-64bit", + "hardware": { + "cuda": null, + "hip": null, + "devices": [] + }, + "hardware_fingerprint": "b2023780c1910304bd1917fda17a812e2a82871cdcf72031b9c668e1f5879054", + "driver_version": null, + "runtime_files_sha256": { + "control_api.py": "ee5160f121a749d8d11cd929abfb9d98a1a109235dac3690c9e2118f9cca54d0", + "device_manager.py": "9ab6d63eb943989bc19f1fed89098aca27b168536fa2529734d1ee4f37585379", + "diffusion.py": "c4dadfc949c17a460f8fc8a446b03139da0c574b45b3f561403fdf83e495b6d3", + "flux2.py": "39f864e1e15ffb2b697bb95418d474cb98a760feca9acd48a74b5cf05642fea2", + "image_api.py": "bb39ac05aee7ea4d4357360accfa27ee261f58d1cd9cc35af28470012673a7ec", + "loaders/__init__.py": "80cec9242f95b73881b038b890a5d9465a14be86a631b2a0e1bf9efacac543fe", + "loaders/dllm_loader.py": "2c5656bce01a6d133925d02ca72606f8ae951d66186ac07d3fcb7fd5580b1a13", + "loaders/safetensors_loader.py": "661a000b791396067d253a27a26cb5905ae40ce8d50817ba54bc1afce803396f", + "loaders/sherry_loader.py": "360ac3f66c4438e3ffe3d9dc99ef2a27ae69efdd26f8d3564f638ae7802e5b3f", + "model_manager.py": "cfc049050f9003f87d622fe57da5c4ab4efb5105523fcbab926d8770d82be3f8", + "nunchaku_compat.py": "27b42f9cae80e474c0b2162e6bf572f822d525134bf2fc3bddd551c031bb5d70", + "openai_api.py": "a3c712e6307fe3b60d1b7acdcbeb9413b011eb370ad656f862ef9399f3342f8c", + "probe_runtime.py": "9b9e1d81087aefffdb383038724b471daeb0456814e5f2fa17e0b4da46255e25", + "resolve_runtime.py": "e0476a77398ac18059160ca55c8bb74dfc32bbcf9938bab7a5ab329c70b027f1", + "serve.py": "88bf72ea3eac013dc7678bebe0e3b3053c141e8ec1222a210bd18b2a47601af4", + "validation.py": "f53cca26ddbddbc3c924ff07d32aaf9ced6061a7f1628379b4c0db2c9da7feb1" + }, + "interpreter_sha256": "e925fab5e8f595817ff36ff28e214b91520c040d5b7d47249b0199bc5f68015e", + "installed_distributions": { + "torch": "2.14.0", + "fastapi": "0.141.1", + "uvicorn": "0.54.0", + "psutil": "7.2.2", + "pillow": "12.3.0", + "safetensors": "0.8.0", + "annotated-doc": "0.0.5", + "click": "8.5.0", + "fsspec": "2026.9.0", + "h11": "0.16.0", + "networkx": "3.7", + "pydantic": "2.13.5", + "pydantic-core": "2.46.5", + "annotated-types": "0.8.0", + "setuptools": "84.0.0", + "starlette": "1.7.0", + "anyio": "4.15.1", + "idna": "3.20", + "sympy": "1.14.0", + "mpmath": "1.3.0", + "typing-extensions": "4.16.0", + "typing-inspection": "0.4.4", + "filelock": "4.0.3", + "jinja2": "3.1.6", + "markupsafe": "3.0.3" + }, + "all_installed_distributions": { + "annotated-doc": "0.0.5", + "annotated-types": "0.8.0", + "anyio": "4.15.1", + "click": "8.5.0", + "fastapi": "0.141.1", + "filelock": "4.0.3", + "fsspec": "2026.9.0", + "h11": "0.16.0", + "idna": "3.20", + "jinja2": "3.1.6", + "markupsafe": "3.0.3", + "mpmath": "1.3.0", + "networkx": "3.7", + "pillow": "12.3.0", + "pip": "26.2.1", + "psutil": "7.2.2", + "pydantic": "2.13.5", + "pydantic-core": "2.46.5", + "safetensors": "0.8.0", + "setuptools": "84.0.0", + "starlette": "1.7.0", + "sympy": "1.14.0", + "torch": "2.14.0", + "typing-extensions": "4.16.0", + "typing-inspection": "0.4.4", + "uvicorn": "0.54.0" + }, + "distributions_sha256": "c66d66521194cb6178204da57cb438b4f99243e6068ddd4ef10686ac9cc1bd1d", + "resolution_sha256": "c3bf32619cd50779762389c5c8bc56f4835e4fe1a96bc6ad23ed3dbd72f2a2f4", + "sidecar_sha256": "88bf72ea3eac013dc7678bebe0e3b3053c141e8ec1222a210bd18b2a47601af4" + }, + "capabilities": { + "torch_import": { + "status": "passed", + "version": "2.14.0" + }, + "cpu_tensor": { + "status": "passed" + }, + "cuda_tensor": { + "status": "unavailable", + "scope": "CUDA tensor operation", + "reason": "CUDA is not available" + }, + "sidecar_app": { + "status": "passed", + "health": { + "status": "ok", + "protocol": 3, + "capabilities": [ + "image_generation" + ] + }, + "scope": "in-process app construction and health endpoint" + }, + "flux2_klein": { + "status": "not selected", + "scope": "optional adapter" + }, + "nunchaku_z_image": { + "status": "not selected", + "scope": "optional adapter" + }, + "image_device": { + "status": "unavailable", + "scope": "adapter device requirement", + "reason": "No NVIDIA sm_120 CUDA device detected" + }, + "sidecar_startup": { + "status": "not tested", + "scope": "socket startup requires an explicit trial" + }, + "image_generation": { + "status": "not tested", + "scope": "no model loaded or inference performed" + } + } +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-cpu-rpc-restart-acceptance/resolution.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-cpu-rpc-restart-acceptance/resolution.json new file mode 100644 index 000000000..d363e73a3 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-cpu-rpc-restart-acceptance/resolution.json @@ -0,0 +1,163 @@ +{ + "release": "2.14.0", + "torch": "2.14.0", + "build": "cpu", + "adapter": "none", + "python": "3.14", + "interpreter": "/private/var/folders/nj/vtw8zd2j31d1gdrtntc5y4600000gn/T/pumas-torch-native-cpu-5kinhxp0/launcher-data/managed-python/python/39ab90495ce6de1a1c2c546c0f0802acaadfb3727d07f042d0a2d1e90c1b66b3/cpython-3.14.7-macos-aarch64-none/bin/python3.14", + "implementation": "cpython", + "platform": "macOS-15.7.9-arm64-64bit", + "machine": "arm64", + "artifacts": [ + { + "name": "torch", + "version": "2.14.0", + "url": "https://download-r2.pytorch.org/whl/cpu/torch-2.14.0-cp314-cp314-macosx_14_0_arm64.whl", + "sha256": "d0f78744000a7863cc3f1eafaf511d4b9944f079f08277de6fefe4b01f4d41b9" + }, + { + "name": "fastapi", + "version": "0.141.1", + "url": "https://files.pythonhosted.org/packages/cb/03/10388a42375ee7e4ac9b94eb2c5c569c8b5795e377e701c9ac3ad63de890/fastapi-0.141.1-py3-none-any.whl", + "sha256": "bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3" + }, + { + "name": "uvicorn", + "version": "0.54.0", + "url": "https://files.pythonhosted.org/packages/38/0c/b54a4fdd7f90a3af8b02ebc9ce6712c2c208b7926a2f7bad95c33ebbe943/uvicorn-0.54.0-py3-none-any.whl", + "sha256": "505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf" + }, + { + "name": "psutil", + "version": "7.2.2", + "url": "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", + "sha256": "1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979" + }, + { + "name": "pillow", + "version": "12.3.0", + "url": "https://files.pythonhosted.org/packages/c7/da/32c752228ae345f489e3a42499d817b6c3996da7e8a3bc7a04fc806b243b/pillow-12.3.0-cp314-cp314-macosx_11_0_arm64.whl", + "sha256": "e158cb00350dc278f3b91551101aa7d12415a66ebf2c91d8d5ac14e56ddd3ad0" + }, + { + "name": "safetensors", + "version": "0.8.0", + "url": "https://files.pythonhosted.org/packages/f5/b1/fa7c600e7dceae12e9606c7578cbc9ff1e1ed55844883ee5c92205e86226/safetensors-0.8.0-cp310-abi3-macosx_11_0_arm64.whl", + "sha256": "c80201d22cbf405b80647a60ada77bba06c8fba2da2743ba1e89cdcc39a81f25" + }, + { + "name": "annotated-doc", + "version": "0.0.5", + "url": "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", + "sha256": "117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101" + }, + { + "name": "click", + "version": "8.5.0", + "url": "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", + "sha256": "255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360" + }, + { + "name": "fsspec", + "version": "2026.9.0", + "url": "https://files.pythonhosted.org/packages/6c/c0/a98505f18594f1bce828bb159cec0fcf9860562f1a2c85913409fc8f3d9e/fsspec-2026.9.0-py3-none-any.whl", + "sha256": "8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f" + }, + { + "name": "h11", + "version": "0.16.0", + "url": "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", + "sha256": "63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86" + }, + { + "name": "networkx", + "version": "3.7", + "url": "https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl", + "sha256": "e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0" + }, + { + "name": "pydantic", + "version": "2.13.5", + "url": "https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl", + "sha256": "346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73" + }, + { + "name": "pydantic-core", + "version": "2.46.5", + "url": "https://files.pythonhosted.org/packages/ae/d5/d8a4eb6d6c7f66b91dd37c576d76e9e60fba900caf5372c17bcf949febc2/pydantic_core-2.46.5-cp314-cp314-macosx_11_0_arm64.whl", + "sha256": "1a353f84de772f423b5ffb11d7ae352fbbef0f446f3c0b0af0f8236d7233606e" + }, + { + "name": "annotated-types", + "version": "0.8.0", + "url": "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", + "sha256": "f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0" + }, + { + "name": "setuptools", + "version": "84.0.0", + "url": "https://files.pythonhosted.org/packages/95/9c/c510029fc6ef33a6275cd2c5d3cecd6613dfd6aa401d57c54f1c18852ccf/setuptools-84.0.0-py3-none-any.whl", + "sha256": "51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670" + }, + { + "name": "starlette", + "version": "1.7.0", + "url": "https://files.pythonhosted.org/packages/4e/d6/1ec1b290f9e0fb067899b61e1d37a30c923068bad260b216dbe37a7d2967/starlette-1.7.0-py3-none-any.whl", + "sha256": "67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e" + }, + { + "name": "anyio", + "version": "4.15.1", + "url": "https://files.pythonhosted.org/packages/12/b8/4bd346e22b28902df4d651910f5242c28d84e4a5c2435ca5c3f797ed7e2e/anyio-4.15.1-py3-none-any.whl", + "sha256": "6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101" + }, + { + "name": "idna", + "version": "3.20", + "url": "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl", + "sha256": "ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c" + }, + { + "name": "sympy", + "version": "1.14.0", + "url": "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", + "sha256": "e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5" + }, + { + "name": "mpmath", + "version": "1.3.0", + "url": "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", + "sha256": "a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c" + }, + { + "name": "typing-extensions", + "version": "4.16.0", + "url": "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", + "sha256": "481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8" + }, + { + "name": "typing-inspection", + "version": "0.4.4", + "url": "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", + "sha256": "65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147" + }, + { + "name": "filelock", + "version": "4.0.3", + "url": "https://files.pythonhosted.org/packages/7a/6d/db8b86e168fef0cf904737e275bccb683558088ef971e92d3b41ce980699/filelock-4.0.3-py3-none-any.whl", + "sha256": "30cd166e2aee2c7534ce2c33c6367c4cd051b8368e20e2c4eb0c34f699bacfab" + }, + { + "name": "jinja2", + "version": "3.1.6", + "url": "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", + "sha256": "85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67" + }, + { + "name": "markupsafe", + "version": "3.0.3", + "url": "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", + "sha256": "c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026" + } + ] +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-cpu-rpc-restart-acceptance/restart-backend-session.txt b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-cpu-rpc-restart-acceptance/restart-backend-session.txt new file mode 100644 index 000000000..0a948dfa0 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-cpu-rpc-restart-acceptance/restart-backend-session.txt @@ -0,0 +1,21 @@ +2026-09-26T06:33:18.054600Z  INFO Starting Pumas RPC Server +2026-09-26T06:33:18.054698Z  INFO Launcher root configured +2026-09-26T06:33:18.067601Z  INFO Rebuilding model index +2026-09-26T06:33:18.067789Z  INFO Rebuilt index with 0 models +2026-09-26T06:33:18.086614Z  INFO IPC server listening on 127.0.0.1:49343 +2026-09-26T06:33:18.087000Z  INFO IPC server started on port 49343 +2026-09-26T06:33:18.088858Z  INFO Started watching model library at "/private/var/folders/nj/vtw8zd2j31d1gdrtntc5y4600000gn/T/pumas-torch-native-cpu-5kinhxp0/shared-resources/models" +2026-09-26T06:33:18.091680Z  INFO Validation complete: 0 valid, 0 removed, 0 orphaned +2026-09-26T06:33:18.091750Z  INFO ollama version manager initialized successfully +2026-09-26T06:33:18.095612Z  INFO Validation complete: 1 valid, 0 removed, 0 orphaned +2026-09-26T06:33:18.097026Z  INFO torch version manager initialized successfully +2026-09-26T06:33:18.097672Z  INFO Validation complete: 0 valid, 0 removed, 0 orphaned +2026-09-26T06:33:18.097694Z  INFO llama-cpp version manager initialized successfully +2026-09-26T06:33:18.097708Z  INFO Initialized 3 version manager(s) +2026-09-26T06:33:18.097821Z  INFO Size calculator initialized +2026-09-26T06:33:18.097926Z  INFO Plugin loader initialized (0 plugins) +2026-09-26T06:33:18.099211Z  INFO Server listening on 127.0.0.1:49344 with max 64 in-flight requests and 33554432 byte request bodies +RPC_PORT=49344 +2026-09-26T06:33:18.099279Z  INFO RPC server running on 127.0.0.1:49344 +2026-09-26T06:33:21.177031Z  INFO Shutdown signal received, exiting +2026-09-26T06:33:21.178138Z  WARN File watcher channel disconnected diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-cpu-rpc-restart-acceptance/runtime.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-cpu-rpc-restart-acceptance/runtime.json new file mode 100644 index 000000000..e32ca88ba --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-cpu-rpc-restart-acceptance/runtime.json @@ -0,0 +1,181 @@ +{ + "adapter": "none", + "artifacts": [ + { + "name": "torch", + "sha256": "d0f78744000a7863cc3f1eafaf511d4b9944f079f08277de6fefe4b01f4d41b9", + "url": "https://download-r2.pytorch.org/whl/cpu/torch-2.14.0-cp314-cp314-macosx_14_0_arm64.whl", + "version": "2.14.0" + }, + { + "name": "fastapi", + "sha256": "bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3", + "url": "https://files.pythonhosted.org/packages/cb/03/10388a42375ee7e4ac9b94eb2c5c569c8b5795e377e701c9ac3ad63de890/fastapi-0.141.1-py3-none-any.whl", + "version": "0.141.1" + }, + { + "name": "uvicorn", + "sha256": "505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf", + "url": "https://files.pythonhosted.org/packages/38/0c/b54a4fdd7f90a3af8b02ebc9ce6712c2c208b7926a2f7bad95c33ebbe943/uvicorn-0.54.0-py3-none-any.whl", + "version": "0.54.0" + }, + { + "name": "psutil", + "sha256": "1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979", + "url": "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", + "version": "7.2.2" + }, + { + "name": "pillow", + "sha256": "e158cb00350dc278f3b91551101aa7d12415a66ebf2c91d8d5ac14e56ddd3ad0", + "url": "https://files.pythonhosted.org/packages/c7/da/32c752228ae345f489e3a42499d817b6c3996da7e8a3bc7a04fc806b243b/pillow-12.3.0-cp314-cp314-macosx_11_0_arm64.whl", + "version": "12.3.0" + }, + { + "name": "safetensors", + "sha256": "c80201d22cbf405b80647a60ada77bba06c8fba2da2743ba1e89cdcc39a81f25", + "url": "https://files.pythonhosted.org/packages/f5/b1/fa7c600e7dceae12e9606c7578cbc9ff1e1ed55844883ee5c92205e86226/safetensors-0.8.0-cp310-abi3-macosx_11_0_arm64.whl", + "version": "0.8.0" + }, + { + "name": "annotated-doc", + "sha256": "117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101", + "url": "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", + "version": "0.0.5" + }, + { + "name": "click", + "sha256": "255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360", + "url": "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", + "version": "8.5.0" + }, + { + "name": "fsspec", + "sha256": "8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f", + "url": "https://files.pythonhosted.org/packages/6c/c0/a98505f18594f1bce828bb159cec0fcf9860562f1a2c85913409fc8f3d9e/fsspec-2026.9.0-py3-none-any.whl", + "version": "2026.9.0" + }, + { + "name": "h11", + "sha256": "63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", + "url": "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", + "version": "0.16.0" + }, + { + "name": "networkx", + "sha256": "e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0", + "url": "https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl", + "version": "3.7" + }, + { + "name": "pydantic", + "sha256": "346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73", + "url": "https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl", + "version": "2.13.5" + }, + { + "name": "pydantic-core", + "sha256": "1a353f84de772f423b5ffb11d7ae352fbbef0f446f3c0b0af0f8236d7233606e", + "url": "https://files.pythonhosted.org/packages/ae/d5/d8a4eb6d6c7f66b91dd37c576d76e9e60fba900caf5372c17bcf949febc2/pydantic_core-2.46.5-cp314-cp314-macosx_11_0_arm64.whl", + "version": "2.46.5" + }, + { + "name": "annotated-types", + "sha256": "f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0", + "url": "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", + "version": "0.8.0" + }, + { + "name": "setuptools", + "sha256": "51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670", + "url": "https://files.pythonhosted.org/packages/95/9c/c510029fc6ef33a6275cd2c5d3cecd6613dfd6aa401d57c54f1c18852ccf/setuptools-84.0.0-py3-none-any.whl", + "version": "84.0.0" + }, + { + "name": "starlette", + "sha256": "67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e", + "url": "https://files.pythonhosted.org/packages/4e/d6/1ec1b290f9e0fb067899b61e1d37a30c923068bad260b216dbe37a7d2967/starlette-1.7.0-py3-none-any.whl", + "version": "1.7.0" + }, + { + "name": "anyio", + "sha256": "6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101", + "url": "https://files.pythonhosted.org/packages/12/b8/4bd346e22b28902df4d651910f5242c28d84e4a5c2435ca5c3f797ed7e2e/anyio-4.15.1-py3-none-any.whl", + "version": "4.15.1" + }, + { + "name": "idna", + "sha256": "ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c", + "url": "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl", + "version": "3.20" + }, + { + "name": "sympy", + "sha256": "e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", + "url": "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", + "version": "1.14.0" + }, + { + "name": "mpmath", + "sha256": "a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", + "url": "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", + "version": "1.3.0" + }, + { + "name": "typing-extensions", + "sha256": "481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", + "url": "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", + "version": "4.16.0" + }, + { + "name": "typing-inspection", + "sha256": "65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147", + "url": "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", + "version": "0.4.4" + }, + { + "name": "filelock", + "sha256": "30cd166e2aee2c7534ce2c33c6367c4cd051b8368e20e2c4eb0c34f699bacfab", + "url": "https://files.pythonhosted.org/packages/7a/6d/db8b86e168fef0cf904737e275bccb683558088ef971e92d3b41ce980699/filelock-4.0.3-py3-none-any.whl", + "version": "4.0.3" + }, + { + "name": "jinja2", + "sha256": "85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", + "url": "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", + "version": "3.1.6" + }, + { + "name": "markupsafe", + "sha256": "c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", + "url": "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", + "version": "3.0.3" + } + ], + "build": "cpu", + "capabilities": [ + "image_generation" + ], + "managed_python": { + "distribution": { + "catalogKey": "cpython-3.14.7-macos-aarch64-none", + "implementation": "CPython", + "sourceUrl": "https://releases.astral.sh/github/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-aarch64-apple-darwin-install_only_stripped.tar.gz", + "targetTriple": "aarch64-apple-darwin", + "version": "3.14.7" + }, + "executable": { + "path": "/private/var/folders/nj/vtw8zd2j31d1gdrtntc5y4600000gn/T/pumas-torch-native-cpu-5kinhxp0/launcher-data/managed-python/python/39ab90495ce6de1a1c2c546c0f0802acaadfb3727d07f042d0a2d1e90c1b66b3/cpython-3.14.7-macos-aarch64-none/bin/python3.14", + "sha256": "e925fab5e8f595817ff36ff28e214b91520c040d5b7d47249b0199bc5f68015e" + }, + "provider": { + "archiveSha256": "cf40e0c6a202190ccd9e0406dcfdd5b2d6668a9a5c779b17948963df32aafe5b", + "name": "uv", + "version": "0.12.18" + } + }, + "protocol": 3, + "python": "python3.14", + "qualification": "not verified by Pumas", + "recipe_id": "upstream-preview-v2.14.0-cpu-python3.14-none" +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-current-source-cpu-rpc-restart-acceptance/README.md b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-current-source-cpu-rpc-restart-acceptance/README.md new file mode 100644 index 000000000..061653703 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-current-source-cpu-rpc-restart-acceptance/README.md @@ -0,0 +1,32 @@ +# Torch v2.14.0 current-source macOS CPU/Core RPC acceptance + +The native RPC E2E job in [workflow run 36229508586](https://github.com/MrScripty/Pumas-Library/actions/runs/36229508586) +passed on code commit `21041697` for macOS arm64 (macos-15). It discovered `v2.14.0`, +resolved and installed 25 hashed official CPU/Core artifacts, then restarted a +second backend against the same launcher root. The persisted active release and +managed Python interpreter were verified; a fresh CPU tensor operation returned +`14` with Torch `2.14.0` on device `cpu`. + +The run installed Pumas-managed CPython 3.14.7 for `aarch64-apple-darwin` using the +pinned uv 0.12.18 provider and the target's official Python Build Standalone +install-only archive. The resolver probe passed, protocol 3 sidecar trial/stop +passed, shutdown was graceful, and the acceptance harness reported +`cleanup_safe: true`. This run verifies the metadata-lock follow-up on the +current runtime source. It is native RPC acceptance, not Electron UI-driven +installation or image generation through Tuldok. + +## Retained evidence + +- [Acceptance result](acceptance.json) records release discovery, both-session + restart, managed-interpreter identity and hash, CPU operation, probes, + sidecar lifecycle, and cleanup. +- [Initial backend log](initial-backend-session.txt) and + [restart backend log](restart-backend-session.txt) record process lifecycles. +- [Installed runtime](runtime.json), [resolution](resolution.json), + [pip resolution](pip-resolution.json), and [runtime probes](probe-results.json) + retain the exact wheel and dependency artifacts, installed profile, and + runtime checks. +- [Python archive manifest](managed-python-licenses/full-archive-manifest.json) + records full-archive license hashes. The full collection's + [README](../managed-python-license-collection/README.md) links the target's + legal files and authoritative manifest. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-current-source-cpu-rpc-restart-acceptance/acceptance.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-current-source-cpu-rpc-restart-acceptance/acceptance.json new file mode 100644 index 000000000..a7f96eb7c --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-current-source-cpu-rpc-restart-acceptance/acceptance.json @@ -0,0 +1,65 @@ +{ + "architecture": "arm64", + "artifact_count": 25, + "build": "cpu", + "cleanup_safe": true, + "cpython_version": "3.14.7", + "distribution_catalog_key": "cpython-3.14.7-macos-aarch64-none", + "distribution_implementation": "CPython", + "distribution_source_url": "https://releases.astral.sh/github/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-aarch64-apple-darwin-install_only_stripped.tar.gz", + "executable_path": "/private/var/folders/nj/vtw8zd2j31d1gdrtntc5y4600000gn/T/pumas-torch-native-cpu-phrd_sah/launcher-data/managed-python/python/39ab90495ce6de1a1c2c546c0f0802acaadfb3727d07f042d0a2d1e90c1b66b3/cpython-3.14.7-macos-aarch64-none/bin/python3.14", + "executable_sha256": "e925fab5e8f595817ff36ff28e214b91520c040d5b7d47249b0199bc5f68015e", + "platform": "darwin", + "probe": "passed", + "provider": "uv", + "provider_archive_sha256": "cf40e0c6a202190ccd9e0406dcfdd5b2d6668a9a5c779b17948963df32aafe5b", + "provider_version": "0.12.18", + "python": "python3.14", + "release": "v2.14.0", + "restart": { + "active_version": "v2.14.0", + "cpu_operation": { + "device": "cpu", + "result": 14, + "version": "2.14.0" + }, + "interpreter": "persisted", + "managed_python": { + "cpython_version": "3.14.7", + "distribution_catalog_key": "cpython-3.14.7-macos-aarch64-none", + "distribution_implementation": "CPython", + "distribution_source_url": "https://releases.astral.sh/github/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-aarch64-apple-darwin-install_only_stripped.tar.gz", + "executable_path": "/private/var/folders/nj/vtw8zd2j31d1gdrtntc5y4600000gn/T/pumas-torch-native-cpu-phrd_sah/launcher-data/managed-python/python/39ab90495ce6de1a1c2c546c0f0802acaadfb3727d07f042d0a2d1e90c1b66b3/cpython-3.14.7-macos-aarch64-none/bin/python3.14", + "executable_sha256": "e925fab5e8f595817ff36ff28e214b91520c040d5b7d47249b0199bc5f68015e", + "provider": "uv", + "provider_archive_sha256": "cf40e0c6a202190ccd9e0406dcfdd5b2d6668a9a5c779b17948963df32aafe5b", + "provider_version": "0.12.18", + "target": "aarch64-apple-darwin" + }, + "probe": "passed", + "profile_id": "torch-managed-python-acceptance", + "same_launcher_root": true, + "shutdown": "graceful", + "sidecar_generation": "1", + "sidecar_protocol": 3, + "stop_result": true, + "trial": "passed" + }, + "sidecar_generation": "1", + "sidecar_protocol": 3, + "stop_result": true, + "stopped": true, + "success": true, + "target": "aarch64-apple-darwin", + "trial": "passed", + "version_preflight": { + "attempts": [ + { + "number": 1, + "status": "requested_tag_found" + } + ], + "elapsed_seconds": 1.216, + "status": "passed" + } +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-current-source-cpu-rpc-restart-acceptance/initial-backend-session.txt b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-current-source-cpu-rpc-restart-acceptance/initial-backend-session.txt new file mode 100644 index 000000000..ecde74313 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-current-source-cpu-rpc-restart-acceptance/initial-backend-session.txt @@ -0,0 +1,27 @@ +2026-09-26T08:24:29.437032Z  INFO Starting Pumas RPC Server +2026-09-26T08:24:29.438358Z  INFO Launcher root configured +2026-09-26T08:24:29.534578Z  INFO Created FTS5 table: model_search +2026-09-26T08:24:29.535950Z  INFO Populated FTS5 table from models +2026-09-26T08:24:29.538037Z  INFO Rebuilding model index +2026-09-26T08:24:29.539056Z  INFO Rebuilt index with 0 models +2026-09-26T08:24:29.706266Z  INFO IPC server listening on 127.0.0.1:49198 +2026-09-26T08:24:29.706820Z  INFO IPC server started on port 49198 +2026-09-26T08:24:29.711587Z  INFO Started watching model library at "/private/var/folders/nj/vtw8zd2j31d1gdrtntc5y4600000gn/T/pumas-torch-native-cpu-phrd_sah/shared-resources/models" +2026-09-26T08:24:29.723886Z  INFO Validation complete: 0 valid, 0 removed, 0 orphaned +2026-09-26T08:24:29.724379Z  INFO ollama version manager initialized successfully +2026-09-26T08:24:29.726577Z  INFO Validation complete: 0 valid, 0 removed, 0 orphaned +2026-09-26T08:24:29.726730Z  INFO torch version manager initialized successfully +2026-09-26T08:24:29.727731Z  INFO Validation complete: 0 valid, 0 removed, 0 orphaned +2026-09-26T08:24:29.727766Z  INFO llama-cpp version manager initialized successfully +2026-09-26T08:24:29.727780Z  INFO Initialized 3 version manager(s) +2026-09-26T08:24:29.727919Z  INFO Size calculator initialized +2026-09-26T08:24:29.728114Z  INFO Plugin loader initialized (0 plugins) +2026-09-26T08:24:29.732087Z  INFO Server listening on 127.0.0.1:49199 with max 64 in-flight requests and 33554432 byte request bodies +RPC_PORT=49199 +2026-09-26T08:24:29.732211Z  INFO RPC server running on 127.0.0.1:49199 +2026-09-26T08:24:30.945203Z  INFO Fetched 69 releases from GitHub for pytorch/pytorch +2026-09-26T08:26:03.642260Z  INFO Finalizing installation for v2.14.0 +2026-09-26T08:26:03.649844Z  INFO Installation of v2.14.0 finalized +2026-09-26T08:26:06.458985Z  INFO Set active version: v2.14.0 +2026-09-26T08:26:08.342578Z  INFO Shutdown signal received, exiting +2026-09-26T08:26:08.346692Z  WARN File watcher channel disconnected diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-current-source-cpu-rpc-restart-acceptance/managed-python-licenses/full-archive-manifest.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-current-source-cpu-rpc-restart-acceptance/managed-python-licenses/full-archive-manifest.json new file mode 100644 index 000000000..d9a95f622 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-current-source-cpu-rpc-restart-acceptance/managed-python-licenses/full-archive-manifest.json @@ -0,0 +1,114 @@ +{ + "archive_name": "cpython-3.14.7+20260901-aarch64-apple-darwin-pgo+lto-full.tar.zst", + "archive_sha256": "185fa676e14b648bd736ce7f20f9b11e201131b3216ec5a39d4ecd8ab8a71112", + "archive_size": 60724957, + "archive_url": "https://github.com/astral-sh/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "asset_id": 539917285, + "files": [ + { + "declared": false, + "path": "licenses/LICENSE.bdb.txt", + "sha256": "3bdff06e69991c94664f2ef5c5f8096f60b7dbec071756ea6cc26b445e06ec5b" + }, + { + "declared": false, + "path": "licenses/LICENSE.bzip2.txt", + "sha256": "1f38bbc7caacafd65169276d759c0d88c991b753b643ce35d0e45ea1971dd441" + }, + { + "declared": true, + "path": "licenses/LICENSE.cpython.txt", + "sha256": "86e61415828a8b5b06ec8d024e6f086ce155a8b85fd0c419c0ba4dc004e74fdd" + }, + { + "declared": false, + "path": "licenses/LICENSE.expat.txt", + "sha256": "122f2c27000472a201d337b9b31f7eb2b52d091b02857061a8880371612d9534" + }, + { + "declared": false, + "path": "licenses/LICENSE.libX11.txt", + "sha256": "2daec087a88e7c9b8082557cdeebad5bbb8155a4137472f0b22e269cd99d0c1e" + }, + { + "declared": false, + "path": "licenses/LICENSE.libXau.txt", + "sha256": "56abe29bb1d9806a9e04fa9f80fed2c0f18027594df3f098148d814aef6bddfa" + }, + { + "declared": false, + "path": "licenses/LICENSE.libedit.txt", + "sha256": "29cea33c32bbc9785142386377915612a2fa786482c46843383384aded2e09b1" + }, + { + "declared": false, + "path": "licenses/LICENSE.libffi.txt", + "sha256": "deaf3a42effb551a5b140fa9afefed183a27f1341c6d1bf430d106a5e6931fc0" + }, + { + "declared": false, + "path": "licenses/LICENSE.liblzma.txt", + "sha256": "9a4062de0a2c388a98cf35a35d348b62fa97c838a71c3c28ee1a2d7d0a565b02" + }, + { + "declared": false, + "path": "licenses/LICENSE.libuuid.txt", + "sha256": "122ee1f7e258f2c3c0e538a75c037684f420454bf3850ddc74ce750bbf5fe86b" + }, + { + "declared": false, + "path": "licenses/LICENSE.libxcb.txt", + "sha256": "c5ffbfeaa501071ceeb97b7de2c0d703fdaa35de01c0fb6cbac1c28453a3e9fd" + }, + { + "declared": false, + "path": "licenses/LICENSE.mpdecimal.txt", + "sha256": "669512af7219f58be03a398766d7c9da11a3b3df9d3f05cb74c5ceca25c8da3b" + }, + { + "declared": false, + "path": "licenses/LICENSE.ncurses.txt", + "sha256": "87a4c4442337b8968ef956031c406b74f9cb7149b7ba87311bdaba534816201c" + }, + { + "declared": false, + "path": "licenses/LICENSE.openssl-1.1.txt", + "sha256": "9c04cce50c4989d5601dd8b07f6ab922c40388b66ac736c9007cb1ed9d9dd560" + }, + { + "declared": false, + "path": "licenses/LICENSE.openssl-3.txt", + "sha256": "7d5450cb2d142651b8afa315b5f238efc805dad827d91ba367d8516bc9d49e7a" + }, + { + "declared": false, + "path": "licenses/LICENSE.sqlite.txt", + "sha256": "38bef3d28b24f145ea293bd3b6eb4b20396982abc8303128fb493986ea5bc719" + }, + { + "declared": false, + "path": "licenses/LICENSE.tcl.txt", + "sha256": "c0a69a2bfd757361ec7e6143973b103c90409316b49e9c88db26ad6388e79f16" + }, + { + "declared": false, + "path": "licenses/LICENSE.tix.txt", + "sha256": "3ac5cdd0bef6c43ce34c6a7ced452081d9e5a0bf94082b9f9147d23ec9e214f5" + }, + { + "declared": false, + "path": "licenses/LICENSE.zlib.txt", + "sha256": "818922b2620f12801a12bf78e399644a30990e66824abd8ca8ec24d451d6f92c" + } + ], + "mapping_authority": "https://github.com/astral-sh/python-build-standalone/blob/20260901/src/release.rs", + "python_json": { + "path": "PYTHON.json", + "sha256": "469cdc82612064f19338a524bc8eedbce8f6f411e0080c4dc1a5ccf30c538a71", + "size": 136728 + }, + "release_id": 380696527, + "scope": "selected_full_archive_license_directory_and_declared_references", + "source_url": "https://releases.astral.sh/github/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-aarch64-apple-darwin-install_only_stripped.tar.gz", + "target": "aarch64-apple-darwin" +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-current-source-cpu-rpc-restart-acceptance/pip-resolution.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-current-source-cpu-rpc-restart-acceptance/pip-resolution.json new file mode 100644 index 000000000..d6678bfa9 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-current-source-cpu-rpc-restart-acceptance/pip-resolution.json @@ -0,0 +1,2082 @@ +{ + "version": "1", + "pip_version": "26.2.1", + "install": [ + { + "download_info": { + "url": "https://download-r2.pytorch.org/whl/cpu/torch-2.14.0-cp314-cp314-macosx_14_0_arm64.whl", + "archive_info": { + "hashes": { + "sha256": "d0f78744000a7863cc3f1eafaf511d4b9944f079f08277de6fefe4b01f4d41b9" + }, + "hash": "sha256=d0f78744000a7863cc3f1eafaf511d4b9944f079f08277de6fefe4b01f4d41b9" + } + }, + "is_direct": true, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.4", + "name": "torch", + "version": "2.14.0", + "summary": "Tensors and Dynamic neural networks in Python with strong GPU acceleration", + "description": "\n \n \n \"PyTorch\n\n\n--------------------------------------------------------------------------------\n\nPyTorch is a Python package that provides two high-level features:\n- Tensor computation (like NumPy) with strong GPU acceleration\n- Deep neural networks built on a tape-based autograd system\n\nYou can reuse your favorite Python packages such as NumPy, SciPy, and Cython to extend PyTorch when needed.\n\nOur trunk health (Continuous Integration signals) can be found at [hud.pytorch.org](https://hud.pytorch.org/ci/pytorch/pytorch/main).\n\n\n\n- [More About PyTorch](#more-about-pytorch)\n - [A GPU-Ready Tensor Library](#a-gpu-ready-tensor-library)\n - [Dynamic Neural Networks: Tape-Based Autograd](#dynamic-neural-networks-tape-based-autograd)\n - [Python First](#python-first)\n - [Imperative Experiences](#imperative-experiences)\n - [Fast and Lean](#fast-and-lean)\n - [Extensions Without Pain](#extensions-without-pain)\n- [Installation](#installation)\n - [Binaries](#binaries)\n - [NVIDIA Jetson Platforms](#nvidia-jetson-platforms)\n - [From Source](#from-source)\n - [Prerequisites](#prerequisites)\n - [NVIDIA CUDA Support](#nvidia-cuda-support)\n - [AMD ROCm Support](#amd-rocm-support)\n - [Intel GPU Support](#intel-gpu-support)\n - [Get the PyTorch Source](#get-the-pytorch-source)\n - [Install Dependencies](#install-dependencies)\n - [Install PyTorch](#install-pytorch)\n - [Adjust Build Options (Optional)](#adjust-build-options-optional)\n - [Docker Image](#docker-image)\n - [Using pre-built images](#using-pre-built-images)\n - [Building the image yourself](#building-the-image-yourself)\n - [Building the Documentation](#building-the-documentation)\n - [Troubleshooting CI Errors](#troubleshooting-ci-errors)\n - [Building a PDF](#building-a-pdf)\n - [Previous Versions](#previous-versions)\n- [Getting Started](#getting-started)\n- [Resources](#resources)\n- [Communication](#communication)\n- [Releases and Contributing](#releases-and-contributing)\n- [The Team](#the-team)\n- [License](#license)\n\n\n\n## More About PyTorch\n\n[Learn the basics of PyTorch](https://pytorch.org/tutorials/beginner/basics/intro.html)\n\nAt a granular level, PyTorch is a library that consists of the following components:\n\n| Component | Description |\n| ---- | --- |\n| [**torch**](https://pytorch.org/docs/stable/torch.html) | A Tensor library like NumPy, with strong GPU support |\n| [**torch.autograd**](https://pytorch.org/docs/stable/autograd.html) | A tape-based automatic differentiation library that supports all differentiable Tensor operations in torch |\n| [**torch.jit**](https://pytorch.org/docs/stable/jit.html) | A compilation stack (TorchScript) to create serializable and optimizable models from PyTorch code |\n| [**torch.nn**](https://pytorch.org/docs/stable/nn.html) | A neural networks library deeply integrated with autograd designed for maximum flexibility |\n| [**torch.multiprocessing**](https://pytorch.org/docs/stable/multiprocessing.html) | Python multiprocessing, but with magical memory sharing of torch Tensors across processes. Useful for data loading and Hogwild training |\n| [**torch.utils**](https://pytorch.org/docs/stable/data.html) | DataLoader and other utility functions for convenience |\n\nUsually, PyTorch is used either as:\n\n- A replacement for NumPy to use the power of GPUs.\n- A deep learning research platform that provides maximum flexibility and speed.\n\nElaborating Further:\n\n### A GPU-Ready Tensor Library\n\nIf you use NumPy, then you have used Tensors (a.k.a. ndarray).\n\n![Tensor illustration](https://github.com/pytorch/pytorch/raw/main/docs/source/_static/img/tensor_illustration.png)\n\nPyTorch provides Tensors that can live either on the CPU or the GPU and accelerates the\ncomputation by a huge amount.\n\nWe provide a wide variety of tensor routines to accelerate and fit your scientific computation needs\nsuch as slicing, indexing, mathematical operations, linear algebra, reductions.\nAnd they are fast!\n\n### Dynamic Neural Networks: Tape-Based Autograd\n\nPyTorch has a unique way of building neural networks: using and replaying a tape recorder.\n\nMost frameworks such as TensorFlow, Theano, Caffe, and CNTK have a static view of the world.\nOne has to build a neural network and reuse the same structure again and again.\nChanging the way the network behaves means that one has to start from scratch.\n\nWith PyTorch, we use a technique called reverse-mode auto-differentiation, which allows you to\nchange the way your network behaves arbitrarily with zero lag or overhead. Our inspiration comes\nfrom several research papers on this topic, as well as current and past work such as\n[torch-autograd](https://github.com/twitter/torch-autograd),\n[autograd](https://github.com/HIPS/autograd),\n[Chainer](https://chainer.org), etc.\n\nWhile this technique is not unique to PyTorch, it's one of the fastest implementations of it to date.\nYou get the best of speed and flexibility for your crazy research.\n\n![Dynamic graph](https://github.com/pytorch/pytorch/raw/main/docs/source/_static/img/dynamic_graph.gif)\n\n### Python First\n\nPyTorch is not a Python binding into a monolithic C++ framework.\nIt is built to be deeply integrated into Python.\nYou can use it naturally like you would use [NumPy](https://www.numpy.org/) / [SciPy](https://www.scipy.org/) / [scikit-learn](https://scikit-learn.org) etc.\nYou can write your new neural network layers in Python itself, using your favorite libraries\nand use packages such as [Cython](https://cython.org/) and [Numba](https://numba.pydata.org/).\nOur goal is to not reinvent the wheel where appropriate.\n\n### Imperative Experiences\n\nPyTorch is designed to be intuitive, linear in thought, and easy to use.\nWhen you execute a line of code, it gets executed. There isn't an asynchronous view of the world.\nWhen you drop into a debugger or receive error messages and stack traces, understanding them is straightforward.\nThe stack trace points to exactly where your code was defined.\nWe hope you never spend hours debugging your code because of bad stack traces or asynchronous and opaque execution engines.\n\n### Fast and Lean\n\nPyTorch has minimal framework overhead. We integrate acceleration libraries\nsuch as [Intel MKL](https://software.intel.com/mkl) and NVIDIA ([cuDNN](https://developer.nvidia.com/cudnn), [NCCL](https://developer.nvidia.com/nccl)) to maximize speed.\nAt the core, its CPU and GPU Tensor and neural network backends\nare mature and have been tested for years.\n\nHence, PyTorch is quite fast — whether you run small or large neural networks.\n\nThe memory usage in PyTorch is extremely efficient compared to Torch or some of the alternatives.\nWe've written custom memory allocators for the GPU to make sure that\nyour deep learning models are maximally memory efficient.\nThis enables you to train bigger deep learning models than before.\n\n### Extensions Without Pain\n\nWriting new neural network modules, or interfacing with PyTorch's Tensor API, was designed to be straightforward\nand with minimal abstractions.\n\nYou can write new neural network layers in Python using the torch API\n[or your favorite NumPy-based libraries such as SciPy](https://pytorch.org/tutorials/advanced/numpy_extensions_tutorial.html).\n\nIf you want to write your layers in C/C++, we provide a convenient extension API that is efficient and with minimal boilerplate.\nNo wrapper code needs to be written. You can see [a tutorial here](https://pytorch.org/tutorials/advanced/cpp_extension.html) and [an example here](https://github.com/pytorch/extension-cpp).\n\n\n## Installation\n\n### Binaries\nCommands to install binaries via Conda or pip wheels are on our website: [https://pytorch.org/get-started/locally/](https://pytorch.org/get-started/locally/)\n\n\n#### NVIDIA Jetson Platforms\n\nPython wheels for NVIDIA's Jetson Nano, Jetson TX1/TX2, Jetson Xavier NX/AGX, and Jetson AGX Orin are provided [here](https://forums.developer.nvidia.com/t/pytorch-for-jetson-version-1-10-now-available/72048) and the L4T container is published [here](https://catalog.ngc.nvidia.com/orgs/nvidia/containers/l4t-pytorch)\n\nThey require JetPack 4.2 and above, and [@dusty-nv](https://github.com/dusty-nv) and [@ptrblck](https://github.com/ptrblck) are maintaining them.\n\n\n### From Source\n\n#### Prerequisites\nIf you are installing from source, you will need:\n- Python 3.10 or later\n- A compiler that fully supports C++20, such as clang or gcc (gcc 11.3.0 or newer is required, on Linux)\n- Visual Studio or Visual Studio Build Tool (Windows only)\n- At least 10 GB of free disk space\n- 30-60 minutes for the initial build (subsequent rebuilds are much faster)\n\n\\* PyTorch CI uses Visual C++ BuildTools, which come with Visual Studio Enterprise,\nProfessional, or Community Editions. You can also install the build tools from\nhttps://visualstudio.microsoft.com/visual-cpp-build-tools/. The build tools *do not*\ncome with Visual Studio Code by default.\n\nAn example of environment setup is shown below:\n\n* Linux:\n\n```bash\n$ source /bin/activate\n$ conda create -y -n \n$ conda activate \n```\n* Windows:\n\n```bash\n$ source \\Scripts\\activate.bat\n$ conda create -y -n \n$ conda activate \n$ call \"C:\\Program Files\\Microsoft Visual Studio\\\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat\" x64\n```\n\nA conda environment is not required. You can also do a PyTorch build in a\nstandard virtual environment, e.g., created with tools like `uv`, provided\nyour system has installed all the necessary dependencies unavailable as pip\npackages (e.g., CUDA, MKL.)\n\n##### NVIDIA CUDA Support\nIf you want to compile with CUDA support, [select a supported version of CUDA from our support matrix](https://pytorch.org/get-started/locally/), then install the following:\n- [NVIDIA CUDA](https://developer.nvidia.com/cuda-downloads)\n- [NVIDIA cuDNN](https://developer.nvidia.com/cudnn) v9.0 or above\n- [Compiler](https://gist.github.com/ax3l/9489132) compatible with CUDA\n\nNote: You could refer to the [cuDNN Support Matrix](https://docs.nvidia.com/deeplearning/cudnn/backend/latest/reference/support-matrix.html) for cuDNN versions with the various supported CUDA, CUDA driver, and NVIDIA hardware.\n\nIf you want to disable CUDA support, export the environment variable `USE_CUDA=0`.\nOther potentially useful environment variables are documented in `cmake/EnvVarForwarding.cmake`. If\nCUDA is installed in a non-standard location, set PATH so that the nvcc you\nwant to use can be found (e.g., `export PATH=/usr/local/cuda-12.8/bin:$PATH`).\n\nIf you are building for NVIDIA's Jetson platforms (Jetson Nano, TX1, TX2, AGX Xavier), Instructions to install PyTorch for Jetson Nano are [available here](https://devtalk.nvidia.com/default/topic/1049071/jetson-nano/pytorch-for-jetson-nano/)\n\n##### AMD ROCm Support\nIf you want to compile with ROCm support, install\n- [AMD ROCm](https://rocm.docs.amd.com/en/latest/deploy/linux/quick_start.html) 4.0 and above installation\n- ROCm is currently supported only for Linux systems.\n\nBy default the build system expects ROCm to be installed in `/opt/rocm`. If ROCm is installed in a different directory, the `ROCM_PATH` environment variable must be set to the ROCm installation directory. The build system automatically detects the AMD GPU architecture. Optionally, the AMD GPU architecture can be explicitly set with the `PYTORCH_ROCM_ARCH` environment variable [AMD GPU architecture](https://rocm.docs.amd.com/projects/install-on-linux/en/latest/reference/system-requirements.html#supported-gpus)\n\nIf you want to disable ROCm support, export the environment variable `USE_ROCM=0`.\nOther potentially useful environment variables are documented in `cmake/EnvVarForwarding.cmake`.\n\n##### Intel GPU Support\nIf you want to compile with Intel GPU support, follow these\n- [PyTorch Prerequisites for Intel GPUs](https://www.intel.com/content/www/us/en/developer/articles/tool/pytorch-prerequisites-for-intel-gpu.html) instructions.\n- Intel GPU is supported for Linux and Windows.\n\nIf you want to disable Intel GPU support, export the environment variable `USE_XPU=0`.\nOther potentially useful environment variables are documented in `cmake/EnvVarForwarding.cmake`.\n\n#### Get the PyTorch Source\n\n```bash\ngit clone https://github.com/pytorch/pytorch\ncd pytorch\n# if you are updating an existing checkout\ngit submodule sync\ngit submodule update --init --recursive\n```\n\n#### Install Dependencies\n\n**Common**\n\n```bash\n# Run this command from the PyTorch directory after cloning the source code using the “Get the PyTorch Source“ section above\npip install --group dev\n```\n\n**On Linux**\n\n```bash\npip install mkl-static mkl-include\n# CUDA only: Add LAPACK support for the GPU if needed\n# magma installation: run with active conda environment. specify CUDA version to install\n.ci/docker/common/install_magma_conda.sh 12.4\n\n# (optional) If using torch.compile with inductor/triton, install the matching version of triton\n# Run from the pytorch directory after cloning\n# For Intel GPU support, please explicitly `export USE_XPU=1` before running command.\nmake triton\n```\n\n**On Windows**\n\n```bash\npip install mkl-static mkl-include\n# Add these packages if torch.distributed is needed.\n# Distributed package support on Windows is a prototype feature and is subject to changes.\nconda install -c conda-forge libuv=1.51\n```\n\n#### Install PyTorch\n\n**On Linux**\n\nIf you're compiling for AMD ROCm then first run this command:\n\n```bash\n# Only run this if you're compiling for ROCm\npython tools/amd_build/build_amd.py\n```\n\nInstall PyTorch\n\n```bash\n# the CMake prefix for conda environment\nexport CMAKE_PREFIX_PATH=\"${CONDA_PREFIX:-'$(dirname $(which conda))/../'}:${CMAKE_PREFIX_PATH}\"\npython -m pip install --no-build-isolation -v -e .\n\n# the CMake prefix for non-conda environment, e.g. Python venv\n# call following after activating the venv\nexport CMAKE_PREFIX_PATH=\"${VIRTUAL_ENV}:${CMAKE_PREFIX_PATH}\"\n```\n\n**On macOS**\n\n```bash\npython -m pip install --no-build-isolation -v -e .\n```\n\n**On Windows**\n\nIf you want to build legacy python code, please refer to [Building on legacy code and CUDA](https://github.com/pytorch/pytorch/blob/main/CONTRIBUTING.md#building-on-legacy-code-and-cuda)\n\n**CPU-only builds**\n\nIn this mode PyTorch computations will run on your CPU, not your GPU.\n\n```cmd\npython -m pip install --no-build-isolation -v -e .\n```\n\nNote on OpenMP: The desired OpenMP implementation is Intel OpenMP (iomp). In order to link against iomp, you'll need to manually download the library and set up the building environment by tweaking `CMAKE_INCLUDE_PATH` and `LIB`. The instruction [here](https://docs.pytorch.org/docs/main/notes/windows.html#building-from-source) is an example for setting up both MKL and Intel OpenMP. Without these configurations for CMake, Microsoft Visual C OpenMP runtime (vcomp) will be used.\n\n**CUDA based build**\n\nIn this mode PyTorch computations will leverage your GPU via CUDA for faster number crunching\n\n[NVTX](https://docs.nvidia.com/gameworks/content/gameworkslibrary/nvtx/nvidia_tools_extension_library_nvtx.htm) is needed to build PyTorch with CUDA.\nNVTX is a part of CUDA distributive, where it is called \"Nsight Compute\". To install it onto an already installed CUDA run CUDA installation once again and check the corresponding checkbox.\nMake sure that CUDA with Nsight Compute is installed after Visual Studio.\n\nCurrently, VS 2017 / 2019, and Ninja are supported as the generator of CMake. If `ninja.exe` is detected in `PATH`, then Ninja will be used as the default generator, otherwise, it will use VS 2017 / 2019.\n
If Ninja is selected as the generator, the latest MSVC will get selected as the underlying toolchain.\n\nAdditional libraries such as\n[Magma](https://developer.nvidia.com/magma), [oneDNN, a.k.a. MKLDNN or DNNL](https://github.com/oneapi-src/oneDNN), and [Sccache](https://github.com/mozilla/sccache) are often needed. Please refer to the [installation-helper](https://github.com/pytorch/pytorch/tree/main/.ci/pytorch/win-test-helpers/installation-helpers) to install them.\n\nYou can refer to the [build_pytorch.bat](https://github.com/pytorch/pytorch/blob/main/.ci/pytorch/win-test-helpers/build_pytorch.bat) script for some other environment variables configurations\n\n```cmd\ncmd\n\n:: Set the environment variables after you have downloaded and unzipped the mkl package,\n:: else CMake would throw an error as `Could NOT find OpenMP`.\nset CMAKE_INCLUDE_PATH={Your directory}\\mkl\\include\nset LIB={Your directory}\\mkl\\lib;%LIB%\n\n:: Read the content in the previous section carefully before you proceed.\n:: [Optional] If you want to override the underlying toolset used by Ninja and Visual Studio with CUDA, please run the following script block.\n:: \"Visual Studio 2019 Developer Command Prompt\" will be run automatically.\n:: Make sure you have CMake >= 3.12 before you do this when you use the Visual Studio generator.\nset CMAKE_GENERATOR_TOOLSET_VERSION=14.27\nset DISTUTILS_USE_SDK=1\nfor /f \"usebackq tokens=*\" %i in (`\"%ProgramFiles(x86)%\\Microsoft Visual Studio\\Installer\\vswhere.exe\" -version [15^,17^) -products * -latest -property installationPath`) do call \"%i\\VC\\Auxiliary\\Build\\vcvarsall.bat\" x64 -vcvars_ver=%CMAKE_GENERATOR_TOOLSET_VERSION%\n\n:: [Optional] If you want to override the CUDA host compiler\nset CUDAHOSTCXX=C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.27.29110\\bin\\HostX64\\x64\\cl.exe\n\npython -m pip install --no-build-isolation -v -e .\n```\n\n**Intel GPU builds**\n\nIn this mode PyTorch with Intel GPU support will be built.\n\nPlease make sure [the common prerequisites](#prerequisites) as well as [the prerequisites for Intel GPU](#intel-gpu-support) are properly installed and the environment variables are configured prior to starting the build. For build tool support, `Visual Studio 2022` is required.\n\nThen PyTorch can be built with the command:\n\n```cmd\n:: CMD Commands:\n:: Set the CMAKE_PREFIX_PATH to help find corresponding packages\n:: %CONDA_PREFIX% only works after `conda activate custom_env`\n\nif defined CMAKE_PREFIX_PATH (\n set \"CMAKE_PREFIX_PATH=%CONDA_PREFIX%\\Library;%CMAKE_PREFIX_PATH%\"\n) else (\n set \"CMAKE_PREFIX_PATH=%CONDA_PREFIX%\\Library\"\n)\n\npython -m pip install --no-build-isolation -v -e .\n```\n\n##### Adjust Build Options (Optional)\n\nYou can adjust the configuration of CMake variables through environment variables, which the\nbuild forwards to CMake (see [`cmake/EnvVarForwarding.cmake`](./cmake/EnvVarForwarding.cmake) for\nthe full list). For example, pointing the build at a specific Conda prefix, CuDNN, or BLAS:\n\nOn Linux\n\n```bash\nexport CMAKE_PREFIX_PATH=\"${CONDA_PREFIX:-'$(dirname $(which conda))/../'}:${CMAKE_PREFIX_PATH}\"\nspin develop\n```\n\nOn macOS\n\n```bash\nexport CMAKE_PREFIX_PATH=\"${CONDA_PREFIX:-'$(dirname $(which conda))/../'}:${CMAKE_PREFIX_PATH}\"\nMACOSX_DEPLOYMENT_TARGET=11.0 spin develop\n```\n\nAfter a first `spin develop`, you can inspect or adjust the CMake cache interactively with\n`ccmake build` (or `cmake-gui build`) and rebuild with `spin develop`; your edits persist, because\nreconfiguration does not use `--fresh` and environment variables only seed cache entries that are\nnot already set. The corollary: once a variable is in the cache, changing its environment variable\nno longer affects it -- edit the cache directly (or delete `build/CMakeCache.txt`) to change it.\nThe build type and compiler are the exception; the build always re-applies them.\n\n### Docker Image\n\n#### Using pre-built images\n\nYou can also pull a pre-built docker image from Docker Hub and run with docker v23.0+\n\n```bash\ndocker run --gpus all --rm -ti --ipc=host pytorch/pytorch:latest\n```\n\nPlease note that PyTorch uses shared memory to share data between processes, so if torch multiprocessing is used (e.g.\nfor multithreaded data loaders) the default shared memory segment size that container runs with is not enough, and you\nshould increase shared memory size either with `--ipc=host` or `--shm-size` command line options to `nvidia-docker run`.\n\n#### Building the image yourself\n\n**NOTE:** Must be built with a Docker version >= 23.0\n\nThe Dockerfile is supplied to build images with CUDA 12.6 support and cuDNN v9.\nYou can pass `PYTHON_VERSION=x.y` make variable to specify which Python version is to be used by Miniconda, or leave it\nunset to use the default, as the Dockerfile uses system Python.\n\n```bash\nmake -f docker.Makefile\n# images are tagged as docker.io/${your_docker_username}/pytorch\n```\n\nYou can also pass the `CMAKE_VARS=\"...\"` environment variable to specify additional CMake variables to be passed to CMake during the build.\nSee [`cmake/EnvVarForwarding.cmake`](./cmake/EnvVarForwarding.cmake) for the list of available variables.\n\n```bash\nmake -f docker.Makefile\n```\n\n### Building the Documentation\n\nTo build documentation in various formats, you will need [Sphinx](https://www.sphinx-doc.org)\nand the `pytorch_sphinx_theme2`.\n\nBefore you build the documentation locally, ensure `torch` is\ninstalled in your environment. For small fixes, you can install the\nnightly version as described in [Getting Started](https://pytorch.org/get-started/locally/).\n\nFor more complex fixes, such as adding a new module and docstrings for\nthe new module, you might need to install torch [from source](#from-source).\nSee [Docstring Guidelines](https://github.com/pytorch/pytorch/wiki/Docstring-Guidelines)\nfor docstring conventions.\n\n```bash\ncd docs/\npip install -r requirements.txt\nmake html\nmake serve\n```\n\nRun `make` to get a list of all available output formats.\n\nIf you get a katex error run `npm install katex`. If it persists, try\n`npm install -g katex`\n\n> [!NOTE]\n> If you see a numpy incompatibility error, run:\n> ```\n> pip install 'numpy<2'\n> ```\n\n\n#### Troubleshooting CI Errors\nYour build may show errors you didn't have locally - here's how to find the errors relevant to the docs.\n\nIf the build has any errors, you will see something like this on the PR:\n\n\"Monosnap\n\nAny doc-related errors will occur in jobs that include \"doc\" somewhere in the title. It doesn't look like any of these jobs are relevant to our docs.\n\n\nLet's take a look anyway. Click on the job to see the logs:\n\n\"Monosnap\n\nAnd we can be sure that this job does not involve docs.\n\nLooking at this build, we can see these jobs are relevant to our docs - and they didn't have any errors:\n\n\"Check\n\nYou might also see a comment on the PR like this:\n\n\"PR\n\nWe can see that some of these issues are relevant to our docs.\n\nOpen the logs by clicking on the `gh` link:\n\n\"View\n\nAnd here we can see there is a doc-related error:\n\n\"Doc\n\nYou can always find the relevant doc builds by going to the `Checks` tab on your PR, and scrolling down to `pull`.\n\n\"checks\"\n\nYou can either click through or toggle the accordion to see all of the jobs here, where you can see the docs jobs highlighted:\n\n\"jobs\"\n\nIf you click through, you'll see the doc jobs at the bottom, like this:\n\n\"View\n\n\n#### Building a PDF\n\nTo compile a PDF of all PyTorch documentation, ensure you have\n`texlive` and LaTeX installed. On macOS, you can install them using:\n\n```\nbrew install --cask mactex\n```\n\nTo create the PDF:\n\n1. Run:\n\n ```\n make latexpdf\n ```\n\n This will generate the necessary files in the `build/latex` directory.\n\n2. Navigate to this directory and execute:\n\n ```\n make LATEXOPTS=\"-interaction=nonstopmode\"\n ```\n\n This will produce a `pytorch.pdf` with the desired content. Run this\n command one more time so that it generates the correct table\n of contents and index.\n\n> [!NOTE]\n> To view the Table of Contents, switch to the **Table of Contents**\n> view in your PDF viewer.\n\n\n### Previous Versions\n\nInstallation instructions and binaries for previous PyTorch versions may be found\non [our website](https://pytorch.org/get-started/previous-versions).\n\n\n## Getting Started\n\nPointers to get you started:\n- [Tutorials: get you started with understanding and using PyTorch](https://pytorch.org/tutorials/)\n- [Examples: easy to understand PyTorch code across all domains](https://github.com/pytorch/examples)\n- [The API Reference](https://pytorch.org/docs/)\n- [Glossary](https://github.com/pytorch/pytorch/blob/main/GLOSSARY.md)\n\n## Resources\n\n* [PyTorch.org](https://pytorch.org/)\n* [PyTorch Tutorials](https://pytorch.org/tutorials/)\n* [PyTorch Examples](https://github.com/pytorch/examples)\n* [PyTorch Models](https://pytorch.org/hub/)\n* [Intro to Deep Learning with PyTorch from Udacity](https://www.udacity.com/course/deep-learning-pytorch--ud188)\n* [Intro to Machine Learning with PyTorch from Udacity](https://www.udacity.com/course/intro-to-machine-learning-nanodegree--nd229)\n* [Deep Neural Networks with PyTorch from Coursera](https://www.coursera.org/learn/deep-neural-networks-with-pytorch)\n* [PyTorch Twitter](https://twitter.com/PyTorch)\n* [PyTorch Blog](https://pytorch.org/blog/)\n* [PyTorch YouTube](https://www.youtube.com/channel/UCWXI5YeOsh03QvJ59PMaXFw)\n\n## Communication\n* Forums: Discuss implementations, research, etc. https://discuss.pytorch.org\n* GitHub Issues: Bug reports, feature requests, install issues, RFCs, thoughts, etc.\n* Slack: The [PyTorch Slack](https://pytorch.slack.com/) hosts a primary audience of moderate to experienced PyTorch users and developers for general chat, online discussions, collaboration, etc. If you are a beginner looking for help, the primary medium is [PyTorch Forums](https://discuss.pytorch.org). If you need a slack invite, please fill this form: https://goo.gl/forms/PP1AGvNHpSaJP8to1\n* Newsletter: No-noise, a one-way email newsletter with important announcements about PyTorch. You can sign-up here: https://eepurl.com/cbG0rv\n* Facebook Page: Important announcements about PyTorch. https://www.facebook.com/pytorch\n* For brand guidelines, please visit our website at [pytorch.org](https://pytorch.org/)\n\n## Releases and Contributing\n\nTypically, PyTorch has three minor releases a year. Please let us know if you encounter a bug by [filing an issue](https://github.com/pytorch/pytorch/issues).\n\nWe appreciate all contributions. If you are planning to contribute back bug-fixes, please do so without any further discussion.\n\nIf you plan to contribute new features, utility functions, or extensions to the core, please first open an issue and discuss the feature with us.\nSending a PR without discussion might end up resulting in a rejected PR because we might be taking the core in a different direction than you might be aware of.\n\nTo learn more about making a contribution to PyTorch, please see our [Contribution page](CONTRIBUTING.md). For more information about PyTorch releases, see [Release page](RELEASE.md).\n\n## The Team\n\nPyTorch is a community-driven project with several skillful engineers and researchers contributing to it.\n\nPyTorch is currently maintained by [Soumith Chintala](https://soumith.ch), [Gregory Chanan](https://github.com/gchanan), [Dmytro Dzhulgakov](https://github.com/dzhulgakov), [Edward Yang](https://github.com/ezyang), [Alban Desmaison](https://github.com/albanD), [Piotr Bialecki](https://github.com/ptrblck) and [Nikita Shulga](https://github.com/malfet) with major contributions coming from hundreds of talented individuals in various forms and means.\nA non-exhaustive but growing list needs to mention: [Trevor Killeen](https://github.com/killeent), [Sasank Chilamkurthy](https://github.com/chsasank), [Sergey Zagoruyko](https://github.com/szagoruyko), [Adam Lerer](https://github.com/adamlerer), [Francisco Massa](https://github.com/fmassa), [Alykhan Tejani](https://github.com/alykhantejani), [Luca Antiga](https://github.com/lantiga), [Alban Desmaison](https://github.com/albanD), [Andreas Koepf](https://github.com/andreaskoepf), [James Bradbury](https://github.com/jekbradbury), [Zeming Lin](https://github.com/ebetica), [Yuandong Tian](https://github.com/yuandong-tian), [Guillaume Lample](https://github.com/glample), [Marat Dukhan](https://github.com/Maratyszcza), [Natalia Gimelshein](https://github.com/ngimel), [Christian Sarofeen](https://github.com/csarofeen), [Martin Raison](https://github.com/martinraison), [Edward Yang](https://github.com/ezyang), [Zachary Devito](https://github.com/zdevito). \n\nNote: This project is unrelated to [hughperkins/pytorch](https://github.com/hughperkins/pytorch) with the same name. Hugh is a valuable contributor to the Torch community and has helped with many things Torch and PyTorch.\n\n## License\n\nPyTorch has a BSD-style license, as found in the [LICENSE](LICENSE) file.\n", + "description_content_type": "text/markdown", + "keywords": [ + "pytorch", + "machine learning" + ], + "author_email": "PyTorch Team ", + "license_expression": "Apache-2.0 AND Apache-2.0 WITH LLVM-exception AND BSD-2-Clause AND BSD-3-Clause AND BSL-1.0 AND MIT", + "license_file": [ + "LICENSE", + "third_party/FP16/LICENSE", + "third_party/FXdiv/LICENSE", + "third_party/NNPACK/LICENSE", + "third_party/NVTX/LICENSE.txt", + "third_party/NVTX/docs/LICENSE.txt", + "third_party/NVTX/python/LICENSE.txt", + "third_party/NVTX/rust/LICENSE", + "third_party/NVTX/tools/docs/github-markdown-css/LICENSE", + "third_party/VulkanMemoryAllocator/LICENSE.txt", + "third_party/XNNPACK/LICENSE", + "third_party/aiter/3rdparty/composable_kernel/LICENSE", + "third_party/aiter/3rdparty/composable_kernel/docs/LICENSE.rst", + "third_party/aiter/LICENSE", + "third_party/benchmark/LICENSE", + "third_party/composable_kernel/LICENSE", + "third_party/composable_kernel/docs/LICENSE.rst", + "third_party/cpp-httplib/LICENSE", + "third_party/cpuinfo/LICENSE", + "third_party/cpuinfo/deps/clog/LICENSE", + "third_party/cudnn_frontend/LICENSE.txt", + "third_party/cutlass/LICENSE.txt", + "third_party/cutlass/python/LICENSE.txt", + "third_party/fbgemm/LICENSE", + "third_party/fbgemm/external/composable_kernel/LICENSE", + "third_party/fbgemm/external/composable_kernel/docs/LICENSE.rst", + "third_party/fbgemm/external/cpuinfo/LICENSE", + "third_party/fbgemm/external/cpuinfo/deps/clog/LICENSE", + "third_party/fbgemm/external/cutlass/LICENSE.txt", + "third_party/fbgemm/external/cutlass/python/LICENSE.txt", + "third_party/fbgemm/external/googletest/LICENSE", + "third_party/fbgemm/external/hipify_torch/LICENSE.txt", + "third_party/fbgemm/fbgemm_gpu/docs/src/general/LICENSE.rst", + "third_party/fbgemm/fbgemm_gpu/experimental/hstu/LICENSE", + "third_party/fbgemm/fbgemm_gpu/src/quantize_ops/mx/LICENSE", + "third_party/fbgemm/fbgemm_gpu/test/quantize/mx/LICENSE", + "third_party/flash-attention/LICENSE", + "third_party/flash-attention/csrc/composable_kernel/LICENSE", + "third_party/flash-attention/csrc/composable_kernel/docs/LICENSE.rst", + "third_party/flash-attention/csrc/cutlass/LICENSE.txt", + "third_party/flash-attention/csrc/cutlass/python/LICENSE.txt", + "third_party/flash-attention/flash_attn/cute/LICENSE", + "third_party/flash-attention/third_party/aiter/3rdparty/composable_kernel/LICENSE", + "third_party/flash-attention/third_party/aiter/3rdparty/composable_kernel/docs/LICENSE.rst", + "third_party/flash-attention/third_party/aiter/LICENSE", + "third_party/flatbuffers/LICENSE", + "third_party/flatbuffers/dart/LICENSE", + "third_party/flatbuffers/swift/LICENSE", + "third_party/fmt/LICENSE", + "third_party/gemmlowp/gemmlowp/LICENSE", + "third_party/gloo/LICENSE", + "third_party/googletest/LICENSE", + "third_party/ideep/LICENSE", + "third_party/ideep/mkl-dnn/LICENSE", + "third_party/ideep/mkl-dnn/third_party/gtest/LICENSE", + "third_party/ideep/mkl-dnn/third_party/opencl/LICENSE", + "third_party/kineto/LICENSE", + "third_party/kineto/libkineto/third_party/dynolog_headers/LICENSE", + "third_party/kineto/libkineto/third_party/fmt/LICENSE", + "third_party/kineto/libkineto/third_party/googletest/LICENSE", + "third_party/llvm-openmp/LICENSE.txt", + "third_party/mimalloc/LICENSE", + "third_party/miniz-3.0.2/LICENSE", + "third_party/mslk/LICENSE", + "third_party/mslk/external/composable_kernel/LICENSE", + "third_party/mslk/external/composable_kernel/docs/LICENSE.rst", + "third_party/mslk/external/cutlass/LICENSE.txt", + "third_party/mslk/external/cutlass/python/LICENSE.txt", + "third_party/mslk/external/googletest/LICENSE", + "third_party/mslk/external/hipify_torch/LICENSE.txt", + "third_party/mslk/mslk/attention/flash_attn/LICENSE", + "third_party/nccl/LICENSE.txt", + "third_party/nccl/bindings/nccl4py/LICENSE.txt", + "third_party/nccl/contrib/nccl_checkpoint/python/LICENSE.txt", + "third_party/nccl/contrib/nccl_ep/LICENSE.txt", + "third_party/nccl/contrib/nccl_ubx/LICENSE.txt", + "third_party/onnx/LICENSE", + "third_party/onnx/third_party/pybind11/LICENSE", + "third_party/perfetto/LICENSE", + "third_party/protobuf/LICENSE", + "third_party/protobuf/third_party/benchmark/LICENSE", + "third_party/protobuf/third_party/googletest/LICENSE", + "third_party/protobuf/third_party/googletest/googlemock/LICENSE", + "third_party/protobuf/third_party/googletest/googlemock/scripts/generator/LICENSE", + "third_party/protobuf/third_party/googletest/googletest/LICENSE", + "third_party/protobuf/third_party/utf8_range/LICENSE", + "third_party/psimd/LICENSE", + "third_party/pthreadpool/LICENSE", + "third_party/pybind11/LICENSE", + "third_party/python-peachpy/LICENSE.rst", + "third_party/sleef/LICENSE.txt", + "third_party/tensorpipe/LICENSE.txt", + "third_party/tensorpipe/third_party/googletest/LICENSE", + "third_party/tensorpipe/third_party/googletest/googlemock/LICENSE", + "third_party/tensorpipe/third_party/googletest/googlemock/scripts/generator/LICENSE", + "third_party/tensorpipe/third_party/googletest/googletest/LICENSE", + "third_party/tensorpipe/third_party/libnop/LICENSE", + "third_party/tensorpipe/third_party/libuv/LICENSE", + "third_party/tensorpipe/third_party/pybind11/LICENSE", + "third_party/tensorpipe/third_party/pybind11/tools/clang/LICENSE.txt" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Intended Audience :: Education", + "Intended Audience :: Science/Research", + "Topic :: Scientific/Engineering", + "Topic :: Scientific/Engineering :: Mathematics", + "Topic :: Scientific/Engineering :: Artificial Intelligence", + "Topic :: Software Development", + "Topic :: Software Development :: Libraries", + "Topic :: Software Development :: Libraries :: Python Modules", + "Programming Language :: C++", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15" + ], + "requires_dist": [ + "filelock", + "typing-extensions>=4.10.0", + "setuptools>=77.0.3", + "sympy>=1.13.3", + "networkx>=2.5.1", + "jinja2", + "fsspec>=0.8.5", + "cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.3; platform_system == \"Linux\"", + "cuda-bindings<14,>=13.0.3; platform_system == \"Linux\" and python_version < \"3.15\"", + "nvidia-cudnn-cu13==9.24.0.43; platform_system == \"Linux\"", + "nvidia-cusparselt-cu13==0.8.1; platform_system == \"Linux\"", + "nvidia-nccl-cu13==2.30.7; platform_system == \"Linux\"", + "nvidia-nvshmem-cu13==3.4.5; platform_system == \"Linux\"", + "triton~=3.8.0; platform_system == \"Linux\" and python_version < \"3.15\"", + "triton~=3.8.0; platform_system == \"Linux\" and python_version < \"3.15\"", + "triton~=3.8.0; platform_system == \"Linux\" and python_version < \"3.15\"", + "triton~=3.8.0; platform_system == \"Linux\" and python_version < \"3.15\"", + "triton~=3.8.0; platform_system == \"Linux\" and python_version < \"3.15\"", + "optree>=0.13.0; extra == \"optree\"", + "opt-einsum>=3.3; extra == \"opt-einsum\"", + "pyyaml; extra == \"pyyaml\"" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://pytorch.org", + "Repository, https://github.com/pytorch/pytorch", + "Documentation, https://pytorch.org/docs", + "Issue Tracker, https://github.com/pytorch/pytorch/issues", + "Forum, https://discuss.pytorch.org" + ], + "provides_extra": [ + "optree", + "opt-einsum", + "pyyaml" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/cb/03/10388a42375ee7e4ac9b94eb2c5c569c8b5795e377e701c9ac3ad63de890/fastapi-0.141.1-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3" + }, + "hash": "sha256=bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.4", + "name": "fastapi", + "version": "0.141.1", + "summary": "FastAPI framework, high performance, easy to learn, fast to code, ready for production", + "description": "

\n \"FastAPI\"\n

\n

\n FastAPI framework, high performance, easy to learn, fast to code, ready for production\n

\n

\n\n \"Test\"\n\n\n \"Coverage\"\n\n\n \"Package\n\n\n \"Supported\n\n

\n\n---\n\n**Documentation**: [https://fastapi.tiangolo.com](https://fastapi.tiangolo.com)\n\n**Source Code**: [https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi)\n\n---\n\nFastAPI is a modern, fast (high-performance), web framework for building APIs with Python based on standard Python type hints.\n\nThe key features are:\n\n* **Fast**: Very high performance, on par with **NodeJS** and **Go** (thanks to Starlette and Pydantic). [One of the fastest Python frameworks available](#performance).\n* **Fast to code**: Increase the speed to develop features by about 200% to 300%. *\n* **Fewer bugs**: Reduce about 40% of human (developer) induced errors. *\n* **Intuitive**: Great editor support. Completion everywhere. Less time debugging.\n* **Easy**: Designed to be easy to use and learn. Less time reading docs.\n* **Short**: Minimize code duplication. Multiple features from each parameter declaration. Fewer bugs.\n* **Robust**: Get production-ready code. With automatic interactive documentation.\n* **Standards-based**: Based on (and fully compatible with) the open standards for APIs: [OpenAPI](https://github.com/OAI/OpenAPI-Specification) (previously known as Swagger) and [JSON Schema](https://json-schema.org/).\n\n* estimation based on tests conducted by an internal development team, building production applications.\n\n## Sponsors\n\n\n### Keystone Sponsor\n\n\n\n### Gold Sponsors\n\n\n\n\n\n\n\n\n\n\n### Silver Sponsors\n\n\n\n\n\n\n\n\n\n\n[Other sponsors](https://fastapi.tiangolo.com/fastapi-people/#sponsors)\n\n## Opinions\n\n\n\n
\n\n\"_[...] I'm using **FastAPI** a ton these days. [...] I'm actually planning to use it for all of my team's **ML services at Microsoft**. Some of them are getting integrated into the core **Windows** product and some **Office** products._\"\n\n
Kabir Khan - Microsoft (ref)
\n\n---\n\n\"_We adopted the **FastAPI** library to spawn a **REST** server that can be queried to obtain **predictions**. [for Ludwig]_\"\n\n
Piero Molino, Yaroslav Dudin, and Sai Sumanth Miryala - Uber (ref)
\n\n---\n\n\"_**Netflix** is pleased to announce the open-source release of our **crisis management** orchestration framework: **Dispatch**! [built with **FastAPI**]_\"\n\n
Kevin Glisson, Marc Vilanova, Forest Monsen - Netflix (ref)
\n\n---\n\n\"_If anyone is looking to build a production Python API, I would highly recommend **FastAPI**. It is **beautifully designed**, **simple to use** and **highly scalable**, it has become a **key component** in our API first development strategy and is driving many automations and services such as our Virtual TAC Engineer._\"\n\n
Deon Pillsbury - Cisco (ref)
\n\n---\n\n
\n\n## FastAPI Conf\n\n[**FastAPI Conf '26**](https://fastapiconf.com) is happening on **October 28, 2026** in **Amsterdam, NL**. All about FastAPI, right from the source. 🎤\n\n\"FastAPI\n\n## FastAPI mini documentary\n\nThere's a [FastAPI mini documentary](https://www.youtube.com/watch?v=mpR8ngthqiE) released at the end of 2025, you can watch it online:\n\n\"FastAPI\n\n## **Typer**, the FastAPI of CLIs\n\n\n\nIf you are building a CLI app to be used in the terminal instead of a web API, check out [**Typer**](https://typer.tiangolo.com/).\n\n**Typer** is FastAPI's little sibling. And it's intended to be the **FastAPI of CLIs**. ⌨️ 🚀\n\n## Requirements\n\nFastAPI stands on the shoulders of giants:\n\n* [Starlette](https://starlette.dev/) for the web parts.\n* [Pydantic](https://pydantic.dev/docs/) for the data parts.\n\n## Installation\n\nFirst, [install `uv`](https://docs.astral.sh/uv/getting-started/installation/), and then add FastAPI to your project:\n\n
\n\n```console\n$ uv add \"fastapi[standard]\"\n\n---> 100%\n```\n\n
\n\n**Note**: Make sure you put `\"fastapi[standard]\"` in quotes to ensure it works in all terminals.\n\nIf you prefer to use `pip`, install `fastapi[standard]` inside a virtual environment. See the [installation guide](tutorial/#install-fastapi) for the alternative steps.\n\n## Example\n\n### Create it\n\nCreate a file `main.py` with:\n\n```Python\nfrom fastapi import FastAPI\n\napp = FastAPI()\n\n\n@app.get(\"/\")\ndef read_root():\n return {\"Hello\": \"World\"}\n\n\n@app.get(\"/items/{item_id}\")\ndef read_item(item_id: int, q: str | None = None):\n return {\"item_id\": item_id, \"q\": q}\n```\n\n
\nOr use async def...\n\nIf your code uses `async` / `await`, use `async def`:\n\n```Python hl_lines=\"7 12\"\nfrom fastapi import FastAPI\n\napp = FastAPI()\n\n\n@app.get(\"/\")\nasync def read_root():\n return {\"Hello\": \"World\"}\n\n\n@app.get(\"/items/{item_id}\")\nasync def read_item(item_id: int, q: str | None = None):\n return {\"item_id\": item_id, \"q\": q}\n```\n\n**Note**:\n\nIf you don't know, check the _\"In a hurry?\"_ section about [`async` and `await` in the docs](https://fastapi.tiangolo.com/async/#in-a-hurry).\n\n
\n\n### Run it\n\nRun the server with:\n\n
\n\n```console\n$ uv run fastapi dev\n\n ╭────────── FastAPI CLI - Development mode ───────────╮\n │ │\n │ Serving at: http://127.0.0.1:8000 │\n │ │\n │ API docs: http://127.0.0.1:8000/docs │\n │ │\n │ Running in development mode, for production use: │\n │ │\n │ fastapi run │\n │ │\n ╰─────────────────────────────────────────────────────╯\n\nINFO: Will watch for changes in these directories: ['/home/user/code/awesomeapp']\nINFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)\nINFO: Started reloader process [2248755] using WatchFiles\nINFO: Started server process [2248757]\nINFO: Waiting for application startup.\nINFO: Application startup complete.\n```\n\n
\n\n
\nAbout the command fastapi dev...\n\nThe command `fastapi dev` reads your `main.py` file automatically, detects the **FastAPI** app in it, and starts a server using [Uvicorn](https://uvicorn.dev).\n\nBy default, `fastapi dev` will start with auto-reload enabled for local development.\n\nYou can read more about it in the [FastAPI CLI docs](https://fastapi.tiangolo.com/fastapi-cli/).\n\n
\n\n### Check it\n\nOpen your browser at [http://127.0.0.1:8000/items/5?q=somequery](http://127.0.0.1:8000/items/5?q=somequery).\n\nYou will see the JSON response as:\n\n```JSON\n{\"item_id\": 5, \"q\": \"somequery\"}\n```\n\nYou already created an API that:\n\n* Receives HTTP requests in the _paths_ `/` and `/items/{item_id}`.\n* Both _paths_ take `GET` operations (also known as HTTP _methods_).\n* The _path_ `/items/{item_id}` has a _path parameter_ `item_id` that should be an `int`.\n* The _path_ `/items/{item_id}` has an optional `str` _query parameter_ `q`.\n\n### Interactive API docs\n\nNow go to [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs).\n\nYou will see the automatic interactive API documentation (provided by [Swagger UI](https://github.com/swagger-api/swagger-ui)):\n\n![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png)\n\n### Alternative API docs\n\nAnd now, go to [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc).\n\nYou will see the alternative automatic documentation (provided by [ReDoc](https://github.com/Redocly/redoc)):\n\n![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png)\n\n## Example upgrade\n\nNow modify the file `main.py` to receive a body from a `PUT` request.\n\nDeclare the body using standard Python types, thanks to Pydantic.\n\n```Python hl_lines=\"2 7-10 23-25\"\nfrom fastapi import FastAPI\nfrom pydantic import BaseModel\n\napp = FastAPI()\n\n\nclass Item(BaseModel):\n name: str\n price: float\n is_offer: bool | None = None\n\n\n@app.get(\"/\")\ndef read_root():\n return {\"Hello\": \"World\"}\n\n\n@app.get(\"/items/{item_id}\")\ndef read_item(item_id: int, q: str | None = None):\n return {\"item_id\": item_id, \"q\": q}\n\n\n@app.put(\"/items/{item_id}\")\ndef update_item(item_id: int, item: Item):\n return {\"item_name\": item.name, \"item_id\": item_id}\n```\n\nThe `fastapi dev` server should reload automatically.\n\n### Interactive API docs upgrade\n\nNow go to [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs).\n\n* The interactive API documentation will be automatically updated, including the new body:\n\n![Swagger UI](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png)\n\n* Click on the button \"Try it out\", it allows you to fill the parameters and directly interact with the API:\n\n![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-04-swagger-03.png)\n\n* Then click on the \"Execute\" button, the user interface will communicate with your API, send the parameters, get the results and show them on the screen:\n\n![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-05-swagger-04.png)\n\n### Alternative API docs upgrade\n\nAnd now, go to [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc).\n\n* The alternative documentation will also reflect the new query parameter and body:\n\n![ReDoc](https://fastapi.tiangolo.com/img/index/index-06-redoc-02.png)\n\n### Recap\n\nIn summary, you declare **once** the types of parameters, body, etc. as function parameters.\n\nYou do that with standard modern Python types.\n\nYou don't have to learn a new syntax, the methods or classes of a specific library, etc.\n\nJust standard **Python**.\n\nFor example, for an `int`:\n\n```Python\nitem_id: int\n```\n\nor for a more complex `Item` model:\n\n```Python\nitem: Item\n```\n\n...and with that single declaration you get:\n\n* Editor support, including:\n * Completion.\n * Type checks.\n* Validation of data:\n * Automatic and clear errors when the data is invalid.\n * Validation even for deeply nested JSON objects.\n* Conversion of input data: coming from the network to Python data and types. Reading from:\n * JSON.\n * Path parameters.\n * Query parameters.\n * Cookies.\n * Headers.\n * Forms.\n * Files.\n* Conversion of output data: converting from Python data and types to network data (as JSON):\n * Convert Python types (`str`, `int`, `float`, `bool`, `list`, etc).\n * `datetime` objects.\n * `UUID` objects.\n * Database models.\n * ...and many more.\n* Automatic interactive API documentation, including 2 alternative user interfaces:\n * Swagger UI.\n * ReDoc.\n\n---\n\nComing back to the previous code example, **FastAPI** will:\n\n* Validate that there is an `item_id` in the path for `GET` and `PUT` requests.\n* Validate that the `item_id` is of type `int` for `GET` and `PUT` requests.\n * If it is not, the client will see a useful, clear error.\n* Check if there is an optional query parameter named `q` (as in `http://127.0.0.1:8000/items/foo?q=somequery`) for `GET` requests.\n * As the `q` parameter is declared with `= None`, it is optional.\n * Without the `None` it would be required (as is the body in the case with `PUT`).\n* For `PUT` requests to `/items/{item_id}`, read the body as JSON:\n * Check that it has a required attribute `name` that should be a `str`.\n * Check that it has a required attribute `price` that has to be a `float`.\n * Check that it has an optional attribute `is_offer`, that should be a `bool`, if present.\n * All this would also work for deeply nested JSON objects.\n* Convert from and to JSON automatically.\n* Document everything with OpenAPI, that can be used by:\n * Interactive documentation systems.\n * Automatic client code generation systems, for many languages.\n* Provide 2 interactive documentation web interfaces directly.\n\n---\n\nWe just scratched the surface, but you already get the idea of how it all works.\n\nTry changing the line with:\n\n```Python\n return {\"item_name\": item.name, \"item_id\": item_id}\n```\n\n...from:\n\n```Python\n ... \"item_name\": item.name ...\n```\n\n...to:\n\n```Python\n ... \"item_price\": item.price ...\n```\n\n...and see how your editor will auto-complete the attributes and know their types:\n\n![editor support](https://fastapi.tiangolo.com/img/vscode-completion.png)\n\nFor a more complete example including more features, see the Tutorial - User Guide.\n\n**Spoiler alert**: the tutorial - user guide includes:\n\n* Declaration of **parameters** from other different places such as: **headers**, **cookies**, **form fields** and **files**.\n* How to set **validation constraints** such as `maximum_length` or `regex`.\n* A very powerful and easy to use **Dependency Injection** system.\n* Security and authentication, including support for **OAuth2** with **JWT tokens** and **HTTP Basic** auth.\n* More advanced (but equally easy) techniques for declaring **deeply nested JSON models** (thanks to Pydantic).\n* **GraphQL** integration with [Strawberry](https://strawberry.rocks) and other libraries.\n* Many extra features (thanks to Starlette) such as:\n * **WebSockets**\n * extremely easy tests based on HTTPX and `pytest`\n * **CORS**\n * **Cookie Sessions**\n * ...and more.\n\n### Deploy your app (optional)\n\nYou can optionally deploy your FastAPI app to [FastAPI Cloud](https://fastapicloud.com) with a single command. 🚀\n\n
\n\n```console\n$ uv run fastapi deploy\n\nDeploying to FastAPI Cloud...\n\n✅ Deployment successful!\n\n🐔 Ready the chicken! Your app is ready at https://myapp.fastapicloud.dev\n```\n\n
\n\nThe CLI will automatically detect your FastAPI application and deploy it to the cloud. If you are not logged in, your browser will open to complete the authentication process.\n\nThat's it! Now you can access your app at that URL. ✨\n\n#### About FastAPI Cloud\n\n**[FastAPI Cloud](https://fastapicloud.com)** is built by the same author and team behind **FastAPI**.\n\nIt streamlines the process of **building**, **deploying**, and **accessing** an API with minimal effort.\n\nIt brings the same **developer experience** of building apps with FastAPI to **deploying** them to the cloud. 🎉\n\nFastAPI Cloud is the primary sponsor and funding provider for the *FastAPI and friends* open source projects. ✨\n\n#### Deploy to other cloud providers\n\nFastAPI is open source and based on standards. You can deploy FastAPI apps to any cloud provider you choose.\n\nFollow your cloud provider's guides to deploy FastAPI apps with them. 🤓\n\n## Performance\n\nIndependent TechEmpower benchmarks show **FastAPI** applications running under Uvicorn as [one of the fastest Python frameworks available](https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7), only below Starlette and Uvicorn themselves (used internally by FastAPI). (*)\n\nTo understand more about it, see the section [Benchmarks](https://fastapi.tiangolo.com/benchmarks/).\n\n## Dependencies\n\nFastAPI depends on Pydantic and Starlette.\n\n### `standard` Dependencies\n\nWhen you install FastAPI with `uv add \"fastapi[standard]\"` it comes with the `standard` group of optional dependencies:\n\nUsed by Pydantic:\n\n* [`email-validator`](https://github.com/JoshData/python-email-validator) - for email validation.\n\nUsed by Starlette:\n\n* [`httpx`](https://www.python-httpx.org) - Required if you want to use the `TestClient`.\n* [`jinja2`](https://jinja.palletsprojects.com) - Required if you want to use the default template configuration.\n* [`python-multipart`](https://github.com/Kludex/python-multipart) - Required if you want to support form \"parsing\", with `request.form()`.\n\nUsed by FastAPI:\n\n* [`uvicorn`](https://uvicorn.dev) - for the server that loads and serves your application. This includes `uvicorn[standard]`, which includes some dependencies (e.g. `uvloop`) needed for high performance serving.\n* `fastapi-cli[standard]` - to provide the `fastapi` command.\n * This includes `fastapi-cloud-cli`, which allows you to deploy your FastAPI application to [FastAPI Cloud](https://fastapicloud.com).\n\n### Without `standard` Dependencies\n\nIf you don't want to include the `standard` optional dependencies, you can install with `uv add fastapi` instead of `uv add \"fastapi[standard]\"`.\n\n### Without `fastapi-cloud-cli`\n\nIf you want to install FastAPI with the standard dependencies but without the `fastapi-cloud-cli`, you can install with `uv add \"fastapi[standard-no-fastapi-cloud-cli]\"`.\n\n### Additional Optional Dependencies\n\nThere are some additional dependencies you might want to install.\n\nAdditional optional Pydantic dependencies:\n\n* [`pydantic-settings`](https://pydantic.dev/docs/validation/latest/concepts/pydantic_settings/) - for settings management.\n* [`pydantic-extra-types`](https://github.com/pydantic/pydantic-extra-types) - for extra types to be used with Pydantic.\n\nAdditional optional FastAPI dependencies:\n\n* [`orjson`](https://github.com/ijl/orjson) - Required if you want to use `ORJSONResponse`.\n* [`ujson`](https://github.com/ultrajson/ultrajson) - Required if you want to use `UJSONResponse`.\n\n## License\n\nThis project is licensed under the terms of the MIT license.\n", + "description_content_type": "text/markdown", + "author_email": "=?utf-8?q?Sebasti=C3=A1n_Ram=C3=ADrez?= ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Intended Audience :: Information Technology", + "Intended Audience :: System Administrators", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python", + "Topic :: Internet", + "Topic :: Software Development :: Libraries :: Application Frameworks", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Software Development :: Libraries", + "Topic :: Software Development", + "Typing :: Typed", + "Development Status :: 4 - Beta", + "Environment :: Web Environment", + "Framework :: AsyncIO", + "Framework :: FastAPI", + "Framework :: Pydantic", + "Framework :: Pydantic :: 2", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Topic :: Internet :: WWW/HTTP :: HTTP Servers", + "Topic :: Internet :: WWW/HTTP" + ], + "requires_dist": [ + "starlette>=0.46.0", + "pydantic>=2.9.0", + "typing-extensions>=4.8.0", + "typing-inspection>=0.4.2", + "annotated-doc>=0.0.2", + "fastapi-cli[standard]>=0.0.32; extra == \"standard\"", + "fastar>=0.9.0; extra == \"standard\"", + "httpx<1.0.0,>=0.23.0; extra == \"standard\"", + "jinja2>=3.1.5; extra == \"standard\"", + "python-multipart>=0.0.18; extra == \"standard\"", + "email-validator>=2.0.0; extra == \"standard\"", + "uvicorn[standard]>=0.12.0; extra == \"standard\"", + "pydantic-settings>=2.0.0; extra == \"standard\"", + "pydantic-extra-types>=2.0.0; extra == \"standard\"", + "fastapi-cli[standard-no-fastapi-cloud-cli]>=0.0.32; extra == \"standard-no-fastapi-cloud-cli\"", + "httpx<1.0.0,>=0.23.0; extra == \"standard-no-fastapi-cloud-cli\"", + "jinja2>=3.1.5; extra == \"standard-no-fastapi-cloud-cli\"", + "python-multipart>=0.0.18; extra == \"standard-no-fastapi-cloud-cli\"", + "email-validator>=2.0.0; extra == \"standard-no-fastapi-cloud-cli\"", + "uvicorn[standard]>=0.12.0; extra == \"standard-no-fastapi-cloud-cli\"", + "pydantic-settings>=2.0.0; extra == \"standard-no-fastapi-cloud-cli\"", + "pydantic-extra-types>=2.0.0; extra == \"standard-no-fastapi-cloud-cli\"", + "fastapi-cli[standard]>=0.0.32; extra == \"all\"", + "httpx<1.0.0,>=0.23.0; extra == \"all\"", + "jinja2>=3.1.5; extra == \"all\"", + "python-multipart>=0.0.18; extra == \"all\"", + "itsdangerous>=1.1.0; extra == \"all\"", + "pyyaml>=5.3.1; extra == \"all\"", + "email-validator>=2.0.0; extra == \"all\"", + "uvicorn[standard]>=0.12.0; extra == \"all\"", + "pydantic-settings>=2.0.0; extra == \"all\"", + "pydantic-extra-types>=2.0.0; extra == \"all\"" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://github.com/fastapi/fastapi", + "Documentation, https://fastapi.tiangolo.com/", + "Repository, https://github.com/fastapi/fastapi", + "Issues, https://github.com/fastapi/fastapi/issues", + "Changelog, https://fastapi.tiangolo.com/release-notes/" + ], + "provides_extra": [ + "standard", + "standard-no-fastapi-cloud-cli", + "all" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/38/0c/b54a4fdd7f90a3af8b02ebc9ce6712c2c208b7926a2f7bad95c33ebbe943/uvicorn-0.54.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf" + }, + "hash": "sha256=505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.5", + "name": "uvicorn", + "version": "0.54.0", + "summary": "The lightning-fast ASGI server.", + "description": "

\n uvicorn\n

\n\n

\nAn ASGI web server, for Python.\n

\n\n---\n\n[![Build Status](https://github.com/Kludex/uvicorn/workflows/Test%20Suite/badge.svg)](https://github.com/Kludex/uvicorn/actions)\n[![Package version](https://badge.fury.io/py/uvicorn.svg)](https://pypi.python.org/pypi/uvicorn)\n[![Supported Python Version](https://img.shields.io/pypi/pyversions/uvicorn.svg?color=%2334D058)](https://pypi.org/project/uvicorn)\n[![Discord](https://img.shields.io/discord/1051468649518616576?logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2)](https://discord.gg/RxKUF5JuHs)\n\n---\n\n**Documentation**: [https://uvicorn.dev](https://uvicorn.dev)\n\n**Source Code**: [https://www.github.com/Kludex/uvicorn](https://www.github.com/Kludex/uvicorn)\n\n---\n\nUvicorn is an ASGI web server implementation for Python.\n\nUntil recently Python has lacked a minimal low-level server/application interface for\nasync frameworks. The [ASGI specification][asgi] fills this gap, and means we're now able to\nstart building a common set of tooling usable across all async frameworks.\n\nUvicorn currently supports HTTP/1.1, HTTP/2 and WebSockets.\n\n## Quickstart\n\nInstall using `pip`:\n\n```shell\n$ pip install uvicorn\n```\n\nThis will install uvicorn with minimal (pure Python) dependencies.\n\n```shell\n$ pip install 'uvicorn[standard]'\n```\n\nThis will install uvicorn with \"Cython-based\" dependencies (where possible) and other \"optional extras\".\n\nIn this context, \"Cython-based\" means the following:\n\n- the event loop `uvloop` will be installed and used if possible.\n- the http protocol will be handled by `httptools` if possible.\n\nMoreover, \"optional extras\" means that:\n\n- the websocket protocol will be handled by `websockets` (should you want to use `wsproto` you'd need to install it manually) if possible.\n- the `--reload` flag in development mode will use `watchfiles`.\n- `python-dotenv` will be installed should you want to use the `--env-file` option.\n- `PyYAML` will be installed to allow you to provide a `.yaml` file to `--log-config`, if desired.\n\nCreate an application, in `example.py`:\n\n```python\nasync def app(scope, receive, send):\n assert scope['type'] == 'http'\n\n await send({\n 'type': 'http.response.start',\n 'status': 200,\n 'headers': [\n (b'content-type', b'text/plain'),\n ],\n })\n await send({\n 'type': 'http.response.body',\n 'body': b'Hello, world!',\n })\n```\n\nRun the server:\n\n```shell\n$ uvicorn example:app\n```\n\n---\n\n## Why ASGI?\n\nMost well established Python Web frameworks started out as WSGI-based frameworks.\n\nWSGI applications are a single, synchronous callable that takes a request and returns a response.\nThis doesn’t allow for long-lived connections, like you get with long-poll HTTP or WebSocket connections,\nwhich WSGI doesn't support well.\n\nHaving an async concurrency model also allows for options such as lightweight background tasks,\nand can be less of a limiting factor for endpoints that have long periods being blocked on network\nI/O such as dealing with slow HTTP requests.\n\n---\n\n## Alternative ASGI servers\n\nA strength of the ASGI protocol is that it decouples the server implementation\nfrom the application framework. This allows for an ecosystem of interoperating\nwebservers and application frameworks.\n\n### Daphne\n\nThe first ASGI server implementation, originally developed to power Django Channels, is [the Daphne webserver][daphne].\n\nIt is run widely in production, and supports HTTP/1.1, HTTP/2, and WebSockets.\n\nAny of the example applications given here can equally well be run using `daphne` instead.\n\n```\n$ pip install daphne\n$ daphne app:App\n```\n\n### Hypercorn\n\n[Hypercorn][hypercorn] was initially part of the Quart web framework, before\nbeing separated out into a standalone ASGI server.\n\nHypercorn supports HTTP/1.1, HTTP/2, and WebSockets.\n\nIt also supports [the excellent `trio` async framework][trio], as an alternative to `asyncio`.\n\n```\n$ pip install hypercorn\n$ hypercorn app:App\n```\n\n### Mangum\n\n[Mangum][mangum] is an adapter for using ASGI applications with AWS Lambda & API Gateway.\n\n### Granian\n\n[Granian][granian] is an ASGI compatible Rust HTTP server which supports HTTP/2, TLS and WebSockets.\n\n---\n\n

Uvicorn is BSD licensed code.
Designed & crafted with care.

— 🦄 —

\n\n[asgi]: https://asgi.readthedocs.io/en/latest/\n[daphne]: https://github.com/django/daphne\n[hypercorn]: https://github.com/pgjones/hypercorn\n[trio]: https://trio.readthedocs.io\n[mangum]: https://github.com/jordaneremieff/mangum\n[granian]: https://github.com/emmett-framework/granian\n", + "description_content_type": "text/markdown", + "author_email": "Tom Christie ", + "maintainer_email": "Marcelo Trylesinski ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.md" + ], + "classifier": [ + "Development Status :: 4 - Beta", + "Environment :: Web Environment", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Internet :: WWW/HTTP" + ], + "requires_dist": [ + "click>=7.0", + "h11>=0.8", + "typing-extensions>=4.0; python_version < '3.11'", + "httptools>=0.8.0; extra == 'standard'", + "python-dotenv>=0.13; extra == 'standard'", + "pyyaml>=5.1; extra == 'standard'", + "uvloop>=0.15.1; (sys_platform != 'win32' and (sys_platform != 'cygwin' and platform_python_implementation != 'PyPy')) and extra == 'standard'", + "watchfiles>=0.20; extra == 'standard'", + "websockets>=13.0; extra == 'standard'" + ], + "requires_python": ">=3.10", + "project_url": [ + "Changelog, https://uvicorn.dev/release-notes", + "Funding, https://github.com/sponsors/Kludex", + "Homepage, https://uvicorn.dev/", + "Source, https://github.com/Kludex/uvicorn" + ], + "provides_extra": [ + "standard" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", + "archive_info": { + "hashes": { + "sha256": "1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979" + }, + "hash": "sha256=1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "psutil", + "version": "7.2.2", + "platform": [ + "Platform Independent" + ], + "summary": "Cross-platform lib for process and system monitoring.", + "description": "| |downloads| |stars| |forks| |contributors| |packages|\n| |version| |license| |stackoverflow| |twitter| |tidelift|\n| |github-actions-wheels| |github-actions-bsd|\n\n.. |downloads| image:: https://img.shields.io/pypi/dm/psutil.svg\n :target: https://clickpy.clickhouse.com/dashboard/psutil\n :alt: Downloads\n\n.. |stars| image:: https://img.shields.io/github/stars/giampaolo/psutil.svg\n :target: https://github.com/giampaolo/psutil/stargazers\n :alt: Github stars\n\n.. |forks| image:: https://img.shields.io/github/forks/giampaolo/psutil.svg\n :target: https://github.com/giampaolo/psutil/network/members\n :alt: Github forks\n\n.. |contributors| image:: https://img.shields.io/github/contributors/giampaolo/psutil.svg\n :target: https://github.com/giampaolo/psutil/graphs/contributors\n :alt: Contributors\n\n.. |stackoverflow| image:: https://img.shields.io/badge/stackoverflow-Ask%20questions-blue.svg\n :target: https://stackoverflow.com/questions/tagged/psutil\n :alt: Stackoverflow\n\n.. |github-actions-wheels| image:: https://img.shields.io/github/actions/workflow/status/giampaolo/psutil/.github/workflows/build.yml.svg?label=Linux%2C%20macOS%2C%20Windows\n :target: https://github.com/giampaolo/psutil/actions?query=workflow%3Abuild\n :alt: Linux, macOS, Windows\n\n.. |github-actions-bsd| image:: https://img.shields.io/github/actions/workflow/status/giampaolo/psutil/.github/workflows/bsd.yml.svg?label=FreeBSD,%20NetBSD,%20OpenBSD\n :target: https://github.com/giampaolo/psutil/actions?query=workflow%3Absd-tests\n :alt: FreeBSD, NetBSD, OpenBSD\n\n.. |version| image:: https://img.shields.io/pypi/v/psutil.svg?label=pypi\n :target: https://pypi.org/project/psutil\n :alt: Latest version\n\n.. |packages| image:: https://repology.org/badge/tiny-repos/python:psutil.svg\n :target: https://repology.org/metapackage/python:psutil/versions\n :alt: Binary packages\n\n.. |license| image:: https://img.shields.io/pypi/l/psutil.svg\n :target: https://github.com/giampaolo/psutil/blob/master/LICENSE\n :alt: License\n\n.. |twitter| image:: https://img.shields.io/twitter/follow/grodola?style=flat\n :target: https://twitter.com/grodola\n :alt: Twitter Follow\n\n.. |tidelift| image:: https://tidelift.com/badges/github/giampaolo/psutil?style=flat\n :target: https://tidelift.com/subscription/pkg/pypi-psutil?utm_source=pypi-psutil&utm_medium=referral&utm_campaign=readme\n :alt: Tidelift\n\n-----\n\nQuick links\n===========\n\n- `Home page `_\n- `Install `_\n- `Documentation `_\n- `Download `_\n- `Forum `_\n- `StackOverflow `_\n- `Blog `_\n- `What's new `_\n\n\nSummary\n=======\n\npsutil (process and system utilities) is a cross-platform library for\nretrieving information on **running processes** and **system utilization**\n(CPU, memory, disks, network, sensors) in Python.\nIt is useful mainly for **system monitoring**, **profiling and limiting process\nresources** and **management of running processes**.\nIt implements many functionalities offered by classic UNIX command line tools\nsuch as *ps, top, iotop, lsof, netstat, ifconfig, free* and others.\npsutil currently supports the following platforms:\n\n- **Linux**\n- **Windows**\n- **macOS**\n- **FreeBSD, OpenBSD**, **NetBSD**\n- **Sun Solaris**\n- **AIX**\n\nSupported Python versions are cPython 3.6+ and `PyPy `__.\nLatest psutil version supporting Python 2.7 is\n`psutil 6.1.1 `__.\n\nExample usages\n==============\n\nThis represents pretty much the whole psutil API.\n\nCPU\n---\n\n.. code-block:: python\n\n >>> import psutil\n >>>\n >>> psutil.cpu_times()\n scputimes(user=3961.46, nice=169.729, system=2150.659, idle=16900.540, iowait=629.59, irq=0.0, softirq=19.42, steal=0.0, guest=0, guest_nice=0.0)\n >>>\n >>> for x in range(3):\n ... psutil.cpu_percent(interval=1)\n ...\n 4.0\n 5.9\n 3.8\n >>>\n >>> for x in range(3):\n ... psutil.cpu_percent(interval=1, percpu=True)\n ...\n [4.0, 6.9, 3.7, 9.2]\n [7.0, 8.5, 2.4, 2.1]\n [1.2, 9.0, 9.9, 7.2]\n >>>\n >>> for x in range(3):\n ... psutil.cpu_times_percent(interval=1, percpu=False)\n ...\n scputimes(user=1.5, nice=0.0, system=0.5, idle=96.5, iowait=1.5, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)\n scputimes(user=1.0, nice=0.0, system=0.0, idle=99.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)\n scputimes(user=2.0, nice=0.0, system=0.0, idle=98.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)\n >>>\n >>> psutil.cpu_count()\n 4\n >>> psutil.cpu_count(logical=False)\n 2\n >>>\n >>> psutil.cpu_stats()\n scpustats(ctx_switches=20455687, interrupts=6598984, soft_interrupts=2134212, syscalls=0)\n >>>\n >>> psutil.cpu_freq()\n scpufreq(current=931.42925, min=800.0, max=3500.0)\n >>>\n >>> psutil.getloadavg() # also on Windows (emulated)\n (3.14, 3.89, 4.67)\n\nMemory\n------\n\n.. code-block:: python\n\n >>> psutil.virtual_memory()\n svmem(total=10367352832, available=6472179712, percent=37.6, used=8186245120, free=2181107712, active=4748992512, inactive=2758115328, buffers=790724608, cached=3500347392, shared=787554304)\n >>> psutil.swap_memory()\n sswap(total=2097147904, used=296128512, free=1801019392, percent=14.1, sin=304193536, sout=677842944)\n >>>\n\nDisks\n-----\n\n.. code-block:: python\n\n >>> psutil.disk_partitions()\n [sdiskpart(device='/dev/sda1', mountpoint='/', fstype='ext4', opts='rw,nosuid'),\n sdiskpart(device='/dev/sda2', mountpoint='/home', fstype='ext', opts='rw')]\n >>>\n >>> psutil.disk_usage('/')\n sdiskusage(total=21378641920, used=4809781248, free=15482871808, percent=22.5)\n >>>\n >>> psutil.disk_io_counters(perdisk=False)\n sdiskio(read_count=719566, write_count=1082197, read_bytes=18626220032, write_bytes=24081764352, read_time=5023392, write_time=63199568, read_merged_count=619166, write_merged_count=812396, busy_time=4523412)\n >>>\n\nNetwork\n-------\n\n.. code-block:: python\n\n >>> psutil.net_io_counters(pernic=True)\n {'eth0': netio(bytes_sent=485291293, bytes_recv=6004858642, packets_sent=3251564, packets_recv=4787798, errin=0, errout=0, dropin=0, dropout=0),\n 'lo': netio(bytes_sent=2838627, bytes_recv=2838627, packets_sent=30567, packets_recv=30567, errin=0, errout=0, dropin=0, dropout=0)}\n >>>\n >>> psutil.net_connections(kind='tcp')\n [sconn(fd=115, family=, type=, laddr=addr(ip='10.0.0.1', port=48776), raddr=addr(ip='93.186.135.91', port=80), status='ESTABLISHED', pid=1254),\n sconn(fd=117, family=, type=, laddr=addr(ip='10.0.0.1', port=43761), raddr=addr(ip='72.14.234.100', port=80), status='CLOSING', pid=2987),\n ...]\n >>>\n >>> psutil.net_if_addrs()\n {'lo': [snicaddr(family=, address='127.0.0.1', netmask='255.0.0.0', broadcast='127.0.0.1', ptp=None),\n snicaddr(family=, address='::1', netmask='ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', broadcast=None, ptp=None),\n snicaddr(family=, address='00:00:00:00:00:00', netmask=None, broadcast='00:00:00:00:00:00', ptp=None)],\n 'wlan0': [snicaddr(family=, address='192.168.1.3', netmask='255.255.255.0', broadcast='192.168.1.255', ptp=None),\n snicaddr(family=, address='fe80::c685:8ff:fe45:641%wlan0', netmask='ffff:ffff:ffff:ffff::', broadcast=None, ptp=None),\n snicaddr(family=, address='c4:85:08:45:06:41', netmask=None, broadcast='ff:ff:ff:ff:ff:ff', ptp=None)]}\n >>>\n >>> psutil.net_if_stats()\n {'lo': snicstats(isup=True, duplex=, speed=0, mtu=65536, flags='up,loopback,running'),\n 'wlan0': snicstats(isup=True, duplex=, speed=100, mtu=1500, flags='up,broadcast,running,multicast')}\n >>>\n\nSensors\n-------\n\n.. code-block:: python\n\n >>> import psutil\n >>> psutil.sensors_temperatures()\n {'acpitz': [shwtemp(label='', current=47.0, high=103.0, critical=103.0)],\n 'asus': [shwtemp(label='', current=47.0, high=None, critical=None)],\n 'coretemp': [shwtemp(label='Physical id 0', current=52.0, high=100.0, critical=100.0),\n shwtemp(label='Core 0', current=45.0, high=100.0, critical=100.0)]}\n >>>\n >>> psutil.sensors_fans()\n {'asus': [sfan(label='cpu_fan', current=3200)]}\n >>>\n >>> psutil.sensors_battery()\n sbattery(percent=93, secsleft=16628, power_plugged=False)\n >>>\n\nOther system info\n-----------------\n\n.. code-block:: python\n\n >>> import psutil\n >>> psutil.users()\n [suser(name='giampaolo', terminal='pts/2', host='localhost', started=1340737536.0, pid=1352),\n suser(name='giampaolo', terminal='pts/3', host='localhost', started=1340737792.0, pid=1788)]\n >>>\n >>> psutil.boot_time()\n 1365519115.0\n >>>\n\nProcess management\n------------------\n\n.. code-block:: python\n\n >>> import psutil\n >>> psutil.pids()\n [1, 2, 3, 4, 5, 6, 7, 46, 48, 50, 51, 178, 182, 222, 223, 224, 268, 1215,\n 1216, 1220, 1221, 1243, 1244, 1301, 1601, 2237, 2355, 2637, 2774, 3932,\n 4176, 4177, 4185, 4187, 4189, 4225, 4243, 4245, 4263, 4282, 4306, 4311,\n 4312, 4313, 4314, 4337, 4339, 4357, 4358, 4363, 4383, 4395, 4408, 4433,\n 4443, 4445, 4446, 5167, 5234, 5235, 5252, 5318, 5424, 5644, 6987, 7054,\n 7055, 7071]\n >>>\n >>> p = psutil.Process(7055)\n >>> p\n psutil.Process(pid=7055, name='python3', status='running', started='09:04:44')\n >>> p.pid\n 7055\n >>> p.name()\n 'python3'\n >>> p.exe()\n '/usr/bin/python3'\n >>> p.cwd()\n '/home/giampaolo'\n >>> p.cmdline()\n ['/usr/bin/python3', 'main.py']\n >>>\n >>> p.ppid()\n 7054\n >>> p.parent()\n psutil.Process(pid=4699, name='bash', status='sleeping', started='09:06:44')\n >>> p.parents()\n [psutil.Process(pid=4699, name='bash', started='09:06:44'),\n psutil.Process(pid=4689, name='gnome-terminal-server', status='sleeping', started='0:06:44'),\n psutil.Process(pid=1, name='systemd', status='sleeping', started='05:56:55')]\n >>> p.children(recursive=True)\n [psutil.Process(pid=29835, name='python3', status='sleeping', started='11:45:38'),\n psutil.Process(pid=29836, name='python3', status='waking', started='11:43:39')]\n >>>\n >>> p.status()\n 'running'\n >>> p.create_time()\n 1267551141.5019531\n >>> p.terminal()\n '/dev/pts/0'\n >>>\n >>> p.username()\n 'giampaolo'\n >>> p.uids()\n puids(real=1000, effective=1000, saved=1000)\n >>> p.gids()\n pgids(real=1000, effective=1000, saved=1000)\n >>>\n >>> p.cpu_times()\n pcputimes(user=1.02, system=0.31, children_user=0.32, children_system=0.1, iowait=0.0)\n >>> p.cpu_percent(interval=1.0)\n 12.1\n >>> p.cpu_affinity()\n [0, 1, 2, 3]\n >>> p.cpu_affinity([0, 1]) # set\n >>> p.cpu_num()\n 1\n >>>\n >>> p.memory_info()\n pmem(rss=10915840, vms=67608576, shared=3313664, text=2310144, lib=0, data=7262208, dirty=0)\n >>> p.memory_full_info() # \"real\" USS memory usage (Linux, macOS, Win only)\n pfullmem(rss=10199040, vms=52133888, shared=3887104, text=2867200, lib=0, data=5967872, dirty=0, uss=6545408, pss=6872064, swap=0)\n >>> p.memory_percent()\n 0.7823\n >>> p.memory_maps()\n [pmmap_grouped(path='/lib/x8664-linux-gnu/libutil-2.15.so', rss=32768, size=2125824, pss=32768, shared_clean=0, shared_dirty=0, private_clean=20480, private_dirty=12288, referenced=32768, anonymous=12288, swap=0),\n pmmap_grouped(path='/lib/x8664-linux-gnu/libc-2.15.so', rss=3821568, size=3842048, pss=3821568, shared_clean=0, shared_dirty=0, private_clean=0, private_dirty=3821568, referenced=3575808, anonymous=3821568, swap=0),\n pmmap_grouped(path='[heap]', rss=32768, size=139264, pss=32768, shared_clean=0, shared_dirty=0, private_clean=0, private_dirty=32768, referenced=32768, anonymous=32768, swap=0),\n pmmap_grouped(path='[stack]', rss=2465792, size=2494464, pss=2465792, shared_clean=0, shared_dirty=0, private_clean=0, private_dirty=2465792, referenced=2277376, anonymous=2465792, swap=0),\n ...]\n >>>\n >>> p.io_counters()\n pio(read_count=478001, write_count=59371, read_bytes=700416, write_bytes=69632, read_chars=456232, write_chars=517543)\n >>>\n >>> p.open_files()\n [popenfile(path='/home/giampaolo/monit.py', fd=3, position=0, mode='r', flags=32768),\n popenfile(path='/var/log/monit.log', fd=4, position=235542, mode='a', flags=33793)]\n >>>\n >>> p.net_connections(kind='tcp')\n [pconn(fd=115, family=, type=, laddr=addr(ip='10.0.0.1', port=48776), raddr=addr(ip='93.186.135.91', port=80), status='ESTABLISHED'),\n pconn(fd=117, family=, type=, laddr=addr(ip='10.0.0.1', port=43761), raddr=addr(ip='72.14.234.100', port=80), status='CLOSING')]\n >>>\n >>> p.threads()\n [pthread(id=5234, user_time=22.5, system_time=9.2891),\n pthread(id=5237, user_time=0.0707, system_time=1.1)]\n >>>\n >>> p.num_threads()\n 4\n >>> p.num_fds()\n 8\n >>> p.num_ctx_switches()\n pctxsw(voluntary=78, involuntary=19)\n >>>\n >>> p.nice()\n 0\n >>> p.nice(10) # set\n >>>\n >>> p.ionice(psutil.IOPRIO_CLASS_IDLE) # IO priority (Win and Linux only)\n >>> p.ionice()\n pionice(ioclass=, value=0)\n >>>\n >>> p.rlimit(psutil.RLIMIT_NOFILE, (5, 5)) # set resource limits (Linux only)\n >>> p.rlimit(psutil.RLIMIT_NOFILE)\n (5, 5)\n >>>\n >>> p.environ()\n {'LC_PAPER': 'it_IT.UTF-8', 'SHELL': '/bin/bash', 'GREP_OPTIONS': '--color=auto',\n 'XDG_CONFIG_DIRS': '/etc/xdg/xdg-ubuntu:/usr/share/upstart/xdg:/etc/xdg',\n ...}\n >>>\n >>> p.as_dict()\n {'status': 'running', 'num_ctx_switches': pctxsw(voluntary=63, involuntary=1), 'pid': 5457, ...}\n >>> p.is_running()\n True\n >>> p.suspend()\n >>> p.resume()\n >>>\n >>> p.terminate()\n >>> p.kill()\n >>> p.wait(timeout=3)\n \n >>>\n >>> psutil.test()\n USER PID %CPU %MEM VSZ RSS TTY START TIME COMMAND\n root 1 0.0 0.0 24584 2240 Jun17 00:00 init\n root 2 0.0 0.0 0 0 Jun17 00:00 kthreadd\n ...\n giampaolo 31475 0.0 0.0 20760 3024 /dev/pts/0 Jun19 00:00 python2.4\n giampaolo 31721 0.0 2.2 773060 181896 00:04 10:30 chrome\n root 31763 0.0 0.0 0 0 00:05 00:00 kworker/0:1\n >>>\n\nFurther process APIs\n--------------------\n\n.. code-block:: python\n\n >>> import psutil\n >>> for proc in psutil.process_iter(['pid', 'name']):\n ... print(proc.info)\n ...\n {'pid': 1, 'name': 'systemd'}\n {'pid': 2, 'name': 'kthreadd'}\n {'pid': 3, 'name': 'ksoftirqd/0'}\n ...\n >>>\n >>> psutil.pid_exists(3)\n True\n >>>\n >>> def on_terminate(proc):\n ... print(\"process {} terminated\".format(proc))\n ...\n >>> # waits for multiple processes to terminate\n >>> gone, alive = psutil.wait_procs(procs_list, timeout=3, callback=on_terminate)\n >>>\n\nHeap info\n---------\n\n.. code-block:: python\n\n >>> import psutil\n >>> psutil.heap_info()\n pheap(heap_used=5177792, mmap_used=819200)\n >>> psutil.heap_trim()\n\nSee also `psleak `__\n\nWindows services\n----------------\n\n.. code-block:: python\n\n >>> list(psutil.win_service_iter())\n [,\n ,\n ,\n ,\n ...]\n >>> s = psutil.win_service_get('alg')\n >>> s.as_dict()\n {'binpath': 'C:\\\\Windows\\\\System32\\\\alg.exe',\n 'description': 'Provides support for 3rd party protocol plug-ins for Internet Connection Sharing',\n 'display_name': 'Application Layer Gateway Service',\n 'name': 'alg',\n 'pid': None,\n 'start_type': 'manual',\n 'status': 'stopped',\n 'username': 'NT AUTHORITY\\\\LocalService'}\n\nProjects using psutil\n=====================\n\nHere's some I find particularly interesting:\n\n- https://github.com/giampaolo/psleak\n- https://github.com/google/grr\n- https://github.com/facebook/osquery/\n- https://github.com/nicolargo/glances\n- https://github.com/aristocratos/bpytop\n- https://github.com/Jahaja/psdash\n- https://github.com/ajenti/ajenti\n- https://github.com/home-assistant/home-assistant/\n\nPortings\n========\n\n- Go: https://github.com/shirou/gopsutil\n- C: https://github.com/hamon-in/cpslib\n- Rust: https://github.com/rust-psutil/rust-psutil\n- Nim: https://github.com/johnscillieri/psutil-nim\n\n\n\n", + "description_content_type": "text/x-rst", + "keywords": [ + "ps", + "top", + "kill", + "free", + "lsof", + "netstat", + "nice", + "tty", + "ionice", + "uptime", + "taskmgr", + "process", + "df", + "iotop", + "iostat", + "ifconfig", + "taskset", + "who", + "pidof", + "pmap", + "smem", + "pstree", + "monitoring", + "ulimit", + "prlimit", + "smem", + "performance", + "metrics", + "agent", + "observability" + ], + "home_page": "https://github.com/giampaolo/psutil", + "author": "Giampaolo Rodola", + "author_email": "g.rodola@gmail.com", + "license": "BSD-3-Clause", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Environment :: Console", + "Intended Audience :: Developers", + "Intended Audience :: Information Technology", + "Intended Audience :: System Administrators", + "Operating System :: MacOS :: MacOS X", + "Operating System :: Microsoft :: Windows :: Windows 10", + "Operating System :: Microsoft :: Windows :: Windows 11", + "Operating System :: Microsoft :: Windows :: Windows 7", + "Operating System :: Microsoft :: Windows :: Windows 8", + "Operating System :: Microsoft :: Windows :: Windows 8.1", + "Operating System :: Microsoft :: Windows :: Windows Server 2003", + "Operating System :: Microsoft :: Windows :: Windows Server 2008", + "Operating System :: Microsoft :: Windows :: Windows Vista", + "Operating System :: Microsoft :: Windows", + "Operating System :: Microsoft", + "Operating System :: OS Independent", + "Operating System :: POSIX :: AIX", + "Operating System :: POSIX :: BSD :: FreeBSD", + "Operating System :: POSIX :: BSD :: NetBSD", + "Operating System :: POSIX :: BSD :: OpenBSD", + "Operating System :: POSIX :: BSD", + "Operating System :: POSIX :: Linux", + "Operating System :: POSIX :: SunOS/Solaris", + "Operating System :: POSIX", + "Programming Language :: C", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Programming Language :: Python", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Software Development :: Libraries", + "Topic :: System :: Benchmark", + "Topic :: System :: Hardware", + "Topic :: System :: Monitoring", + "Topic :: System :: Networking :: Monitoring :: Hardware Watchdog", + "Topic :: System :: Networking :: Monitoring", + "Topic :: System :: Networking", + "Topic :: System :: Operating System", + "Topic :: System :: Systems Administration", + "Topic :: Utilities" + ], + "requires_dist": [ + "psleak ; extra == 'dev'", + "pytest ; extra == 'dev'", + "pytest-instafail ; extra == 'dev'", + "pytest-xdist ; extra == 'dev'", + "setuptools ; extra == 'dev'", + "abi3audit ; extra == 'dev'", + "black ; extra == 'dev'", + "check-manifest ; extra == 'dev'", + "coverage ; extra == 'dev'", + "packaging ; extra == 'dev'", + "pylint ; extra == 'dev'", + "pyperf ; extra == 'dev'", + "pypinfo ; extra == 'dev'", + "pytest-cov ; extra == 'dev'", + "requests ; extra == 'dev'", + "rstcheck ; extra == 'dev'", + "ruff ; extra == 'dev'", + "sphinx ; extra == 'dev'", + "sphinx-rtd-theme ; extra == 'dev'", + "toml-sort ; extra == 'dev'", + "twine ; extra == 'dev'", + "validate-pyproject[all] ; extra == 'dev'", + "virtualenv ; extra == 'dev'", + "vulture ; extra == 'dev'", + "wheel ; extra == 'dev'", + "colorama ; (os_name == \"nt\") and extra == 'dev'", + "pyreadline3 ; (os_name == \"nt\") and extra == 'dev'", + "pywin32 ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'dev'", + "wheel ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'dev'", + "wmi ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'dev'", + "psleak ; extra == 'test'", + "pytest ; extra == 'test'", + "pytest-instafail ; extra == 'test'", + "pytest-xdist ; extra == 'test'", + "setuptools ; extra == 'test'", + "pywin32 ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'test'", + "wheel ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'test'", + "wmi ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'test'" + ], + "requires_python": ">=3.6", + "provides_extra": [ + "dev", + "test" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/c7/da/32c752228ae345f489e3a42499d817b6c3996da7e8a3bc7a04fc806b243b/pillow-12.3.0-cp314-cp314-macosx_11_0_arm64.whl", + "archive_info": { + "hashes": { + "sha256": "e158cb00350dc278f3b91551101aa7d12415a66ebf2c91d8d5ac14e56ddd3ad0" + }, + "hash": "sha256=e158cb00350dc278f3b91551101aa7d12415a66ebf2c91d8d5ac14e56ddd3ad0" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.4", + "name": "pillow", + "version": "12.3.0", + "dynamic": [ + "license-file" + ], + "summary": "Python Imaging Library (fork)", + "description": "

\n \"Pillow\n

\n\n# Pillow\n\n## Python Imaging Library (Fork)\n\nPillow is the friendly PIL fork by [Jeffrey 'Alex' Clark and\ncontributors](https://github.com/python-pillow/Pillow/graphs/contributors).\nPIL is the Python Imaging Library by Fredrik Lundh and contributors.\nDevelopment is supported by:\n- [Tidelift](https://tidelift.com/subscription/pkg/pypi-pillow?utm_source=pypi-pillow&utm_medium=readme&utm_campaign=enterprise) (since 2018)\n- [Thanks.dev](https://thanks.dev) (since 2023)\n- [GitHub Sponsors](https://github.com/sponsors/python-pillow) (since 2026)\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
docs\n \n
tests\n \n \n \n \n \n \n \n \n
package\n \n \n \n \n \n
social\n \n \n
\n\n## Overview\n\nThe Python Imaging Library adds image processing capabilities to your Python interpreter.\n\nThis library provides extensive file format support, an efficient internal representation, and fairly powerful image processing capabilities.\n\nThe core image library is designed for fast access to data stored in a few basic pixel formats. It should provide a solid foundation for a general image processing tool.\n\n## More information\n\n- [Documentation](https://pillow.readthedocs.io/)\n - [Installation](https://pillow.readthedocs.io/en/latest/installation/basic-installation.html)\n - [Handbook](https://pillow.readthedocs.io/en/latest/handbook/index.html)\n- [Contribute](https://github.com/python-pillow/Pillow/blob/main/.github/CONTRIBUTING.md)\n - [Issues](https://github.com/python-pillow/Pillow/issues)\n - [Pull requests](https://github.com/python-pillow/Pillow/pulls)\n- [Release notes](https://pillow.readthedocs.io/en/stable/releasenotes/index.html)\n- [Changelog](https://github.com/python-pillow/Pillow/releases)\n - [Pre-fork](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst#pre-fork)\n\n## Report a vulnerability\n\nTo report sensitive vulnerability information, report it [privately on GitHub](https://github.com/python-pillow/Pillow/security/advisories/new).\n\nIf you cannot use GitHub, use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure.\n\nDO NOT report sensitive vulnerability information in public.\n", + "description_content_type": "text/markdown", + "keywords": [ + "Imaging" + ], + "author_email": "Jeffrey 'Alex' Clark ", + "license_expression": "MIT-CMU", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 6 - Mature", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Multimedia :: Graphics", + "Topic :: Multimedia :: Graphics :: Capture :: Digital Camera", + "Topic :: Multimedia :: Graphics :: Capture :: Screen Capture", + "Topic :: Multimedia :: Graphics :: Graphics Conversion", + "Topic :: Multimedia :: Graphics :: Viewers", + "Typing :: Typed" + ], + "requires_dist": [ + "furo; extra == \"docs\"", + "olefile; extra == \"docs\"", + "sphinx>=8.2; extra == \"docs\"", + "sphinx-autobuild; extra == \"docs\"", + "sphinx-copybutton; extra == \"docs\"", + "sphinx-inline-tabs; extra == \"docs\"", + "sphinxext-opengraph; extra == \"docs\"", + "olefile; extra == \"fpx\"", + "olefile; extra == \"mic\"", + "arro3-compute; extra == \"test-arrow\"", + "arro3-core; extra == \"test-arrow\"", + "nanoarrow; extra == \"test-arrow\"", + "pyarrow; extra == \"test-arrow\"", + "coverage>=7.4.2; extra == \"tests\"", + "defusedxml; extra == \"tests\"", + "markdown2; extra == \"tests\"", + "olefile; extra == \"tests\"", + "packaging; extra == \"tests\"", + "pytest; extra == \"tests\"", + "pytest-cov; extra == \"tests\"", + "pytest-timeout; extra == \"tests\"", + "pytest-xdist; extra == \"tests\"", + "setuptools; extra == \"tests\"", + "trove-classifiers>=2024.10.12; extra == \"tests\"", + "defusedxml; extra == \"xmp\"" + ], + "requires_python": ">=3.10", + "project_url": [ + "Release notes, https://pillow.readthedocs.io/en/stable/releasenotes/index.html", + "Changelog, https://github.com/python-pillow/Pillow/releases", + "Documentation, https://pillow.readthedocs.io", + "Funding, https://tidelift.com/subscription/pkg/pypi-pillow?utm_source=pypi-pillow&utm_medium=pypi", + "Homepage, https://python-pillow.github.io", + "Mastodon, https://fosstodon.org/@pillow", + "Source, https://github.com/python-pillow/Pillow" + ], + "provides_extra": [ + "docs", + "fpx", + "mic", + "test-arrow", + "tests", + "xmp" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/f5/b1/fa7c600e7dceae12e9606c7578cbc9ff1e1ed55844883ee5c92205e86226/safetensors-0.8.0-cp310-abi3-macosx_11_0_arm64.whl", + "archive_info": { + "hashes": { + "sha256": "c80201d22cbf405b80647a60ada77bba06c8fba2da2743ba1e89cdcc39a81f25" + }, + "hash": "sha256=c80201d22cbf405b80647a60ada77bba06c8fba2da2743ba1e89cdcc39a81f25" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.4", + "name": "safetensors", + "version": "0.8.0", + "description": "## Installation\n\n```\npip install safetensors\n```\n\n\n## Usage\n\n### Numpy\n\n```python\nfrom safetensors.numpy import save_file, load_file\nimport numpy as np\n\ntensors = {\n \"a\": np.zeros((2, 2)),\n \"b\": np.zeros((2, 3), dtype=np.uint8)\n}\n\nsave_file(tensors, \"./model.safetensors\")\n\n\n# Now loading\nloaded = load_file(\"./model.safetensors\")\n```\n\n### Torch\n\n```python\nfrom safetensors.torch import save_file, load_file\nimport torch\n\ntensors = {\n \"a\": torch.zeros((2, 2)),\n \"b\": torch.zeros((2, 3), dtype=torch.uint8)\n}\n\nsave_file(tensors, \"./model.safetensors\")\n\n\n# Now loading\nloaded = load_file(\"./model.safetensors\")\n```\n\n### Developing\n\n```\n# inside ./safetensors/bindings/python\npip install .[dev]\n```\nShould be enough to install this library locally.\n\n### Testing\n\n```\n# inside ./safetensors/bindings/python\npip install .[dev]\npytest -sv tests/\n```\n\n", + "description_content_type": "text/markdown; charset=UTF-8; variant=GFM", + "author_email": "Nicolas Patry , Luc Georges , Daniël De Kok ", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Intended Audience :: Education", + "Intended Audience :: Science/Research", + "License :: OSI Approved :: Apache Software License", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Topic :: Scientific/Engineering :: Artificial Intelligence", + "Typing :: Typed" + ], + "requires_dist": [ + "safetensors[torch] ; extra == 'all'", + "safetensors[numpy] ; extra == 'all'", + "safetensors[jax] ; extra == 'all'", + "safetensors[paddlepaddle] ; extra == 'all'", + "safetensors[convert] ; extra == 'all'", + "safetensors[quality] ; extra == 'all'", + "safetensors[testing] ; extra == 'all'", + "safetensors[torch] ; extra == 'convert'", + "huggingface-hub>=1.4 ; extra == 'convert'", + "safetensors[all] ; extra == 'dev'", + "safetensors[pinned-tf] ; extra == 'dev'", + "safetensors[numpy] ; extra == 'jax'", + "flax>=0.6.3 ; extra == 'jax'", + "jax>=0.3.25 ; extra == 'jax'", + "jaxlib>=0.3.25 ; extra == 'jax'", + "mlx>=0.0.9 ; extra == 'mlx'", + "numpy>=1.24.6 ; extra == 'numpy'", + "safetensors[numpy] ; extra == 'paddlepaddle'", + "paddlepaddle>=2.4.1 ; extra == 'paddlepaddle'", + "safetensors[numpy] ; extra == 'pinned-tf'", + "tensorflow==2.18.0 ; extra == 'pinned-tf'", + "ruff ; extra == 'quality'", + "safetensors[numpy] ; extra == 'tensorflow'", + "tensorflow>=2.11.0 ; extra == 'tensorflow'", + "safetensors[numpy] ; extra == 'testing'", + "h5py>=3.7.0 ; extra == 'testing'", + "setuptools-rust>=1.12.0 ; extra == 'testing'", + "pytest>=9.0 ; extra == 'testing'", + "pytest-benchmark>=5.2 ; extra == 'testing'", + "hypothesis>=6.70.2 ; extra == 'testing'", + "fsspec>=2024.6.0 ; extra == 'testing'", + "s3fs>=2024.6.0 ; extra == 'testing'", + "safetensors[numpy] ; extra == 'tf-nightly'", + "tf-nightly ; extra == 'tf-nightly'", + "safetensors[numpy] ; extra == 'torch'", + "torch>=2.4 ; extra == 'torch'" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://github.com/huggingface/safetensors", + "Source, https://github.com/huggingface/safetensors" + ], + "provides_extra": [ + "all", + "convert", + "dev", + "jax", + "mlx", + "numpy", + "paddlepaddle", + "pinned-tf", + "quality", + "tensorflow", + "testing", + "tf-nightly", + "torch" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101" + }, + "hash": "sha256=117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "annotated-doc", + "version": "0.0.5", + "summary": "Document parameters, class attributes, return types, and variables inline, with Annotated.", + "description": "# Annotated Doc\n\nDocument parameters, class attributes, return types, and variables inline, with `Annotated`.\n\n\n \"Test\"\n\n\n \"Coverage\"\n\n\n \"Package\n\n\n \"Supported\n\n\n## Installation\n\n```bash\npip install annotated-doc\n```\n\nOr with `uv`:\n\n```Python\nuv add annotated-doc\n```\n\n## Usage\n\nImport `Doc` and pass a single literal string with the documentation for the specific parameter, class attribute, return type, or variable.\n\nFor example, to document a parameter `name` in a function `hi` you could do:\n\n```Python\nfrom typing import Annotated\n\nfrom annotated_doc import Doc\n\ndef hi(name: Annotated[str, Doc(\"Who to say hi to\")]) -> None:\n print(f\"Hi, {name}!\")\n```\n\nYou can also use it to document class attributes:\n\n```Python\nfrom typing import Annotated\n\nfrom annotated_doc import Doc\n\nclass User:\n name: Annotated[str, Doc(\"The user's name\")]\n age: Annotated[int, Doc(\"The user's age\")]\n```\n\nThe same way, you could document return types and variables, or anything that could have a type annotation with `Annotated`.\n\n## Who Uses This\n\n`annotated-doc` was made for:\n\n* [FastAPI](https://fastapi.tiangolo.com/)\n* [Typer](https://typer.tiangolo.com/)\n* [SQLModel](https://sqlmodel.tiangolo.com/)\n* [Asyncer](https://asyncer.tiangolo.com/)\n\n`annotated-doc` is supported by [griffe-typingdoc](https://github.com/mkdocstrings/griffe-typingdoc), which powers reference documentation like the one in the [FastAPI Reference](https://fastapi.tiangolo.com/reference/).\n\n## Reasons not to use `annotated-doc`\n\nYou are already comfortable with one of the existing docstring formats, like:\n\n* Sphinx\n* numpydoc\n* Google\n* Keras\n\nYour team is already comfortable using them.\n\nYou prefer having the documentation about parameters all together in a docstring, separated from the code defining them.\n\nYou care about a specific set of users, using one specific editor, and that editor already has support for the specific docstring format you use.\n\n## Reasons to use `annotated-doc`\n\n* No micro-syntax to learn for newcomers, it’s **just Python** syntax.\n* **Editing** would be already fully supported by default by any editor (current or future) supporting Python syntax, including syntax errors, syntax highlighting, etc.\n* **Rendering** would be relatively straightforward to implement by static tools (tools that don't need runtime execution), as the information can be extracted from the AST they normally already create.\n* **Deduplication of information**: the name of a parameter would be defined in a single place, not duplicated inside of a docstring.\n* **Elimination** of the possibility of having **inconsistencies** when removing a parameter or class variable and **forgetting to remove** its documentation.\n* **Minimization** of the probability of adding a new parameter or class variable and **forgetting to add its documentation**.\n* **Elimination** of the possibility of having **inconsistencies** between the **name** of a parameter in the **signature** and the name in the docstring when it is renamed.\n* **Access** to the documentation string for each symbol at **runtime**, including existing (older) Python versions.\n* A more formalized way to document other symbols, like type aliases, that could use Annotated.\n* **Support** for apps using FastAPI, Typer and others.\n* **AI Accessibility**: AI tools will have an easier way understanding each parameter as the distance from documentation to parameter is much closer.\n\n## History\n\nI ([@tiangolo](https://github.com/tiangolo)) originally wanted for this to be part of the Python standard library (in [PEP 727](https://peps.python.org/pep-0727/)), but the proposal was withdrawn as there was a fair amount of negative feedback and opposition.\n\nThe conclusion was that this was better done as an external effort, in a third-party library.\n\nSo, here it is, with a simpler approach, as a third-party library, in a way that can be used by others, starting with FastAPI and friends.\n\n## License\n\nThis project is licensed under the terms of the MIT license.\n", + "description_content_type": "text/markdown", + "author_email": "=?utf-8?q?Sebasti=C3=A1n_Ram=C3=ADrez?= ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Intended Audience :: Information Technology", + "Intended Audience :: System Administrators", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python", + "Topic :: Internet", + "Topic :: Software Development :: Libraries :: Application Frameworks", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Software Development :: Libraries", + "Topic :: Software Development", + "Typing :: Typed", + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14" + ], + "requires_python": ">=3.9", + "project_url": [ + "Homepage, https://github.com/fastapi/annotated-doc", + "Documentation, https://github.com/fastapi/annotated-doc", + "Repository, https://github.com/fastapi/annotated-doc", + "Issues, https://github.com/fastapi/annotated-doc/issues", + "Changelog, https://github.com/fastapi/annotated-doc/release-notes.md" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360" + }, + "hash": "sha256=255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "click", + "version": "8.5.0", + "summary": "Composable command line interface toolkit", + "description": "
\"\"
\n\n# Click\n\nClick is a Python package for creating beautiful command line interfaces\nin a composable way with as little code as necessary. It's the \"Command\nLine Interface Creation Kit\". It's highly configurable but comes with\nsensible defaults out of the box.\n\nIt aims to make the process of writing command line tools quick and fun\nwhile also preventing any frustration caused by the inability to\nimplement an intended CLI API.\n\nClick in three points:\n\n- Arbitrary nesting of commands\n- Automatic help page generation\n- Supports lazy loading of subcommands at runtime\n\n\n## A Simple Example\n\n```python\nimport click\n\n@click.command()\n@click.option(\"--count\", default=1, help=\"Number of greetings.\")\n@click.option(\"--name\", prompt=\"Your name\", help=\"The person to greet.\")\ndef hello(count, name):\n \"\"\"Simple program that greets NAME for a total of COUNT times.\"\"\"\n for _ in range(count):\n click.echo(f\"Hello, {name}!\")\n\nif __name__ == '__main__':\n hello()\n```\n\n```\n$ python hello.py --count=3\nYour name: Click\nHello, Click!\nHello, Click!\nHello, Click!\n```\n\n\n## Donate\n\nThe Pallets organization develops and supports Click and other popular\npackages. In order to grow the community of contributors and users, and\nallow the maintainers to devote more time to the projects, [please\ndonate today][].\n\n[please donate today]: https://palletsprojects.com/donate\n\n## Contributing\n\nSee our [detailed contributing documentation][contrib] for many ways to\ncontribute, including reporting issues, requesting features, asking or answering\nquestions, and making PRs.\n\n[contrib]: https://palletsprojects.com/contributing/\n\n", + "description_content_type": "text/markdown", + "maintainer_email": "Pallets ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.txt" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Typing :: Typed" + ], + "requires_python": ">=3.10", + "project_url": [ + "Changes, https://click.palletsprojects.com/page/changes/", + "Chat, https://discord.gg/pallets", + "Documentation, https://click.palletsprojects.com/", + "Donate, https://palletsprojects.com/donate", + "Source, https://github.com/pallets/click/" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/6c/c0/a98505f18594f1bce828bb159cec0fcf9860562f1a2c85913409fc8f3d9e/fsspec-2026.9.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f" + }, + "hash": "sha256=8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "fsspec", + "version": "2026.9.0", + "summary": "File-system specification", + "description": "# filesystem_spec\n\n[![PyPI version](https://badge.fury.io/py/fsspec.svg)](https://pypi.python.org/pypi/fsspec/)\n[![Anaconda-Server Badge](https://anaconda.org/conda-forge/fsspec/badges/version.svg)](https://anaconda.org/conda-forge/fsspec)\n![Build](https://github.com/fsspec/filesystem_spec/workflows/CI/badge.svg)\n[![Docs](https://readthedocs.org/projects/filesystem-spec/badge/?version=latest)](https://filesystem-spec.readthedocs.io/en/latest/?badge=latest)\n\nA specification for pythonic filesystems.\n\n## Install\n\n```bash\npip install fsspec\n```\n\nwould install the base fsspec. Various optionally supported features might require specification of custom\nextra require, e.g. `pip install fsspec[ssh]` will install dependencies for `ssh` backends support.\nUse `pip install fsspec[full]` for installation of all known extra dependencies.\n\nUp-to-date package also provided through conda-forge distribution:\n\n```bash\nconda install -c conda-forge fsspec\n```\n\n\n## Purpose\n\nTo produce a template or specification for a file-system interface, that specific implementations should follow,\nso that applications making use of them can rely on a common behaviour and not have to worry about the specific\ninternal implementation decisions with any given backend. Many such implementations are included in this package,\nor in sister projects such as `s3fs` and `gcsfs`.\n\nIn addition, if this is well-designed, then additional functionality, such as a key-value store or FUSE\nmounting of the file-system implementation may be available for all implementations \"for free\".\n\n## Documentation\n\nPlease refer to [RTD](https://filesystem-spec.readthedocs.io/en/latest/?badge=latest)\n\n## Develop\n\nfsspec uses GitHub Actions for CI. Environment files can be found\nin the \"ci/\" directory. Note that the main environment is called \"py38\",\nbut it is expected that the version of python installed be adjustable at\nCI runtime. For local use, pick a version suitable for you.\n\n```bash\n# For a new environment (mamba / conda).\nmamba create -n fsspec -c conda-forge python=3.10 -y\nconda activate fsspec\n\n# Standard dev install with docs and tests.\npip install -e \".[dev,doc,test]\"\n\n# Full tests except for downstream\npip install s3fs\npip uninstall s3fs\npip install -e .[dev,doc,test_full]\npip install s3fs --no-deps\npytest -v\n\n# Downstream tests.\nsh install_s3fs.sh\n# Windows powershell.\ninstall_s3fs.sh\n```\n\n### Testing\n\nTests can be run in the dev environment, if activated, via ``pytest fsspec``.\n\nThe full fsspec suite requires a system-level docker, docker-compose, and fuse\ninstallation. If only making changes to one backend implementation, it is\nnot generally necessary to run all tests locally.\n\nIt is expected that contributors ensure that any change to fsspec does not\ncause issues or regressions for either other fsspec-related packages such\nas gcsfs and s3fs, nor for downstream users of fsspec. The \"downstream\" CI\nrun and corresponding environment file run a set of tests from the dask\ntest suite, and very minimal tests against pandas and zarr from the\ntest_downstream.py module in this repo.\n\n### Code Formatting\n\nfsspec uses [Black](https://black.readthedocs.io/en/stable) to ensure\na consistent code format throughout the project.\nRun ``black fsspec`` from the root of the filesystem_spec repository to\nauto-format your code. Additionally, many editors have plugins that will apply\n``black`` as you edit files. ``black`` is included in the ``tox`` environments.\n\nOptionally, you may wish to setup [pre-commit hooks](https://pre-commit.com) to\nautomatically run ``black`` when you make a git commit.\nRun ``pre-commit install --install-hooks`` from the root of the\nfilesystem_spec repository to setup pre-commit hooks. ``black`` will now be run\nbefore you commit, reformatting any changed files. You can format without\ncommitting via ``pre-commit run`` or skip these checks with ``git commit\n--no-verify``.\n\n## Support\n\nWork on this repository is supported in part by:\n\n\"Anaconda, Inc. - Advancing AI through open source.\"\n\n\"anaconda\n", + "description_content_type": "text/markdown", + "keywords": [ + "file" + ], + "maintainer_email": "Martin Durant ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14" + ], + "requires_dist": [ + "adlfs; extra == 'abfs'", + "adlfs; extra == 'adl'", + "pyarrow>=1; extra == 'arrow'", + "dask; extra == 'dask'", + "distributed; extra == 'dask'", + "pre-commit; extra == 'dev'", + "ruff>=0.5; extra == 'dev'", + "numpydoc; extra == 'doc'", + "sphinx; extra == 'doc'", + "sphinx-design; extra == 'doc'", + "sphinx-rtd-theme; extra == 'doc'", + "yarl; extra == 'doc'", + "dropbox; extra == 'dropbox'", + "dropboxdrivefs; extra == 'dropbox'", + "requests; extra == 'dropbox'", + "adlfs; extra == 'full'", + "aiohttp!=4.0.0a0,!=4.0.0a1; extra == 'full'", + "dask; extra == 'full'", + "distributed; extra == 'full'", + "dropbox; extra == 'full'", + "dropboxdrivefs; extra == 'full'", + "fusepy; extra == 'full'", + "gcsfs>=2026.4.0; extra == 'full'", + "libarchive-c; extra == 'full'", + "ocifs; extra == 'full'", + "panel; extra == 'full'", + "paramiko; extra == 'full'", + "pyarrow>=1; extra == 'full'", + "pygit2; extra == 'full'", + "requests; extra == 'full'", + "s3fs>=2026.6.0; extra == 'full'", + "smbprotocol; extra == 'full'", + "tqdm; extra == 'full'", + "fusepy; extra == 'fuse'", + "gcsfs>=2026.4.0; extra == 'gcs'", + "pygit2; extra == 'git'", + "requests; extra == 'github'", + "gcsfs>=2026.4.0; extra == 'gs'", + "panel; extra == 'gui'", + "pyarrow>=1; extra == 'hdfs'", + "aiohttp!=4.0.0a0,!=4.0.0a1; extra == 'http'", + "libarchive-c; extra == 'libarchive'", + "ocifs; extra == 'oci'", + "s3fs>=2026.6.0; extra == 's3'", + "paramiko; extra == 'sftp'", + "smbprotocol; extra == 'smb'", + "paramiko; extra == 'ssh'", + "aiohttp!=4.0.0a0,!=4.0.0a1; extra == 'test'", + "numpy; extra == 'test'", + "pytest; extra == 'test'", + "pytest-asyncio!=0.22.0; extra == 'test'", + "pytest-benchmark; extra == 'test'", + "pytest-cov; extra == 'test'", + "pytest-mock; extra == 'test'", + "pytest-recording; extra == 'test'", + "pytest-rerunfailures; extra == 'test'", + "requests; extra == 'test'", + "aiobotocore<3.0.0,>=2.5.4; extra == 'test-downstream'", + "dask[dataframe,test]; extra == 'test-downstream'", + "moto[server]<5,>4; extra == 'test-downstream'", + "pytest-timeout; extra == 'test-downstream'", + "xarray; extra == 'test-downstream'", + "zarr; extra == 'test-downstream'", + "adlfs; extra == 'test-full'", + "aiohttp!=4.0.0a0,!=4.0.0a1; extra == 'test-full'", + "backports-zstd; (python_version < '3.14') and extra == 'test-full'", + "cloudpickle; extra == 'test-full'", + "dask; extra == 'test-full'", + "distributed; extra == 'test-full'", + "dropbox; extra == 'test-full'", + "dropboxdrivefs; extra == 'test-full'", + "fastparquet; extra == 'test-full'", + "fusepy; extra == 'test-full'", + "gcsfs>=2026.4.0; extra == 'test-full'", + "jinja2; extra == 'test-full'", + "kerchunk; extra == 'test-full'", + "libarchive-c; extra == 'test-full'", + "lz4; extra == 'test-full'", + "notebook; extra == 'test-full'", + "numpy; extra == 'test-full'", + "ocifs; extra == 'test-full'", + "pandas<3.0.0; extra == 'test-full'", + "panel; extra == 'test-full'", + "paramiko; extra == 'test-full'", + "pyarrow>=1; extra == 'test-full'", + "pyftpdlib; extra == 'test-full'", + "pygit2; extra == 'test-full'", + "pytest; extra == 'test-full'", + "pytest-asyncio!=0.22.0; extra == 'test-full'", + "pytest-benchmark; extra == 'test-full'", + "pytest-cov; extra == 'test-full'", + "pytest-mock; extra == 'test-full'", + "pytest-recording; extra == 'test-full'", + "pytest-rerunfailures; extra == 'test-full'", + "python-snappy; extra == 'test-full'", + "requests; extra == 'test-full'", + "s3fs>=2026.6.0; extra == 'test-full'", + "smbprotocol; extra == 'test-full'", + "tqdm; extra == 'test-full'", + "urllib3; extra == 'test-full'", + "zarr<3.2.0; extra == 'test-full'", + "zstandard; (python_version < '3.14') and extra == 'test-full'", + "tqdm; extra == 'tqdm'" + ], + "requires_python": ">=3.10", + "project_url": [ + "Changelog, https://filesystem-spec.readthedocs.io/en/latest/changelog.html", + "Documentation, https://filesystem-spec.readthedocs.io/en/latest/", + "Homepage, https://github.com/fsspec/filesystem_spec" + ], + "provides_extra": [ + "abfs", + "adl", + "arrow", + "dask", + "dev", + "doc", + "dropbox", + "entrypoints", + "full", + "fuse", + "gcs", + "git", + "github", + "gs", + "gui", + "hdfs", + "http", + "libarchive", + "oci", + "s3", + "sftp", + "smb", + "ssh", + "test", + "test-downstream", + "test-full", + "tqdm" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86" + }, + "hash": "sha256=63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "h11", + "version": "0.16.0", + "dynamic": [ + "author", + "author-email", + "classifier", + "description", + "home-page", + "license", + "license-file", + "requires-python", + "summary" + ], + "summary": "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1", + "description": "h11\n===\n\n.. image:: https://travis-ci.org/python-hyper/h11.svg?branch=master\n :target: https://travis-ci.org/python-hyper/h11\n :alt: Automated test status\n\n.. image:: https://codecov.io/gh/python-hyper/h11/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/python-hyper/h11\n :alt: Test coverage\n\n.. image:: https://readthedocs.org/projects/h11/badge/?version=latest\n :target: http://h11.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation Status\n\nThis is a little HTTP/1.1 library written from scratch in Python,\nheavily inspired by `hyper-h2 `_.\n\nIt's a \"bring-your-own-I/O\" library; h11 contains no IO code\nwhatsoever. This means you can hook h11 up to your favorite network\nAPI, and that could be anything you want: synchronous, threaded,\nasynchronous, or your own implementation of `RFC 6214\n`_ -- h11 won't judge you.\n(Compare this to the current state of the art, where every time a `new\nnetwork API `_ comes along then someone\ngets to start over reimplementing the entire HTTP protocol from\nscratch.) Cory Benfield made an `excellent blog post describing the\nbenefits of this approach\n`_, or if you like video\nthen here's his `PyCon 2016 talk on the same theme\n`_.\n\nThis also means that h11 is not immediately useful out of the box:\nit's a toolkit for building programs that speak HTTP, not something\nthat could directly replace ``requests`` or ``twisted.web`` or\nwhatever. But h11 makes it much easier to implement something like\n``requests`` or ``twisted.web``.\n\nAt a high level, working with h11 goes like this:\n\n1) First, create an ``h11.Connection`` object to track the state of a\n single HTTP/1.1 connection.\n\n2) When you read data off the network, pass it to\n ``conn.receive_data(...)``; you'll get back a list of objects\n representing high-level HTTP \"events\".\n\n3) When you want to send a high-level HTTP event, create the\n corresponding \"event\" object and pass it to ``conn.send(...)``;\n this will give you back some bytes that you can then push out\n through the network.\n\nFor example, a client might instantiate and then send a\n``h11.Request`` object, then zero or more ``h11.Data`` objects for the\nrequest body (e.g., if this is a POST), and then a\n``h11.EndOfMessage`` to indicate the end of the message. Then the\nserver would then send back a ``h11.Response``, some ``h11.Data``, and\nits own ``h11.EndOfMessage``. If either side violates the protocol,\nyou'll get a ``h11.ProtocolError`` exception.\n\nh11 is suitable for implementing both servers and clients, and has a\npleasantly symmetric API: the events you send as a client are exactly\nthe ones that you receive as a server and vice-versa.\n\n`Here's an example of a tiny HTTP client\n`_\n\nIt also has `a fine manual `_.\n\nFAQ\n---\n\n*Whyyyyy?*\n\nI wanted to play with HTTP in `Curio\n`__ and `Trio\n`__, which at the time didn't have any\nHTTP libraries. So I thought, no big deal, Python has, like, a dozen\ndifferent implementations of HTTP, surely I can find one that's\nreusable. I didn't find one, but I did find Cory's call-to-arms\nblog-post. So I figured, well, fine, if I have to implement HTTP from\nscratch, at least I can make sure no-one *else* has to ever again.\n\n*Should I use it?*\n\nMaybe. You should be aware that it's a very young project. But, it's\nfeature complete and has an exhaustive test-suite and complete docs,\nso the next step is for people to try using it and see how it goes\n:-). If you do then please let us know -- if nothing else we'll want\nto talk to you before making any incompatible changes!\n\n*What are the features/limitations?*\n\nRoughly speaking, it's trying to be a robust, complete, and non-hacky\nimplementation of the first \"chapter\" of the HTTP/1.1 spec: `RFC 7230:\nHTTP/1.1 Message Syntax and Routing\n`_. That is, it mostly focuses on\nimplementing HTTP at the level of taking bytes on and off the wire,\nand the headers related to that, and tries to be anal about spec\nconformance. It doesn't know about higher-level concerns like URL\nrouting, conditional GETs, cross-origin cookie policies, or content\nnegotiation. But it does know how to take care of framing,\ncross-version differences in keep-alive handling, and the \"obsolete\nline folding\" rule, so you can focus your energies on the hard /\ninteresting parts for your application, and it tries to support the\nfull specification in the sense that any useful HTTP/1.1 conformant\napplication should be able to use h11.\n\nIt's pure Python, and has no dependencies outside of the standard\nlibrary.\n\nIt has a test suite with 100.0% coverage for both statements and\nbranches.\n\nCurrently it supports Python 3 (testing on 3.8-3.12) and PyPy 3.\nThe last Python 2-compatible version was h11 0.11.x.\n(Originally it had a Cython wrapper for `http-parser\n`_ and a beautiful nested state\nmachine implemented with ``yield from`` to postprocess the output. But\nI had to take these out -- the new *parser* needs fewer lines-of-code\nthan the old *parser wrapper*, is written in pure Python, uses no\nexotic language syntax, and has more features. It's sad, really; that\nold state machine was really slick. I just need a few sentences here\nto mourn that.)\n\nI don't know how fast it is. I haven't benchmarked or profiled it yet,\nso it's probably got a few pointless hot spots, and I've been trying\nto err on the side of simplicity and robustness instead of\nmicro-optimization. But at the architectural level I tried hard to\navoid fundamentally bad decisions, e.g., I believe that all the\nparsing algorithms remain linear-time even in the face of pathological\ninput like slowloris, and there are no byte-by-byte loops. (I also\nbelieve that it maintains bounded memory usage in the face of\narbitrary/pathological input.)\n\nThe whole library is ~800 lines-of-code. You can read and understand\nthe whole thing in less than an hour. Most of the energy invested in\nthis so far has been spent on trying to keep things simple by\nminimizing special-cases and ad hoc state manipulation; even though it\nis now quite small and simple, I'm still annoyed that I haven't\nfigured out how to make it even smaller and simpler. (Unfortunately,\nHTTP does not lend itself to simplicity.)\n\nThe API is ~feature complete and I don't expect the general outlines\nto change much, but you can't judge an API's ergonomics until you\nactually document and use it, so I'd expect some changes in the\ndetails.\n\n*How do I try it?*\n\n.. code-block:: sh\n\n $ pip install h11\n $ git clone git@github.com:python-hyper/h11\n $ cd h11/examples\n $ python basic-client.py\n\nand go from there.\n\n*License?*\n\nMIT\n\n*Code of conduct?*\n\nContributors are requested to follow our `code of conduct\n`_ in\nall project spaces.\n", + "home_page": "https://github.com/python-hyper/h11", + "author": "Nathaniel J. Smith", + "author_email": "njs@pobox.com", + "license": "MIT", + "license_file": [ + "LICENSE.txt" + ], + "classifier": [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Topic :: Internet :: WWW/HTTP", + "Topic :: System :: Networking" + ], + "requires_python": ">=3.8" + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0" + }, + "hash": "sha256=e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "networkx", + "version": "3.7", + "dynamic": [ + "license-file" + ], + "platform": [ + "Linux", + "Mac OSX", + "Windows", + "Unix" + ], + "summary": "Python package for creating and manipulating graphs and networks", + "description": "NetworkX\n========\n\n\n.. image::\n https://github.com/networkx/networkx/actions/workflows/test.yml/badge.svg?branch=main\n :target: https://github.com/networkx/networkx/actions/workflows/test.yml\n\n.. image::\n https://img.shields.io/pypi/v/networkx.svg?\n :target: https://pypi.python.org/pypi/networkx\n\n.. image::\n https://img.shields.io/pypi/l/networkx.svg?\n :target: https://github.com/networkx/networkx/blob/main/LICENSE.txt\n\n.. image::\n https://img.shields.io/pypi/pyversions/networkx.svg?\n :target: https://pypi.python.org/pypi/networkx\n\n.. image::\n https://insights.linuxfoundation.org/api/badge/health-score?project=networkx\n :target: https://insights.linuxfoundation.org/project/networkx\n\n\nNetworkX is a Python package for the creation, manipulation,\nand study of the structure, dynamics, and functions\nof complex networks.\n\n- **Website (including documentation):** https://networkx.org\n- **Mailing list:** https://groups.google.com/forum/#!forum/networkx-discuss\n- **Source:** https://github.com/networkx/networkx\n- **Bug reports:** https://github.com/networkx/networkx/issues\n- **Report a security vulnerability:** https://tidelift.com/security\n- **Tutorial:** https://networkx.org/documentation/latest/tutorial.html\n- **GitHub Discussions:** https://github.com/networkx/networkx/discussions\n- **Discord (Scientific Python) invite link:** https://discord.com/invite/vur45CbwMz\n- **NetworkX meetings calendar (open to all):** https://scientific-python.org/calendars/networkx.ics\n\nSimple example\n--------------\n\nFind the shortest path between two nodes in an undirected graph:\n\n.. code:: pycon\n\n >>> import networkx as nx\n >>> G = nx.Graph()\n >>> G.add_edge(\"A\", \"B\", weight=4)\n >>> G.add_edge(\"B\", \"D\", weight=2)\n >>> G.add_edge(\"A\", \"C\", weight=3)\n >>> G.add_edge(\"C\", \"D\", weight=4)\n >>> nx.shortest_path(G, \"A\", \"D\", weight=\"weight\")\n ['A', 'B', 'D']\n\nInstall\n-------\n\nInstall the latest released version of NetworkX:\n\n.. code:: shell\n\n $ pip install networkx\n\nInstall with all optional dependencies:\n\n.. code:: shell\n\n $ pip install networkx[default]\n\nFor additional details,\nplease see the `installation guide `_.\n\nBugs\n----\n\nPlease report any bugs that you find `here `_.\nOr, even better, fork the repository on `GitHub `_\nand create a pull request (PR). We welcome all changes, big or small, and we\nwill help you make the PR if you are new to `git` (just ask on the issue and/or\nsee the `contributor guide `_).\n\nLicense\n-------\n\nReleased under the `3-clause BSD license `_::\n\n Copyright (c) 2004-2026, NetworkX Developers\n Aric Hagberg \n Dan Schult \n Pieter Swart \n", + "description_content_type": "text/x-rst", + "keywords": [ + "Networks", + "Graph Theory", + "Mathematics", + "network", + "graph", + "discrete mathematics", + "math" + ], + "author_email": "Aric Hagberg ", + "maintainer_email": "NetworkX Developers ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.txt" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Intended Audience :: Science/Research", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Programming Language :: Python :: 3 :: Only", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Scientific/Engineering :: Bio-Informatics", + "Topic :: Scientific/Engineering :: Information Analysis", + "Topic :: Scientific/Engineering :: Mathematics", + "Topic :: Scientific/Engineering :: Physics" + ], + "requires_dist": [ + "asv>=0.6.5; extra == \"benchmarking\"", + "py-rattler<0.22,>=0.21; extra == \"benchmarking\"", + "virtualenv; extra == \"benchmarking\"", + "numpy>=2.2; extra == \"default\"", + "scipy>=1.15; extra == \"default\"", + "matplotlib>=3.10; extra == \"default\"", + "pandas>=2.3; extra == \"default\"", + "pre-commit>=4.1; extra == \"developer\"", + "mypy>=1.15; extra == \"developer\"", + "sphinx>=8.0; extra == \"doc\"", + "pydata-sphinx-theme>=0.16; extra == \"doc\"", + "sphinx-gallery>=0.18; extra == \"doc\"", + "numpydoc>=1.8.0; extra == \"doc\"", + "pillow>=10; extra == \"doc\"", + "texext>=0.6.7; extra == \"doc\"", + "myst-nb>=1.1; extra == \"doc\"", + "intersphinx-registry; extra == \"doc\"", + "osmnx>=2.0.0; extra == \"example\"", + "momepy>=0.7.2; extra == \"example\"", + "contextily>=1.6; extra == \"example\"", + "seaborn>=0.13; extra == \"example\"", + "cairocffi>=1.7; extra == \"example\"", + "igraph>=0.11; extra == \"example\"", + "scikit-learn>=1.6; extra == \"example\"", + "iplotx>=0.9.0; extra == \"example\"", + "hiveplotlib>=0.28; extra == \"example\"", + "lxml>=4.6; extra == \"extra\"", + "pygraphviz>=2.0; extra == \"extra\"", + "pydot>=3.0.1; extra == \"extra\"", + "sympy>=1.10; extra == \"extra\"", + "build>=0.10; extra == \"release\"", + "twine>=4.0; extra == \"release\"", + "wheel>=0.40; extra == \"release\"", + "changelist==0.5; extra == \"release\"", + "pytest>=7.2; extra == \"test\"", + "pytest-cov>=4.0; extra == \"test\"", + "pytest-xdist>=3.0; extra == \"test\"", + "pytest-mpl; extra == \"test-extras\"", + "pytest-randomly; extra == \"test-extras\"" + ], + "requires_python": "!=3.14.1,>=3.12", + "project_url": [ + "Homepage, https://networkx.org/", + "Bug Tracker, https://github.com/networkx/networkx/issues", + "Documentation, https://networkx.org/documentation/stable/", + "Source Code, https://github.com/networkx/networkx" + ], + "provides_extra": [ + "benchmarking", + "default", + "developer", + "doc", + "example", + "extra", + "release", + "test", + "test-extras" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73" + }, + "hash": "sha256=346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "pydantic", + "version": "2.13.5", + "summary": "Data validation using Python type hints", + "description": "# Pydantic Validation\n\n[![CI](https://img.shields.io/github/actions/workflow/status/pydantic/pydantic/ci.yml?branch=main&logo=github&label=CI)](https://github.com/pydantic/pydantic/actions?query=event%3Apush+branch%3Amain+workflow%3ACI)\n[![Coverage](https://coverage-badge.samuelcolvin.workers.dev/pydantic/pydantic.svg)](https://coverage-badge.samuelcolvin.workers.dev/redirect/pydantic/pydantic)\n[![pypi](https://img.shields.io/pypi/v/pydantic.svg)](https://pypi.python.org/pypi/pydantic)\n[![CondaForge](https://img.shields.io/conda/v/conda-forge/pydantic.svg)](https://anaconda.org/conda-forge/pydantic)\n[![downloads](https://static.pepy.tech/badge/pydantic/month)](https://pepy.tech/project/pydantic)\n[![versions](https://img.shields.io/pypi/pyversions/pydantic.svg)](https://github.com/pydantic/pydantic)\n[![license](https://img.shields.io/github/license/pydantic/pydantic.svg)](https://github.com/pydantic/pydantic/blob/main/LICENSE)\n[![Pydantic v2](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/pydantic/pydantic/main/docs/badge/v2.json)](https://docs.pydantic.dev/latest/contributing/#badges)\n[![llms.txt](https://img.shields.io/badge/llms.txt-green)](https://docs.pydantic.dev/latest/llms.txt)\n\nData validation using Python type hints.\n\nFast and extensible, Pydantic plays nicely with your linters/IDE/brain.\nDefine how data should be in pure, canonical Python 3.9+; validate it with Pydantic.\n\n## Pydantic Logfire :fire:\n\nWe've launched Pydantic Logfire to help you monitor your applications.\n[Learn more](https://pydantic.dev/logfire/?utm_source=pydantic_validation)\n\n## Pydantic V1.10 vs. V2\n\nPydantic V2 is a ground-up rewrite that offers many new features, performance improvements, and some breaking changes compared to Pydantic V1.\n\nIf you're using Pydantic V1 you may want to look at the\n[pydantic V1.10 Documentation](https://docs.pydantic.dev/) or,\n[`1.10.X-fixes` git branch](https://github.com/pydantic/pydantic/tree/1.10.X-fixes). Pydantic V2 also ships with the latest version of Pydantic V1 built in so that you can incrementally upgrade your code base and projects: `from pydantic import v1 as pydantic_v1`.\n\n## Help\n\nSee [documentation](https://docs.pydantic.dev/) for more details.\n\n## Installation\n\nInstall using `pip install -U pydantic` or `conda install pydantic -c conda-forge`.\nFor more installation options to make Pydantic even faster,\nsee the [Install](https://docs.pydantic.dev/install/) section in the documentation.\n\n## A Simple Example\n\n```python\nfrom datetime import datetime\nfrom typing import Optional\nfrom pydantic import BaseModel\n\nclass User(BaseModel):\n id: int\n name: str = 'John Doe'\n signup_ts: Optional[datetime] = None\n friends: list[int] = []\n\nexternal_data = {'id': '123', 'signup_ts': '2017-06-01 12:22', 'friends': [1, '2', b'3']}\nuser = User(**external_data)\nprint(user)\n#> User id=123 name='John Doe' signup_ts=datetime.datetime(2017, 6, 1, 12, 22) friends=[1, 2, 3]\nprint(user.id)\n#> 123\n```\n\n## Contributing\n\nFor guidance on setting up a development environment and how to make a\ncontribution to Pydantic, see\n[Contributing to Pydantic](https://docs.pydantic.dev/contributing/).\n\n## Reporting a Security Vulnerability\n\nSee our [security policy](https://github.com/pydantic/pydantic/security/policy).\n\n## Changelog\n\n\n\n\n\n## v2.13.5 (2026-08-28)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.5)\n\n### What's Changed\n\n#### Fixes\n\n* Allow reuse of validators when plugins are set by [@Viicos](https://github.com/Viicos) in [#13535](https://github.com/pydantic/pydantic/pull/13535)\n* Fix missing GC traversal on some `pydantic-core` struct fields by [@Viicos](https://github.com/Viicos) in [#13624](https://github.com/pydantic/pydantic/pull/13624)\n* Fix missing GC traversal in `pydantic-core` for `GeneralFieldsSerializer` by [@Viicos](https://github.com/Viicos) in [#13629](https://github.com/pydantic/pydantic/pull/13629)\n* Count validated model fields once in smart unions by [@tamird](https://github.com/tamird) in [#13731](https://github.com/pydantic/pydantic/pull/13731)\n\n## v2.13.4 (2026-05-06)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.4)\n\n### What's Changed\n\n#### Packaging\n\n* Bump libc from 0.2.155 to 0.2.185 by [@Viicos](https://github.com/Viicos) in [#13109](https://github.com/pydantic/pydantic/pull/13109)\n* Adapt `pydantic-core` linker flags on macOS by [@washingtoneg](https://github.com/washingtoneg) and [@Viicos](https://github.com/Viicos) in [#13147](https://github.com/pydantic/pydantic/pull/13147)\n\n#### Fixes\n\n* Preserve `RootModel` core metadata by [@Viicos](https://github.com/Viicos) in [#13129](https://github.com/pydantic/pydantic/pull/13129)\n\n## v2.13.3 (2026-04-20)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.3)\n\n### What's Changed\n\n#### Fixes\n\n* Handle `AttributeError` subclasses with `from_attributes` by [@Viicos](https://github.com/Viicos) in [#13096](https://github.com/pydantic/pydantic/pull/13096)\n\n## v2.13.2 (2026-04-17)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.2)\n\n### What's Changed\n\n#### Fixes\n\n* Fix `ValidationInfo.field_name` missing with `model_validate_json()` by [@Viicos](https://github.com/Viicos) in [#13084](https://github.com/pydantic/pydantic/pull/13084)\n\n## v2.13.1 (2026-04-15)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.1)\n\n### What's Changed\n\n#### Fixes\n\n* Fix `ValidationInfo.data` missing with `model_validate_json()` by [@davidhewitt](https://github.com/davidhewitt) in [#13079](https://github.com/pydantic/pydantic/pull/13079)\n\n## v2.13.0 (2026-04-13)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.0)\n\nThe highlights of the v2.13 release are available in the [blog post](https://pydantic.dev/articles/pydantic-v2-13-release).\nSeveral minor changes (considered non-breaking changes according to our [versioning policy](https://pydantic.dev/docs/validation/2.13/get-started/version-policy/#pydantic-v2))\nare also included in this release. Make sure to look into them before upgrading.\n\nThis release contains the updated `pydantic.v1` namespace, matching version 1.10.26 which includes support for Python 3.14.\n\n### What's Changed\n\nSee the beta releases for all changes sinces 2.12.\n\n#### New Features\n\n* Allow default factories of private attributes to take validated model data by [@Viicos](https://github.com/Viicos) in [#13013](https://github.com/pydantic/pydantic/pull/13013)\n\n#### Changes\n\n* Warn when serializing fixed length tuples with too few items by [@arvindsaripalli](https://github.com/arvindsaripalli) in [#13016](https://github.com/pydantic/pydantic/pull/13016)\n\n#### Fixes\n\n* Change type of `Any` when synthesizing `_build_sources` for `BaseSettings.__init__()` signature in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#13049](https://github.com/pydantic/pydantic/pull/13049)\n* Fix model equality when using runtime `extra` configuration by [@Viicos](https://github.com/Viicos) in [#13062](https://github.com/pydantic/pydantic/pull/13062)\n\n#### Packaging\n\n* Add zizmor for GitHub Actions workflow linting by [@Viicos](https://github.com/Viicos) in [#13039](https://github.com/pydantic/pydantic/pull/13039)\n* Update jiter to v0.14.0 to fix a segmentation fault on musl Linux by [@Viicos](https://github.com/Viicos) in [#13064](https://github.com/pydantic/pydantic/pull/13064)\n\n### New Contributors\n\n* [@arvindsaripalli](https://github.com/arvindsaripalli) made their first contribution in [#13016](https://github.com/pydantic/pydantic/pull/13016)\n\n## v2.13.0b3 (2026-03-31)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.0b3)\n\n### What's Changed\n\n#### New Features\n\n* Add `ascii_only` option to `StringConstraints` by [@ai-man-codes](https://github.com/ai-man-codes) in [#12907](https://github.com/pydantic/pydantic/pull/12907)\n* Support `exclude_if` in computed fields by [@andresliszt](https://github.com/andresliszt) in [#12748](https://github.com/pydantic/pydantic/pull/12748)\n* Push down constraints in unions involving `MISSING` sentinel by [@Viicos](https://github.com/Viicos) in [#12908](https://github.com/pydantic/pydantic/pull/12908)\n\n#### Changes\n\n* Track extra fields set after init in `model_fields_set` by [@navalprakhar](https://github.com/navalprakhar) in [#12817](https://github.com/pydantic/pydantic/pull/12817)\n* Do not include annotations that are not part of named tuple fields by [@galuszkak](https://github.com/galuszkak) in [#12951](https://github.com/pydantic/pydantic/pull/12951)\n* No longer fall back to trying all union members when the variant selected by discriminator fails to serialize by [@navalprakhar](https://github.com/navalprakhar) in [#12825](https://github.com/pydantic/pydantic/pull/12825)\n\n#### Fixes\n\n* Support discriminator metadata outside union type alias by [@Viicos](https://github.com/Viicos) in [#12785](https://github.com/pydantic/pydantic/pull/12785)\n* Respect `extras_schema` when only `extra_fields_behavior` is set on the config in JSON Schema generation for typed dictionaries by [@Viicos](https://github.com/Viicos) in [#12810](https://github.com/pydantic/pydantic/pull/12810)\n* Ensure `__pydantic_private__` is set in `model_construct()` with user-defined `model_post_init()` by [@nightcityblade](https://github.com/nightcityblade) in [#12816](https://github.com/pydantic/pydantic/pull/12816)\n* Handle all schema generation errors in `InstanceOf` by [@Viicos](https://github.com/Viicos) in [#12705](https://github.com/pydantic/pydantic/pull/12705)\n* Allow dynamic models created with `create_model()` to be used as annotations in the Mypy plugin by [@Br1an67](https://github.com/Br1an67) in [#12879](https://github.com/pydantic/pydantic/pull/12879)\n* Check for `PlaceholderNode` in Mypy plugin by [@Viicos](https://github.com/Viicos) in [#12929](https://github.com/pydantic/pydantic/pull/12929)\n* Try other branches in smart union in case of omit errors by [@mikeedjones](https://github.com/mikeedjones) in [#12758](https://github.com/pydantic/pydantic/pull/12758)\n* Patch unset attributes with `MISSING` during model serialization with `exclude_unset` by [@davidhewitt](https://github.com/davidhewitt) in [#12905](https://github.com/pydantic/pydantic/pull/12905)\n* Ensure custom `__init__()` is called when using `model_validate_strings()` by [@siewcapital](https://github.com/siewcapital) in [#12897](https://github.com/pydantic/pydantic/pull/12897)\n\n#### Packaging\n\n* Add riscv64 build target for manylinux by [@boosterl](https://github.com/boosterl) in [#12723](https://github.com/pydantic/pydantic/pull/12723)\n\n### New Contributors\n\n* [@kelsonbrito50](https://github.com/kelsonbrito50) made their first contribution in [#12860](https://github.com/pydantic/pydantic/pull/12860)\n* [@boosterl](https://github.com/boosterl) made their first contribution in [#12723](https://github.com/pydantic/pydantic/pull/12723)\n* [@adityagiri3600](https://github.com/adityagiri3600) made their first contribution in [#12868](https://github.com/pydantic/pydantic/pull/12868)\n* [@navalprakhar](https://github.com/navalprakhar) made their first contribution in [#12817](https://github.com/pydantic/pydantic/pull/12817)\n* [@Br1an67](https://github.com/Br1an67) made their first contribution in [#12879](https://github.com/pydantic/pydantic/pull/12879)\n* [@rmorshea](https://github.com/rmorshea) made their first contribution in [#12910](https://github.com/pydantic/pydantic/pull/12910)\n* [@N3XT3R1337](https://github.com/N3XT3R1337) made their first contribution in [#12922](https://github.com/pydantic/pydantic/pull/12922)\n* [@ai-man-codes](https://github.com/ai-man-codes) made their first contribution in [#12907](https://github.com/pydantic/pydantic/pull/12907)\n* [@Yume05-dev](https://github.com/Yume05-dev) made their first contribution in [#12953](https://github.com/pydantic/pydantic/pull/12953)\n* [@galuszkak](https://github.com/galuszkak) made their first contribution in [#12951](https://github.com/pydantic/pydantic/pull/12951)\n* [@siewcapital](https://github.com/siewcapital) made their first contribution in [#12897](https://github.com/pydantic/pydantic/pull/12897)\n\n## v2.13.0b2 (2026-02-24)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.0b2)\n\n### What's Changed\n\n#### Fixes\n\n* Fix backported V1 namespace by [@Viicos](https://github.com/Viicos) in [#12855](https://github.com/pydantic/pydantic/pull/12855)\n* Allow any type form to be used in `validate_as()` by [@bledden](https://github.com/bledden) in [#12846](https://github.com/pydantic/pydantic/pull/12846)\n* Fix walrus operator precedence in `UrlConstraints.__get_pydantic_core_schema__()` by [@bysiber](https://github.com/bysiber) in [#12826](https://github.com/pydantic/pydantic/pull/12826)\n\n### New Contributors\n\n* [@bledden](https://github.com/bledden) made their first contribution in [#12846](https://github.com/pydantic/pydantic/pull/12846)\n* [@bysiber](https://github.com/bysiber) made their first contribution in [#12827](https://github.com/pydantic/pydantic/pull/12827)\n\n## v2.13.0b1 (2026-02-23)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.0b1)\n\nThis is the first beta release of the 2.13 version, mainly providing bug fixes and performance improvements\nfor validation and serialization.\n\nNotable changes include:\n\n* Add a new `polymorphic_serialization` option, solving issues with `serialize_as_any` introduced in 2.12.\n* Latest V1.10.26 release under the `pydantic.v1` namespace. This version includes support for Python 3.14.\n* The [`pydantic-core`](https://github.com/pydantic/pydantic-core/) repository was merged inside the main `pydantic` one.\n\n### What's Changed\n\n#### New Features\n\n* Add `polymorphic_serialization` option by [@davidhewitt](https://github.com/davidhewitt) in [#12518](https://github.com/pydantic/pydantic/pull/12518)\n* Support Root models with `Literal` root types as discriminator field types by [@YassinNouh21](https://github.com/YassinNouh21) in [#12680](https://github.com/pydantic/pydantic/pull/12680)\n\n#### Changes\n\n* Migrate `pydantic-core` CI by [@Viicos](https://github.com/Viicos) in [#12752](https://github.com/pydantic/pydantic/pull/12752)\n* Import `pydantic-core` into pydantic by [@davidhewitt](https://github.com/davidhewitt) in [#12481](https://github.com/pydantic/pydantic/pull/12481)\n* Backport V1 changes up to v1.10.26 by [@Viicos](https://github.com/Viicos) in [#12663](https://github.com/pydantic/pydantic/pull/12663)\n* Use the `complex()` constructor unconditionally when validating `complex` Python data by [@tanmaymunjal](https://github.com/tanmaymunjal) in [#12498](https://github.com/pydantic/pydantic/pull/12498)\n* Add support for three-tuple input for `Decimal` by [@tanmaymunjal](https://github.com/tanmaymunjal) in [#12500](https://github.com/pydantic/pydantic/pull/12500)\n* Align `@field_serializer` logic with `@field_validator` by [@Viicos](https://github.com/Viicos) in [#12577](https://github.com/pydantic/pydantic/pull/12577)\n* Make `PydanticUserError` a `RuntimeError` instead of a `TypeError` by [@poliakovva](https://github.com/poliakovva) in [#12579](https://github.com/pydantic/pydantic/pull/12579)\n* Remove redundant serialization attempts in nested unions by [@davidhewitt](https://github.com/davidhewitt) in [#12604](https://github.com/pydantic/pydantic/pull/12604)\n* Copy `root` value when making root model shallow copies by [@YassinNouh21](https://github.com/YassinNouh21) in [#12679](https://github.com/pydantic/pydantic/pull/12679)\n* Ensure deterministic JSON schema defaults by sorting sets by [@drshvik](https://github.com/drshvik) in [#12760](https://github.com/pydantic/pydantic/pull/12760)\n\n#### Performance\n\n* Refactor `DecoratorInfos.build()` implementation by [@Viicos](https://github.com/Viicos) in [#12536](https://github.com/pydantic/pydantic/pull/12536)\n* Cache compiled regex in `pydantic-core` by [@Viicos](https://github.com/Viicos) in [#12549](https://github.com/pydantic/pydantic/pull/12549)\n* Optimize creation of `Literal` validators by [@davidhewitt](https://github.com/davidhewitt) in [#12569](https://github.com/pydantic/pydantic/pull/12569)\n* Optimize implementation of `LookupKey` by [@davidhewitt](https://github.com/davidhewitt) in [#12571](https://github.com/pydantic/pydantic/pull/12571)\n* Use python strings for field names by [@davidhewitt](https://github.com/davidhewitt) in [#12631](https://github.com/pydantic/pydantic/pull/12631)\n* Optimize datetime formatting code by [@davidhewitt](https://github.com/davidhewitt) in [#12626](https://github.com/pydantic/pydantic/pull/12626)\n* Validate JSON model data by iteration by [@davidhewitt](https://github.com/davidhewitt) in [#12550](https://github.com/pydantic/pydantic/pull/12550)\n* Optimize annotations evaluation of Pydantic models by [@Viicos](https://github.com/Viicos) in [#12681](https://github.com/pydantic/pydantic/pull/12681)\n* Optimize `FieldInfo._copy()` by [@Viicos](https://github.com/Viicos) in [#12727](https://github.com/pydantic/pydantic/pull/12727)\n\n#### Fixes\n\n* Fix `FieldInfo` rebuilding when parameterizing generic models with an `Annotated` type by [@Viicos](https://github.com/Viicos) in [#12463](https://github.com/pydantic/pydantic/pull/12463)\n* Fix nested model schema deduplication in JSON schema generation by [@marwan-alloreview](https://github.com/marwan-alloreview) in [#12494](https://github.com/pydantic/pydantic/pull/12494)\n* Fix `InitVar` being ignored when using with the `pydantic.Field()` function by [@Viicos](https://github.com/Viicos) in [#12495](https://github.com/pydantic/pydantic/pull/12495)\n* Fix support for enums with `NamedTuple` as values by [@Viicos](https://github.com/Viicos) in [#12506](https://github.com/pydantic/pydantic/pull/12506)\n* Do not delete mock validator/serializer in `rebuild_dataclass()` by [@Viicos](https://github.com/Viicos) in [#12513](https://github.com/pydantic/pydantic/pull/12513)\n* Require test suite to pass with free threading, switch back to global generic types cache by [@davidhewitt](https://github.com/davidhewitt) in [#12537](https://github.com/pydantic/pydantic/pull/12537)\n* Refactor `__pydantic_extra__` annotation handling by [@Viicos](https://github.com/Viicos) in [#12563](https://github.com/pydantic/pydantic/pull/12563)\n* Do not add claim of UUID \"safety\" provision by [@davidhewitt](https://github.com/davidhewitt) in [#12567](https://github.com/pydantic/pydantic/pull/12567)\n* Use Python hash to perform lookup in tagged union serializer by [@davidhewitt](https://github.com/davidhewitt) in [#12594](https://github.com/pydantic/pydantic/pull/12594)\n* Do not emit serialization warning `MISSING` sentinel is present in a nested model by [@Viicos](https://github.com/Viicos) in [#12635](https://github.com/pydantic/pydantic/pull/12635)\n* Do not eagerly evaluate annotations in signature logic by [@Viicos](https://github.com/Viicos) in [#12660](https://github.com/pydantic/pydantic/pull/12660)\n* Fix serialization of typed dict unions when `exclude_none` is set by [@davidhewitt](https://github.com/davidhewitt) in [#12677](https://github.com/pydantic/pydantic/pull/12677)\n* Do not reuse prebuilt serializers/validators on rebuilds by [@lmmx](https://github.com/lmmx) in [#12689](https://github.com/pydantic/pydantic/pull/12689)\n* Fix type annotation of `field_definitions` in `create_model()` by [@lehmann-hqs](https://github.com/lehmann-hqs) in [#12734](https://github.com/pydantic/pydantic/pull/12734)\n* Fix incorrect dataclass constructor signature when overriding class `kw_only` with `Field()` by [@jfadia](https://github.com/jfadia) in [#12741](https://github.com/pydantic/pydantic/pull/12741)\n* Use `typing.Union` when replacing types under Python 3.14 by [@Viicos](https://github.com/Viicos) in [#12733](https://github.com/pydantic/pydantic/pull/12733)\n* Improve ImportString error when internal imports fail by [@tsembp](https://github.com/tsembp) in [#12740](https://github.com/pydantic/pydantic/pull/12740)\n* Fix serializing complex numbers with negative zero imaginary part by [@lhnwrk](https://github.com/lhnwrk) in [#12770](https://github.com/pydantic/pydantic/pull/12770)\n* Preserve custom docstrings on stdlib dataclasses in JSON schema by [@nightcityblade](https://github.com/nightcityblade) in [#12815](https://github.com/pydantic/pydantic/pull/12815)\n\n#### Packaging\n\n* Bump Rust url dependency from 2.5.4 to 2.5.7 in `pydantic-core` by [@dependabot](https://github.com/dependabot)[bot] in [#12508](https://github.com/pydantic/pydantic/pull/12508)\n* Bump Rust minimum version to 1.88, use edition 2024 by [@davidhewitt](https://github.com/davidhewitt) and [@Viicos](https://github.com/Viicos) in [#12551](https://github.com/pydantic/pydantic/pull/12551) and [#12752](https://github.com/pydantic/pydantic/pull/12752)\n* Bump PyO3 to 0.28, jiter to 0.13 by [@davidhewitt](https://github.com/davidhewitt) in [#12767](https://github.com/pydantic/pydantic/pull/12767)\n\n### New Contributors\n\n* [@marwan-alloreview](https://github.com/marwan-alloreview) made their first contribution in [#12494](https://github.com/pydantic/pydantic/pull/12494)\n* [@tanmaymunjal](https://github.com/tanmaymunjal) made their first contribution in [#12498](https://github.com/pydantic/pydantic/pull/12498)\n* [@poliakovva](https://github.com/poliakovva) made their first contribution in [#12579](https://github.com/pydantic/pydantic/pull/12579)\n* [@lehmann-hqs](https://github.com/lehmann-hqs) made their first contribution in [#12734](https://github.com/pydantic/pydantic/pull/12734)\n* [@jfadia](https://github.com/jfadia) made their first contribution in [#12741](https://github.com/pydantic/pydantic/pull/12741)\n* [@tsembp](https://github.com/tsembp) made their first contribution in [#12740](https://github.com/pydantic/pydantic/pull/12740)\n* [@drshvik](https://github.com/drshvik) made their first contribution in [#12760](https://github.com/pydantic/pydantic/pull/12760)\n* [@lhnwrk](https://github.com/lhnwrk) made their first contribution in [#12770](https://github.com/pydantic/pydantic/pull/12770)\n* [@nightcityblade](https://github.com/nightcityblade) made their first contribution in [#12815](https://github.com/pydantic/pydantic/pull/12811)\n\n## v2.12.5 (2025-11-26)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.5)\n\nThis is the fifth 2.12 patch release, addressing an issue with the `MISSING` sentinel and providing several documentation improvements.\n\nThe next 2.13 minor release will be published in a couple weeks, and will include a new *polymorphic serialization* feature addressing\nthe remaining unexpected changes to the *serialize as any* behavior.\n\n* Fix pickle error when using `model_construct()` on a model with `MISSING` as a default value by [@ornariece](https://github.com/ornariece) in [#12522](https://github.com/pydantic/pydantic/pull/12522).\n* Several updates to the documentation by [@Viicos](https://github.com/Viicos).\n\n## v2.12.4 (2025-11-05)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.4)\n\nThis is the fourth 2.12 patch release, fixing more regressions, and reverting a change in the `build()` method\nof the [`AnyUrl` and Dsn types](https://docs.pydantic.dev/latest/api/networks/).\n\nThis patch release also fixes an issue with the serialization of IP address types, when `serialize_as_any` is used. The next patch release\nwill try to address the remaining issues with *serialize as any* behavior by introducing a new *polymorphic serialization* feature, that\nshould be used in most cases in place of *serialize as any*.\n\n* Fix issue with forward references in parent `TypedDict` classes by [@Viicos](https://github.com/Viicos) in [#12427](https://github.com/pydantic/pydantic/pull/12427).\n\n This issue is only relevant on Python 3.14 and greater.\n\n* Exclude fields with `exclude_if` from JSON Schema required fields by [@Viicos](https://github.com/Viicos) in [#12430](https://github.com/pydantic/pydantic/pull/12430)\n* Revert URL percent-encoding of credentials in the `build()` method\n of the [`AnyUrl` and Dsn types](https://docs.pydantic.dev/latest/api/networks/) by [@davidhewitt](https://github.com/davidhewitt) in\n [pydantic-core#1833](https://github.com/pydantic/pydantic-core/pull/1833).\n\n This was initially considered as a bugfix, but caused regressions and as such was fully reverted. The next release will include\n an opt-in option to percent-encode components of the URL.\n\n* Add type inference for IP address types by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1868](https://github.com/pydantic/pydantic-core/pull/1868).\n\n The 2.12 changes to the `serialize_as_any` behavior made it so that IP address types could not properly serialize to JSON.\n\n* Avoid getting default values from defaultdict by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1853](https://github.com/pydantic/pydantic-core/pull/1853).\n\n This fixes a subtle regression in the validation behavior of the [`collections.defaultdict`](https://docs.python.org/3/library/collections.html#collections.defaultdict)\n type.\n\n* Fix issue with field serializers on nested typed dictionaries by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1879](https://github.com/pydantic/pydantic-core/pull/1879).\n* Add more `pydantic-core` builds for the three-threaded version of Python 3.14 by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1864](https://github.com/pydantic/pydantic-core/pull/1864).\n\n## v2.12.3 (2025-10-17)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.3)\n\n### What's Changed\n\nThis is the third 2.12 patch release, fixing issues related to the `FieldInfo` class, and reverting a change to the supported\n[*after* model validator](https://docs.pydantic.dev/latest/concepts/validators/#model-validators) function signatures.\n\n* Raise a warning when an invalid after model validator function signature is raised by [@Viicos](https://github.com/Viicos) in [#12414](https://github.com/pydantic/pydantic/pull/12414).\n Starting in 2.12.0, using class methods for *after* model validators raised an error, but the error wasn't raised concistently. We decided\n to emit a deprecation warning instead.\n* Add [`FieldInfo.asdict()`](https://docs.pydantic.dev/latest/api/fields/#pydantic.fields.FieldInfo.asdict) method, improve documentation around `FieldInfo` by [@Viicos](https://github.com/Viicos) in [#12411](https://github.com/pydantic/pydantic/pull/12411).\n This also add back support for mutations on `FieldInfo` classes, that are reused as `Annotated` metadata. **However**, note that this is still\n *not* a supported pattern. Instead, please refer to the [added example](https://docs.pydantic.dev/latest/examples/dynamic_models/) in the documentation.\n\nThe [blog post](https://pydantic.dev/articles/pydantic-v2-12-release#changes) section on changes was also updated to document the changes related to `serialize_as_any`.\n\n## v2.12.2 (2025-10-14)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.2)\n\n### What's Changed\n\n#### Fixes\n\n* Release a new `pydantic-core` version, as a corrupted CPython 3.10 `manylinux2014_aarch64` wheel got uploaded ([pydantic-core#1843](https://github.com/pydantic/pydantic-core/pull/1843)).\n* Fix issue with recursive generic models with a parent model class by [@Viicos](https://github.com/Viicos) in [#12398](https://github.com/pydantic/pydantic/pull/12398)\n\n## v2.12.1 (2025-10-13)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.1)\n\n### What's Changed\n\nThis is the first 2.12 patch release, addressing most (but not all yet) regressions from the initial 2.12.0 release.\n\n#### Fixes\n\n* Do not evaluate annotations when inspecting validators and serializers by [@Viicos](https://github.com/Viicos) in [#12355](https://github.com/pydantic/pydantic/pull/12355)\n* Make sure `None` is converted as `NoneType` in Python 3.14 by [@Viicos](https://github.com/Viicos) in [#12370](https://github.com/pydantic/pydantic/pull/12370)\n* Backport V1 runtime warning when using Python 3.14 by [@Viicos](https://github.com/Viicos) in [#12367](https://github.com/pydantic/pydantic/pull/12367)\n* Fix error message for invalid validator signatures by [@Viicos](https://github.com/Viicos) in [#12366](https://github.com/pydantic/pydantic/pull/12366)\n* Populate field name in `ValidationInfo` for validation of default value by [@Viicos](https://github.com/Viicos) in [pydantic-core#1826](https://github.com/pydantic/pydantic-core/pull/1826)\n* Encode credentials in `MultiHostUrl` builder by [@willswire](https://github.com/willswire) in [pydantic-core#1829](https://github.com/pydantic/pydantic-core/pull/1829)\n* Respect field serializers when using `serialize_as_any` serialization flag by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1829](https://github.com/pydantic/pydantic-core/pull/1829)\n* Fix various `RootModel` serialization issues by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1836](https://github.com/pydantic/pydantic-core/pull/1836)\n\n### New Contributors\n\n* [@willswire](https://github.com/willswire) made their first contribution in [pydantic-core#1829](https://github.com/pydantic/pydantic-core/pull/1829)\n\n## v2.12.0 (2025-10-07)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.0)\n\nThis is the final 2.12 release. It features the work of 20 external contributors and provides useful new features, along with initial Python 3.14 support.\nSeveral minor changes (considered non-breaking changes according to our [versioning policy](https://docs.pydantic.dev/2.12/version-policy/#pydantic-v2))\nare also included in this release. Make sure to look into them before upgrading.\n\n**Note that Pydantic V1 is not compatible with Python 3.14 and greater**.\n\n### What's Changed\n\nSee the beta releases for all changes sinces 2.11.\n\n#### New Features\n\n* Add `extra` parameter to the validate functions by [@anvilpete](https://github.com/anvilpete) in [#12233](https://github.com/pydantic/pydantic/pull/12233)\n* Add `exclude_computed_fields` serialization option by [@Viicos](https://github.com/Viicos) in [#12334](https://github.com/pydantic/pydantic/pull/12334)\n* Add `preverse_empty_path` URL options by [@Viicos](https://github.com/Viicos) in [#12336](https://github.com/pydantic/pydantic/pull/12336)\n* Add `union_format` parameter to JSON Schema generation by [@Viicos](https://github.com/Viicos) in [#12147](https://github.com/pydantic/pydantic/pull/12147)\n* Add `__qualname__` parameter for `create_model` by [@Atry](https://github.com/Atry) in [#12001](https://github.com/pydantic/pydantic/pull/12001)\n\n#### Fixes\n\n* Do not try to infer name from lambda definitions in pipelines API by [@Viicos](https://github.com/Viicos) in [#12289](https://github.com/pydantic/pydantic/pull/12289)\n* Use proper namespace for functions in `TypeAdapter` by [@Viicos](https://github.com/Viicos) in [#12324](https://github.com/pydantic/pydantic/pull/12324)\n* Use `Any` for context type annotation in `TypeAdapter` by [@inducer](https://github.com/inducer) in [#12279](https://github.com/pydantic/pydantic/pull/12279)\n* Expose `FieldInfo` in `pydantic.fields.__all__` by [@Viicos](https://github.com/Viicos) in [#12339](https://github.com/pydantic/pydantic/pull/12339)\n* Respect `validation_alias` in `@validate_call` by [@Viicos](https://github.com/Viicos) in [#12340](https://github.com/pydantic/pydantic/pull/12340)\n* Use `Any` as context annotation in plugin API by [@Viicos](https://github.com/Viicos) in [#12341](https://github.com/pydantic/pydantic/pull/12341)\n* Use proper `stacklevel` in warnings when possible by [@Viicos](https://github.com/Viicos) in [#12342](https://github.com/pydantic/pydantic/pull/12342)\n\n#### Packaging\n\n* Update V1 copy to v1.10.24 by [@Viicos](https://github.com/Viicos) in [#12338](https://github.com/pydantic/pydantic/pull/12338)\n\n### New Contributors\n\n* [@anvilpete](https://github.com/anvilpete) made their first contribution in [#12233](https://github.com/pydantic/pydantic/pull/12233)\n* [@JonathanWindell](https://github.com/JonathanWindell) made their first contribution in [#12327](https://github.com/pydantic/pydantic/pull/12327)\n* [@inducer](https://github.com/inducer) made their first contribution in [#12279](https://github.com/pydantic/pydantic/pull/12279)\n* [@Atry](https://github.com/Atry) made their first contribution in [#12001](https://github.com/pydantic/pydantic/pull/12001)\n\n## v2.12.0b1 (2025-10-03)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.0b1)\n\nThis is the first beta release of the upcoming 2.12 release.\n\n### What's Changed\n\n#### New Features\n\n* Add support for `exclude_if` at the field level by [@andresliszt](https://github.com/andresliszt) in [#12141](https://github.com/pydantic/pydantic/pull/12141)\n* Add `ValidateAs` annotation helper by [@Viicos](https://github.com/Viicos) in [#11942](https://github.com/pydantic/pydantic/pull/11942)\n* Add configuration options for validation and JSON serialization of temporal types by [@ollz272](https://github.com/ollz272) in [#12068](https://github.com/pydantic/pydantic/pull/12068)\n* Add support for PEP 728 by [@Viicos](https://github.com/Viicos) in [#12179](https://github.com/pydantic/pydantic/pull/12179)\n* Add field name in serialization error by [@NicolasPllr1](https://github.com/NicolasPllr1) in [pydantic-core#1799](https://github.com/pydantic/pydantic-core/pull/1799)\n* Add option to preserve empty URL paths by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1789](https://github.com/pydantic/pydantic-core/pull/1789)\n\n#### Changes\n\n* Raise error if an incompatible `pydantic-core` version is installed by [@Viicos](https://github.com/Viicos) in [#12196](https://github.com/pydantic/pydantic/pull/12196)\n* Remove runtime warning for experimental features by [@Viicos](https://github.com/Viicos) in [#12265](https://github.com/pydantic/pydantic/pull/12265)\n* Warn if registering virtual subclasses on Pydantic models by [@Viicos](https://github.com/Viicos) in [#11669](https://github.com/pydantic/pydantic/pull/11669)\n\n#### Fixes\n\n* Fix `__getattr__()` behavior on Pydantic models when a property raised an `AttributeError` and extra values are present by [@raspuchin](https://github.com/raspuchin) in [#12106](https://github.com/pydantic/pydantic/pull/12106)\n* Add test to prevent regression with Pydantic models used as annotated metadata by [@Viicos](https://github.com/Viicos) in [#12133](https://github.com/pydantic/pydantic/pull/12133)\n* Allow to use property setters on Pydantic dataclasses with `validate_assignment` set by [@Viicos](https://github.com/Viicos) in [#12173](https://github.com/pydantic/pydantic/pull/12173)\n* Fix mypy v2 plugin for upcoming mypy release by [@cdce8p](https://github.com/cdce8p) in [#12209](https://github.com/pydantic/pydantic/pull/12209)\n* Respect custom title in functions JSON Schema by [@Viicos](https://github.com/Viicos) in [#11892](https://github.com/pydantic/pydantic/pull/11892)\n* Fix `ImportString` JSON serialization for objects with a `name` attribute by [@chr1sj0nes](https://github.com/chr1sj0nes) in [#12219](https://github.com/pydantic/pydantic/pull/12219)\n* Do not error on fields overridden by methods in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#12290](https://github.com/pydantic/pydantic/pull/12290)\n\n#### Packaging\n\n* Bump `pydantic-core` to v2.40.1 by [@Viicos](https://github.com/Viicos) in [#12314](https://github.com/pydantic/pydantic/pull/12314)\n\n### New Contributors\n\n* [@raspuchin](https://github.com/raspuchin) made their first contribution in [#12106](https://github.com/pydantic/pydantic/pull/12106)\n* [@chr1sj0nes](https://github.com/chr1sj0nes) made their first contribution in [#12219](https://github.com/pydantic/pydantic/pull/12219)\n\n## v2.12.0a1 (2025-07-26)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.0a1)\n\nThis is the first alpha release of the upcoming 2.12 release, which adds initial support for Python 3.14.\n\n### What's Changed\n\n#### New Features\n\n* Add `__pydantic_on_complete__()` hook that is called once model is fully ready to be used by [@DouweM](https://github.com/DouweM) in [#11762](https://github.com/pydantic/pydantic/pull/11762)\n* Add initial support for Python 3.14 by [@Viicos](https://github.com/Viicos) in [#11991](https://github.com/pydantic/pydantic/pull/11991)\n* Add regex patterns to JSON schema for `Decimal` type by [@Dima-Bulavenko](https://github.com/Dima-Bulavenko) in [#11987](https://github.com/pydantic/pydantic/pull/11987)\n* Add support for `doc` attribute on dataclass fields by [@Viicos](https://github.com/Viicos) in [#12077](https://github.com/pydantic/pydantic/pull/12077)\n* Add experimental `MISSING` sentinel by [@Viicos](https://github.com/Viicos) in [#11883](https://github.com/pydantic/pydantic/pull/11883)\n\n#### Changes\n\n* Allow config and bases to be specified together in `create_model()` by [@Viicos](https://github.com/Viicos) in [#11714](https://github.com/pydantic/pydantic/pull/11714)\n* Move some field logic out of the `GenerateSchema` class by [@Viicos](https://github.com/Viicos) in [#11733](https://github.com/pydantic/pydantic/pull/11733)\n* Always make use of `inspect.getsourcelines()` for docstring extraction on Python 3.13 and greater by [@Viicos](https://github.com/Viicos) in [#11829](https://github.com/pydantic/pydantic/pull/11829)\n* Only support the latest Mypy version by [@Viicos](https://github.com/Viicos) in [#11832](https://github.com/pydantic/pydantic/pull/11832)\n* Do not implicitly convert after model validators to class methods by [@Viicos](https://github.com/Viicos) in [#11957](https://github.com/pydantic/pydantic/pull/11957)\n* Refactor `FieldInfo` creation implementation by [@Viicos](https://github.com/Viicos) in [#11898](https://github.com/pydantic/pydantic/pull/11898)\n* Make `Secret` covariant by [@bluenote10](https://github.com/bluenote10) in [#12008](https://github.com/pydantic/pydantic/pull/12008)\n* Emit warning when field-specific metadata is used in invalid contexts by [@Viicos](https://github.com/Viicos) in [#12028](https://github.com/pydantic/pydantic/pull/12028)\n\n#### Fixes\n\n* Properly fetch plain serializer function when serializing default value in JSON Schema by [@Viicos](https://github.com/Viicos) in [#11721](https://github.com/pydantic/pydantic/pull/11721)\n* Remove generics cache workaround by [@Viicos](https://github.com/Viicos) in [#11755](https://github.com/pydantic/pydantic/pull/11755)\n* Remove coercion of decimal constraints by [@Viicos](https://github.com/Viicos) in [#11772](https://github.com/pydantic/pydantic/pull/11772)\n* Fix crash when expanding root type in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11735](https://github.com/pydantic/pydantic/pull/11735)\n* Only mark model as complete once all fields are complete by [@DouweM](https://github.com/DouweM) in [#11759](https://github.com/pydantic/pydantic/pull/11759)\n* Do not provide `field_name` in validator core schemas by [@DouweM](https://github.com/DouweM) in [#11761](https://github.com/pydantic/pydantic/pull/11761)\n* Fix issue with recursive generic models by [@Viicos](https://github.com/Viicos) in [#11775](https://github.com/pydantic/pydantic/pull/11775)\n* Fix qualified name comparison of private attributes during namespace inspection by [@karta9821](https://github.com/karta9821) in [#11803](https://github.com/pydantic/pydantic/pull/11803)\n* Make sure Pydantic dataclasses with slots and `validate_assignment` can be unpickled by [@Viicos](https://github.com/Viicos) in [#11769](https://github.com/pydantic/pydantic/pull/11769)\n* Traverse `function-before` schemas during schema gathering by [@Viicos](https://github.com/Viicos) in [#11801](https://github.com/pydantic/pydantic/pull/11801)\n* Fix check for stdlib dataclasses by [@Viicos](https://github.com/Viicos) in [#11822](https://github.com/pydantic/pydantic/pull/11822)\n* Check if `FieldInfo` is complete after applying type variable map by [@Viicos](https://github.com/Viicos) in [#11855](https://github.com/pydantic/pydantic/pull/11855)\n* Do not delete mock validator/serializer in `model_rebuild()` by [@Viicos](https://github.com/Viicos) in [#11890](https://github.com/pydantic/pydantic/pull/11890)\n* Rebuild dataclass fields before schema generation by [@Viicos](https://github.com/Viicos) in [#11949](https://github.com/pydantic/pydantic/pull/11949)\n* Always store the original field assignment on `FieldInfo` by [@Viicos](https://github.com/Viicos) in [#11946](https://github.com/pydantic/pydantic/pull/11946)\n* Do not use deprecated methods as default field values by [@Viicos](https://github.com/Viicos) in [#11914](https://github.com/pydantic/pydantic/pull/11914)\n* Allow callable discriminator to be applied on PEP 695 type aliases by [@Viicos](https://github.com/Viicos) in [#11941](https://github.com/pydantic/pydantic/pull/11941)\n* Suppress core schema generation warning when using `SkipValidation` by [@ygsh0816](https://github.com/ygsh0816) in [#12002](https://github.com/pydantic/pydantic/pull/12002)\n* Do not emit typechecking error for invalid `Field()` default with `validate_default` set to `True` by [@Viicos](https://github.com/Viicos) in [#11988](https://github.com/pydantic/pydantic/pull/11988)\n* Refactor logic to support Pydantic's `Field()` function in dataclasses by [@Viicos](https://github.com/Viicos) in [#12051](https://github.com/pydantic/pydantic/pull/12051)\n\n#### Packaging\n\n* Update project metadata to use PEP 639 by [@Viicos](https://github.com/Viicos) in [#11694](https://github.com/pydantic/pydantic/pull/11694)\n* Bump `mkdocs-llmstxt` to v0.2.0 by [@Viicos](https://github.com/Viicos) in [#11725](https://github.com/pydantic/pydantic/pull/11725)\n* Bump `pydantic-core` to v2.35.1 by [@Viicos](https://github.com/Viicos) in [#11963](https://github.com/pydantic/pydantic/pull/11963)\n* Bump dawidd6/action-download-artifact from 10 to 11 by [@dependabot](https://github.com/dependabot)[bot] in [#12033](https://github.com/pydantic/pydantic/pull/12033)\n* Bump astral-sh/setup-uv from 5 to 6 by [@dependabot](https://github.com/dependabot)[bot] in [#11826](https://github.com/pydantic/pydantic/pull/11826)\n* Update mypy to 1.17.0 by [@Viicos](https://github.com/Viicos) in [#12076](https://github.com/pydantic/pydantic/pull/12076)\n\n### New Contributors\n\n* [@parth-paradkar](https://github.com/parth-paradkar) made their first contribution in [#11695](https://github.com/pydantic/pydantic/pull/11695)\n* [@dqkqd](https://github.com/dqkqd) made their first contribution in [#11739](https://github.com/pydantic/pydantic/pull/11739)\n* [@fhightower](https://github.com/fhightower) made their first contribution in [#11722](https://github.com/pydantic/pydantic/pull/11722)\n* [@gbaian10](https://github.com/gbaian10) made their first contribution in [#11766](https://github.com/pydantic/pydantic/pull/11766)\n* [@DouweM](https://github.com/DouweM) made their first contribution in [#11759](https://github.com/pydantic/pydantic/pull/11759)\n* [@bowenliang123](https://github.com/bowenliang123) made their first contribution in [#11719](https://github.com/pydantic/pydantic/pull/11719)\n* [@rawwar](https://github.com/rawwar) made their first contribution in [#11799](https://github.com/pydantic/pydantic/pull/11799)\n* [@karta9821](https://github.com/karta9821) made their first contribution in [#11803](https://github.com/pydantic/pydantic/pull/11803)\n* [@jinnovation](https://github.com/jinnovation) made their first contribution in [#11834](https://github.com/pydantic/pydantic/pull/11834)\n* [@zmievsa](https://github.com/zmievsa) made their first contribution in [#11861](https://github.com/pydantic/pydantic/pull/11861)\n* [@Otto-AA](https://github.com/Otto-AA) made their first contribution in [#11860](https://github.com/pydantic/pydantic/pull/11860)\n* [@ygsh0816](https://github.com/ygsh0816) made their first contribution in [#12002](https://github.com/pydantic/pydantic/pull/12002)\n* [@lukland](https://github.com/lukland) made their first contribution in [#12015](https://github.com/pydantic/pydantic/pull/12015)\n* [@Dima-Bulavenko](https://github.com/Dima-Bulavenko) made their first contribution in [#11987](https://github.com/pydantic/pydantic/pull/11987)\n* [@GSemikozov](https://github.com/GSemikozov) made their first contribution in [#12050](https://github.com/pydantic/pydantic/pull/12050)\n* [@hannah-heywa](https://github.com/hannah-heywa) made their first contribution in [#12082](https://github.com/pydantic/pydantic/pull/12082)\n\n## v2.11.10 (2025-10-04)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.10)\n\n### What's Changed\n\n#### Fixes\n\n* Backport v1.10.24 changes by [@Viicos](https://github.com/Viicos)\n\n## v2.11.9 (2025-09-13)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.9)\n\n### What's Changed\n\n#### Fixes\n\n* Backport v1.10.23 changes by [@Viicos](https://github.com/Viicos)\n\n## v2.11.8 (2025-09-13)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.8)\n\n### What's Changed\n\n#### Fixes\n\n* Fix mypy plugin for mypy 1.18 by [@cdce8p](https://github.com/cdce8p) in [#12209](https://github.com/pydantic/pydantic/pull/12209)\n\n## v2.11.7 (2025-06-14)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.7)\n\n### What's Changed\n\n#### Fixes\n\n* Copy `FieldInfo` instance if necessary during `FieldInfo` build by [@Viicos](https://github.com/Viicos) in [#11898](https://github.com/pydantic/pydantic/pull/11898)\n\n## v2.11.6 (2025-06-13)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.6)\n\n### What's Changed\n\n#### Fixes\n\n* Rebuild dataclass fields before schema generation by [@Viicos](https://github.com/Viicos) in [#11949](https://github.com/pydantic/pydantic/pull/11949)\n* Always store the original field assignment on `FieldInfo` by [@Viicos](https://github.com/Viicos) in [#11946](https://github.com/pydantic/pydantic/pull/11946)\n\n## v2.11.5 (2025-05-22)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.5)\n\n### What's Changed\n\n#### Fixes\n\n* Check if `FieldInfo` is complete after applying type variable map by [@Viicos](https://github.com/Viicos) in [#11855](https://github.com/pydantic/pydantic/pull/11855)\n* Do not delete mock validator/serializer in `model_rebuild()` by [@Viicos](https://github.com/Viicos) in [#11890](https://github.com/pydantic/pydantic/pull/11890)\n* Do not duplicate metadata on model rebuild by [@Viicos](https://github.com/Viicos) in [#11902](https://github.com/pydantic/pydantic/pull/11902)\n\n## v2.11.4 (2025-04-29)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.4)\n\n### What's Changed\n\n#### Changes\n\n* Allow config and bases to be specified together in `create_model()` by [@Viicos](https://github.com/Viicos) in [#11714](https://github.com/pydantic/pydantic/pull/11714).\n This change was backported as it was previously possible (although not meant to be supported)\n to provide `model_config` as a field, which would make it possible to provide both configuration\n and bases.\n\n#### Fixes\n\n* Remove generics cache workaround by [@Viicos](https://github.com/Viicos) in [#11755](https://github.com/pydantic/pydantic/pull/11755)\n* Remove coercion of decimal constraints by [@Viicos](https://github.com/Viicos) in [#11772](https://github.com/pydantic/pydantic/pull/11772)\n* Fix crash when expanding root type in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11735](https://github.com/pydantic/pydantic/pull/11735)\n* Fix issue with recursive generic models by [@Viicos](https://github.com/Viicos) in [#11775](https://github.com/pydantic/pydantic/pull/11775)\n* Traverse `function-before` schemas during schema gathering by [@Viicos](https://github.com/Viicos) in [#11801](https://github.com/pydantic/pydantic/pull/11801)\n\n#### Packaging\n\n* Bump `mkdocs-llmstxt` to v0.2.0 by [@Viicos](https://github.com/Viicos) in [#11725](https://github.com/pydantic/pydantic/pull/11725)\n\n## v2.11.3 (2025-04-08)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.3)\n\n### What's Changed\n\n#### Fixes\n\n* Preserve field description when rebuilding model fields by [@Viicos](https://github.com/Viicos) in [#11698](https://github.com/pydantic/pydantic/pull/11698)\n\n#### Packaging\n\n* Update V1 copy to v1.10.21 by [@Viicos](https://github.com/Viicos) in [#11706](https://github.com/pydantic/pydantic/pull/11706)\n\n## v2.11.2 (2025-04-03)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.2)\n\n### What's Changed\n\n#### Fixes\n\n* Bump `pydantic-core` to v2.33.1 by [@Viicos](https://github.com/Viicos) in [#11678](https://github.com/pydantic/pydantic/pull/11678)\n* Make sure `__pydantic_private__` exists before setting private attributes by [@Viicos](https://github.com/Viicos) in [#11666](https://github.com/pydantic/pydantic/pull/11666)\n* Do not override `FieldInfo._complete` when using field from parent class by [@Viicos](https://github.com/Viicos) in [#11668](https://github.com/pydantic/pydantic/pull/11668)\n* Provide the available definitions when applying discriminated unions by [@Viicos](https://github.com/Viicos) in [#11670](https://github.com/pydantic/pydantic/pull/11670)\n* Do not expand root type in the mypy plugin for variables by [@Viicos](https://github.com/Viicos) in [#11676](https://github.com/pydantic/pydantic/pull/11676)\n* Mention the attribute name in model fields deprecation message by [@Viicos](https://github.com/Viicos) in [#11674](https://github.com/pydantic/pydantic/pull/11674)\n* Properly validate parameterized mappings by [@Viicos](https://github.com/Viicos) in [#11658](https://github.com/pydantic/pydantic/pull/11658)\n\n## v2.11.1 (2025-03-28)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.1)\n\n### What's Changed\n\n#### Fixes\n\n* Do not override `'definitions-ref'` schemas containing serialization schemas or metadata by [@Viicos](https://github.com/Viicos) in [#11644](https://github.com/pydantic/pydantic/pull/11644)\n\n## v2.11.0 (2025-03-27)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0)\n\n### What's Changed\n\nPydantic v2.11 is a version strongly focused on build time performance of Pydantic models (and core schema generation in general).\nSee the [blog post](https://pydantic.dev/articles/pydantic-v2-11-release) for more details.\n\n#### New Features\n\n* Add `encoded_string()` method to the URL types by [@YassinNouh21](https://github.com/YassinNouh21) in [#11580](https://github.com/pydantic/pydantic/pull/11580)\n* Add support for `defer_build` with `@validate_call` decorator by [@Viicos](https://github.com/Viicos) in [#11584](https://github.com/pydantic/pydantic/pull/11584)\n* Allow `@with_config` decorator to be used with keyword arguments by [@Viicos](https://github.com/Viicos) in [#11608](https://github.com/pydantic/pydantic/pull/11608)\n* Simplify customization of default value inclusion in JSON Schema generation by [@Viicos](https://github.com/Viicos) in [#11634](https://github.com/pydantic/pydantic/pull/11634)\n* Add `generate_arguments_schema()` function by [@Viicos](https://github.com/Viicos) in [#11572](https://github.com/pydantic/pydantic/pull/11572)\n\n#### Fixes\n\n* Allow generic typed dictionaries to be used for unpacked variadic keyword parameters by [@Viicos](https://github.com/Viicos) in [#11571](https://github.com/pydantic/pydantic/pull/11571)\n* Fix runtime error when computing model string representation involving cached properties and self-referenced models by [@Viicos](https://github.com/Viicos) in [#11579](https://github.com/pydantic/pydantic/pull/11579)\n* Preserve other steps when using the ellipsis in the pipeline API by [@Viicos](https://github.com/Viicos) in [#11626](https://github.com/pydantic/pydantic/pull/11626)\n* Fix deferred discriminator application logic by [@Viicos](https://github.com/Viicos) in [#11591](https://github.com/pydantic/pydantic/pull/11591)\n\n#### Packaging\n\n* Bump `pydantic-core` to v2.33.0 by [@Viicos](https://github.com/Viicos) in [#11631](https://github.com/pydantic/pydantic/pull/11631)\n\n### New Contributors\n\n* [@cmenon12](https://github.com/cmenon12) made their first contribution in [#11562](https://github.com/pydantic/pydantic/pull/11562)\n* [@Jeukoh](https://github.com/Jeukoh) made their first contribution in [#11611](https://github.com/pydantic/pydantic/pull/11611)\n\n## v2.11.0b2 (2025-03-17)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0b2)\n\n### What's Changed\n\n#### New Features\n\n* Add experimental support for free threading by [@Viicos](https://github.com/Viicos) in [#11516](https://github.com/pydantic/pydantic/pull/11516)\n\n#### Fixes\n\n* Fix `NotRequired` qualifier not taken into account in stringified annotation by [@Viicos](https://github.com/Viicos) in [#11559](https://github.com/pydantic/pydantic/pull/11559)\n\n#### Packaging\n\n* Bump `pydantic-core` to v2.32.0 by [@Viicos](https://github.com/Viicos) in [#11567](https://github.com/pydantic/pydantic/pull/11567)\n\n### New Contributors\n\n* [@joren485](https://github.com/joren485) made their first contribution in [#11547](https://github.com/pydantic/pydantic/pull/11547)\n\n## v2.11.0b1 (2025-03-06)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0b1)\n\n### What's Changed\n\n#### New Features\n\n* Support unsubstituted type variables with both a default and a bound or constraints by [@FyZzyss](https://github.com/FyZzyss) in https://github.com/pydantic/pydantic/pull/10789\n* Add a `default_factory_takes_validated_data` property to `FieldInfo` by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11034\n* Raise a better error when a generic alias is used inside `type[]` by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11088\n* Properly support PEP 695 generics syntax by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11189\n* Properly support type variable defaults by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11332\n* Add support for validating v6, v7, v8 UUIDs by [@astei](https://github.com/astei) in https://github.com/pydantic/pydantic/pull/11436\n* Improve alias configuration APIs by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11468\n\n#### Changes\n\n* Rework `create_model` field definitions format by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11032\n* Raise a deprecation warning when a field is annotated as final with a default value by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11168\n* Deprecate accessing `model_fields` and `model_computed_fields` on instances by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11169\n* **Breaking Change:** Move core schema generation logic for path types inside the `GenerateSchema` class by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/10846\n* Remove Python 3.8 Support by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11258\n* Optimize calls to `get_type_ref` by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/10863\n* Disable `pydantic-core` core schema validation by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11271\n\n#### Performance\n\n* Only evaluate `FieldInfo` annotations if required during schema building by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/10769\n* Improve `__setattr__` performance of Pydantic models by caching setter functions by [@MarkusSintonen](https://github.com/MarkusSintonen) in https://github.com/pydantic/pydantic/pull/10868\n* Improve annotation application performance by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11186\n* Improve performance of `_typing_extra` module by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11255\n* Refactor and optimize schema cleaning logic by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11244\n* Create a single dictionary when creating a `CoreConfig` instance by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11384\n* Bump `pydantic-core` and thus use `SchemaValidator` and `SchemaSerializer` caching by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11402\n* Reuse cached core schemas for parametrized generic Pydantic models by [@MarkusSintonen](https://github.com/MarkusSintonen) in https://github.com/pydantic/pydantic/pull/11434\n\n#### Fixes\n\n* Improve `TypeAdapter` instance repr by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/10872\n* Use the correct frame when instantiating a parametrized `TypeAdapter` by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/10893\n* Infer final fields with a default value as class variables in the mypy plugin by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11121\n* Recursively unpack `Literal` values if using PEP 695 type aliases by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11114\n* Override `__subclasscheck__` on `ModelMetaclass` to avoid memory leak and performance issues by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11116\n* Remove unused `_extract_get_pydantic_json_schema()` parameter by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11155\n* Improve discriminated union error message for invalid union variants by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11161\n* Unpack PEP 695 type aliases if using the `Annotated` form by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11109\n* Add missing stacklevel in `deprecated_instance_property` warning by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11200\n* Copy `WithJsonSchema` schema to avoid sharing mutated data by [@thejcannon](https://github.com/thejcannon) in https://github.com/pydantic/pydantic/pull/11014\n* Do not cache parametrized models when in the process of parametrizing another model by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/10704\n* Add discriminated union related metadata entries to the `CoreMetadata` definition by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11216\n* Consolidate schema definitions logic in the `_Definitions` class by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11208\n* Support initializing root model fields with values of the `root` type in the mypy plugin by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11212\n* Fix various issues with dataclasses and `use_attribute_docstrings` by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11246\n* Only compute normalized decimal places if necessary in `decimal_places_validator` by [@misrasaurabh1](https://github.com/misrasaurabh1) in https://github.com/pydantic/pydantic/pull/11281\n* Add support for `validation_alias` in the mypy plugin by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11295\n* Fix JSON Schema reference collection with `\"examples\"` keys by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11305\n* Do not transform model serializer functions as class methods in the mypy plugin by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11298\n* Simplify `GenerateJsonSchema.literal_schema()` implementation by [@misrasaurabh1](https://github.com/misrasaurabh1) in https://github.com/pydantic/pydantic/pull/11321\n* Add additional allowed schemes for `ClickHouseDsn` by [@Maze21127](https://github.com/Maze21127) in https://github.com/pydantic/pydantic/pull/11319\n* Coerce decimal constraints to `Decimal` instances by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11350\n* Use the correct JSON Schema mode when handling function schemas by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11367\n* Improve exception message when encountering recursion errors during type evaluation by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11356\n* Always include `additionalProperties: True` for arbitrary dictionary schemas by [@austinyu](https://github.com/austinyu) in https://github.com/pydantic/pydantic/pull/11392\n* Expose `fallback` parameter in serialization methods by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11398\n* Fix path serialization behavior by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11416\n* Do not reuse validators and serializers during model rebuild by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11429\n* Collect model fields when rebuilding a model by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11388\n* Allow cached properties to be altered on frozen models by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11432\n* Fix tuple serialization for `Sequence` types by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11435\n* Fix: do not check for `__get_validators__` on classes where `__get_pydantic_core_schema__` is also defined by [@tlambert03](https://github.com/tlambert03) in https://github.com/pydantic/pydantic/pull/11444\n* Allow callable instances to be used as serializers by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11451\n* Improve error thrown when overriding field with a property by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11459\n* Fix JSON Schema generation with referenceable core schemas holding JSON metadata by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11475\n* Support strict specification on union member types by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11481\n* Implicitly set `validate_by_name` to `True` when `validate_by_alias` is `False` by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11503\n* Change type of `Any` when synthesizing `BaseSettings.__init__` signature in the mypy plugin by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11497\n* Support type variable defaults referencing other type variables by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11520\n* Fix `ValueError` on year zero by [@davidhewitt](https://github.com/davidhewitt) in https://github.com/pydantic/pydantic-core/pull/1583\n* `dataclass` `InitVar` shouldn't be required on serialization by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic-core/pull/1602\n\n#### Packaging\n\n* Add a `check_pydantic_core_version()` function by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11324\n* Remove `greenlet` development dependency by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11351\n* Use the `typing-inspection` library by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11479\n* Bump `pydantic-core` to `v2.31.1` by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11526\n\n## New Contributors\n\n* [@FyZzyss](https://github.com/FyZzyss) made their first contribution in https://github.com/pydantic/pydantic/pull/10789\n* [@tamird](https://github.com/tamird) made their first contribution in https://github.com/pydantic/pydantic/pull/10948\n* [@felixxm](https://github.com/felixxm) made their first contribution in https://github.com/pydantic/pydantic/pull/11077\n* [@alexprabhat99](https://github.com/alexprabhat99) made their first contribution in https://github.com/pydantic/pydantic/pull/11082\n* [@Kharianne](https://github.com/Kharianne) made their first contribution in https://github.com/pydantic/pydantic/pull/11111\n* [@mdaffad](https://github.com/mdaffad) made their first contribution in https://github.com/pydantic/pydantic/pull/11177\n* [@thejcannon](https://github.com/thejcannon) made their first contribution in https://github.com/pydantic/pydantic/pull/11014\n* [@thomasfrimannkoren](https://github.com/thomasfrimannkoren) made their first contribution in https://github.com/pydantic/pydantic/pull/11251\n* [@usernameMAI](https://github.com/usernameMAI) made their first contribution in https://github.com/pydantic/pydantic/pull/11275\n* [@ananiavito](https://github.com/ananiavito) made their first contribution in https://github.com/pydantic/pydantic/pull/11302\n* [@pawamoy](https://github.com/pawamoy) made their first contribution in https://github.com/pydantic/pydantic/pull/11311\n* [@Maze21127](https://github.com/Maze21127) made their first contribution in https://github.com/pydantic/pydantic/pull/11319\n* [@kauabh](https://github.com/kauabh) made their first contribution in https://github.com/pydantic/pydantic/pull/11369\n* [@jaceklaskowski](https://github.com/jaceklaskowski) made their first contribution in https://github.com/pydantic/pydantic/pull/11353\n* [@tmpbeing](https://github.com/tmpbeing) made their first contribution in https://github.com/pydantic/pydantic/pull/11375\n* [@petyosi](https://github.com/petyosi) made their first contribution in https://github.com/pydantic/pydantic/pull/11405\n* [@austinyu](https://github.com/austinyu) made their first contribution in https://github.com/pydantic/pydantic/pull/11392\n* [@mikeedjones](https://github.com/mikeedjones) made their first contribution in https://github.com/pydantic/pydantic/pull/11402\n* [@astei](https://github.com/astei) made their first contribution in https://github.com/pydantic/pydantic/pull/11436\n* [@dsayling](https://github.com/dsayling) made their first contribution in https://github.com/pydantic/pydantic/pull/11522\n* [@sobolevn](https://github.com/sobolevn) made their first contribution in https://github.com/pydantic/pydantic-core/pull/1645\n\n## v2.11.0a2 (2025-02-10)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0a2)\n\n### What's Changed\n\nPydantic v2.11 is a version strongly focused on build time performance of Pydantic models (and core schema generation in general).\nThis is another early alpha release, meant to collect early feedback from users having issues with core schema builds.\n\n#### Performance\n\n* Create a single dictionary when creating a `CoreConfig` instance by [@sydney-runkle](https://github.com/sydney-runkle) in [#11384](https://github.com/pydantic/pydantic/pull/11384)\n\n#### Fixes\n\n* Use the correct JSON Schema mode when handling function schemas by [@Viicos](https://github.com/Viicos) in [#11367](https://github.com/pydantic/pydantic/pull/11367)\n* Fix JSON Schema reference logic with `examples` keys by [@Viicos](https://github.com/Viicos) in [#11366](https://github.com/pydantic/pydantic/pull/11366)\n* Improve exception message when encountering recursion errors during type evaluation by [@Viicos](https://github.com/Viicos) in [#11356](https://github.com/pydantic/pydantic/pull/11356)\n* Always include `additionalProperties: True` for arbitrary dictionary schemas by [@austinyu](https://github.com/austinyu) in [#11392](https://github.com/pydantic/pydantic/pull/11392)\n* Expose `fallback` parameter in serialization methods by [@Viicos](https://github.com/Viicos) in [#11398](https://github.com/pydantic/pydantic/pull/11398)\n* Fix path serialization behavior by [@sydney-runkle](https://github.com/sydney-runkle) in [#11416](https://github.com/pydantic/pydantic/pull/11416)\n\n#### Packaging\n\n* Bump `ruff` from 0.9.2 to 0.9.5 by [@Viicos](https://github.com/Viicos) in [#11407](https://github.com/pydantic/pydantic/pull/11407)\n* Bump `pydantic-core` to v2.29.0 by [@mikeedjones](https://github.com/mikeedjones) in [#11402](https://github.com/pydantic/pydantic/pull/11402)\n* Use locally-built rust with symbols & pgo by [@davidhewitt](https://github.com/davidhewitt) in [#11403](https://github.com/pydantic/pydantic/pull/11403)\n\n### New Contributors\n\n* [@kauabh](https://github.com/kauabh) made their first contribution in [#11369](https://github.com/pydantic/pydantic/pull/11369)\n* [@jaceklaskowski](https://github.com/jaceklaskowski) made their first contribution in [#11353](https://github.com/pydantic/pydantic/pull/11353)\n* [@tmpbeing](https://github.com/tmpbeing) made their first contribution in [#11375](https://github.com/pydantic/pydantic/pull/11375)\n* [@petyosi](https://github.com/petyosi) made their first contribution in [#11405](https://github.com/pydantic/pydantic/pull/11405)\n* [@austinyu](https://github.com/austinyu) made their first contribution in [#11392](https://github.com/pydantic/pydantic/pull/11392)\n* [@mikeedjones](https://github.com/mikeedjones) made their first contribution in [#11402](https://github.com/pydantic/pydantic/pull/11402)\n\n## v2.11.0a1 (2025-01-30)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0a1)\n\n### What's Changed\n\nPydantic v2.11 is a version strongly focused on build time performance of Pydantic models (and core schema generation in general).\nThis is an early alpha release, meant to collect early feedback from users having issues with core schema builds.\n\n#### New Features\n\n* Support unsubstituted type variables with both a default and a bound or constraints by [@FyZzyss](https://github.com/FyZzyss) in [#10789](https://github.com/pydantic/pydantic/pull/10789)\n* Add a `default_factory_takes_validated_data` property to `FieldInfo` by [@Viicos](https://github.com/Viicos) in [#11034](https://github.com/pydantic/pydantic/pull/11034)\n* Raise a better error when a generic alias is used inside `type[]` by [@Viicos](https://github.com/Viicos) in [#11088](https://github.com/pydantic/pydantic/pull/11088)\n* Properly support PEP 695 generics syntax by [@Viicos](https://github.com/Viicos) in [#11189](https://github.com/pydantic/pydantic/pull/11189)\n* Properly support type variable defaults by [@Viicos](https://github.com/Viicos) in [#11332](https://github.com/pydantic/pydantic/pull/11332)\n\n#### Changes\n\n* Rework `create_model` field definitions format by [@Viicos](https://github.com/Viicos) in [#11032](https://github.com/pydantic/pydantic/pull/11032)\n* Raise a deprecation warning when a field is annotated as final with a default value by [@Viicos](https://github.com/Viicos) in [#11168](https://github.com/pydantic/pydantic/pull/11168)\n* Deprecate accessing `model_fields` and `model_computed_fields` on instances by [@Viicos](https://github.com/Viicos) in [#11169](https://github.com/pydantic/pydantic/pull/11169)\n* Move core schema generation logic for path types inside the `GenerateSchema` class by [@sydney-runkle](https://github.com/sydney-runkle) in [#10846](https://github.com/pydantic/pydantic/pull/10846)\n* Move `deque` schema gen to `GenerateSchema` class by [@sydney-runkle](https://github.com/sydney-runkle) in [#11239](https://github.com/pydantic/pydantic/pull/11239)\n* Move `Mapping` schema gen to `GenerateSchema` to complete removal of `prepare_annotations_for_known_type` workaround by [@sydney-runkle](https://github.com/sydney-runkle) in [#11247](https://github.com/pydantic/pydantic/pull/11247)\n* Remove Python 3.8 Support by [@sydney-runkle](https://github.com/sydney-runkle) in [#11258](https://github.com/pydantic/pydantic/pull/11258)\n* Disable `pydantic-core` core schema validation by [@sydney-runkle](https://github.com/sydney-runkle) in [#11271](https://github.com/pydantic/pydantic/pull/11271)\n\n#### Performance\n\n* Only evaluate `FieldInfo` annotations if required during schema building by [@Viicos](https://github.com/Viicos) in [#10769](https://github.com/pydantic/pydantic/pull/10769)\n* Optimize calls to `get_type_ref` by [@Viicos](https://github.com/Viicos) in [#10863](https://github.com/pydantic/pydantic/pull/10863)\n* Improve `__setattr__` performance of Pydantic models by caching setter functions by [@MarkusSintonen](https://github.com/MarkusSintonen) in [#10868](https://github.com/pydantic/pydantic/pull/10868)\n* Improve annotation application performance by [@Viicos](https://github.com/Viicos) in [#11186](https://github.com/pydantic/pydantic/pull/11186)\n* Improve performance of `_typing_extra` module by [@Viicos](https://github.com/Viicos) in [#11255](https://github.com/pydantic/pydantic/pull/11255)\n* Refactor and optimize schema cleaning logic by [@Viicos](https://github.com/Viicos) and [@MarkusSintonen](https://github.com/MarkusSintonen) in [#11244](https://github.com/pydantic/pydantic/pull/11244)\n\n#### Fixes\n\n* Add validation tests for `_internal/_validators.py` by [@tkasuz](https://github.com/tkasuz) in [#10763](https://github.com/pydantic/pydantic/pull/10763)\n* Improve `TypeAdapter` instance repr by [@sydney-runkle](https://github.com/sydney-runkle) in [#10872](https://github.com/pydantic/pydantic/pull/10872)\n* Revert \"ci: use locally built pydantic-core with debug symbols by [@sydney-runkle](https://github.com/sydney-runkle) in [#10942](https://github.com/pydantic/pydantic/pull/10942)\n* Re-enable all FastAPI tests by [@tamird](https://github.com/tamird) in [#10948](https://github.com/pydantic/pydantic/pull/10948)\n* Fix typo in HISTORY.md. by [@felixxm](https://github.com/felixxm) in [#11077](https://github.com/pydantic/pydantic/pull/11077)\n* Infer final fields with a default value as class variables in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11121](https://github.com/pydantic/pydantic/pull/11121)\n* Recursively unpack `Literal` values if using PEP 695 type aliases by [@Viicos](https://github.com/Viicos) in [#11114](https://github.com/pydantic/pydantic/pull/11114)\n* Override `__subclasscheck__` on `ModelMetaclass` to avoid memory leak and performance issues by [@Viicos](https://github.com/Viicos) in [#11116](https://github.com/pydantic/pydantic/pull/11116)\n* Remove unused `_extract_get_pydantic_json_schema()` parameter by [@Viicos](https://github.com/Viicos) in [#11155](https://github.com/pydantic/pydantic/pull/11155)\n* Add FastAPI and SQLModel to third-party tests by [@sydney-runkle](https://github.com/sydney-runkle) in [#11044](https://github.com/pydantic/pydantic/pull/11044)\n* Fix conditional expressions syntax for third-party tests by [@Viicos](https://github.com/Viicos) in [#11162](https://github.com/pydantic/pydantic/pull/11162)\n* Move FastAPI tests to third-party workflow by [@Viicos](https://github.com/Viicos) in [#11164](https://github.com/pydantic/pydantic/pull/11164)\n* Improve discriminated union error message for invalid union variants by [@Viicos](https://github.com/Viicos) in [#11161](https://github.com/pydantic/pydantic/pull/11161)\n* Unpack PEP 695 type aliases if using the `Annotated` form by [@Viicos](https://github.com/Viicos) in [#11109](https://github.com/pydantic/pydantic/pull/11109)\n* Include `openapi-python-client` check in issue creation for third-party failures, use `main` branch by [@sydney-runkle](https://github.com/sydney-runkle) in [#11182](https://github.com/pydantic/pydantic/pull/11182)\n* Add pandera third-party tests by [@Viicos](https://github.com/Viicos) in [#11193](https://github.com/pydantic/pydantic/pull/11193)\n* Add ODMantic third-party tests by [@sydney-runkle](https://github.com/sydney-runkle) in [#11197](https://github.com/pydantic/pydantic/pull/11197)\n* Add missing stacklevel in `deprecated_instance_property` warning by [@Viicos](https://github.com/Viicos) in [#11200](https://github.com/pydantic/pydantic/pull/11200)\n* Copy `WithJsonSchema` schema to avoid sharing mutated data by [@thejcannon](https://github.com/thejcannon) in [#11014](https://github.com/pydantic/pydantic/pull/11014)\n* Do not cache parametrized models when in the process of parametrizing another model by [@Viicos](https://github.com/Viicos) in [#10704](https://github.com/pydantic/pydantic/pull/10704)\n* Re-enable Beanie third-party tests by [@Viicos](https://github.com/Viicos) in [#11214](https://github.com/pydantic/pydantic/pull/11214)\n* Add discriminated union related metadata entries to the `CoreMetadata` definition by [@Viicos](https://github.com/Viicos) in [#11216](https://github.com/pydantic/pydantic/pull/11216)\n* Consolidate schema definitions logic in the `_Definitions` class by [@Viicos](https://github.com/Viicos) in [#11208](https://github.com/pydantic/pydantic/pull/11208)\n* Support initializing root model fields with values of the `root` type in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11212](https://github.com/pydantic/pydantic/pull/11212)\n* Fix various issues with dataclasses and `use_attribute_docstrings` by [@Viicos](https://github.com/Viicos) in [#11246](https://github.com/pydantic/pydantic/pull/11246)\n* Only compute normalized decimal places if necessary in `decimal_places_validator` by [@misrasaurabh1](https://github.com/misrasaurabh1) in [#11281](https://github.com/pydantic/pydantic/pull/11281)\n* Fix two misplaced sentences in validation errors documentation by [@ananiavito](https://github.com/ananiavito) in [#11302](https://github.com/pydantic/pydantic/pull/11302)\n* Fix mkdocstrings inventory example in documentation by [@pawamoy](https://github.com/pawamoy) in [#11311](https://github.com/pydantic/pydantic/pull/11311)\n* Add support for `validation_alias` in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11295](https://github.com/pydantic/pydantic/pull/11295)\n* Do not transform model serializer functions as class methods in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11298](https://github.com/pydantic/pydantic/pull/11298)\n* Simplify `GenerateJsonSchema.literal_schema()` implementation by [@misrasaurabh1](https://github.com/misrasaurabh1) in [#11321](https://github.com/pydantic/pydantic/pull/11321)\n* Add additional allowed schemes for `ClickHouseDsn` by [@Maze21127](https://github.com/Maze21127) in [#11319](https://github.com/pydantic/pydantic/pull/11319)\n* Coerce decimal constraints to `Decimal` instances by [@Viicos](https://github.com/Viicos) in [#11350](https://github.com/pydantic/pydantic/pull/11350)\n* Fix `ValueError` on year zero by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1583](https://github.com/pydantic/pydantic-core/pull/1583)\n\n#### Packaging\n\n* Bump dawidd6/action-download-artifact from 6 to 7 by [@dependabot](https://github.com/dependabot) in [#11018](https://github.com/pydantic/pydantic/pull/11018)\n* Re-enable memray related tests on Python 3.12+ by [@Viicos](https://github.com/Viicos) in [#11191](https://github.com/pydantic/pydantic/pull/11191)\n* Bump astral-sh/setup-uv to 5 by [@dependabot](https://github.com/dependabot) in [#11205](https://github.com/pydantic/pydantic/pull/11205)\n* Bump `ruff` to v0.9.0 by [@sydney-runkle](https://github.com/sydney-runkle) in [#11254](https://github.com/pydantic/pydantic/pull/11254)\n* Regular `uv.lock` deps update by [@sydney-runkle](https://github.com/sydney-runkle) in [#11333](https://github.com/pydantic/pydantic/pull/11333)\n* Add a `check_pydantic_core_version()` function by [@Viicos](https://github.com/Viicos) in [#11324](https://github.com/pydantic/pydantic/pull/11324)\n* Remove `greenlet` development dependency by [@Viicos](https://github.com/Viicos) in [#11351](https://github.com/pydantic/pydantic/pull/11351)\n* Bump `pydantic-core` to v2.28.0 by [@Viicos](https://github.com/Viicos) in [#11364](https://github.com/pydantic/pydantic/pull/11364)\n\n### New Contributors\n\n* [@FyZzyss](https://github.com/FyZzyss) made their first contribution in [#10789](https://github.com/pydantic/pydantic/pull/10789)\n* [@tamird](https://github.com/tamird) made their first contribution in [#10948](https://github.com/pydantic/pydantic/pull/10948)\n* [@felixxm](https://github.com/felixxm) made their first contribution in [#11077](https://github.com/pydantic/pydantic/pull/11077)\n* [@alexprabhat99](https://github.com/alexprabhat99) made their first contribution in [#11082](https://github.com/pydantic/pydantic/pull/11082)\n* [@Kharianne](https://github.com/Kharianne) made their first contribution in [#11111](https://github.com/pydantic/pydantic/pull/11111)\n* [@mdaffad](https://github.com/mdaffad) made their first contribution in [#11177](https://github.com/pydantic/pydantic/pull/11177)\n* [@thejcannon](https://github.com/thejcannon) made their first contribution in [#11014](https://github.com/pydantic/pydantic/pull/11014)\n* [@thomasfrimannkoren](https://github.com/thomasfrimannkoren) made their first contribution in [#11251](https://github.com/pydantic/pydantic/pull/11251)\n* [@usernameMAI](https://github.com/usernameMAI) made their first contribution in [#11275](https://github.com/pydantic/pydantic/pull/11275)\n* [@ananiavito](https://github.com/ananiavito) made their first contribution in [#11302](https://github.com/pydantic/pydantic/pull/11302)\n* [@pawamoy](https://github.com/pawamoy) made their first contribution in [#11311](https://github.com/pydantic/pydantic/pull/11311)\n* [@Maze21127](https://github.com/Maze21127) made their first contribution in [#11319](https://github.com/pydantic/pydantic/pull/11319)\n\n## v2.10.6 (2025-01-23)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.6)\n\n### What's Changed\n\n#### Fixes\n\n* Fix JSON Schema reference collection with `'examples'` keys by [@Viicos](https://github.com/Viicos) in [#11325](https://github.com/pydantic/pydantic/pull/11325)\n* Fix url python serialization by [@sydney-runkle](https://github.com/sydney-runkle) in [#11331](https://github.com/pydantic/pydantic/pull/11331)\n\n## v2.10.5 (2025-01-08)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.5)\n\n### What's Changed\n\n#### Fixes\n\n* Remove custom MRO implementation of Pydantic models by [@Viicos](https://github.com/Viicos) in [#11184](https://github.com/pydantic/pydantic/pull/11184)\n* Fix URL serialization for unions by [@sydney-runkle](https://github.com/sydney-runkle) in [#11233](https://github.com/pydantic/pydantic/pull/11233)\n\n## v2.10.4 (2024-12-18)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.4)\n\n### What's Changed\n\n#### Fixes\n\n* Fix for comparison of `AnyUrl` objects by [@alexprabhat99](https://github.com/alexprabhat99) in [#11082](https://github.com/pydantic/pydantic/pull/11082)\n* Properly fetch PEP 695 type params for functions, do not fetch annotations from signature by [@Viicos](https://github.com/Viicos) in [#11093](https://github.com/pydantic/pydantic/pull/11093)\n* Include JSON Schema input core schema in function schemas by [@Viicos](https://github.com/Viicos) in [#11085](https://github.com/pydantic/pydantic/pull/11085)\n* Add `len` to `_BaseUrl` to avoid TypeError by [@Kharianne](https://github.com/Kharianne) in [#11111](https://github.com/pydantic/pydantic/pull/11111)\n* Make sure the type reference is removed from the seen references by [@Viicos](https://github.com/Viicos) in [#11143](https://github.com/pydantic/pydantic/pull/11143)\n\n### New Contributors\n\n* [@FyZzyss](https://github.com/FyZzyss) made their first contribution in [#10789](https://github.com/pydantic/pydantic/pull/10789)\n* [@tamird](https://github.com/tamird) made their first contribution in [#10948](https://github.com/pydantic/pydantic/pull/10948)\n* [@felixxm](https://github.com/felixxm) made their first contribution in [#11077](https://github.com/pydantic/pydantic/pull/11077)\n* [@alexprabhat99](https://github.com/alexprabhat99) made their first contribution in [#11082](https://github.com/pydantic/pydantic/pull/11082)\n* [@Kharianne](https://github.com/Kharianne) made their first contribution in [#11111](https://github.com/pydantic/pydantic/pull/11111)\n\n#### Packaging\n\n* Bump `pydantic-core` to v2.27.2 by [@davidhewitt](https://github.com/davidhewitt) in [#11138](https://github.com/pydantic/pydantic/pull/11138)\n\n## v2.10.3 (2024-12-03)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.3)\n\n### What's Changed\n\n#### Fixes\n\n* Set fields when `defer_build` is set on Pydantic dataclasses by [@Viicos](https://github.com/Viicos) in [#10984](https://github.com/pydantic/pydantic/pull/10984)\n* Do not resolve the JSON Schema reference for `dict` core schema keys by [@Viicos](https://github.com/Viicos) in [#10989](https://github.com/pydantic/pydantic/pull/10989)\n* Use the globals of the function when evaluating the return type for `PlainSerializer` and `WrapSerializer` functions by [@Viicos](https://github.com/Viicos) in [#11008](https://github.com/pydantic/pydantic/pull/11008)\n* Fix host required enforcement for urls to be compatible with v2.9 behavior by [@sydney-runkle](https://github.com/sydney-runkle) in [#11027](https://github.com/pydantic/pydantic/pull/11027)\n* Add a `default_factory_takes_validated_data` property to `FieldInfo` by [@Viicos](https://github.com/Viicos) in [#11034](https://github.com/pydantic/pydantic/pull/11034)\n* Fix url json schema in `serialization` mode by [@sydney-runkle](https://github.com/sydney-runkle) in [#11035](https://github.com/pydantic/pydantic/pull/11035)\n\n## v2.10.2 (2024-11-25)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.2)\n\n### What's Changed\n\n#### Fixes\n\n* Only evaluate FieldInfo annotations if required during schema building by [@Viicos](https://github.com/Viicos) in [#10769](https://github.com/pydantic/pydantic/pull/10769)\n* Do not evaluate annotations for private fields by [@Viicos](https://github.com/Viicos) in [#10962](https://github.com/pydantic/pydantic/pull/10962)\n* Support serialization as any for `Secret` types and `Url` types by [@sydney-runkle](https://github.com/sydney-runkle) in [#10947](https://github.com/pydantic/pydantic/pull/10947)\n* Fix type hint of `Field.default` to be compatible with Python 3.8 and 3.9 by [@Viicos](https://github.com/Viicos) in [#10972](https://github.com/pydantic/pydantic/pull/10972)\n* Add hashing support for URL types by [@sydney-runkle](https://github.com/sydney-runkle) in [#10975](https://github.com/pydantic/pydantic/pull/10975)\n* Hide `BaseModel.__replace__` definition from type checkers by [@Viicos](https://github.com/Viicos) in [#10979](https://github.com/pydantic/pydantic/pull/10979)\n\n## v2.10.1 (2024-11-21)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.1)\n\n### What's Changed\n\n#### Fixes\n\n* Use the correct frame when instantiating a parametrized `TypeAdapter` by [@Viicos](https://github.com/Viicos) in [#10893](https://github.com/pydantic/pydantic/pull/10893)\n* Relax check for validated data in `default_factory` utils by [@sydney-runkle](https://github.com/sydney-runkle) in [#10909](https://github.com/pydantic/pydantic/pull/10909)\n* Fix type checking issue with `model_fields` and `model_computed_fields` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10911](https://github.com/pydantic/pydantic/pull/10911)\n* Use the parent configuration during schema generation for stdlib `dataclass`es by [@sydney-runkle](https://github.com/sydney-runkle) in [#10928](https://github.com/pydantic/pydantic/pull/10928)\n* Use the `globals` of the function when evaluating the return type of serializers and `computed_field`s by [@Viicos](https://github.com/Viicos) in [#10929](https://github.com/pydantic/pydantic/pull/10929)\n* Fix URL constraint application by [@sydney-runkle](https://github.com/sydney-runkle) in [#10922](https://github.com/pydantic/pydantic/pull/10922)\n* Fix URL equality with different validation methods by [@sydney-runkle](https://github.com/sydney-runkle) in [#10934](https://github.com/pydantic/pydantic/pull/10934)\n* Fix JSON schema title when specified as `''` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10936](https://github.com/pydantic/pydantic/pull/10936)\n* Fix `python` mode serialization for `complex` inference by [@sydney-runkle](https://github.com/sydney-runkle) in [pydantic-core#1549](https://github.com/pydantic/pydantic-core/pull/1549)\n\n#### Packaging\n\n* Bump `pydantic-core` version to `v2.27.1` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10938](https://github.com/pydantic/pydantic/pull/10938)\n\n### New Contributors\n\n## v2.10.0 (2024-11-20)\n\nThe code released in v2.10.0 is practically identical to that of v2.10.0b2.\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.0)\n\nSee the [v2.10 release blog post](https://pydantic.dev/articles/pydantic-v2-10-release) for the highlights!\n\n### What's Changed\n\n#### New Features\n\n* Support `fractions.Fraction` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10318](https://github.com/pydantic/pydantic/pull/10318)\n* Support `Hashable` for json validation by [@sydney-runkle](https://github.com/sydney-runkle) in [#10324](https://github.com/pydantic/pydantic/pull/10324)\n* Add a `SocketPath` type for `linux` systems by [@theunkn0wn1](https://github.com/theunkn0wn1) in [#10378](https://github.com/pydantic/pydantic/pull/10378)\n* Allow arbitrary refs in JSON schema `examples` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10417](https://github.com/pydantic/pydantic/pull/10417)\n* Support `defer_build` for Pydantic dataclasses by [@Viicos](https://github.com/Viicos) in [#10313](https://github.com/pydantic/pydantic/pull/10313)\n* Adding v1 / v2 incompatibility warning for nested v1 model by [@sydney-runkle](https://github.com/sydney-runkle) in [#10431](https://github.com/pydantic/pydantic/pull/10431)\n* Add support for unpacked `TypedDict` to type hint variadic keyword arguments with `@validate_call` by [@Viicos](https://github.com/Viicos) in [#10416](https://github.com/pydantic/pydantic/pull/10416)\n* Support compiled patterns in `protected_namespaces` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10522](https://github.com/pydantic/pydantic/pull/10522)\n* Add support for `propertyNames` in JSON schema by [@FlorianSW](https://github.com/FlorianSW) in [#10478](https://github.com/pydantic/pydantic/pull/10478)\n* Adding `__replace__` protocol for Python 3.13+ support by [@sydney-runkle](https://github.com/sydney-runkle) in [#10596](https://github.com/pydantic/pydantic/pull/10596)\n* Expose public `sort` method for JSON schema generation by [@sydney-runkle](https://github.com/sydney-runkle) in [#10595](https://github.com/pydantic/pydantic/pull/10595)\n* Add runtime validation of `@validate_call` callable argument by [@kc0506](https://github.com/kc0506) in [#10627](https://github.com/pydantic/pydantic/pull/10627)\n* Add `experimental_allow_partial` support by [@samuelcolvin](https://github.com/samuelcolvin) in [#10748](https://github.com/pydantic/pydantic/pull/10748)\n* Support default factories taking validated data as an argument by [@Viicos](https://github.com/Viicos) in [#10678](https://github.com/pydantic/pydantic/pull/10678)\n* Allow subclassing `ValidationError` and `PydanticCustomError` by [@Youssefares](https://github.com/Youssefares) in [pydantic/pydantic-core#1413](https://github.com/pydantic/pydantic-core/pull/1413)\n* Add `trailing-strings` support to `experimental_allow_partial` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10825](https://github.com/pydantic/pydantic/pull/10825)\n* Add `rebuild()` method for `TypeAdapter` and simplify `defer_build` patterns by [@sydney-runkle](https://github.com/sydney-runkle) in [#10537](https://github.com/pydantic/pydantic/pull/10537)\n* Improve `TypeAdapter` instance repr by [@sydney-runkle](https://github.com/sydney-runkle) in [#10872](https://github.com/pydantic/pydantic/pull/10872)\n\n#### Changes\n\n* Don't allow customization of `SchemaGenerator` until interface is more stable by [@sydney-runkle](https://github.com/sydney-runkle) in [#10303](https://github.com/pydantic/pydantic/pull/10303)\n* Cleanly `defer_build` on `TypeAdapters`, removing experimental flag by [@sydney-runkle](https://github.com/sydney-runkle) in [#10329](https://github.com/pydantic/pydantic/pull/10329)\n* Fix `mro` of generic subclass by [@kc0506](https://github.com/kc0506) in [#10100](https://github.com/pydantic/pydantic/pull/10100)\n* Strip whitespaces on JSON Schema title generation by [@sydney-runkle](https://github.com/sydney-runkle) in [#10404](https://github.com/pydantic/pydantic/pull/10404)\n* Use `b64decode` and `b64encode` for `Base64Bytes` type by [@sydney-runkle](https://github.com/sydney-runkle) in [#10486](https://github.com/pydantic/pydantic/pull/10486)\n* Relax protected namespace config default by [@sydney-runkle](https://github.com/sydney-runkle) in [#10441](https://github.com/pydantic/pydantic/pull/10441)\n* Revalidate parametrized generics if instance's origin is subclass of OG class by [@sydney-runkle](https://github.com/sydney-runkle) in [#10666](https://github.com/pydantic/pydantic/pull/10666)\n* Warn if configuration is specified on the `@dataclass` decorator and with the `__pydantic_config__` attribute by [@sydney-runkle](https://github.com/sydney-runkle) in [#10406](https://github.com/pydantic/pydantic/pull/10406)\n* Recommend against using `Ellipsis` (...) with `Field` by [@Viicos](https://github.com/Viicos) in [#10661](https://github.com/pydantic/pydantic/pull/10661)\n* Migrate to subclassing instead of annotated approach for pydantic url types by [@sydney-runkle](https://github.com/sydney-runkle) in [#10662](https://github.com/pydantic/pydantic/pull/10662)\n* Change JSON schema generation of `Literal`s and `Enums` by [@Viicos](https://github.com/Viicos) in [#10692](https://github.com/pydantic/pydantic/pull/10692)\n* Simplify unions involving `Any` or `Never` when replacing type variables by [@Viicos](https://github.com/Viicos) in [#10338](https://github.com/pydantic/pydantic/pull/10338)\n* Do not require padding when decoding `base64` bytes by [@bschoenmaeckers](https://github.com/bschoenmaeckers) in [pydantic/pydantic-core#1448](https://github.com/pydantic/pydantic-core/pull/1448)\n* Support dates all the way to 1BC by [@changhc](https://github.com/changhc) in [pydantic/speedate#77](https://github.com/pydantic/speedate/pull/77)\n\n#### Performance\n\n* Schema cleaning: skip unnecessary copies during schema walking by [@Viicos](https://github.com/Viicos) in [#10286](https://github.com/pydantic/pydantic/pull/10286)\n* Refactor namespace logic for annotations evaluation by [@Viicos](https://github.com/Viicos) in [#10530](https://github.com/pydantic/pydantic/pull/10530)\n* Improve email regexp on edge cases by [@AlekseyLobanov](https://github.com/AlekseyLobanov) in [#10601](https://github.com/pydantic/pydantic/pull/10601)\n* `CoreMetadata` refactor with an emphasis on documentation, schema build time performance, and reducing complexity by [@sydney-runkle](https://github.com/sydney-runkle) in [#10675](https://github.com/pydantic/pydantic/pull/10675)\n\n#### Packaging\n\n* Bump `pydantic-core` to `v2.27.0` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10825](https://github.com/pydantic/pydantic/pull/10825)\n* Replaced pdm with uv by [@frfahim](https://github.com/frfahim) in [#10727](https://github.com/pydantic/pydantic/pull/10727)\n\n#### Fixes\n\n* Remove guarding check on `computed_field` with `field_serializer` by [@nix010](https://github.com/nix010) in [#10390](https://github.com/pydantic/pydantic/pull/10390)\n* Fix `Predicate` issue in `v2.9.0` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10321](https://github.com/pydantic/pydantic/pull/10321)\n* Fixing `annotated-types` bound by [@sydney-runkle](https://github.com/sydney-runkle) in [#10327](https://github.com/pydantic/pydantic/pull/10327)\n* Turn `tzdata` install requirement into optional `timezone` dependency by [@jakob-keller](https://github.com/jakob-keller) in [#10331](https://github.com/pydantic/pydantic/pull/10331)\n* Use correct types namespace when building `namedtuple` core schemas by [@Viicos](https://github.com/Viicos) in [#10337](https://github.com/pydantic/pydantic/pull/10337)\n* Fix evaluation of stringified annotations during namespace inspection by [@Viicos](https://github.com/Viicos) in [#10347](https://github.com/pydantic/pydantic/pull/10347)\n* Fix `IncEx` type alias definition by [@Viicos](https://github.com/Viicos) in [#10339](https://github.com/pydantic/pydantic/pull/10339)\n* Do not error when trying to evaluate annotations of private attributes by [@Viicos](https://github.com/Viicos) in [#10358](https://github.com/pydantic/pydantic/pull/10358)\n* Fix nested type statement by [@kc0506](https://github.com/kc0506) in [#10369](https://github.com/pydantic/pydantic/pull/10369)\n* Improve typing of `ModelMetaclass.mro` by [@Viicos](https://github.com/Viicos) in [#10372](https://github.com/pydantic/pydantic/pull/10372)\n* Fix class access of deprecated `computed_field`s by [@Viicos](https://github.com/Viicos) in [#10391](https://github.com/pydantic/pydantic/pull/10391)\n* Make sure `inspect.iscoroutinefunction` works on coroutines decorated with `@validate_call` by [@MovisLi](https://github.com/MovisLi) in [#10374](https://github.com/pydantic/pydantic/pull/10374)\n* Fix `NameError` when using `validate_call` with PEP 695 on a class by [@kc0506](https://github.com/kc0506) in [#10380](https://github.com/pydantic/pydantic/pull/10380)\n* Fix `ZoneInfo` with various invalid types by [@sydney-runkle](https://github.com/sydney-runkle) in [#10408](https://github.com/pydantic/pydantic/pull/10408)\n* Fix `PydanticUserError` on empty `model_config` with annotations by [@cdwilson](https://github.com/cdwilson) in [#10412](https://github.com/pydantic/pydantic/pull/10412)\n* Fix variance issue in `_IncEx` type alias, only allow `True` by [@Viicos](https://github.com/Viicos) in [#10414](https://github.com/pydantic/pydantic/pull/10414)\n* Fix serialization schema generation when using `PlainValidator` by [@Viicos](https://github.com/Viicos) in [#10427](https://github.com/pydantic/pydantic/pull/10427)\n* Fix schema generation error when serialization schema holds references by [@Viicos](https://github.com/Viicos) in [#10444](https://github.com/pydantic/pydantic/pull/10444)\n* Inline references if possible when generating schema for `json_schema_input_type` by [@Viicos](https://github.com/Viicos) in [#10439](https://github.com/pydantic/pydantic/pull/10439)\n* Fix recursive arguments in `Representation` by [@Viicos](https://github.com/Viicos) in [#10480](https://github.com/pydantic/pydantic/pull/10480)\n* Fix representation for builtin function types by [@kschwab](https://github.com/kschwab) in [#10479](https://github.com/pydantic/pydantic/pull/10479)\n* Add python validators for decimal constraints (`max_digits` and `decimal_places`) by [@sydney-runkle](https://github.com/sydney-runkle) in [#10506](https://github.com/pydantic/pydantic/pull/10506)\n* Only fetch `__pydantic_core_schema__` from the current class during schema generation by [@Viicos](https://github.com/Viicos) in [#10518](https://github.com/pydantic/pydantic/pull/10518)\n* Fix `stacklevel` on deprecation warnings for `BaseModel` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10520](https://github.com/pydantic/pydantic/pull/10520)\n* Fix warning `stacklevel` in `BaseModel.__init__` by [@Viicos](https://github.com/Viicos) in [#10526](https://github.com/pydantic/pydantic/pull/10526)\n* Improve error handling for in-evaluable refs for discriminator application by [@sydney-runkle](https://github.com/sydney-runkle) in [#10440](https://github.com/pydantic/pydantic/pull/10440)\n* Change the signature of `ConfigWrapper.core_config` to take the title directly by [@Viicos](https://github.com/Viicos) in [#10562](https://github.com/pydantic/pydantic/pull/10562)\n* Do not use the previous config from the stack for dataclasses without config by [@Viicos](https://github.com/Viicos) in [#10576](https://github.com/pydantic/pydantic/pull/10576)\n* Fix serialization for IP types with `mode='python'` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10594](https://github.com/pydantic/pydantic/pull/10594)\n* Support constraint application for `Base64Etc` types by [@sydney-runkle](https://github.com/sydney-runkle) in [#10584](https://github.com/pydantic/pydantic/pull/10584)\n* Fix `validate_call` ignoring `Field` in `Annotated` by [@kc0506](https://github.com/kc0506) in [#10610](https://github.com/pydantic/pydantic/pull/10610)\n* Raise an error when `Self` is invalid by [@kc0506](https://github.com/kc0506) in [#10609](https://github.com/pydantic/pydantic/pull/10609)\n* Using `core_schema.InvalidSchema` instead of metadata injection + checks by [@sydney-runkle](https://github.com/sydney-runkle) in [#10523](https://github.com/pydantic/pydantic/pull/10523)\n* Tweak type alias logic by [@kc0506](https://github.com/kc0506) in [#10643](https://github.com/pydantic/pydantic/pull/10643)\n* Support usage of `type` with `typing.Self` and type aliases by [@kc0506](https://github.com/kc0506) in [#10621](https://github.com/pydantic/pydantic/pull/10621)\n* Use overloads for `Field` and `PrivateAttr` functions by [@Viicos](https://github.com/Viicos) in [#10651](https://github.com/pydantic/pydantic/pull/10651)\n* Clean up the `mypy` plugin implementation by [@Viicos](https://github.com/Viicos) in [#10669](https://github.com/pydantic/pydantic/pull/10669)\n* Properly check for `typing_extensions` variant of `TypeAliasType` by [@Daraan](https://github.com/Daraan) in [#10713](https://github.com/pydantic/pydantic/pull/10713)\n* Allow any mapping in `BaseModel.model_copy()` by [@Viicos](https://github.com/Viicos) in [#10751](https://github.com/pydantic/pydantic/pull/10751)\n* Fix `isinstance` behavior for urls by [@sydney-runkle](https://github.com/sydney-runkle) in [#10766](https://github.com/pydantic/pydantic/pull/10766)\n* Ensure `cached_property` can be set on Pydantic models by [@Viicos](https://github.com/Viicos) in [#10774](https://github.com/pydantic/pydantic/pull/10774)\n* Fix equality checks for primitives in literals by [@sydney-runkle](https://github.com/sydney-runkle) in [pydantic/pydantic-core#1459](https://github.com/pydantic/pydantic-core/pull/1459)\n* Properly enforce `host_required` for URLs by [@Viicos](https://github.com/Viicos) in [pydantic/pydantic-core#1488](https://github.com/pydantic/pydantic-core/pull/1488)\n* Fix when `coerce_numbers_to_str` enabled and string has invalid Unicode character by [@andrey-berenda](https://github.com/andrey-berenda) in [pydantic/pydantic-core#1515](https://github.com/pydantic/pydantic-core/pull/1515)\n* Fix serializing `complex` values in `Enum`s by [@changhc](https://github.com/changhc) in [pydantic/pydantic-core#1524](https://github.com/pydantic/pydantic-core/pull/1524)\n* Refactor `_typing_extra` module by [@Viicos](https://github.com/Viicos) in [#10725](https://github.com/pydantic/pydantic/pull/10725)\n* Support intuitive equality for urls by [@sydney-runkle](https://github.com/sydney-runkle) in [#10798](https://github.com/pydantic/pydantic/pull/10798)\n* Add `bytearray` to `TypeAdapter.validate_json` signature by [@samuelcolvin](https://github.com/samuelcolvin) in [#10802](https://github.com/pydantic/pydantic/pull/10802)\n* Ensure class access of method descriptors is performed when used as a default with `Field` by [@Viicos](https://github.com/Viicos) in [#10816](https://github.com/pydantic/pydantic/pull/10816)\n* Fix circular import with `validate_call` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10807](https://github.com/pydantic/pydantic/pull/10807)\n* Fix error when using type aliases referencing other type aliases by [@Viicos](https://github.com/Viicos) in [#10809](https://github.com/pydantic/pydantic/pull/10809)\n* Fix `IncEx` type alias to be compatible with mypy by [@Viicos](https://github.com/Viicos) in [#10813](https://github.com/pydantic/pydantic/pull/10813)\n* Make `__signature__` a lazy property, do not deepcopy defaults by [@Viicos](https://github.com/Viicos) in [#10818](https://github.com/pydantic/pydantic/pull/10818)\n* Make `__signature__` lazy for dataclasses, too by [@sydney-runkle](https://github.com/sydney-runkle) in [#10832](https://github.com/pydantic/pydantic/pull/10832)\n* Subclass all single host url classes from `AnyUrl` to preserve behavior from v2.9 by [@sydney-runkle](https://github.com/sydney-runkle) in [#10856](https://github.com/pydantic/pydantic/pull/10856)\n\n### New Contributors\n\n* [@jakob-keller](https://github.com/jakob-keller) made their first contribution in [#10331](https://github.com/pydantic/pydantic/pull/10331)\n* [@MovisLi](https://github.com/MovisLi) made their first contribution in [#10374](https://github.com/pydantic/pydantic/pull/10374)\n* [@joaopalmeiro](https://github.com/joaopalmeiro) made their first contribution in [#10405](https://github.com/pydantic/pydantic/pull/10405)\n* [@theunkn0wn1](https://github.com/theunkn0wn1) made their first contribution in [#10378](https://github.com/pydantic/pydantic/pull/10378)\n* [@cdwilson](https://github.com/cdwilson) made their first contribution in [#10412](https://github.com/pydantic/pydantic/pull/10412)\n* [@dlax](https://github.com/dlax) made their first contribution in [#10421](https://github.com/pydantic/pydantic/pull/10421)\n* [@kschwab](https://github.com/kschwab) made their first contribution in [#10479](https://github.com/pydantic/pydantic/pull/10479)\n* [@santibreo](https://github.com/santibreo) made their first contribution in [#10453](https://github.com/pydantic/pydantic/pull/10453)\n* [@FlorianSW](https://github.com/FlorianSW) made their first contribution in [#10478](https://github.com/pydantic/pydantic/pull/10478)\n* [@tkasuz](https://github.com/tkasuz) made their first contribution in [#10555](https://github.com/pydantic/pydantic/pull/10555)\n* [@AlekseyLobanov](https://github.com/AlekseyLobanov) made their first contribution in [#10601](https://github.com/pydantic/pydantic/pull/10601)\n* [@NiclasvanEyk](https://github.com/NiclasvanEyk) made their first contribution in [#10667](https://github.com/pydantic/pydantic/pull/10667)\n* [@mschoettle](https://github.com/mschoettle) made their first contribution in [#10677](https://github.com/pydantic/pydantic/pull/10677)\n* [@Daraan](https://github.com/Daraan) made their first contribution in [#10713](https://github.com/pydantic/pydantic/pull/10713)\n* [@k4nar](https://github.com/k4nar) made their first contribution in [#10736](https://github.com/pydantic/pydantic/pull/10736)\n* [@UriyaHarpeness](https://github.com/UriyaHarpeness) made their first contribution in [#10740](https://github.com/pydantic/pydantic/pull/10740)\n* [@frfahim](https://github.com/frfahim) made their first contribution in [#10727](https://github.com/pydantic/pydantic/pull/10727)\n\n## v2.10.0b2 (2024-11-13)\n\nPre-release, see [the GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.0b2) for details.\n\n## v2.10.0b1 (2024-11-06)\n\nPre-release, see [the GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.0b1) for details.\n\n\n... see [here](https://docs.pydantic.dev/changelog/#v0322-2019-08-17) for earlier changes.\n", + "description_content_type": "text/markdown", + "author_email": "Samuel Colvin , Eric Jolibois , Hasan Ramezani , Adrian Garcia Badaracco <1755071+adriangb@users.noreply.github.com>, Terrence Dorsey , David Montague , Serge Matveenko , Marcelo Trylesinski , Sydney Runkle , David Hewitt , Alex Hall , Victorien Plot ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Framework :: Hypothesis", + "Framework :: Pydantic", + "Intended Audience :: Developers", + "Intended Audience :: Information Technology", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Internet", + "Topic :: Software Development :: Libraries :: Python Modules" + ], + "requires_dist": [ + "annotated-types>=0.6.0", + "pydantic-core==2.46.5", + "typing-extensions>=4.14.1", + "typing-inspection>=0.4.2", + "email-validator>=2.0.0; extra == 'email'", + "tzdata; (python_version >= '3.9' and platform_system == 'Windows') and extra == 'timezone'" + ], + "requires_python": ">=3.9", + "project_url": [ + "Homepage, https://github.com/pydantic/pydantic", + "Documentation, https://docs.pydantic.dev", + "Funding, https://github.com/sponsors/samuelcolvin", + "Source, https://github.com/pydantic/pydantic", + "Changelog, https://docs.pydantic.dev/latest/changelog/" + ], + "provides_extra": [ + "email", + "timezone" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/ae/d5/d8a4eb6d6c7f66b91dd37c576d76e9e60fba900caf5372c17bcf949febc2/pydantic_core-2.46.5-cp314-cp314-macosx_11_0_arm64.whl", + "archive_info": { + "hashes": { + "sha256": "1a353f84de772f423b5ffb11d7ae352fbbef0f446f3c0b0af0f8236d7233606e" + }, + "hash": "sha256=1a353f84de772f423b5ffb11d7ae352fbbef0f446f3c0b0af0f8236d7233606e" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "pydantic_core", + "version": "2.46.5", + "summary": "Core functionality for Pydantic validation and serialization", + "description": "# pydantic-core\n\n[![CI](https://github.com/pydantic/pydantic-core/workflows/ci/badge.svg?event=push)](https://github.com/pydantic/pydantic-core/actions?query=event%3Apush+branch%3Amain+workflow%3Aci)\n[![Coverage](https://codecov.io/gh/pydantic/pydantic-core/branch/main/graph/badge.svg)](https://codecov.io/gh/pydantic/pydantic-core)\n[![pypi](https://img.shields.io/pypi/v/pydantic-core.svg)](https://pypi.python.org/pypi/pydantic-core)\n[![versions](https://img.shields.io/pypi/pyversions/pydantic-core.svg)](https://github.com/pydantic/pydantic-core)\n[![license](https://img.shields.io/github/license/pydantic/pydantic-core.svg)](https://github.com/pydantic/pydantic-core/blob/main/LICENSE)\n\nThis package provides the core functionality for [pydantic](https://docs.pydantic.dev) validation and serialization.\n\nPydantic-core is currently around 17x faster than pydantic V1.\nSee [`tests/benchmarks/`](./tests/benchmarks/) for details.\n\n## Example of direct usage\n\n*NOTE: You should not need to use pydantic-core directly; instead, use pydantic, which in turn uses pydantic-core.*\n\n```py\nfrom pydantic_core import SchemaValidator, ValidationError\n\n\nv = SchemaValidator(\n {\n 'type': 'typed-dict',\n 'fields': {\n 'name': {\n 'type': 'typed-dict-field',\n 'schema': {\n 'type': 'str',\n },\n },\n 'age': {\n 'type': 'typed-dict-field',\n 'schema': {\n 'type': 'int',\n 'ge': 18,\n },\n },\n 'is_developer': {\n 'type': 'typed-dict-field',\n 'schema': {\n 'type': 'default',\n 'schema': {'type': 'bool'},\n 'default': True,\n },\n },\n },\n }\n)\n\nr1 = v.validate_python({'name': 'Samuel', 'age': 35})\nassert r1 == {'name': 'Samuel', 'age': 35, 'is_developer': True}\n\n# pydantic-core can also validate JSON directly\nr2 = v.validate_json('{\"name\": \"Samuel\", \"age\": 35}')\nassert r1 == r2\n\ntry:\n v.validate_python({'name': 'Samuel', 'age': 11})\nexcept ValidationError as e:\n print(e)\n \"\"\"\n 1 validation error for model\n age\n Input should be greater than or equal to 18\n [type=greater_than_equal, context={ge: 18}, input_value=11, input_type=int]\n \"\"\"\n```\n\n## Getting Started\n\n### Prerequisites\n\nYou'll need:\n\n1. **[Rust](https://rustup.rs/)** - Rust stable (or nightly for coverage)\n2. **[uv](https://docs.astral.sh/uv/getting-started/installation/)** - Fast Python package manager (will install Python 3.9+ automatically)\n3. **[git](https://git-scm.com/)** - For version control\n4. **[make](https://www.gnu.org/software/make/)** - For running development commands (or use `nmake` on Windows)\n\n### Quick Start\n\n```bash\n# Clone the repository (or from your fork)\ngit clone git@github.com:pydantic/pydantic-core.git\ncd pydantic-core\n\n# Install all dependencies using uv, setup pre-commit hooks, and build the development version\nmake install\n```\n\nVerify your installation by running:\n\n```bash\nmake\n```\n\nThis runs a full development cycle: formatting, building, linting, and testing\n\n### Development Commands\n\nRun `make help` to see all available commands, or use these common ones:\n\n```bash\nmake build-dev # to build the package during development\nmake build-prod # to perform an optimised build for benchmarking\nmake test # to run the tests\nmake testcov # to run the tests and generate a coverage report\nmake lint # to run the linter\nmake format # to format python and rust code\nmake all # to run to run build-dev + format + lint + test\n```\n\n### Useful Resources\n\n* [`python/pydantic_core/_pydantic_core.pyi`](./python/pydantic_core/_pydantic_core.pyi) - Python API types\n* [`python/pydantic_core/core_schema.py`](./python/pydantic_core/core_schema.py) - Core schema definitions\n* [`tests/`](./tests) - Comprehensive usage examples\n\n## Profiling\n\nIt's possible to profile the code using the [`flamegraph` utility from `flamegraph-rs`](https://github.com/flamegraph-rs/flamegraph). (Tested on Linux.) You can install this with `cargo install flamegraph`.\n\nRun `make build-profiling` to install a release build with debugging symbols included (needed for profiling).\n\nOnce that is built, you can profile pytest benchmarks with (e.g.):\n\n```bash\nflamegraph -- pytest tests/benchmarks/test_micro_benchmarks.py -k test_list_of_ints_core_py --benchmark-enable\n```\n\nThe `flamegraph` command will produce an interactive SVG at `flamegraph.svg`.\n\n## Releasing\n\nTBC (needs to be integrated into `pydantic` repository release process).\n\n", + "description_content_type": "text/markdown; charset=UTF-8; variant=GFM", + "home_page": "https://github.com/pydantic/pydantic", + "author_email": "Samuel Colvin , Adrian Garcia Badaracco <1755071+adriangb@users.noreply.github.com>, David Montague , David Hewitt , Sydney Runkle , Victorien Plot ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 3 - Alpha", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Programming Language :: Python :: Implementation :: GraalPy", + "Programming Language :: Rust", + "Framework :: Pydantic", + "Intended Audience :: Developers", + "Intended Audience :: Information Technology", + "Operating System :: POSIX :: Linux", + "Operating System :: Microsoft :: Windows", + "Operating System :: MacOS", + "Typing :: Typed" + ], + "requires_dist": [ + "typing-extensions>=4.14.1" + ], + "requires_python": ">=3.9", + "project_url": [ + "Funding, https://github.com/sponsors/samuelcolvin", + "Homepage, https://github.com/pydantic", + "Source, https://github.com/pydantic/pydantic/tree/main/pydantic-core" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0" + }, + "hash": "sha256=f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "annotated-types", + "version": "0.8.0", + "summary": "Reusable constraint types to use with typing.Annotated", + "description": "# annotated-types\n\n[![CI](https://github.com/annotated-types/annotated-types/workflows/CI/badge.svg?event=push)](https://github.com/annotated-types/annotated-types/actions?query=event%3Apush+branch%3Amain+workflow%3ACI)\n[![pypi](https://img.shields.io/pypi/v/annotated-types.svg)](https://pypi.python.org/pypi/annotated-types)\n[![versions](https://img.shields.io/pypi/pyversions/annotated-types.svg)](https://github.com/annotated-types/annotated-types)\n[![license](https://img.shields.io/github/license/annotated-types/annotated-types.svg)](https://github.com/annotated-types/annotated-types/blob/main/LICENSE)\n\n[PEP-593](https://peps.python.org/pep-0593/) added `typing.Annotated` as a way of\nadding context-specific metadata to existing types, and specifies that\n`Annotated[T, x]` _should_ be treated as `T` by any tool or library without special\nlogic for `x`.\n\nThis package provides metadata objects which can be used to represent common\nconstraints such as upper and lower bounds on scalar values and collection sizes,\na `Predicate` marker for runtime checks, and\ndescriptions of how we intend these metadata to be interpreted. In some cases,\nwe also note alternative representations which do not require this package.\n\n## Install\n\n```bash\npip install annotated-types\n```\n\n## Examples\n\n```python\nfrom typing import Annotated\nfrom annotated_types import Gt, Len, Predicate\n\nclass MyClass:\n age: Annotated[int, Gt(18)] # Valid: 19, 20, ...\n # Invalid: 17, 18, \"19\", 19.0, ...\n factors: list[Annotated[int, Predicate(is_prime)]] # Valid: 2, 3, 5, 7, 11, ...\n # Invalid: 4, 8, -2, 5.0, \"prime\", ...\n\n my_list: Annotated[list[int], Len(0, 10)] # Valid: [], [10, 20, 30, 40, 50]\n # Invalid: (1, 2), [\"abc\"], [0] * 20\n```\n\n## Documentation\n\n_While `annotated-types` avoids runtime checks for performance, users should not\nconstruct invalid combinations such as `MultipleOf(\"non-numeric\")` or `Annotated[int, Len(3)]`.\nDownstream implementors may choose to raise an error, emit a warning, silently ignore\na metadata item, etc., if the metadata objects described below are used with an\nincompatible type - or for any other reason!_\n\n### Gt, Ge, Lt, Le\n\nExpress inclusive and/or exclusive bounds on orderable values - which may be numbers,\ndates, times, strings, sets, etc. Note that the boundary value need not be of the\nsame type that was annotated, so long as they can be compared: `Annotated[int, Gt(1.5)]`\nis fine, for example, and implies that the value is an integer x such that `x > 1.5`.\n\nWe suggest that implementors may also interpret `functools.partial(operator.le, 1.5)`\nas being equivalent to `Gt(1.5)`, for users who wish to avoid a runtime dependency on\nthe `annotated-types` package.\n\nTo be explicit, these types have the following meanings:\n\n* `Gt(x)` - value must be \"Greater Than\" `x` - equivalent to exclusive minimum\n* `Ge(x)` - value must be \"Greater than or Equal\" to `x` - equivalent to inclusive minimum\n* `Lt(x)` - value must be \"Less Than\" `x` - equivalent to exclusive maximum\n* `Le(x)` - value must be \"Less than or Equal\" to `x` - equivalent to inclusive maximum\n\n### Interval\n\n`Interval(gt, ge, lt, le)` allows you to specify an upper and lower bound with a single\nmetadata object. `None` attributes should be ignored, and non-`None` attributes\ntreated as per the single bounds above.\n\n### MultipleOf\n\n`MultipleOf(multiple_of=x)` might be interpreted in two ways:\n\n1. Python semantics, implying `value % multiple_of == 0`, or\n2. [JSONschema semantics](https://json-schema.org/draft/2020-12/json-schema-validation.html#rfc.section.6.2.1),\n where `int(value / multiple_of) == value / multiple_of`.\n\nWe encourage users to be aware of these two common interpretations and their\ndistinct behaviours, especially since very large or non-integer numbers make\nit easy to cause silent data corruption due to floating-point imprecision.\n\nWe encourage libraries to carefully document which interpretation they implement.\n\n### MinLen, MaxLen, Len\n\n`Len()` implies that `min_length <= len(value) <= max_length` - lower and upper bounds are inclusive.\n\nAs well as `Len()` which can optionally include upper and lower bounds, we also\nprovide `MinLen(x)` and `MaxLen(y)` which are equivalent to `Len(min_length=x)`\nand `Len(max_length=y)` respectively.\n\n`Len`, `MinLen`, and `MaxLen` may be used with any type which supports `len(value)`.\n\nExamples of usage:\n\n* `Annotated[list, MaxLen(10)]` (or `Annotated[list, Len(max_length=10)]`) - list must have a length of 10 or less\n* `Annotated[str, MaxLen(10)]` - string must have a length of 10 or less\n* `Annotated[list, MinLen(3)]` (or `Annotated[list, Len(min_length=3)]`) - list must have a length of 3 or more\n* `Annotated[list, Len(4, 6)]` - list must have a length of 4, 5, or 6\n* `Annotated[list, Len(8, 8)]` - list must have a length of exactly 8\n\n#### Changed in v0.4.0\n\n* `min_inclusive` has been renamed to `min_length`, no change in meaning\n* `max_exclusive` has been renamed to `max_length`, upper bound is now **inclusive** instead of **exclusive**\n* The recommendation that slices are interpreted as `Len` has been removed due to ambiguity and different semantic\n meaning of the upper bound in slices vs. `Len`\n\nSee [issue #23](https://github.com/annotated-types/annotated-types/issues/23) for discussion.\n\n### Timezone\n\n`Timezone` can be used with a `datetime` or a `time` to express which timezones\nare allowed. `Annotated[datetime, Timezone(None)]` must be a naive datetime.\n`Timezone[...]` ([literal ellipsis](https://docs.python.org/3/library/constants.html#Ellipsis))\nexpresses that any timezone-aware datetime is allowed. You may also pass a specific\ntimezone string or [`tzinfo`](https://docs.python.org/3/library/datetime.html#tzinfo-objects)\nobject such as `Timezone(timezone.utc)` or `Timezone(\"Africa/Abidjan\")` to express that you only\nallow a specific timezone, though we note that this is often a symptom of fragile design.\n\n#### Changed in v0.x.x\n\n* `Timezone` accepts [`tzinfo`](https://docs.python.org/3/library/datetime.html#tzinfo-objects) objects instead of\n `timezone`, extending compatibility to [`zoneinfo`](https://docs.python.org/3/library/zoneinfo.html) and third party libraries.\n\n### Unit\n\n`Unit(unit: str)` expresses that the annotated numeric value is the magnitude of\na quantity with the specified unit. For example, `Annotated[float, Unit(\"m/s\")]`\nwould be a float representing a velocity in meters per second.\n\nPlease note that `annotated_types` itself makes no attempt to parse or validate\nthe unit string in any way. That is left entirely to downstream libraries,\nsuch as [`pint`](https://pint.readthedocs.io) or\n[`astropy.units`](https://docs.astropy.org/en/stable/units/).\n\nAn example of how a library might use this metadata:\n\n```python\nfrom annotated_types import Unit\nfrom typing import Annotated, TypeVar, Callable, Any, get_origin, get_args\n\n# given a type annotated with a unit:\nMeters = Annotated[float, Unit(\"m\")]\n\n\n# you can cast the annotation to a specific unit type with any\n# callable that accepts a string and returns the desired type\nT = TypeVar(\"T\")\ndef cast_unit(tp: Any, unit_cls: Callable[[str], T]) -> T | None:\n if get_origin(tp) is Annotated:\n for arg in get_args(tp):\n if isinstance(arg, Unit):\n return unit_cls(arg.unit)\n return None\n\n\n# using `pint`\nimport pint\npint_unit = cast_unit(Meters, pint.Unit)\n\n\n# using `astropy.units`\nimport astropy.units as u\nastropy_unit = cast_unit(Meters, u.Unit)\n```\n\n### Predicate\n\n`Predicate(func: Callable)` expresses that `func(value)` is truthy for valid values.\nUsers should prefer the statically inspectable metadata above, but if you need\nthe full power and flexibility of arbitrary runtime predicates... here it is.\n\nFor some common constraints, we provide generic types:\n\n* `LowerCase = Annotated[T, Predicate(str.islower)]`\n* `UpperCase = Annotated[T, Predicate(str.isupper)]`\n* `IsDigit = Annotated[T, Predicate(str.isdigit)]`\n* `IsFinite = Annotated[T, Predicate(math.isfinite)]`\n* `IsNotFinite = Annotated[T, Predicate(Not(math.isfinite))]`\n* `IsNan = Annotated[T, Predicate(math.isnan)]`\n* `IsNotNan = Annotated[T, Predicate(Not(math.isnan))]`\n* `IsInfinite = Annotated[T, Predicate(math.isinf)]`\n* `IsNotInfinite = Annotated[T, Predicate(Not(math.isinf))]`\n\nso that you can write e.g. `x: IsFinite[float] = 2.0` instead of the longer\n(but exactly equivalent) `x: Annotated[float, Predicate(math.isfinite)] = 2.0`.\n\nSome libraries might have special logic to handle known or understandable predicates,\nfor example by checking for `str.isdigit` and using its presence to both call custom\nlogic to enforce digit-only strings, and customise some generated external schema.\nUsers are therefore encouraged to avoid indirection like `lambda s: s.lower()`, in\nfavor of introspectable methods such as `str.lower` or `re.compile(\"pattern\").search`.\n\nTo enable basic negation of commonly used predicates like `math.isnan` without introducing introspection that makes it impossible for implementers to introspect the predicate we provide a `Not` wrapper that simply negates the predicate in an introspectable manner. Several of the predicates listed above are created in this manner.\n\nWe do not specify what behaviour should be expected for predicates that raise\nan exception. For example `Annotated[int, Predicate(str.isdigit)]` might silently\nskip invalid constraints, or statically raise an error; or it might try calling it\nand then propagate or discard the resulting\n`TypeError: descriptor 'isdigit' for 'str' objects doesn't apply to a 'int' object`\nexception. We encourage libraries to document the behaviour they choose.\n\n### Doc\n\n`doc()` can be used to add documentation information in `Annotated`, for function and method parameters, variables, class attributes, return types, and any place where `Annotated` can be used.\n\nIt expects a value that can be statically analyzed, as the main use case is for static analysis, editors, documentation generators, and similar tools.\n\nIt returns a `DocInfo` class with a single attribute `documentation` containing the value passed to `doc()`.\n\nThis is the early adopter's alternative form of the [`typing-doc` proposal](https://github.com/tiangolo/fastapi/blob/typing-doc/typing_doc.md).\n\n### Integrating downstream types with `GroupedMetadata`\n\nImplementers may choose to provide a convenience wrapper that groups multiple pieces of metadata.\nThis can help reduce verbosity and cognitive overhead for users.\nFor example, an implementer like Pydantic might provide a `Field` or `Meta` type that accepts keyword arguments and transforms these into low-level metadata:\n\n```python\nfrom dataclasses import dataclass\nfrom typing import Iterator\nfrom annotated_types import GroupedMetadata, Ge\n\n@dataclass\nclass Field(GroupedMetadata):\n ge: int | None = None\n description: str | None = None\n\n def __iter__(self) -> Iterator[object]:\n # Iterating over a GroupedMetadata object should yield annotated-types\n # constraint metadata objects which describe it as fully as possible,\n # and may include other unknown objects too.\n if self.ge is not None:\n yield Ge(self.ge)\n if self.description is not None:\n yield Description(self.description)\n```\n\nLibraries consuming annotated-types constraints should check for `GroupedMetadata` and unpack it by iterating over the object and treating the results as if they had been \"unpacked\" in the `Annotated` type. The same logic should be applied to the [PEP 646 `Unpack` type](https://peps.python.org/pep-0646/), so that `Annotated[T, Field(...)]`, `Annotated[T, Unpack[Field(...)]]` and `Annotated[T, *Field(...)]` are all treated consistently.\n\nLibraries consuming annotated-types should also ignore any metadata they do not recongize that came from unpacking a `GroupedMetadata`, just like they ignore unrecognized metadata in `Annotated` itself.\n\nOur own `annotated_types.Interval` class is a `GroupedMetadata` which unpacks itself into `Gt`, `Lt`, etc., so this is not an abstract concern. Similarly, `annotated_types.Len` is a `GroupedMetadata` which unpacks itself into `MinLen` (optionally) and `MaxLen`.\n\n### Consuming metadata\n\nWe intend to not be prescriptive as to _how_ the metadata and constraints are used, but as an example of how one might parse constraints from types annotations see our [implementation in `test_main.py`](https://github.com/annotated-types/annotated-types/blob/f59cf6d1b5255a0fe359b93896759a180bec30ae/tests/test_main.py#L94-L103).\n\nIt is up to the implementer to determine how this metadata is used.\nYou could use the metadata for runtime type checking, for generating schemas or to generate example data, amongst other use cases.\n\n## Design & History\n\nThis package was designed at the PyCon 2022 sprints by the maintainers of Pydantic\nand Hypothesis, with the goal of making it as easy as possible for end-users to\nprovide more informative annotations for use by runtime libraries.\n\nIt is deliberately minimal, and following PEP-593 allows considerable downstream\ndiscretion in what (if anything!) they choose to support. Nonetheless, we expect\nthat staying simple and covering _only_ the most common use-cases will give users\nand maintainers the best experience we can. If you'd like more constraints for your\ntypes - follow our lead, by defining them and documenting them downstream!\n", + "description_content_type": "text/markdown", + "author_email": "Adrian Garcia Badaracco <1755071+adriangb@users.noreply.github.com>, Samuel Colvin , Zac Hatfield-Dodds ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 4 - Beta", + "Environment :: Console", + "Environment :: MacOS X", + "Intended Audience :: Developers", + "Intended Audience :: Information Technology", + "License :: OSI Approved :: MIT License", + "Operating System :: POSIX :: Linux", + "Operating System :: Unix", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Topic :: Software Development :: Libraries :: Python Modules", + "Typing :: Typed" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://github.com/annotated-types/annotated-types", + "Source, https://github.com/annotated-types/annotated-types", + "Changelog, https://github.com/annotated-types/annotated-types/releases" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/95/9c/c510029fc6ef33a6275cd2c5d3cecd6613dfd6aa401d57c54f1c18852ccf/setuptools-84.0.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670" + }, + "hash": "sha256=51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "setuptools", + "version": "84.0.0", + "dynamic": [ + "license-file" + ], + "summary": "Most extensible Python build backend with support for C/C++ extension modules", + "description": ".. |pypi-version| image:: https://img.shields.io/pypi/v/setuptools.svg\n :target: https://pypi.org/project/setuptools\n\n.. |py-version| image:: https://img.shields.io/pypi/pyversions/setuptools.svg\n\n.. |test-badge| image:: https://github.com/pypa/setuptools/actions/workflows/main.yml/badge.svg\n :target: https://github.com/pypa/setuptools/actions?query=workflow%3A%22tests%22\n :alt: tests\n\n.. |ruff-badge| image:: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v2.json\n :target: https://github.com/astral-sh/ruff\n :alt: Ruff\n\n.. |docs-badge| image:: https://img.shields.io/readthedocs/setuptools/latest.svg\n :target: https://setuptools.pypa.io\n\n.. |skeleton-badge| image:: https://img.shields.io/badge/skeleton-2026-informational\n :target: https://blog.jaraco.com/skeleton\n\n.. |codecov-badge| image:: https://img.shields.io/codecov/c/github/pypa/setuptools/master.svg?logo=codecov&logoColor=white\n :target: https://codecov.io/gh/pypa/setuptools\n\n.. |tidelift-badge| image:: https://tidelift.com/badges/github/pypa/setuptools?style=flat\n :target: https://tidelift.com/subscription/pkg/pypi-setuptools?utm_source=pypi-setuptools&utm_medium=readme\n\n.. |discord-badge| image:: https://img.shields.io/discord/803025117553754132\n :target: https://discord.com/channels/803025117553754132/815945031150993468\n :alt: Discord\n\n|pypi-version| |py-version| |test-badge| |ruff-badge| |docs-badge| |skeleton-badge| |codecov-badge| |discord-badge|\n\nSee the `Quickstart `_\nand the `User's Guide `_ for\ninstructions on how to use Setuptools.\n\nQuestions and comments should be directed to `GitHub Discussions\n`_.\nBug reports and especially tested patches may be\nsubmitted directly to the `bug tracker\n`_.\n\n\nCode of Conduct\n===============\n\nEveryone interacting in the setuptools project's codebases, issue trackers,\nchat rooms, and fora is expected to follow the\n`PSF Code of Conduct `_.\n\n\nFor Enterprise\n==============\n\nAvailable as part of the Tidelift Subscription.\n\nSetuptools and the maintainers of thousands of other packages are working with Tidelift to deliver one enterprise subscription that covers all of the open source you use.\n\n`Learn more `_.\n", + "description_content_type": "text/x-rst", + "keywords": [ + "CPAN", + "PyPI", + "distutils", + "eggs", + "package", + "management" + ], + "author_email": "Python Packaging Authority ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: System :: Archiving :: Packaging", + "Topic :: System :: Systems Administration", + "Topic :: Utilities" + ], + "requires_dist": [ + "pytest!=8.1.*,>=6; extra == \"test\"", + "virtualenv>=13.0.0; extra == \"test\"", + "wheel>=0.44.0; extra == \"test\"", + "pip>=19.1; extra == \"test\"", + "packaging>=24.2; extra == \"test\"", + "jaraco.envs>=2.2; extra == \"test\"", + "pytest-xdist>=3; extra == \"test\"", + "jaraco.path>=3.7.2; extra == \"test\"", + "build[virtualenv]>=1.0.3; extra == \"test\"", + "filelock>=3.4.0; extra == \"test\"", + "ini2toml[lite]>=0.14; extra == \"test\"", + "tomli-w>=1.0.0; extra == \"test\"", + "pytest-timeout; extra == \"test\"", + "pytest-perf; sys_platform != \"cygwin\" and extra == \"test\"", + "jaraco.develop>=7.21; (python_version >= \"3.9\" and sys_platform != \"cygwin\") and extra == \"test\"", + "pytest-home>=0.5; extra == \"test\"", + "pytest-subprocess; extra == \"test\"", + "pyproject-hooks!=1.1; extra == \"test\"", + "jaraco.test>=5.5; extra == \"test\"", + "sphinx>=3.5; extra == \"doc\"", + "jaraco.packaging>=9.3; extra == \"doc\"", + "rst.linker>=1.9; extra == \"doc\"", + "furo; extra == \"doc\"", + "sphinx-lint; extra == \"doc\"", + "jaraco.tidelift>=1.4; extra == \"doc\"", + "pygments-github-lexers==0.0.5; extra == \"doc\"", + "sphinx-favicon; extra == \"doc\"", + "sphinx-inline-tabs; extra == \"doc\"", + "sphinx-reredirects; extra == \"doc\"", + "sphinxcontrib-towncrier; extra == \"doc\"", + "sphinx-notfound-page<2,>=1; extra == \"doc\"", + "pyproject-hooks!=1.1; extra == \"doc\"", + "towncrier<24.7; extra == \"doc\"", + "packaging>=24.2; extra == \"core\"", + "more_itertools>=8.8; extra == \"core\"", + "jaraco.text>=3.7; extra == \"core\"", + "importlib_metadata>=6; python_version < \"3.10\" and extra == \"core\"", + "tomli>=2.0.1; python_version < \"3.11\" and extra == \"core\"", + "wheel>=0.43.0; extra == \"core\"", + "jaraco.functools>=4; extra == \"core\"", + "more_itertools; extra == \"core\"", + "pytest-checkdocs>=2.14; extra == \"check\"", + "pytest-ruff>=0.2.1; sys_platform != \"cygwin\" and extra == \"check\"", + "ruff>=0.13.0; sys_platform != \"cygwin\" and extra == \"check\"", + "pytest-cov; extra == \"cover\"", + "pytest-enabler>=3.4; extra == \"enabler\"", + "pytest-mypy>=1.0.1; platform_python_implementation != \"PyPy\" and extra == \"type\"", + "mypy==1.18.*; extra == \"type\"", + "importlib_metadata>=7.0.2; python_version < \"3.10\" and extra == \"type\"", + "jaraco.develop>=7.21; sys_platform != \"cygwin\" and extra == \"type\"" + ], + "requires_python": ">=3.10", + "project_url": [ + "Source, https://github.com/pypa/setuptools", + "Documentation, https://setuptools.pypa.io/", + "Changelog, https://setuptools.pypa.io/en/stable/history.html" + ], + "provides_extra": [ + "test", + "doc", + "ssl", + "certs", + "core", + "check", + "cover", + "enabler", + "type" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/4e/d6/1ec1b290f9e0fb067899b61e1d37a30c923068bad260b216dbe37a7d2967/starlette-1.7.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e" + }, + "hash": "sha256=67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "starlette", + "version": "1.7.0", + "summary": "The little ASGI library that shines.", + "description": "

\n \n \n \n \"starlette-logo\"\n \n

\n\n

\n ✨ The little ASGI framework that shines. ✨\n

\n\n---\n\n[![Build Status](https://github.com/Kludex/starlette/workflows/Test%20Suite/badge.svg)](https://github.com/Kludex/starlette/actions)\n[![Package version](https://badge.fury.io/py/starlette.svg)](https://pypi.python.org/pypi/starlette)\n[![Supported Python Version](https://img.shields.io/pypi/pyversions/starlette.svg?color=%2334D058)](https://pypi.org/project/starlette)\n[![Discord](https://img.shields.io/discord/1051468649518616576?logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2)](https://discord.gg/RxKUF5JuHs)\n\n---\n\n**Documentation**: https://starlette.dev\n\n**Source Code**: https://github.com/Kludex/starlette\n\n---\n\n# Starlette\n\nStarlette is a lightweight [ASGI][asgi] framework/toolkit,\nwhich is ideal for building async web services in Python.\n\nIt is production-ready, and gives you the following:\n\n* A lightweight, low-complexity HTTP web framework.\n* WebSocket support.\n* In-process background tasks.\n* Startup and shutdown events.\n* Test client built on `httpx2`.\n* CORS, GZip, Static Files, Streaming responses.\n* Session and Cookie support.\n* 100% test coverage.\n* 100% type annotated codebase.\n* Few hard dependencies.\n* Compatible with `asyncio` and `trio` backends.\n* Great overall performance [against independent benchmarks][techempower].\n\n## Installation\n\n```shell\n$ pip install starlette\n```\n\nYou'll also want to install an ASGI server, such as [uvicorn](https://uvicorn.dev) or any of the [other ASGI server implementations](https://asgi.readthedocs.io/en/latest/implementations.html#servers).\n\n```shell\n$ pip install uvicorn\n```\n\n## Example\n\n```python title=\"main.py\"\nfrom starlette.applications import Starlette\nfrom starlette.responses import JSONResponse\nfrom starlette.routing import Route\n\n\nasync def homepage(request):\n return JSONResponse({'hello': 'world'})\n\nroutes = [\n Route(\"/\", endpoint=homepage)\n]\n\napp = Starlette(debug=True, routes=routes)\n```\n\nThen run the application using Uvicorn:\n\n```shell\n$ uvicorn main:app\n```\n\n## Dependencies\n\nStarlette only requires `anyio`, and the following are optional:\n\n* [`httpx2`][httpx2] - Required if you want to use the `TestClient`.\n* [`jinja2`][jinja2] - Required if you want to use `Jinja2Templates`.\n* [`opentelemetry-api`][opentelemetry-api] - Required for `OpenTelemetryMiddleware`.\n* [`python-multipart`][python-multipart] - Required if you want to support form parsing, with `request.form()`.\n* [`itsdangerous`][itsdangerous] - Required for `SessionMiddleware` support.\n* [`pyyaml`][pyyaml] - Required for `SchemaGenerator` support.\n\nYou can install all of these with `pip install starlette[full]`.\n\n## Framework or Toolkit\n\nStarlette is designed to be used either as a complete framework, or as\nan ASGI toolkit. You can use any of its components independently.\n\n```python\nfrom starlette.responses import PlainTextResponse\n\n\nasync def app(scope, receive, send):\n assert scope['type'] == 'http'\n response = PlainTextResponse('Hello, world!')\n await response(scope, receive, send)\n```\n\nRun the `app` application in `example.py`:\n\n```shell\n$ uvicorn example:app\nINFO: Started server process [11509]\nINFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)\n```\n\nRun uvicorn with `--reload` to enable auto-reloading on code changes.\n\n## Modularity\n\nThe modularity that Starlette is designed on promotes building reusable\ncomponents that can be shared between any ASGI framework. This should enable\nan ecosystem of shared middleware and mountable applications.\n\nThe clean API separation also means it's easier to understand each component\nin isolation.\n\n---\n\n

Starlette is BSD licensed code.
Designed & crafted with care.

— ⭐️ —

\n\n[asgi]: https://asgi.readthedocs.io/en/latest/\n[httpx2]: https://pypi.org/project/httpx2/\n[jinja2]: https://jinja.palletsprojects.com/\n[opentelemetry-api]: https://opentelemetry.io/docs/languages/python/api/\n[python-multipart]: https://multipart.fastapiexpert.com/\n[itsdangerous]: https://itsdangerous.palletsprojects.com/\n[sqlalchemy]: https://www.sqlalchemy.org\n[pyyaml]: https://pyyaml.org/wiki/PyYAMLDocumentation\n[techempower]: https://github.com/TechEmpower/FrameworkBenchmarks\n", + "description_content_type": "text/markdown", + "author_email": "Tom Christie ", + "maintainer_email": "Marcelo Trylesinski ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.md" + ], + "classifier": [ + "Development Status :: 3 - Alpha", + "Environment :: Web Environment", + "Framework :: AnyIO", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Topic :: Internet :: WWW/HTTP" + ], + "requires_dist": [ + "anyio<5,>=4.0.0", + "typing-extensions>=4.10.0; python_version < '3.13'", + "httpx2>=2.0.0; extra == 'full'", + "httpx<0.29.0,>=0.27.0; extra == 'full'", + "itsdangerous; extra == 'full'", + "jinja2; extra == 'full'", + "opentelemetry-api; extra == 'full'", + "python-multipart>=0.0.18; extra == 'full'", + "pyyaml; extra == 'full'" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://github.com/Kludex/starlette", + "Documentation, https://starlette.dev/", + "Changelog, https://starlette.dev/release-notes/", + "Funding, https://github.com/sponsors/Kludex", + "Source, https://github.com/Kludex/starlette" + ], + "provides_extra": [ + "full" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/12/b8/4bd346e22b28902df4d651910f5242c28d84e4a5c2435ca5c3f797ed7e2e/anyio-4.15.1-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101" + }, + "hash": "sha256=6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "anyio", + "version": "4.15.1", + "dynamic": [ + "license-file" + ], + "summary": "High-level concurrency and networking framework on top of asyncio or Trio", + "description": ".. image:: https://github.com/agronholm/anyio/actions/workflows/test.yml/badge.svg\n :target: https://github.com/agronholm/anyio/actions/workflows/test.yml\n :alt: Build Status\n.. image:: https://coveralls.io/repos/github/agronholm/anyio/badge.svg?branch=master\n :target: https://coveralls.io/github/agronholm/anyio?branch=master\n :alt: Code Coverage\n.. image:: https://readthedocs.org/projects/anyio/badge/?version=latest\n :target: https://anyio.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation\n.. image:: https://badges.gitter.im/gitterHQ/gitter.svg\n :target: https://gitter.im/python-trio/AnyIO\n :alt: Gitter chat\n.. image:: https://tidelift.com/badges/package/pypi/anyio\n :target: https://tidelift.com/subscription/pkg/pypi-anyio\n :alt: Tidelift\n\nAnyIO is an asynchronous networking and concurrency library that works on top of either asyncio_ or\nTrio_. It implements Trio-like `structured concurrency`_ (SC) on top of asyncio and works in harmony\nwith the native SC of Trio itself.\n\nApplications and libraries written against AnyIO's API will run unmodified on either asyncio_ or\nTrio_. AnyIO can also be adopted into a library or application incrementally – bit by bit, no full\nrefactoring necessary. It will blend in with the native libraries of your chosen backend.\n\nTo find out why you might want to use AnyIO's APIs instead of asyncio's, you can read about it\n`here `_.\n\nDocumentation\n-------------\n\nView full documentation at: https://anyio.readthedocs.io/\n\nFeatures\n--------\n\nAnyIO offers the following functionality:\n\n* Task groups (nurseries_ in trio terminology)\n* High-level networking (TCP, UDP and UNIX sockets)\n\n * `Happy eyeballs`_ algorithm for TCP connections (more robust than that of asyncio on Python\n 3.8)\n * async/await style UDP sockets (unlike asyncio where you still have to use Transports and\n Protocols)\n\n* A versatile API for byte streams and object streams\n* Inter-task synchronization and communication (locks, conditions, events, semaphores, object\n streams and futures)\n* Worker threads\n* Subprocesses\n* Subinterpreter support for code parallelization (on Python 3.13 and later)\n* Asynchronous file I/O (using worker threads)\n* Signal handling\n* Asynchronous versions of the functools_ and itertools_ modules\n\nAnyIO also comes with its own pytest_ plugin which also supports asynchronous fixtures.\nIt even works with the popular Hypothesis_ library.\n\n.. _asyncio: https://docs.python.org/3/library/asyncio.html\n.. _Trio: https://github.com/python-trio/trio\n.. _structured concurrency: https://en.wikipedia.org/wiki/Structured_concurrency\n.. _nurseries: https://trio.readthedocs.io/en/stable/reference-core.html#nurseries-and-spawning\n.. _Happy eyeballs: https://en.wikipedia.org/wiki/Happy_Eyeballs\n.. _pytest: https://docs.pytest.org/en/latest/\n.. _functools: https://docs.python.org/3/library/functools.html\n.. _itertools: https://docs.python.org/3/library/itertools.html\n.. _Hypothesis: https://hypothesis.works/\n\nSecurity contact information\n----------------------------\n\nTo report a security vulnerability, please use the `Tidelift security contact`_.\nTidelift will coordinate the fix and disclosure.\n\n.. _Tidelift security contact: https://tidelift.com/security\n", + "description_content_type": "text/x-rst", + "author_email": "Alex Grönholm ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Framework :: AnyIO", + "Typing :: Typed", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Programming Language :: Python :: Free Threading :: 2 - Beta" + ], + "requires_dist": [ + "exceptiongroup>=1.0.2; python_version < \"3.11\"", + "idna>=2.8", + "typing_extensions>=4.16.0; python_version < \"3.15\"", + "trio>=0.32.0; extra == \"trio\"" + ], + "requires_python": ">=3.10", + "project_url": [ + "Documentation, https://anyio.readthedocs.io/en/latest/", + "Changelog, https://anyio.readthedocs.io/en/stable/versionhistory.html", + "Source code, https://github.com/agronholm/anyio", + "Issue tracker, https://github.com/agronholm/anyio/issues" + ], + "provides_extra": [ + "trio" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c" + }, + "hash": "sha256=ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "idna", + "version": "3.20", + "summary": "Internationalized Domain Names in Applications (IDNA)", + "description": "# Internationalized Domain Names in Applications (IDNA)\n\nSupport for [Internationalized Domain Names in Applications\n(IDNA)](https://tools.ietf.org/html/rfc5891) and [Unicode IDNA\nCompatibility Processing](https://unicode.org/reports/tr46/). It\nsupersedes the standard library's `encodings.idna`, which only\nimplements the 2003 specification, offering broader script coverage and\nlimiting domains with known security vulnerabilities.\n\n## Usage\n\nPackage may be installed from [PyPI](https://pypi.org/project/idna/) via\nthe typical methods (e.g. `python3 -m pip install idna`)\n\nFor typical usage, the `encode` and `decode` functions will take a\ndomain name argument and perform a conversion to ASCII-compatible encoding\n(known as A-labels), or to Unicode strings (known as U-labels)\nrespectively.\n\n```pycon\n>>> import idna\n>>> idna.encode('ドメイン.テスト')\nb'xn--eckwd4c7c.xn--zckzah'\n>>> print(idna.decode('xn--eckwd4c7c.xn--zckzah'))\nドメイン.テスト\n```\n\nConversions can be applied at a per-label basis using the `ulabel` or\n`alabel` functions for specialized use cases.\n\n\n### Compatibility Mapping (UTS #46)\n\nThis library provides support for [Unicode IDNA Compatibility\nProcessing](https://unicode.org/reports/tr46/) which normalizes input from\ndifferent potential ways a user may input a domain prior to performing the IDNA\nconversion operations. This functionality, known as a\n[mapping](https://tools.ietf.org/html/rfc5895), is considered by the\nspecification to be a local user-interface issue distinct from IDNA\nconversion functionality.\n\nFor example, \"Königsgäßchen\" is not a permissible label as capital letters\nare not allowed. UTS #46 will convert this into lower case prior to applying\nthe IDNA conversion.\n\n```pycon\n>>> import idna\n>>> idna.encode('Königsgäßchen')\n...\nidna.core.InvalidCodepoint: Codepoint U+004B at position 1 of 'Königsgäßchen' not allowed\n>>> idna.encode('Königsgäßchen', uts46=True)\nb'xn--knigsgchen-b4a3dun'\n>>> idna.decode('xn--knigsgchen-b4a3dun')\n'königsgäßchen'\n```\n\nWhen performing a decode operation for display purposes, `decode()`\naccepts a `display=True` argument that leaves any `xn--` label that\nfails to decode unchanged. This is useful for user interface display\nwhere a domain is in use, the A-label form can be presented when it\nis not a valid IDN.\n\n\n## Exceptions\n\nAll errors raised during conversion derive from the `idna.IDNAError`\nbase class. The more specific exceptions are:\n\n* `idna.IDNABidiError` — raised when a label contains an illegal\n combination of left-to-right and right-to-left characters.\n* `idna.InvalidCodepoint` — raised when a label contains a codepoint\n that is INVALID for IDNA.\n* `idna.InvalidCodepointContext` — raised when a CONTEXTO or CONTEXTJ\n codepoint appears in a position whose contextual requirements are\n not satisfied.\n\nExceptions carry machine-readable attributes so that applications do\nnot need to parse the message: `code` is a short, stable identifier\nfor the rule that failed (such as `disallowed_codepoint` or\n`label_too_long`); and, when the failure can be attributed to a\nparticular character, `text` (the label or domain being validated),\n`codepoint` (the offending codepoint as an integer) and `position`\nare set. \n\n\n## Command-line tool\n\nThe package supports command-line usage to convert domain names\nbetween their Unicode and ASCII-compatible forms. It can be run either\nas a module (`python3 -m idna`) or, once installed (such as with `uv\ntool` or `pipx`), via the `idna` script:\n\n```bash\n$ uv tool install idna\n$ idna xn--e1afmkfd.xn--p1ai\nпример.рф\n$ idna пример.рф\nxn--e1afmkfd.xn--p1ai\n```\n\nMode can be specified with `-e`/`--encode` or `-d`/`--decode`, otherwise\nit will be chosen automatically based on the first input. Multiple\ndomains can be supplied either as arguments or through standard input.\nUTS #46 mapping is applied by default, which lets the tool accept\ninputs that aren't strictly valid IDNA 2008 by normalising them first,\npass `--strict` to disable UTS #46.\n\nConversion failures are reported on stderr together with the\noffending input; processing continues with the remaining domains and\nthe tool exits with a non-zero status if any conversion failed.\n\n\n## Additional Notes\n\n* **Python version support**. This library supports Python 3.9 and higher.\n As this library serves as a low-level toolkit for a variety of\n applications, we strive to support all versions of Python that are\n not beyond end-of-life. Free-threaded Python is also supported,\n as the library holds no mutable global state the functions can be\n called concurrently from multiple threads.\n\n* **Unicode version**. The IDNA and UTS #46 lookup tables are generated\n from a specific Unicode release. Some Unicode data depends on the\n running Python's `unicodedata` module, so on an older Python a\n character new to Unicode may be rejected as unknown even if this\n library knows about it.\n\n* **Emoji**. It is an occasional request to support emoji domains in\n this library. Encoding of symbols like emoji is expressly prohibited by\n the IDNA technical standard, and emoji domains are broadly phased\n out across the domain industry due to associated security risks.\n\n* **Regenerating lookup tables**. The IDNA and UTS #46 functionality\n relies upon pre-calculated lookup tables, generated using the\n `idna-data` script in [`tools/`](tools/README.md).\n\n", + "description_content_type": "text/markdown", + "author_email": "Kim Davies ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.md" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Intended Audience :: System Administrators", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Internet :: Name Service (DNS)", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Utilities" + ], + "requires_dist": [ + "ruff >= 0.16.0 ; extra == \"all\"", + "mypy >= 1.11.2 ; extra == \"all\"", + "ty >= 0.0.37 ; extra == \"all\"", + "pytest >= 8.3.2 ; extra == \"all\"", + "hypothesis >= 6.141.1 ; extra == \"all\"", + "coverage >= 7.10.0 ; extra == \"all\"" + ], + "requires_python": ">=3.9", + "project_url": [ + "Changelog, https://github.com/kjd/idna/blob/master/HISTORY.md", + "Issue tracker, https://github.com/kjd/idna/issues", + "Source, https://github.com/kjd/idna" + ], + "provides_extra": [ + "all" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5" + }, + "hash": "sha256=e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "sympy", + "version": "1.14.0", + "dynamic": [ + "author", + "author-email", + "classifier", + "description", + "description-content-type", + "home-page", + "keywords", + "license", + "license-file", + "project-url", + "provides-extra", + "requires-dist", + "requires-python", + "summary" + ], + "summary": "Computer algebra system (CAS) in Python", + "description": "# SymPy\n\n[![pypi version](https://img.shields.io/pypi/v/sympy.svg)](https://pypi.python.org/pypi/sympy)\n[![Join the chat at https://gitter.im/sympy/sympy](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/sympy/sympy?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)\n[![Zenodo Badge](https://zenodo.org/badge/18918/sympy/sympy.svg)](https://zenodo.org/badge/latestdoi/18918/sympy/sympy)\n[![Downloads](https://pepy.tech/badge/sympy/month)](https://pepy.tech/project/sympy)\n[![GitHub Issues](https://img.shields.io/badge/issue_tracking-github-blue.svg)](https://github.com/sympy/sympy/issues)\n[![Git Tutorial](https://img.shields.io/badge/PR-Welcome-%23FF8300.svg?)](https://git-scm.com/book/en/v2/GitHub-Contributing-to-a-Project)\n[![Powered by NumFocus](https://img.shields.io/badge/powered%20by-NumFOCUS-orange.svg?style=flat&colorA=E1523D&colorB=007D8A)](https://numfocus.org)\n[![Commits since last release](https://img.shields.io/github/commits-since/sympy/sympy/latest.svg?longCache=true&style=flat-square&logo=git&logoColor=fff)](https://github.com/sympy/sympy/releases)\n\n[![SymPy Banner](https://github.com/sympy/sympy/raw/master/banner.svg)](https://sympy.org/)\n\n\nSee the [AUTHORS](AUTHORS) file for the list of authors.\n\nAnd many more people helped on the SymPy mailing list, reported bugs,\nhelped organize SymPy's participation in the Google Summer of Code, the\nGoogle Highly Open Participation Contest, Google Code-In, wrote and\nblogged about SymPy...\n\nLicense: New BSD License (see the [LICENSE](LICENSE) file for details) covers all\nfiles in the sympy repository unless stated otherwise.\n\nOur mailing list is at\n.\n\nWe have a community chat at [Gitter](https://gitter.im/sympy/sympy). Feel\nfree to ask us anything there. We have a very welcoming and helpful\ncommunity.\n\n## Download\n\nThe recommended installation method is through Anaconda,\n\n\nYou can also get the latest version of SymPy from\n\n\nTo get the git version do\n\n $ git clone https://github.com/sympy/sympy.git\n\nFor other options (tarballs, debs, etc.), see\n.\n\n## Documentation and Usage\n\nFor in-depth instructions on installation and building the\ndocumentation, see the [SymPy Documentation Style Guide](https://docs.sympy.org/dev/documentation-style-guide.html).\n\nEverything is at:\n\n\n\nYou can generate everything at the above site in your local copy of\nSymPy by:\n\n $ cd doc\n $ make html\n\nThen the docs will be in \\_build/html. If\nyou don't want to read that, here is a short usage:\n\nFrom this directory, start Python and:\n\n``` python\n>>> from sympy import Symbol, cos\n>>> x = Symbol('x')\n>>> e = 1/cos(x)\n>>> print(e.series(x, 0, 10))\n1 + x**2/2 + 5*x**4/24 + 61*x**6/720 + 277*x**8/8064 + O(x**10)\n```\n\nSymPy also comes with a console that is a simple wrapper around the\nclassic python console (or IPython when available) that loads the SymPy\nnamespace and executes some common commands for you.\n\nTo start it, issue:\n\n $ bin/isympy\n\nfrom this directory, if SymPy is not installed or simply:\n\n $ isympy\n\nif SymPy is installed.\n\n## Installation\n\nTo install SymPy using PyPI, run the following command:\n\n $ pip install sympy\n\nTo install SymPy using Anaconda, run the following command:\n\n $ conda install -c anaconda sympy\n\nTo install SymPy from GitHub source, first clone SymPy using `git`:\n\n $ git clone https://github.com/sympy/sympy.git\n\nThen, in the `sympy` repository that you cloned, simply run:\n\n $ pip install .\n\nSee for more information.\n\n## Contributing\n\nWe welcome contributions from anyone, even if you are new to open\nsource. Please read our [Introduction to Contributing](https://docs.sympy.org/dev/contributing/introduction-to-contributing.html)\npage and the [SymPy Documentation Style Guide](https://docs.sympy.org/dev/documentation-style-guide.html). If you\nare new and looking for some way to contribute, a good place to start is\nto look at the issues tagged [Easy to Fix](https://github.com/sympy/sympy/issues?q=is%3Aopen+is%3Aissue+label%3A%22Easy+to+Fix%22).\n\nPlease note that all participants in this project are expected to follow\nour Code of Conduct. By participating in this project you agree to abide\nby its terms. See [CODE\\_OF\\_CONDUCT.md](CODE_OF_CONDUCT.md).\n\n## Tests\n\nTo execute all tests, run:\n\n $./setup.py test\n\nin the current directory.\n\nFor the more fine-grained running of tests or doctests, use `bin/test`\nor respectively `bin/doctest`. The master branch is automatically tested\nby GitHub Actions.\n\nTo test pull requests, use\n[sympy-bot](https://github.com/sympy/sympy-bot).\n\n## Regenerate Experimental LaTeX Parser/Lexer\n\nThe parser and lexer were generated with the [ANTLR4](http://antlr4.org)\ntoolchain in `sympy/parsing/latex/_antlr` and checked into the repo.\nPresently, most users should not need to regenerate these files, but\nif you plan to work on this feature, you will need the `antlr4`\ncommand-line tool (and you must ensure that it is in your `PATH`).\nOne way to get it is:\n\n $ conda install -c conda-forge antlr=4.11.1\n\nAlternatively, follow the instructions on the ANTLR website and download\nthe `antlr-4.11.1-complete.jar`. Then export the `CLASSPATH` as instructed\nand instead of creating `antlr4` as an alias, make it an executable file\nwith the following contents:\n``` bash\n#!/bin/bash\njava -jar /usr/local/lib/antlr-4.11.1-complete.jar \"$@\"\n```\n\nAfter making changes to `sympy/parsing/latex/LaTeX.g4`, run:\n\n $ ./setup.py antlr\n\n## Clean\n\nTo clean everything (thus getting the same tree as in the repository):\n\n $ git clean -Xdf\n\nwhich will clear everything ignored by `.gitignore`, and:\n\n $ git clean -df\n\nto clear all untracked files. You can revert the most recent changes in\ngit with:\n\n $ git reset --hard\n\nWARNING: The above commands will all clear changes you may have made,\nand you will lose them forever. Be sure to check things with `git\nstatus`, `git diff`, `git clean -Xn`, and `git clean -n` before doing any\nof those.\n\n## Bugs\n\nOur issue tracker is at . Please\nreport any bugs that you find. Or, even better, fork the repository on\nGitHub and create a pull request. We welcome all changes, big or small,\nand we will help you make the pull request if you are new to git (just\nask on our mailing list or Gitter Channel). If you further have any queries, you can find answers\non Stack Overflow using the [sympy](https://stackoverflow.com/questions/tagged/sympy) tag.\n\n## Brief History\n\nSymPy was started by Ondřej Čertík in 2005, he wrote some code during\nthe summer, then he wrote some more code during summer 2006. In February\n2007, Fabian Pedregosa joined the project and helped fix many things,\ncontributed documentation, and made it alive again. 5 students (Mateusz\nPaprocki, Brian Jorgensen, Jason Gedge, Robert Schwarz, and Chris Wu)\nimproved SymPy incredibly during summer 2007 as part of the Google\nSummer of Code. Pearu Peterson joined the development during the summer\n2007 and he has made SymPy much more competitive by rewriting the core\nfrom scratch, which has made it from 10x to 100x faster. Jurjen N.E. Bos\nhas contributed pretty-printing and other patches. Fredrik Johansson has\nwritten mpmath and contributed a lot of patches.\n\nSymPy has participated in every Google Summer of Code since 2007. You\ncan see for\nfull details. Each year has improved SymPy by bounds. Most of SymPy's\ndevelopment has come from Google Summer of Code students.\n\nIn 2011, Ondřej Čertík stepped down as lead developer, with Aaron\nMeurer, who also started as a Google Summer of Code student, taking his\nplace. Ondřej Čertík is still active in the community but is too busy\nwith work and family to play a lead development role.\n\nSince then, a lot more people have joined the development and some\npeople have also left. You can see the full list in doc/src/aboutus.rst,\nor online at:\n\n\n\nThe git history goes back to 2007 when development moved from svn to hg.\nTo see the history before that point, look at\n.\n\nYou can use git to see the biggest developers. The command:\n\n $ git shortlog -ns\n\nwill show each developer, sorted by commits to the project. The command:\n\n $ git shortlog -ns --since=\"1 year\"\n\nwill show the top developers from the last year.\n\n## Citation\n\nTo cite SymPy in publications use\n\n> Meurer A, Smith CP, Paprocki M, Čertík O, Kirpichev SB, Rocklin M,\n> Kumar A, Ivanov S, Moore JK, Singh S, Rathnayake T, Vig S, Granger BE,\n> Muller RP, Bonazzi F, Gupta H, Vats S, Johansson F, Pedregosa F, Curry\n> MJ, Terrel AR, Roučka Š, Saboo A, Fernando I, Kulal S, Cimrman R,\n> Scopatz A. (2017) SymPy: symbolic computing in Python. *PeerJ Computer\n> Science* 3:e103 \n\nA BibTeX entry for LaTeX users is\n\n``` bibtex\n@article{10.7717/peerj-cs.103,\n title = {SymPy: symbolic computing in Python},\n author = {Meurer, Aaron and Smith, Christopher P. and Paprocki, Mateusz and \\v{C}ert\\'{i}k, Ond\\v{r}ej and Kirpichev, Sergey B. and Rocklin, Matthew and Kumar, Amit and Ivanov, Sergiu and Moore, Jason K. and Singh, Sartaj and Rathnayake, Thilina and Vig, Sean and Granger, Brian E. and Muller, Richard P. and Bonazzi, Francesco and Gupta, Harsh and Vats, Shivam and Johansson, Fredrik and Pedregosa, Fabian and Curry, Matthew J. and Terrel, Andy R. and Rou\\v{c}ka, \\v{S}t\\v{e}p\\'{a}n and Saboo, Ashutosh and Fernando, Isuru and Kulal, Sumith and Cimrman, Robert and Scopatz, Anthony},\n year = 2017,\n month = Jan,\n keywords = {Python, Computer algebra system, Symbolics},\n abstract = {\n SymPy is an open-source computer algebra system written in pure Python. It is built with a focus on extensibility and ease of use, through both interactive and programmatic applications. These characteristics have led SymPy to become a popular symbolic library for the scientific Python ecosystem. This paper presents the architecture of SymPy, a description of its features, and a discussion of select submodules. The supplementary material provides additional examples and further outlines details of the architecture and features of SymPy.\n },\n volume = 3,\n pages = {e103},\n journal = {PeerJ Computer Science},\n issn = {2376-5992},\n url = {https://doi.org/10.7717/peerj-cs.103},\n doi = {10.7717/peerj-cs.103}\n}\n```\n\nSymPy is BSD licensed, so you are free to use it whatever you like, be\nit academic, commercial, creating forks or derivatives, as long as you\ncopy the BSD statement if you redistribute it (see the LICENSE file for\ndetails). That said, although not required by the SymPy license, if it\nis convenient for you, please cite SymPy when using it in your work and\nalso consider contributing all your changes back, so that we can\nincorporate it and all of us will benefit in the end.\n", + "description_content_type": "text/markdown", + "keywords": [ + "Math", + "CAS" + ], + "home_page": "https://sympy.org", + "author": "SymPy development team", + "author_email": "sympy@googlegroups.com", + "license": "BSD", + "license_file": [ + "LICENSE", + "AUTHORS" + ], + "classifier": [ + "License :: OSI Approved :: BSD License", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Topic :: Scientific/Engineering", + "Topic :: Scientific/Engineering :: Mathematics", + "Topic :: Scientific/Engineering :: Physics", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy" + ], + "requires_dist": [ + "mpmath<1.4,>=1.1.0", + "pytest>=7.1.0; extra == \"dev\"", + "hypothesis>=6.70.0; extra == \"dev\"" + ], + "requires_python": ">=3.9", + "project_url": [ + "Source, https://github.com/sympy/sympy" + ], + "provides_extra": [ + "dev" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c" + }, + "hash": "sha256=a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.1", + "name": "mpmath", + "version": "1.3.0", + "summary": "Python library for arbitrary-precision floating-point arithmetic", + "description": "mpmath\n======\n\n|pypi version| |Build status| |Code coverage status| |Zenodo Badge|\n\n.. |pypi version| image:: https://img.shields.io/pypi/v/mpmath.svg\n :target: https://pypi.python.org/pypi/mpmath\n.. |Build status| image:: https://github.com/fredrik-johansson/mpmath/workflows/test/badge.svg\n :target: https://github.com/fredrik-johansson/mpmath/actions?workflow=test\n.. |Code coverage status| image:: https://codecov.io/gh/fredrik-johansson/mpmath/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/fredrik-johansson/mpmath\n.. |Zenodo Badge| image:: https://zenodo.org/badge/2934512.svg\n :target: https://zenodo.org/badge/latestdoi/2934512\n\nA Python library for arbitrary-precision floating-point arithmetic.\n\nWebsite: http://mpmath.org/\nMain author: Fredrik Johansson \n\nMpmath is free software released under the New BSD License (see the\nLICENSE file for details)\n\n0. History and credits\n----------------------\n\nThe following people (among others) have contributed major patches\nor new features to mpmath:\n\n* Pearu Peterson \n* Mario Pernici \n* Ondrej Certik \n* Vinzent Steinberg \n* Nimish Telang \n* Mike Taschuk \n* Case Van Horsen \n* Jorn Baayen \n* Chris Smith \n* Juan Arias de Reyna \n* Ioannis Tziakos \n* Aaron Meurer \n* Stefan Krastanov \n* Ken Allen \n* Timo Hartmann \n* Sergey B Kirpichev \n* Kris Kuhlman \n* Paul Masson \n* Michael Kagalenko \n* Jonathan Warner \n* Max Gaukler \n* Guillermo Navas-Palencia \n* Nike Dattani \n\nNumerous other people have contributed by reporting bugs,\nrequesting new features, or suggesting improvements to the\ndocumentation.\n\nFor a detailed changelog, including individual contributions,\nsee the CHANGES file.\n\nFredrik's work on mpmath during summer 2008 was sponsored by Google\nas part of the Google Summer of Code program.\n\nFredrik's work on mpmath during summer 2009 was sponsored by the\nAmerican Institute of Mathematics under the support of the National Science\nFoundation Grant No. 0757627 (FRG: L-functions and Modular Forms).\n\nAny opinions, findings, and conclusions or recommendations expressed in this\nmaterial are those of the author(s) and do not necessarily reflect the\nviews of the sponsors.\n\nCredit also goes to:\n\n* The authors of the GMP library and the Python wrapper\n gmpy, enabling mpmath to become much faster at\n high precision\n* The authors of MPFR, pari/gp, MPFUN, and other arbitrary-\n precision libraries, whose documentation has been helpful\n for implementing many of the algorithms in mpmath\n* Wikipedia contributors; Abramowitz & Stegun; Gradshteyn & Ryzhik;\n Wolfram Research for MathWorld and the Wolfram Functions site.\n These are the main references used for special functions\n implementations.\n* George Brandl for developing the Sphinx documentation tool\n used to build mpmath's documentation\n\nRelease history:\n\n* Version 1.3.0 released on March 7, 2023\n* Version 1.2.0 released on February 1, 2021\n* Version 1.1.0 released on December 11, 2018\n* Version 1.0.0 released on September 27, 2017\n* Version 0.19 released on June 10, 2014\n* Version 0.18 released on December 31, 2013\n* Version 0.17 released on February 1, 2011\n* Version 0.16 released on September 24, 2010\n* Version 0.15 released on June 6, 2010\n* Version 0.14 released on February 5, 2010\n* Version 0.13 released on August 13, 2009\n* Version 0.12 released on June 9, 2009\n* Version 0.11 released on January 26, 2009\n* Version 0.10 released on October 15, 2008\n* Version 0.9 released on August 23, 2008\n* Version 0.8 released on April 20, 2008\n* Version 0.7 released on March 12, 2008\n* Version 0.6 released on January 13, 2008\n* Version 0.5 released on November 24, 2007\n* Version 0.4 released on November 3, 2007\n* Version 0.3 released on October 5, 2007\n* Version 0.2 released on October 2, 2007\n* Version 0.1 released on September 27, 2007\n\n1. Download & installation\n--------------------------\n\nMpmath requires Python 2.7 or 3.5 (or later versions). It has been tested\nwith CPython 2.7, 3.5 through 3.7 and for PyPy.\n\nThe latest release of mpmath can be downloaded from the mpmath\nwebsite and from https://github.com/fredrik-johansson/mpmath/releases\n\nIt should also be available in the Python Package Index at\nhttps://pypi.python.org/pypi/mpmath\n\nTo install latest release of Mpmath with pip, simply run\n\n``pip install mpmath``\n\nOr unpack the mpmath archive and run\n\n``python setup.py install``\n\nMpmath can also be installed using\n\n``python -m easy_install mpmath``\n\nThe latest development code is available from\nhttps://github.com/fredrik-johansson/mpmath\n\nSee the main documentation for more detailed instructions.\n\n2. Running tests\n----------------\n\nThe unit tests in mpmath/tests/ can be run via the script\nruntests.py, but it is recommended to run them with py.test\n(https://pytest.org/), especially\nto generate more useful reports in case there are failures.\n\nYou may also want to check out the demo scripts in the demo\ndirectory.\n\nThe master branch is automatically tested by Travis CI.\n\n3. Documentation\n----------------\n\nDocumentation in reStructuredText format is available in the\ndoc directory included with the source package. These files\nare human-readable, but can be compiled to prettier HTML using\nthe build.py script (requires Sphinx, http://sphinx.pocoo.org/).\n\nSee setup.txt in the documentation for more information.\n\nThe most recent documentation is also available in HTML format:\n\nhttp://mpmath.org/doc/current/\n\n4. Known problems\n-----------------\n\nMpmath is a work in progress. Major issues include:\n\n* Some functions may return incorrect values when given extremely\n large arguments or arguments very close to singularities.\n\n* Directed rounding works for arithmetic operations. It is implemented\n heuristically for other operations, and their results may be off by one\n or two units in the last place (even if otherwise accurate).\n\n* Some IEEE 754 features are not available. Inifinities and NaN are\n partially supported; denormal rounding is currently not available\n at all.\n\n* The interface for switching precision and rounding is not finalized.\n The current method is not threadsafe.\n\n5. Help and bug reports\n-----------------------\n\nGeneral questions and comments can be sent to the mpmath mailinglist,\nmpmath@googlegroups.com\n\nYou can also report bugs and send patches to the mpmath issue tracker,\nhttps://github.com/fredrik-johansson/mpmath/issues\n", + "home_page": "http://mpmath.org/", + "author": "Fredrik Johansson", + "author_email": "fredrik.johansson@gmail.com", + "license": "BSD", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "License :: OSI Approved :: BSD License", + "Topic :: Scientific/Engineering :: Mathematics", + "Topic :: Software Development :: Libraries :: Python Modules", + "Programming Language :: Python", + "Programming Language :: Python :: 2", + "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.5", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy" + ], + "requires_dist": [ + "pytest (>=4.6) ; extra == 'develop'", + "pycodestyle ; extra == 'develop'", + "pytest-cov ; extra == 'develop'", + "codecov ; extra == 'develop'", + "wheel ; extra == 'develop'", + "sphinx ; extra == 'docs'", + "gmpy2 (>=2.1.0a4) ; (platform_python_implementation != \"PyPy\") and extra == 'gmpy'", + "pytest (>=4.6) ; extra == 'tests'" + ], + "project_url": [ + "Source, https://github.com/fredrik-johansson/mpmath", + "Tracker, https://github.com/fredrik-johansson/mpmath/issues", + "Documentation, http://mpmath.org/doc/current/" + ], + "provides_extra": [ + "develop", + "docs", + "gmpy", + "tests" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8" + }, + "hash": "sha256=481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "typing_extensions", + "version": "4.16.0", + "summary": "Backported and Experimental Type Hints for Python 3.9+", + "description": "# Typing Extensions\n\n[![Chat at https://gitter.im/python/typing](https://badges.gitter.im/python/typing.svg)](https://gitter.im/python/typing)\n\n[Documentation](https://typing-extensions.readthedocs.io/en/latest/#) –\n[PyPI](https://pypi.org/project/typing-extensions/)\n\n## Overview\n\nThe `typing_extensions` module serves two related purposes:\n\n- Enable use of new type system features on older Python versions. For example,\n `typing.TypeGuard` is new in Python 3.10, but `typing_extensions` allows\n users on previous Python versions to use it too.\n- Enable experimentation with new type system PEPs before they are accepted and\n added to the `typing` module.\n\n`typing_extensions` is treated specially by static type checkers such as\nmypy and pyright. Objects defined in `typing_extensions` are treated the same\nway as equivalent forms in `typing`.\n\n`typing_extensions` uses\n[Semantic Versioning](https://semver.org/). The\nmajor version will be incremented only for backwards-incompatible changes.\nTherefore, it's safe to depend\non `typing_extensions` like this: `typing_extensions ~=x.y`,\nwhere `x.y` is the first version that includes all features you need.\n[This](https://packaging.python.org/en/latest/specifications/version-specifiers/#compatible-release)\nis equivalent to `typing_extensions >=x.y, <(x+1)`. Do not depend on `~= x.y.z`\nunless you really know what you're doing; that defeats the purpose of\nsemantic versioning.\n\n## Included items\n\nSee [the documentation](https://typing-extensions.readthedocs.io/en/latest/#) for a\ncomplete listing of module contents.\n\n## Contributing\n\nSee [CONTRIBUTING.md](https://github.com/python/typing_extensions/blob/main/CONTRIBUTING.md)\nfor how to contribute to `typing_extensions`.\n\n", + "description_content_type": "text/markdown", + "keywords": [ + "annotations", + "backport", + "checker", + "checking", + "function", + "hinting", + "hints", + "type", + "typechecking", + "typehinting", + "typehints", + "typing" + ], + "author_email": "\"Guido van Rossum, Jukka Lehtosalo, Łukasz Langa, Michael Lee\" ", + "license_expression": "PSF-2.0", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Environment :: Console", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Topic :: Software Development" + ], + "requires_python": ">=3.9", + "project_url": [ + "Bug Tracker, https://github.com/python/typing_extensions/issues", + "Changes, https://github.com/python/typing_extensions/blob/main/CHANGELOG.md", + "Documentation, https://typing-extensions.readthedocs.io/", + "Home, https://github.com/python/typing_extensions", + "Q & A, https://github.com/python/typing/discussions", + "Repository, https://github.com/python/typing_extensions" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147" + }, + "hash": "sha256=65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "typing-inspection", + "version": "0.4.4", + "summary": "Runtime typing introspection tools", + "description": "# typing-inspection\n\n[![CI](https://img.shields.io/github/actions/workflow/status/pydantic/typing-inspection/ci.yml?branch=main&logo=github&label=CI)](https://github.com/pydantic/typing-inspection/actions?query=event%3Apush+branch%3Amain+workflow%3ACI)\n[![Coverage](https://coverage-badge.samuelcolvin.workers.dev/pydantic/typing-inspection.svg)](https://coverage-badge.samuelcolvin.workers.dev/redirect/pydantic/typing-inspection)\n[![PyPI](https://img.shields.io/pypi/v/typing-inspection.svg)](https://pypi.org/project/typing-inspection/)\n[![Versions](https://img.shields.io/pypi/pyversions/typing-inspection.svg)](https://github.com/pydantic/typing-inspection)\n[![License](https://img.shields.io/github/license/pydantic/typing-inspection.svg)](https://github.com/pydantic/typing-inspection/blob/main/LICENSE)\n[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)\n\n`typing-inspection` provides tools to inspect type annotations at runtime.\n\n## Installation\n\nFrom [PyPI](https://pypi.org/project/typing-inspection/):\n\n```bash\npip install typing-inspection\n```\n\nThe library can be imported from the `typing_inspection` module.\n", + "description_content_type": "text/markdown", + "author_email": "Victorien Plot ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Programming Language :: Python :: Implementation :: CPython", + "Topic :: Software Development :: Libraries :: Python Modules", + "Typing :: Typed" + ], + "requires_dist": [ + "typing-extensions>=4.15.0" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://github.com/pydantic/typing-inspection", + "Documentation, https://pydantic.github.io/typing-inspection/dev/", + "Source, https://github.com/pydantic/typing-inspection", + "Changelog, https://github.com/pydantic/typing-inspection/blob/main/HISTORY.md" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/7a/6d/db8b86e168fef0cf904737e275bccb683558088ef971e92d3b41ce980699/filelock-4.0.3-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "30cd166e2aee2c7534ce2c33c6367c4cd051b8368e20e2c4eb0c34f699bacfab" + }, + "hash": "sha256=30cd166e2aee2c7534ce2c33c6367c4cd051b8368e20e2c4eb0c34f699bacfab" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "filelock", + "version": "4.0.3", + "summary": "A platform independent file lock.", + "description": "# filelock\n\n[![PyPI](https://img.shields.io/pypi/v/filelock)](https://pypi.org/project/filelock/)\n[![Supported Python versions](https://img.shields.io/pypi/pyversions/filelock.svg)](https://pypi.org/project/filelock/)\n[![Documentation status](https://readthedocs.org/projects/py-filelock/badge/?version=latest)](https://py-filelock.readthedocs.io/en/latest/?badge=latest)\n[![Downloads](https://static.pepy.tech/badge/filelock/month)](https://pepy.tech/project/filelock)\n[![check](https://github.com/tox-dev/py-filelock/actions/workflows/check.yaml/badge.svg)](https://github.com/tox-dev/py-filelock/actions/workflows/check.yaml)\n\nFor more information checkout the [official documentation](https://py-filelock.readthedocs.io/en/latest/index.html).\n", + "description_content_type": "text/markdown", + "keywords": [ + "application", + "cache", + "directory", + "log", + "user" + ], + "maintainer_email": "Bernát Gábor ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Topic :: Internet", + "Topic :: Software Development :: Libraries", + "Topic :: System" + ], + "requires_python": ">=3.10", + "project_url": [ + "Documentation, https://py-filelock.readthedocs.io", + "Homepage, https://github.com/tox-dev/py-filelock", + "Source, https://github.com/tox-dev/py-filelock", + "Tracker, https://github.com/tox-dev/py-filelock/issues" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67" + }, + "hash": "sha256=85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "Jinja2", + "version": "3.1.6", + "summary": "A very fast and expressive template engine.", + "description": "# Jinja\n\nJinja is a fast, expressive, extensible templating engine. Special\nplaceholders in the template allow writing code similar to Python\nsyntax. Then the template is passed data to render the final document.\n\nIt includes:\n\n- Template inheritance and inclusion.\n- Define and import macros within templates.\n- HTML templates can use autoescaping to prevent XSS from untrusted\n user input.\n- A sandboxed environment can safely render untrusted templates.\n- AsyncIO support for generating templates and calling async\n functions.\n- I18N support with Babel.\n- Templates are compiled to optimized Python code just-in-time and\n cached, or can be compiled ahead-of-time.\n- Exceptions point to the correct line in templates to make debugging\n easier.\n- Extensible filters, tests, functions, and even syntax.\n\nJinja's philosophy is that while application logic belongs in Python if\npossible, it shouldn't make the template designer's job difficult by\nrestricting functionality too much.\n\n\n## In A Nutshell\n\n```jinja\n{% extends \"base.html\" %}\n{% block title %}Members{% endblock %}\n{% block content %}\n \n{% endblock %}\n```\n\n## Donate\n\nThe Pallets organization develops and supports Jinja and other popular\npackages. In order to grow the community of contributors and users, and\nallow the maintainers to devote more time to the projects, [please\ndonate today][].\n\n[please donate today]: https://palletsprojects.com/donate\n\n## Contributing\n\nSee our [detailed contributing documentation][contrib] for many ways to\ncontribute, including reporting issues, requesting features, asking or answering\nquestions, and making PRs.\n\n[contrib]: https://palletsprojects.com/contributing/\n\n", + "description_content_type": "text/markdown", + "maintainer_email": "Pallets ", + "license_file": [ + "LICENSE.txt" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Environment :: Web Environment", + "Intended Audience :: Developers", + "License :: OSI Approved :: BSD License", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Topic :: Internet :: WWW/HTTP :: Dynamic Content", + "Topic :: Text Processing :: Markup :: HTML", + "Typing :: Typed" + ], + "requires_dist": [ + "MarkupSafe>=2.0", + "Babel>=2.7 ; extra == \"i18n\"" + ], + "requires_python": ">=3.7", + "project_url": [ + "Changes, https://jinja.palletsprojects.com/changes/", + "Chat, https://discord.gg/pallets", + "Documentation, https://jinja.palletsprojects.com/", + "Donate, https://palletsprojects.com/donate", + "Source, https://github.com/pallets/jinja/" + ], + "provides_extra": [ + "i18n" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", + "archive_info": { + "hashes": { + "sha256": "c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026" + }, + "hash": "sha256=c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "MarkupSafe", + "version": "3.0.3", + "dynamic": [ + "license-file" + ], + "summary": "Safely add untrusted strings to HTML/XML markup.", + "description": "
\"\"
\n\n# MarkupSafe\n\nMarkupSafe implements a text object that escapes characters so it is\nsafe to use in HTML and XML. Characters that have special meanings are\nreplaced so that they display as the actual characters. This mitigates\ninjection attacks, meaning untrusted user input can safely be displayed\non a page.\n\n\n## Examples\n\n```pycon\n>>> from markupsafe import Markup, escape\n\n>>> # escape replaces special characters and wraps in Markup\n>>> escape(\"\")\nMarkup('<script>alert(document.cookie);</script>')\n\n>>> # wrap in Markup to mark text \"safe\" and prevent escaping\n>>> Markup(\"Hello\")\nMarkup('hello')\n\n>>> escape(Markup(\"Hello\"))\nMarkup('hello')\n\n>>> # Markup is a str subclass\n>>> # methods and operators escape their arguments\n>>> template = Markup(\"Hello {name}\")\n>>> template.format(name='\"World\"')\nMarkup('Hello "World"')\n```\n\n## Donate\n\nThe Pallets organization develops and supports MarkupSafe and other\npopular packages. In order to grow the community of contributors and\nusers, and allow the maintainers to devote more time to the projects,\n[please donate today][].\n\n[please donate today]: https://palletsprojects.com/donate\n\n## Contributing\n\nSee our [detailed contributing documentation][contrib] for many ways to\ncontribute, including reporting issues, requesting features, asking or answering\nquestions, and making PRs.\n\n[contrib]: https://palletsprojects.com/contributing/\n", + "description_content_type": "text/markdown", + "maintainer_email": "Pallets ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.txt" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Environment :: Web Environment", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Topic :: Internet :: WWW/HTTP :: Dynamic Content", + "Topic :: Text Processing :: Markup :: HTML", + "Typing :: Typed" + ], + "requires_python": ">=3.9", + "project_url": [ + "Donate, https://palletsprojects.com/donate", + "Documentation, https://markupsafe.palletsprojects.com/", + "Changes, https://markupsafe.palletsprojects.com/page/changes/", + "Source, https://github.com/pallets/markupsafe/", + "Chat, https://discord.gg/pallets" + ] + } + } + ], + "environment": { + "implementation_name": "cpython", + "implementation_version": "3.14.7", + "os_name": "posix", + "platform_machine": "arm64", + "platform_release": "24.6.0", + "platform_system": "Darwin", + "platform_version": "Darwin Kernel Version 24.6.0: Tue Jul 21 20:51:34 PDT 2026; root:xnu-11417.140.69.711.44~1/RELEASE_ARM64_VMAPPLE", + "python_full_version": "3.14.7", + "platform_python_implementation": "CPython", + "python_version": "3.14", + "sys_platform": "darwin" + } +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-current-source-cpu-rpc-restart-acceptance/probe-results.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-current-source-cpu-rpc-restart-acceptance/probe-results.json new file mode 100644 index 000000000..5db182007 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-current-source-cpu-rpc-restart-acceptance/probe-results.json @@ -0,0 +1,304 @@ +{ + "recorded_at": "2026-09-26T08:26:03.107566+00:00", + "status": "passed", + "core_status": "passed", + "adapter_status": "not selected", + "environment": { + "release": "2.14.0", + "torch": "2.14.0", + "build": "cpu", + "adapter": "none", + "python": "3.14", + "interpreter": "/private/var/folders/nj/vtw8zd2j31d1gdrtntc5y4600000gn/T/pumas-torch-native-cpu-phrd_sah/launcher-data/managed-python/python/39ab90495ce6de1a1c2c546c0f0802acaadfb3727d07f042d0a2d1e90c1b66b3/cpython-3.14.7-macos-aarch64-none/bin/python3.14", + "implementation": "cpython", + "platform": "macOS-15.7.9-arm64-64bit", + "machine": "arm64", + "artifacts": [ + { + "name": "torch", + "version": "2.14.0", + "url": "https://download-r2.pytorch.org/whl/cpu/torch-2.14.0-cp314-cp314-macosx_14_0_arm64.whl", + "sha256": "d0f78744000a7863cc3f1eafaf511d4b9944f079f08277de6fefe4b01f4d41b9" + }, + { + "name": "fastapi", + "version": "0.141.1", + "url": "https://files.pythonhosted.org/packages/cb/03/10388a42375ee7e4ac9b94eb2c5c569c8b5795e377e701c9ac3ad63de890/fastapi-0.141.1-py3-none-any.whl", + "sha256": "bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3" + }, + { + "name": "uvicorn", + "version": "0.54.0", + "url": "https://files.pythonhosted.org/packages/38/0c/b54a4fdd7f90a3af8b02ebc9ce6712c2c208b7926a2f7bad95c33ebbe943/uvicorn-0.54.0-py3-none-any.whl", + "sha256": "505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf" + }, + { + "name": "psutil", + "version": "7.2.2", + "url": "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", + "sha256": "1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979" + }, + { + "name": "pillow", + "version": "12.3.0", + "url": "https://files.pythonhosted.org/packages/c7/da/32c752228ae345f489e3a42499d817b6c3996da7e8a3bc7a04fc806b243b/pillow-12.3.0-cp314-cp314-macosx_11_0_arm64.whl", + "sha256": "e158cb00350dc278f3b91551101aa7d12415a66ebf2c91d8d5ac14e56ddd3ad0" + }, + { + "name": "safetensors", + "version": "0.8.0", + "url": "https://files.pythonhosted.org/packages/f5/b1/fa7c600e7dceae12e9606c7578cbc9ff1e1ed55844883ee5c92205e86226/safetensors-0.8.0-cp310-abi3-macosx_11_0_arm64.whl", + "sha256": "c80201d22cbf405b80647a60ada77bba06c8fba2da2743ba1e89cdcc39a81f25" + }, + { + "name": "annotated-doc", + "version": "0.0.5", + "url": "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", + "sha256": "117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101" + }, + { + "name": "click", + "version": "8.5.0", + "url": "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", + "sha256": "255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360" + }, + { + "name": "fsspec", + "version": "2026.9.0", + "url": "https://files.pythonhosted.org/packages/6c/c0/a98505f18594f1bce828bb159cec0fcf9860562f1a2c85913409fc8f3d9e/fsspec-2026.9.0-py3-none-any.whl", + "sha256": "8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f" + }, + { + "name": "h11", + "version": "0.16.0", + "url": "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", + "sha256": "63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86" + }, + { + "name": "networkx", + "version": "3.7", + "url": "https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl", + "sha256": "e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0" + }, + { + "name": "pydantic", + "version": "2.13.5", + "url": "https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl", + "sha256": "346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73" + }, + { + "name": "pydantic-core", + "version": "2.46.5", + "url": "https://files.pythonhosted.org/packages/ae/d5/d8a4eb6d6c7f66b91dd37c576d76e9e60fba900caf5372c17bcf949febc2/pydantic_core-2.46.5-cp314-cp314-macosx_11_0_arm64.whl", + "sha256": "1a353f84de772f423b5ffb11d7ae352fbbef0f446f3c0b0af0f8236d7233606e" + }, + { + "name": "annotated-types", + "version": "0.8.0", + "url": "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", + "sha256": "f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0" + }, + { + "name": "setuptools", + "version": "84.0.0", + "url": "https://files.pythonhosted.org/packages/95/9c/c510029fc6ef33a6275cd2c5d3cecd6613dfd6aa401d57c54f1c18852ccf/setuptools-84.0.0-py3-none-any.whl", + "sha256": "51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670" + }, + { + "name": "starlette", + "version": "1.7.0", + "url": "https://files.pythonhosted.org/packages/4e/d6/1ec1b290f9e0fb067899b61e1d37a30c923068bad260b216dbe37a7d2967/starlette-1.7.0-py3-none-any.whl", + "sha256": "67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e" + }, + { + "name": "anyio", + "version": "4.15.1", + "url": "https://files.pythonhosted.org/packages/12/b8/4bd346e22b28902df4d651910f5242c28d84e4a5c2435ca5c3f797ed7e2e/anyio-4.15.1-py3-none-any.whl", + "sha256": "6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101" + }, + { + "name": "idna", + "version": "3.20", + "url": "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl", + "sha256": "ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c" + }, + { + "name": "sympy", + "version": "1.14.0", + "url": "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", + "sha256": "e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5" + }, + { + "name": "mpmath", + "version": "1.3.0", + "url": "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", + "sha256": "a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c" + }, + { + "name": "typing-extensions", + "version": "4.16.0", + "url": "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", + "sha256": "481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8" + }, + { + "name": "typing-inspection", + "version": "0.4.4", + "url": "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", + "sha256": "65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147" + }, + { + "name": "filelock", + "version": "4.0.3", + "url": "https://files.pythonhosted.org/packages/7a/6d/db8b86e168fef0cf904737e275bccb683558088ef971e92d3b41ce980699/filelock-4.0.3-py3-none-any.whl", + "sha256": "30cd166e2aee2c7534ce2c33c6367c4cd051b8368e20e2c4eb0c34f699bacfab" + }, + { + "name": "jinja2", + "version": "3.1.6", + "url": "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", + "sha256": "85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67" + }, + { + "name": "markupsafe", + "version": "3.0.3", + "url": "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", + "sha256": "c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026" + } + ] + }, + "context": { + "python": "3.14.7 (main, Sep 1 2026, 14:05:28) [Clang 22.1.3 ]", + "executable": "/var/folders/nj/vtw8zd2j31d1gdrtntc5y4600000gn/T/pumas-torch-native-cpu-phrd_sah/torch-versions/.torch-install-7ITyCf/runtime/venv/bin/python", + "platform": "macOS-15.7.9-arm64-64bit", + "hardware": { + "cuda": null, + "hip": null, + "devices": [] + }, + "hardware_fingerprint": "b2023780c1910304bd1917fda17a812e2a82871cdcf72031b9c668e1f5879054", + "driver_version": null, + "runtime_files_sha256": { + "control_api.py": "ee5160f121a749d8d11cd929abfb9d98a1a109235dac3690c9e2118f9cca54d0", + "device_manager.py": "9ab6d63eb943989bc19f1fed89098aca27b168536fa2529734d1ee4f37585379", + "diffusion.py": "c4dadfc949c17a460f8fc8a446b03139da0c574b45b3f561403fdf83e495b6d3", + "flux2.py": "39f864e1e15ffb2b697bb95418d474cb98a760feca9acd48a74b5cf05642fea2", + "image_api.py": "bb39ac05aee7ea4d4357360accfa27ee261f58d1cd9cc35af28470012673a7ec", + "loaders/__init__.py": "80cec9242f95b73881b038b890a5d9465a14be86a631b2a0e1bf9efacac543fe", + "loaders/dllm_loader.py": "2c5656bce01a6d133925d02ca72606f8ae951d66186ac07d3fcb7fd5580b1a13", + "loaders/safetensors_loader.py": "661a000b791396067d253a27a26cb5905ae40ce8d50817ba54bc1afce803396f", + "loaders/sherry_loader.py": "360ac3f66c4438e3ffe3d9dc99ef2a27ae69efdd26f8d3564f638ae7802e5b3f", + "model_manager.py": "cfc049050f9003f87d622fe57da5c4ab4efb5105523fcbab926d8770d82be3f8", + "nunchaku_compat.py": "27b42f9cae80e474c0b2162e6bf572f822d525134bf2fc3bddd551c031bb5d70", + "openai_api.py": "a3c712e6307fe3b60d1b7acdcbeb9413b011eb370ad656f862ef9399f3342f8c", + "probe_runtime.py": "9b9e1d81087aefffdb383038724b471daeb0456814e5f2fa17e0b4da46255e25", + "resolve_runtime.py": "e0476a77398ac18059160ca55c8bb74dfc32bbcf9938bab7a5ab329c70b027f1", + "serve.py": "88bf72ea3eac013dc7678bebe0e3b3053c141e8ec1222a210bd18b2a47601af4", + "validation.py": "f53cca26ddbddbc3c924ff07d32aaf9ced6061a7f1628379b4c0db2c9da7feb1" + }, + "interpreter_sha256": "e925fab5e8f595817ff36ff28e214b91520c040d5b7d47249b0199bc5f68015e", + "installed_distributions": { + "torch": "2.14.0", + "fastapi": "0.141.1", + "uvicorn": "0.54.0", + "psutil": "7.2.2", + "pillow": "12.3.0", + "safetensors": "0.8.0", + "annotated-doc": "0.0.5", + "click": "8.5.0", + "fsspec": "2026.9.0", + "h11": "0.16.0", + "networkx": "3.7", + "pydantic": "2.13.5", + "pydantic-core": "2.46.5", + "annotated-types": "0.8.0", + "setuptools": "84.0.0", + "starlette": "1.7.0", + "anyio": "4.15.1", + "idna": "3.20", + "sympy": "1.14.0", + "mpmath": "1.3.0", + "typing-extensions": "4.16.0", + "typing-inspection": "0.4.4", + "filelock": "4.0.3", + "jinja2": "3.1.6", + "markupsafe": "3.0.3" + }, + "all_installed_distributions": { + "annotated-doc": "0.0.5", + "annotated-types": "0.8.0", + "anyio": "4.15.1", + "click": "8.5.0", + "fastapi": "0.141.1", + "filelock": "4.0.3", + "fsspec": "2026.9.0", + "h11": "0.16.0", + "idna": "3.20", + "jinja2": "3.1.6", + "markupsafe": "3.0.3", + "mpmath": "1.3.0", + "networkx": "3.7", + "pillow": "12.3.0", + "pip": "26.2.1", + "psutil": "7.2.2", + "pydantic": "2.13.5", + "pydantic-core": "2.46.5", + "safetensors": "0.8.0", + "setuptools": "84.0.0", + "starlette": "1.7.0", + "sympy": "1.14.0", + "torch": "2.14.0", + "typing-extensions": "4.16.0", + "typing-inspection": "0.4.4", + "uvicorn": "0.54.0" + }, + "distributions_sha256": "c66d66521194cb6178204da57cb438b4f99243e6068ddd4ef10686ac9cc1bd1d", + "resolution_sha256": "450c8cbeea9b35fa4b0566f351cd2be3c138f7b12058e2dc1f5bcf4d8db66542", + "sidecar_sha256": "88bf72ea3eac013dc7678bebe0e3b3053c141e8ec1222a210bd18b2a47601af4" + }, + "capabilities": { + "torch_import": { + "status": "passed", + "version": "2.14.0" + }, + "cpu_tensor": { + "status": "passed" + }, + "cuda_tensor": { + "status": "unavailable", + "scope": "CUDA tensor operation", + "reason": "CUDA is not available" + }, + "sidecar_app": { + "status": "passed", + "health": { + "status": "ok", + "protocol": 3, + "capabilities": [ + "image_generation" + ] + }, + "scope": "in-process app construction and health endpoint" + }, + "flux2_klein": { + "status": "not selected", + "scope": "optional adapter" + }, + "nunchaku_z_image": { + "status": "not selected", + "scope": "optional adapter" + }, + "image_device": { + "status": "unavailable", + "scope": "adapter device requirement", + "reason": "No NVIDIA sm_120 CUDA device detected" + }, + "sidecar_startup": { + "status": "not tested", + "scope": "socket startup requires an explicit trial" + }, + "image_generation": { + "status": "not tested", + "scope": "no model loaded or inference performed" + } + } +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-current-source-cpu-rpc-restart-acceptance/resolution.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-current-source-cpu-rpc-restart-acceptance/resolution.json new file mode 100644 index 000000000..859f45361 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-current-source-cpu-rpc-restart-acceptance/resolution.json @@ -0,0 +1,163 @@ +{ + "release": "2.14.0", + "torch": "2.14.0", + "build": "cpu", + "adapter": "none", + "python": "3.14", + "interpreter": "/private/var/folders/nj/vtw8zd2j31d1gdrtntc5y4600000gn/T/pumas-torch-native-cpu-phrd_sah/launcher-data/managed-python/python/39ab90495ce6de1a1c2c546c0f0802acaadfb3727d07f042d0a2d1e90c1b66b3/cpython-3.14.7-macos-aarch64-none/bin/python3.14", + "implementation": "cpython", + "platform": "macOS-15.7.9-arm64-64bit", + "machine": "arm64", + "artifacts": [ + { + "name": "torch", + "version": "2.14.0", + "url": "https://download-r2.pytorch.org/whl/cpu/torch-2.14.0-cp314-cp314-macosx_14_0_arm64.whl", + "sha256": "d0f78744000a7863cc3f1eafaf511d4b9944f079f08277de6fefe4b01f4d41b9" + }, + { + "name": "fastapi", + "version": "0.141.1", + "url": "https://files.pythonhosted.org/packages/cb/03/10388a42375ee7e4ac9b94eb2c5c569c8b5795e377e701c9ac3ad63de890/fastapi-0.141.1-py3-none-any.whl", + "sha256": "bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3" + }, + { + "name": "uvicorn", + "version": "0.54.0", + "url": "https://files.pythonhosted.org/packages/38/0c/b54a4fdd7f90a3af8b02ebc9ce6712c2c208b7926a2f7bad95c33ebbe943/uvicorn-0.54.0-py3-none-any.whl", + "sha256": "505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf" + }, + { + "name": "psutil", + "version": "7.2.2", + "url": "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", + "sha256": "1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979" + }, + { + "name": "pillow", + "version": "12.3.0", + "url": "https://files.pythonhosted.org/packages/c7/da/32c752228ae345f489e3a42499d817b6c3996da7e8a3bc7a04fc806b243b/pillow-12.3.0-cp314-cp314-macosx_11_0_arm64.whl", + "sha256": "e158cb00350dc278f3b91551101aa7d12415a66ebf2c91d8d5ac14e56ddd3ad0" + }, + { + "name": "safetensors", + "version": "0.8.0", + "url": "https://files.pythonhosted.org/packages/f5/b1/fa7c600e7dceae12e9606c7578cbc9ff1e1ed55844883ee5c92205e86226/safetensors-0.8.0-cp310-abi3-macosx_11_0_arm64.whl", + "sha256": "c80201d22cbf405b80647a60ada77bba06c8fba2da2743ba1e89cdcc39a81f25" + }, + { + "name": "annotated-doc", + "version": "0.0.5", + "url": "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", + "sha256": "117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101" + }, + { + "name": "click", + "version": "8.5.0", + "url": "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", + "sha256": "255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360" + }, + { + "name": "fsspec", + "version": "2026.9.0", + "url": "https://files.pythonhosted.org/packages/6c/c0/a98505f18594f1bce828bb159cec0fcf9860562f1a2c85913409fc8f3d9e/fsspec-2026.9.0-py3-none-any.whl", + "sha256": "8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f" + }, + { + "name": "h11", + "version": "0.16.0", + "url": "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", + "sha256": "63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86" + }, + { + "name": "networkx", + "version": "3.7", + "url": "https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl", + "sha256": "e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0" + }, + { + "name": "pydantic", + "version": "2.13.5", + "url": "https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl", + "sha256": "346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73" + }, + { + "name": "pydantic-core", + "version": "2.46.5", + "url": "https://files.pythonhosted.org/packages/ae/d5/d8a4eb6d6c7f66b91dd37c576d76e9e60fba900caf5372c17bcf949febc2/pydantic_core-2.46.5-cp314-cp314-macosx_11_0_arm64.whl", + "sha256": "1a353f84de772f423b5ffb11d7ae352fbbef0f446f3c0b0af0f8236d7233606e" + }, + { + "name": "annotated-types", + "version": "0.8.0", + "url": "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", + "sha256": "f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0" + }, + { + "name": "setuptools", + "version": "84.0.0", + "url": "https://files.pythonhosted.org/packages/95/9c/c510029fc6ef33a6275cd2c5d3cecd6613dfd6aa401d57c54f1c18852ccf/setuptools-84.0.0-py3-none-any.whl", + "sha256": "51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670" + }, + { + "name": "starlette", + "version": "1.7.0", + "url": "https://files.pythonhosted.org/packages/4e/d6/1ec1b290f9e0fb067899b61e1d37a30c923068bad260b216dbe37a7d2967/starlette-1.7.0-py3-none-any.whl", + "sha256": "67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e" + }, + { + "name": "anyio", + "version": "4.15.1", + "url": "https://files.pythonhosted.org/packages/12/b8/4bd346e22b28902df4d651910f5242c28d84e4a5c2435ca5c3f797ed7e2e/anyio-4.15.1-py3-none-any.whl", + "sha256": "6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101" + }, + { + "name": "idna", + "version": "3.20", + "url": "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl", + "sha256": "ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c" + }, + { + "name": "sympy", + "version": "1.14.0", + "url": "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", + "sha256": "e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5" + }, + { + "name": "mpmath", + "version": "1.3.0", + "url": "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", + "sha256": "a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c" + }, + { + "name": "typing-extensions", + "version": "4.16.0", + "url": "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", + "sha256": "481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8" + }, + { + "name": "typing-inspection", + "version": "0.4.4", + "url": "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", + "sha256": "65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147" + }, + { + "name": "filelock", + "version": "4.0.3", + "url": "https://files.pythonhosted.org/packages/7a/6d/db8b86e168fef0cf904737e275bccb683558088ef971e92d3b41ce980699/filelock-4.0.3-py3-none-any.whl", + "sha256": "30cd166e2aee2c7534ce2c33c6367c4cd051b8368e20e2c4eb0c34f699bacfab" + }, + { + "name": "jinja2", + "version": "3.1.6", + "url": "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", + "sha256": "85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67" + }, + { + "name": "markupsafe", + "version": "3.0.3", + "url": "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", + "sha256": "c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026" + } + ] +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-current-source-cpu-rpc-restart-acceptance/restart-backend-session.txt b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-current-source-cpu-rpc-restart-acceptance/restart-backend-session.txt new file mode 100644 index 000000000..789c9cda3 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-current-source-cpu-rpc-restart-acceptance/restart-backend-session.txt @@ -0,0 +1,21 @@ +2026-09-26T08:26:08.407956Z  INFO Starting Pumas RPC Server +2026-09-26T08:26:08.408075Z  INFO Launcher root configured +2026-09-26T08:26:08.422643Z  INFO Rebuilding model index +2026-09-26T08:26:08.422827Z  INFO Rebuilt index with 0 models +2026-09-26T08:26:08.443334Z  INFO IPC server listening on 127.0.0.1:49345 +2026-09-26T08:26:08.443991Z  INFO IPC server started on port 49345 +2026-09-26T08:26:08.446253Z  INFO Started watching model library at "/private/var/folders/nj/vtw8zd2j31d1gdrtntc5y4600000gn/T/pumas-torch-native-cpu-phrd_sah/shared-resources/models" +2026-09-26T08:26:08.447795Z  INFO Validation complete: 0 valid, 0 removed, 0 orphaned +2026-09-26T08:26:08.447833Z  INFO ollama version manager initialized successfully +2026-09-26T08:26:08.451644Z  INFO Validation complete: 1 valid, 0 removed, 0 orphaned +2026-09-26T08:26:08.453036Z  INFO torch version manager initialized successfully +2026-09-26T08:26:08.453712Z  INFO Validation complete: 0 valid, 0 removed, 0 orphaned +2026-09-26T08:26:08.453741Z  INFO llama-cpp version manager initialized successfully +2026-09-26T08:26:08.453755Z  INFO Initialized 3 version manager(s) +2026-09-26T08:26:08.453870Z  INFO Size calculator initialized +2026-09-26T08:26:08.454002Z  INFO Plugin loader initialized (0 plugins) +2026-09-26T08:26:08.455332Z  INFO Server listening on 127.0.0.1:49346 with max 64 in-flight requests and 33554432 byte request bodies +RPC_PORT=49346 +2026-09-26T08:26:08.455383Z  INFO RPC server running on 127.0.0.1:49346 +2026-09-26T08:26:12.549559Z  INFO Shutdown signal received, exiting +2026-09-26T08:26:12.550624Z  WARN File watcher channel disconnected diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-current-source-cpu-rpc-restart-acceptance/runtime.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-current-source-cpu-rpc-restart-acceptance/runtime.json new file mode 100644 index 000000000..db8d4eb0c --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-current-source-cpu-rpc-restart-acceptance/runtime.json @@ -0,0 +1,181 @@ +{ + "adapter": "none", + "artifacts": [ + { + "name": "torch", + "sha256": "d0f78744000a7863cc3f1eafaf511d4b9944f079f08277de6fefe4b01f4d41b9", + "url": "https://download-r2.pytorch.org/whl/cpu/torch-2.14.0-cp314-cp314-macosx_14_0_arm64.whl", + "version": "2.14.0" + }, + { + "name": "fastapi", + "sha256": "bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3", + "url": "https://files.pythonhosted.org/packages/cb/03/10388a42375ee7e4ac9b94eb2c5c569c8b5795e377e701c9ac3ad63de890/fastapi-0.141.1-py3-none-any.whl", + "version": "0.141.1" + }, + { + "name": "uvicorn", + "sha256": "505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf", + "url": "https://files.pythonhosted.org/packages/38/0c/b54a4fdd7f90a3af8b02ebc9ce6712c2c208b7926a2f7bad95c33ebbe943/uvicorn-0.54.0-py3-none-any.whl", + "version": "0.54.0" + }, + { + "name": "psutil", + "sha256": "1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979", + "url": "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", + "version": "7.2.2" + }, + { + "name": "pillow", + "sha256": "e158cb00350dc278f3b91551101aa7d12415a66ebf2c91d8d5ac14e56ddd3ad0", + "url": "https://files.pythonhosted.org/packages/c7/da/32c752228ae345f489e3a42499d817b6c3996da7e8a3bc7a04fc806b243b/pillow-12.3.0-cp314-cp314-macosx_11_0_arm64.whl", + "version": "12.3.0" + }, + { + "name": "safetensors", + "sha256": "c80201d22cbf405b80647a60ada77bba06c8fba2da2743ba1e89cdcc39a81f25", + "url": "https://files.pythonhosted.org/packages/f5/b1/fa7c600e7dceae12e9606c7578cbc9ff1e1ed55844883ee5c92205e86226/safetensors-0.8.0-cp310-abi3-macosx_11_0_arm64.whl", + "version": "0.8.0" + }, + { + "name": "annotated-doc", + "sha256": "117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101", + "url": "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", + "version": "0.0.5" + }, + { + "name": "click", + "sha256": "255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360", + "url": "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", + "version": "8.5.0" + }, + { + "name": "fsspec", + "sha256": "8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f", + "url": "https://files.pythonhosted.org/packages/6c/c0/a98505f18594f1bce828bb159cec0fcf9860562f1a2c85913409fc8f3d9e/fsspec-2026.9.0-py3-none-any.whl", + "version": "2026.9.0" + }, + { + "name": "h11", + "sha256": "63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", + "url": "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", + "version": "0.16.0" + }, + { + "name": "networkx", + "sha256": "e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0", + "url": "https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl", + "version": "3.7" + }, + { + "name": "pydantic", + "sha256": "346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73", + "url": "https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl", + "version": "2.13.5" + }, + { + "name": "pydantic-core", + "sha256": "1a353f84de772f423b5ffb11d7ae352fbbef0f446f3c0b0af0f8236d7233606e", + "url": "https://files.pythonhosted.org/packages/ae/d5/d8a4eb6d6c7f66b91dd37c576d76e9e60fba900caf5372c17bcf949febc2/pydantic_core-2.46.5-cp314-cp314-macosx_11_0_arm64.whl", + "version": "2.46.5" + }, + { + "name": "annotated-types", + "sha256": "f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0", + "url": "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", + "version": "0.8.0" + }, + { + "name": "setuptools", + "sha256": "51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670", + "url": "https://files.pythonhosted.org/packages/95/9c/c510029fc6ef33a6275cd2c5d3cecd6613dfd6aa401d57c54f1c18852ccf/setuptools-84.0.0-py3-none-any.whl", + "version": "84.0.0" + }, + { + "name": "starlette", + "sha256": "67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e", + "url": "https://files.pythonhosted.org/packages/4e/d6/1ec1b290f9e0fb067899b61e1d37a30c923068bad260b216dbe37a7d2967/starlette-1.7.0-py3-none-any.whl", + "version": "1.7.0" + }, + { + "name": "anyio", + "sha256": "6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101", + "url": "https://files.pythonhosted.org/packages/12/b8/4bd346e22b28902df4d651910f5242c28d84e4a5c2435ca5c3f797ed7e2e/anyio-4.15.1-py3-none-any.whl", + "version": "4.15.1" + }, + { + "name": "idna", + "sha256": "ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c", + "url": "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl", + "version": "3.20" + }, + { + "name": "sympy", + "sha256": "e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", + "url": "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", + "version": "1.14.0" + }, + { + "name": "mpmath", + "sha256": "a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", + "url": "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", + "version": "1.3.0" + }, + { + "name": "typing-extensions", + "sha256": "481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", + "url": "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", + "version": "4.16.0" + }, + { + "name": "typing-inspection", + "sha256": "65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147", + "url": "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", + "version": "0.4.4" + }, + { + "name": "filelock", + "sha256": "30cd166e2aee2c7534ce2c33c6367c4cd051b8368e20e2c4eb0c34f699bacfab", + "url": "https://files.pythonhosted.org/packages/7a/6d/db8b86e168fef0cf904737e275bccb683558088ef971e92d3b41ce980699/filelock-4.0.3-py3-none-any.whl", + "version": "4.0.3" + }, + { + "name": "jinja2", + "sha256": "85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", + "url": "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", + "version": "3.1.6" + }, + { + "name": "markupsafe", + "sha256": "c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", + "url": "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", + "version": "3.0.3" + } + ], + "build": "cpu", + "capabilities": [ + "image_generation" + ], + "managed_python": { + "distribution": { + "catalogKey": "cpython-3.14.7-macos-aarch64-none", + "implementation": "CPython", + "sourceUrl": "https://releases.astral.sh/github/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-aarch64-apple-darwin-install_only_stripped.tar.gz", + "targetTriple": "aarch64-apple-darwin", + "version": "3.14.7" + }, + "executable": { + "path": "/private/var/folders/nj/vtw8zd2j31d1gdrtntc5y4600000gn/T/pumas-torch-native-cpu-phrd_sah/launcher-data/managed-python/python/39ab90495ce6de1a1c2c546c0f0802acaadfb3727d07f042d0a2d1e90c1b66b3/cpython-3.14.7-macos-aarch64-none/bin/python3.14", + "sha256": "e925fab5e8f595817ff36ff28e214b91520c040d5b7d47249b0199bc5f68015e" + }, + "provider": { + "archiveSha256": "cf40e0c6a202190ccd9e0406dcfdd5b2d6668a9a5c779b17948963df32aafe5b", + "name": "uv", + "version": "0.12.18" + } + }, + "protocol": 3, + "python": "python3.14", + "qualification": "not verified by Pumas", + "recipe_id": "upstream-preview-v2.14.0-cpu-python3.14-none" +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-cpu-rpc-restart-acceptance/README.md b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-cpu-rpc-restart-acceptance/README.md new file mode 100644 index 000000000..822b3f82a --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-cpu-rpc-restart-acceptance/README.md @@ -0,0 +1,32 @@ +# Windows Torch managed-runtime restart acceptance + +Manual native RPC run +[36223106097](https://github.com/MrScripty/Pumas-Library/actions/runs/36223106097) +on commit `07f7e9f6` passed v2.14.0 CPU/Core installation and restart on +`windows-2025` x64. The run discovered the requested release, resolved and +installed the exact official `torch-2.14.0+cpu` CPython 3.14 Windows wheel, and +retained 25 hashed artifacts for the core profile. A second backend reopened +the same launcher root, confirmed the persisted version and managed interpreter, +and ran a fresh CPU tensor operation (`sum([1, 4, 9]) == 14`, Torch +`2.14.0+cpu`, device `cpu`). The RPC probe passed, the protocol 3 sidecar trial +and generation-owned stop passed, and shutdown was graceful. + +The managed runtime used Pumas-provisioned CPython 3.14.7 from uv 0.12.18. The +[acceptance result](acceptance.json) records the target and both-session +identity. [Initial](initial-backend-session.txt) and +[restart](restart-backend-session.txt) backend logs retain the process +lifecycles. [Runtime](runtime.json), [resolution](resolution.json), +[pip resolution](pip-resolution.json), and [probe results](probe-results.json) +retain the exact official Torch wheel URL and SHA-256, all resolved dependency +artifacts, installed profile, and probes. + +The acceptance backend ran with host Python, pip, PyPy, and uv absent from its +`PATH`, using an isolated launcher root under the runner's temporary directory. + +The [full-archive manifest and raw CPython license files](../managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/) +retain hashes for the Windows CPython license set. The selected install-only +archive identity is in `runtime.json` and `acceptance.json`; the manifest +describes a separate full archive. The generated release attribution now +includes this target's full-archive notice superset while keeping the selected +install-only identity separate. This CPU/Core result does not establish +CUDA execution, packaged desktop installation, or Tuldok image generation. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-cpu-rpc-restart-acceptance/acceptance.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-cpu-rpc-restart-acceptance/acceptance.json new file mode 100644 index 000000000..3b31ca171 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-cpu-rpc-restart-acceptance/acceptance.json @@ -0,0 +1,65 @@ +{ + "architecture": "AMD64", + "artifact_count": 25, + "build": "cpu", + "cleanup_safe": true, + "cpython_version": "3.14.7", + "distribution_catalog_key": "cpython-3.14.7-windows-x86_64-none", + "distribution_implementation": "CPython", + "distribution_source_url": "https://releases.astral.sh/github/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-x86_64-pc-windows-msvc-install_only_stripped.tar.gz", + "executable_path": "\\\\?\\C:\\Users\\runneradmin\\AppData\\Local\\Temp\\pumas-torch-native-cpu-d2m_g5ii\\launcher-data\\managed-python\\python\\5dc2484c3bc035e81d37fb9af266e3546b42d2553d222081cd129940f1bbf9b7\\cpython-3.14.7-windows-x86_64-none\\python.exe", + "executable_sha256": "716fbcb56cb6753dd9ea9f7acb3f988e9c4ba65ab492cb32b9bcd0ab81938737", + "platform": "win32", + "probe": "passed", + "provider": "uv", + "provider_archive_sha256": "cae6a3bc25239f83dffb467a4b180508d9da23986c04639ebfa44e43e6a84bff", + "provider_version": "0.12.18", + "python": "python3.14", + "release": "v2.14.0", + "restart": { + "active_version": "v2.14.0", + "cpu_operation": { + "device": "cpu", + "result": 14, + "version": "2.14.0+cpu" + }, + "interpreter": "persisted", + "managed_python": { + "cpython_version": "3.14.7", + "distribution_catalog_key": "cpython-3.14.7-windows-x86_64-none", + "distribution_implementation": "CPython", + "distribution_source_url": "https://releases.astral.sh/github/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-x86_64-pc-windows-msvc-install_only_stripped.tar.gz", + "executable_path": "\\\\?\\C:\\Users\\runneradmin\\AppData\\Local\\Temp\\pumas-torch-native-cpu-d2m_g5ii\\launcher-data\\managed-python\\python\\5dc2484c3bc035e81d37fb9af266e3546b42d2553d222081cd129940f1bbf9b7\\cpython-3.14.7-windows-x86_64-none\\python.exe", + "executable_sha256": "716fbcb56cb6753dd9ea9f7acb3f988e9c4ba65ab492cb32b9bcd0ab81938737", + "provider": "uv", + "provider_archive_sha256": "cae6a3bc25239f83dffb467a4b180508d9da23986c04639ebfa44e43e6a84bff", + "provider_version": "0.12.18", + "target": "x86_64-pc-windows-msvc" + }, + "probe": "passed", + "profile_id": "torch-managed-python-acceptance", + "same_launcher_root": true, + "shutdown": "graceful", + "sidecar_generation": "1", + "sidecar_protocol": 3, + "stop_result": true, + "trial": "passed" + }, + "sidecar_generation": "1", + "sidecar_protocol": 3, + "stop_result": true, + "stopped": true, + "success": true, + "target": "x86_64-pc-windows-msvc", + "trial": "passed", + "version_preflight": { + "attempts": [ + { + "number": 1, + "status": "requested_tag_found" + } + ], + "elapsed_seconds": 1.557, + "status": "passed" + } +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-cpu-rpc-restart-acceptance/initial-backend-session.txt b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-cpu-rpc-restart-acceptance/initial-backend-session.txt new file mode 100644 index 000000000..b8f96cc61 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-cpu-rpc-restart-acceptance/initial-backend-session.txt @@ -0,0 +1,27 @@ +2026-09-26T06:17:54.214327Z  INFO Starting Pumas RPC Server +2026-09-26T06:17:54.214629Z  INFO Launcher root configured +2026-09-26T06:17:54.690112Z  INFO Created FTS5 table: model_search +2026-09-26T06:17:54.705138Z  INFO Populated FTS5 table from models +2026-09-26T06:17:54.705583Z  INFO Rebuilding model index +2026-09-26T06:17:54.706068Z  INFO Rebuilt index with 0 models +2026-09-26T06:17:55.001153Z  INFO IPC server listening on 127.0.0.1:56378 +2026-09-26T06:17:55.002028Z  INFO IPC server started on port 56378 +2026-09-26T06:17:55.002930Z  INFO Started watching model library at "\\\\?\\C:\\Users\\runneradmin\\AppData\\Local\\Temp\\pumas-torch-native-cpu-d2m_g5ii\\shared-resources\\models" +2026-09-26T06:17:55.007120Z  INFO Validation complete: 0 valid, 0 removed, 0 orphaned +2026-09-26T06:17:55.007199Z  INFO ollama version manager initialized successfully +2026-09-26T06:17:55.009667Z  INFO Validation complete: 0 valid, 0 removed, 0 orphaned +2026-09-26T06:17:55.010233Z  INFO torch version manager initialized successfully +2026-09-26T06:17:55.011441Z  INFO Validation complete: 0 valid, 0 removed, 0 orphaned +2026-09-26T06:17:55.011478Z  INFO llama-cpp version manager initialized successfully +2026-09-26T06:17:55.011497Z  INFO Initialized 3 version manager(s) +2026-09-26T06:17:55.011719Z  INFO Size calculator initialized +2026-09-26T06:17:55.012209Z  INFO Plugin loader initialized (0 plugins) +2026-09-26T06:17:55.013548Z  INFO Server listening on 127.0.0.1:56379 with max 64 in-flight requests and 33554432 byte request bodies +RPC_PORT=56379 +2026-09-26T06:17:55.013651Z  INFO RPC server running on 127.0.0.1:56379 +2026-09-26T06:17:56.368138Z  INFO Fetched 69 releases from GitHub for pytorch/pytorch +2026-09-26T06:19:57.097442Z  INFO Finalizing installation for v2.14.0 +2026-09-26T06:19:57.135586Z  INFO Installation of v2.14.0 finalized +2026-09-26T06:20:01.744168Z  INFO Set active version: v2.14.0 +2026-09-26T06:20:05.852614Z  INFO Shutdown signal received, exiting +2026-09-26T06:20:05.853679Z  WARN File watcher channel disconnected diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-cpu-rpc-restart-acceptance/managed-python-licenses/full-archive-manifest.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-cpu-rpc-restart-acceptance/managed-python-licenses/full-archive-manifest.json new file mode 100644 index 000000000..a1bfc5887 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-cpu-rpc-restart-acceptance/managed-python-licenses/full-archive-manifest.json @@ -0,0 +1,114 @@ +{ + "archive_name": "cpython-3.14.7+20260901-x86_64-pc-windows-msvc-pgo-full.tar.zst", + "archive_sha256": "5363ec4aab59c24417f9877217aae95ca17f9ae6eb99c3bbfb25e4a76dcadafe", + "archive_size": 49262780, + "archive_url": "https://github.com/astral-sh/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-x86_64-pc-windows-msvc-pgo-full.tar.zst", + "asset_id": 539917754, + "files": [ + { + "declared": false, + "path": "licenses/LICENSE.bdb.txt", + "sha256": "8f2d533ab34899499d5b07f209854b101b17dba2c69f3251860aecf3e4005faa" + }, + { + "declared": false, + "path": "licenses/LICENSE.bzip2.txt", + "sha256": "bd5628cc76fb0ebf9c657d1dd4d1a240a1a7b216c31663e7bbf1131c0b70a910" + }, + { + "declared": true, + "path": "licenses/LICENSE.cpython.txt", + "sha256": "8fe98bf9822926d854f56ffd8d97877d8b942617aa44eb7ea77fd99e22f2537e" + }, + { + "declared": false, + "path": "licenses/LICENSE.expat.txt", + "sha256": "8a9cfe4b5924f4b25881aa0c9f5e4561c5f31065d0c4a13cdcdbcf917edf39aa" + }, + { + "declared": false, + "path": "licenses/LICENSE.libX11.txt", + "sha256": "f353accfe2976df31ea297a77d1d454bd51ef6be8c3df39bd6aca95901579357" + }, + { + "declared": false, + "path": "licenses/LICENSE.libXau.txt", + "sha256": "cec808cd2163fccdc8de4a91d526490777afbaeea060e1168c40a804694b7444" + }, + { + "declared": false, + "path": "licenses/LICENSE.libedit.txt", + "sha256": "d9932ccdd42eccf6cdded7bcb35b088e64cfc7c24d355af2cc0d02edb6b637d3" + }, + { + "declared": false, + "path": "licenses/LICENSE.libffi.txt", + "sha256": "9afb8970cd29fc1031fa647278e4bef613399e2e3468a1e3a397f4d158c6101c" + }, + { + "declared": false, + "path": "licenses/LICENSE.liblzma.txt", + "sha256": "d87d218dd908b3243ec4cbc72af400e5b7437513ea9d9229291d0812b8464fec" + }, + { + "declared": false, + "path": "licenses/LICENSE.libuuid.txt", + "sha256": "cbccaa3efe07a9a602751375085be572d4410a250b996716fbe8c5255c7ec6f2" + }, + { + "declared": false, + "path": "licenses/LICENSE.libxcb.txt", + "sha256": "29a9539190e6de1af5fd06a9139c7103137cd1f9290b08c7b11bce89c01c14d2" + }, + { + "declared": false, + "path": "licenses/LICENSE.mpdecimal.txt", + "sha256": "f094277cd46e1f6e4d87916cc4b51e22f613d45eb81f48231c3cb7caf8fc8a6a" + }, + { + "declared": false, + "path": "licenses/LICENSE.ncurses.txt", + "sha256": "4f571cad3ea6c888bf0a7092e5b215dddb3142e9e3f1857fd5fac6cf13d345d7" + }, + { + "declared": false, + "path": "licenses/LICENSE.openssl-1.1.txt", + "sha256": "ad89e3fed746413af1d34d5353978ee1520cedd361c853f8022e7bb210ac6b31" + }, + { + "declared": false, + "path": "licenses/LICENSE.openssl-3.txt", + "sha256": "ed72ce2b51ee58f117e5a021e2e04af158857f40269fbc03491f0b2a99dbcc96" + }, + { + "declared": false, + "path": "licenses/LICENSE.sqlite.txt", + "sha256": "d8eb9aba7ef6b5ed06cb3ec19a7242316af2e5933c638eb67fb781c13884e01d" + }, + { + "declared": false, + "path": "licenses/LICENSE.tcl.txt", + "sha256": "41613eabfc08921a7da9c4bfd7f3ce5d5406f55214b253d89f392ed86eebeb8f" + }, + { + "declared": false, + "path": "licenses/LICENSE.tix.txt", + "sha256": "8cdff3addb9e9eb108c78e2cf5e05f26b216c098304945733bbec382b2eaef66" + }, + { + "declared": false, + "path": "licenses/LICENSE.zlib.txt", + "sha256": "365e36720db366054863235aea5d6f440142ab968834bfaf81fa9d187c99b9b8" + } + ], + "mapping_authority": "https://github.com/astral-sh/python-build-standalone/blob/20260901/src/release.rs", + "python_json": { + "path": "PYTHON.json", + "sha256": "621218c8ca0ff0d9a92ba0533a2d460d6832cc277286852800e605e8062ec401", + "size": 68368 + }, + "release_id": 380696527, + "scope": "selected_full_archive_license_directory_and_declared_references", + "source_url": "https://releases.astral.sh/github/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-x86_64-pc-windows-msvc-install_only_stripped.tar.gz", + "target": "x86_64-pc-windows-msvc" +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-cpu-rpc-restart-acceptance/pip-resolution.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-cpu-rpc-restart-acceptance/pip-resolution.json new file mode 100644 index 000000000..f6f0858e7 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-cpu-rpc-restart-acceptance/pip-resolution.json @@ -0,0 +1,2073 @@ +{ + "version": "1", + "pip_version": "26.2.1", + "install": [ + { + "download_info": { + "url": "https://download-r2.pytorch.org/whl/cpu/torch-2.14.0%2Bcpu-cp314-cp314-win_amd64.whl", + "archive_info": { + "hashes": { + "sha256": "ca9b3c2c652587f7b26c86d30be3648f553bd07fb3cf9b3edb645e7eafe295a3" + }, + "hash": "sha256=ca9b3c2c652587f7b26c86d30be3648f553bd07fb3cf9b3edb645e7eafe295a3" + } + }, + "is_direct": true, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.4", + "name": "torch", + "version": "2.14.0+cpu", + "summary": "Tensors and Dynamic neural networks in Python with strong GPU acceleration", + "description": "\n \n \n \"PyTorch\n\n\n--------------------------------------------------------------------------------\n\nPyTorch is a Python package that provides two high-level features:\n- Tensor computation (like NumPy) with strong GPU acceleration\n- Deep neural networks built on a tape-based autograd system\n\nYou can reuse your favorite Python packages such as NumPy, SciPy, and Cython to extend PyTorch when needed.\n\nOur trunk health (Continuous Integration signals) can be found at [hud.pytorch.org](https://hud.pytorch.org/ci/pytorch/pytorch/main).\n\n\n\n- [More About PyTorch](#more-about-pytorch)\n - [A GPU-Ready Tensor Library](#a-gpu-ready-tensor-library)\n - [Dynamic Neural Networks: Tape-Based Autograd](#dynamic-neural-networks-tape-based-autograd)\n - [Python First](#python-first)\n - [Imperative Experiences](#imperative-experiences)\n - [Fast and Lean](#fast-and-lean)\n - [Extensions Without Pain](#extensions-without-pain)\n- [Installation](#installation)\n - [Binaries](#binaries)\n - [NVIDIA Jetson Platforms](#nvidia-jetson-platforms)\n - [From Source](#from-source)\n - [Prerequisites](#prerequisites)\n - [NVIDIA CUDA Support](#nvidia-cuda-support)\n - [AMD ROCm Support](#amd-rocm-support)\n - [Intel GPU Support](#intel-gpu-support)\n - [Get the PyTorch Source](#get-the-pytorch-source)\n - [Install Dependencies](#install-dependencies)\n - [Install PyTorch](#install-pytorch)\n - [Adjust Build Options (Optional)](#adjust-build-options-optional)\n - [Docker Image](#docker-image)\n - [Using pre-built images](#using-pre-built-images)\n - [Building the image yourself](#building-the-image-yourself)\n - [Building the Documentation](#building-the-documentation)\n - [Troubleshooting CI Errors](#troubleshooting-ci-errors)\n - [Building a PDF](#building-a-pdf)\n - [Previous Versions](#previous-versions)\n- [Getting Started](#getting-started)\n- [Resources](#resources)\n- [Communication](#communication)\n- [Releases and Contributing](#releases-and-contributing)\n- [The Team](#the-team)\n- [License](#license)\n\n\n\n## More About PyTorch\n\n[Learn the basics of PyTorch](https://pytorch.org/tutorials/beginner/basics/intro.html)\n\nAt a granular level, PyTorch is a library that consists of the following components:\n\n| Component | Description |\n| ---- | --- |\n| [**torch**](https://pytorch.org/docs/stable/torch.html) | A Tensor library like NumPy, with strong GPU support |\n| [**torch.autograd**](https://pytorch.org/docs/stable/autograd.html) | A tape-based automatic differentiation library that supports all differentiable Tensor operations in torch |\n| [**torch.jit**](https://pytorch.org/docs/stable/jit.html) | A compilation stack (TorchScript) to create serializable and optimizable models from PyTorch code |\n| [**torch.nn**](https://pytorch.org/docs/stable/nn.html) | A neural networks library deeply integrated with autograd designed for maximum flexibility |\n| [**torch.multiprocessing**](https://pytorch.org/docs/stable/multiprocessing.html) | Python multiprocessing, but with magical memory sharing of torch Tensors across processes. Useful for data loading and Hogwild training |\n| [**torch.utils**](https://pytorch.org/docs/stable/data.html) | DataLoader and other utility functions for convenience |\n\nUsually, PyTorch is used either as:\n\n- A replacement for NumPy to use the power of GPUs.\n- A deep learning research platform that provides maximum flexibility and speed.\n\nElaborating Further:\n\n### A GPU-Ready Tensor Library\n\nIf you use NumPy, then you have used Tensors (a.k.a. ndarray).\n\n![Tensor illustration](https://github.com/pytorch/pytorch/raw/main/docs/source/_static/img/tensor_illustration.png)\n\nPyTorch provides Tensors that can live either on the CPU or the GPU and accelerates the\ncomputation by a huge amount.\n\nWe provide a wide variety of tensor routines to accelerate and fit your scientific computation needs\nsuch as slicing, indexing, mathematical operations, linear algebra, reductions.\nAnd they are fast!\n\n### Dynamic Neural Networks: Tape-Based Autograd\n\nPyTorch has a unique way of building neural networks: using and replaying a tape recorder.\n\nMost frameworks such as TensorFlow, Theano, Caffe, and CNTK have a static view of the world.\nOne has to build a neural network and reuse the same structure again and again.\nChanging the way the network behaves means that one has to start from scratch.\n\nWith PyTorch, we use a technique called reverse-mode auto-differentiation, which allows you to\nchange the way your network behaves arbitrarily with zero lag or overhead. Our inspiration comes\nfrom several research papers on this topic, as well as current and past work such as\n[torch-autograd](https://github.com/twitter/torch-autograd),\n[autograd](https://github.com/HIPS/autograd),\n[Chainer](https://chainer.org), etc.\n\nWhile this technique is not unique to PyTorch, it's one of the fastest implementations of it to date.\nYou get the best of speed and flexibility for your crazy research.\n\n![Dynamic graph](https://github.com/pytorch/pytorch/raw/main/docs/source/_static/img/dynamic_graph.gif)\n\n### Python First\n\nPyTorch is not a Python binding into a monolithic C++ framework.\nIt is built to be deeply integrated into Python.\nYou can use it naturally like you would use [NumPy](https://www.numpy.org/) / [SciPy](https://www.scipy.org/) / [scikit-learn](https://scikit-learn.org) etc.\nYou can write your new neural network layers in Python itself, using your favorite libraries\nand use packages such as [Cython](https://cython.org/) and [Numba](https://numba.pydata.org/).\nOur goal is to not reinvent the wheel where appropriate.\n\n### Imperative Experiences\n\nPyTorch is designed to be intuitive, linear in thought, and easy to use.\nWhen you execute a line of code, it gets executed. There isn't an asynchronous view of the world.\nWhen you drop into a debugger or receive error messages and stack traces, understanding them is straightforward.\nThe stack trace points to exactly where your code was defined.\nWe hope you never spend hours debugging your code because of bad stack traces or asynchronous and opaque execution engines.\n\n### Fast and Lean\n\nPyTorch has minimal framework overhead. We integrate acceleration libraries\nsuch as [Intel MKL](https://software.intel.com/mkl) and NVIDIA ([cuDNN](https://developer.nvidia.com/cudnn), [NCCL](https://developer.nvidia.com/nccl)) to maximize speed.\nAt the core, its CPU and GPU Tensor and neural network backends\nare mature and have been tested for years.\n\nHence, PyTorch is quite fast — whether you run small or large neural networks.\n\nThe memory usage in PyTorch is extremely efficient compared to Torch or some of the alternatives.\nWe've written custom memory allocators for the GPU to make sure that\nyour deep learning models are maximally memory efficient.\nThis enables you to train bigger deep learning models than before.\n\n### Extensions Without Pain\n\nWriting new neural network modules, or interfacing with PyTorch's Tensor API, was designed to be straightforward\nand with minimal abstractions.\n\nYou can write new neural network layers in Python using the torch API\n[or your favorite NumPy-based libraries such as SciPy](https://pytorch.org/tutorials/advanced/numpy_extensions_tutorial.html).\n\nIf you want to write your layers in C/C++, we provide a convenient extension API that is efficient and with minimal boilerplate.\nNo wrapper code needs to be written. You can see [a tutorial here](https://pytorch.org/tutorials/advanced/cpp_extension.html) and [an example here](https://github.com/pytorch/extension-cpp).\n\n\n## Installation\n\n### Binaries\nCommands to install binaries via Conda or pip wheels are on our website: [https://pytorch.org/get-started/locally/](https://pytorch.org/get-started/locally/)\n\n\n#### NVIDIA Jetson Platforms\n\nPython wheels for NVIDIA's Jetson Nano, Jetson TX1/TX2, Jetson Xavier NX/AGX, and Jetson AGX Orin are provided [here](https://forums.developer.nvidia.com/t/pytorch-for-jetson-version-1-10-now-available/72048) and the L4T container is published [here](https://catalog.ngc.nvidia.com/orgs/nvidia/containers/l4t-pytorch)\n\nThey require JetPack 4.2 and above, and [@dusty-nv](https://github.com/dusty-nv) and [@ptrblck](https://github.com/ptrblck) are maintaining them.\n\n\n### From Source\n\n#### Prerequisites\nIf you are installing from source, you will need:\n- Python 3.10 or later\n- A compiler that fully supports C++20, such as clang or gcc (gcc 11.3.0 or newer is required, on Linux)\n- Visual Studio or Visual Studio Build Tool (Windows only)\n- At least 10 GB of free disk space\n- 30-60 minutes for the initial build (subsequent rebuilds are much faster)\n\n\\* PyTorch CI uses Visual C++ BuildTools, which come with Visual Studio Enterprise,\nProfessional, or Community Editions. You can also install the build tools from\nhttps://visualstudio.microsoft.com/visual-cpp-build-tools/. The build tools *do not*\ncome with Visual Studio Code by default.\n\nAn example of environment setup is shown below:\n\n* Linux:\n\n```bash\n$ source /bin/activate\n$ conda create -y -n \n$ conda activate \n```\n* Windows:\n\n```bash\n$ source \\Scripts\\activate.bat\n$ conda create -y -n \n$ conda activate \n$ call \"C:\\Program Files\\Microsoft Visual Studio\\\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat\" x64\n```\n\nA conda environment is not required. You can also do a PyTorch build in a\nstandard virtual environment, e.g., created with tools like `uv`, provided\nyour system has installed all the necessary dependencies unavailable as pip\npackages (e.g., CUDA, MKL.)\n\n##### NVIDIA CUDA Support\nIf you want to compile with CUDA support, [select a supported version of CUDA from our support matrix](https://pytorch.org/get-started/locally/), then install the following:\n- [NVIDIA CUDA](https://developer.nvidia.com/cuda-downloads)\n- [NVIDIA cuDNN](https://developer.nvidia.com/cudnn) v9.0 or above\n- [Compiler](https://gist.github.com/ax3l/9489132) compatible with CUDA\n\nNote: You could refer to the [cuDNN Support Matrix](https://docs.nvidia.com/deeplearning/cudnn/backend/latest/reference/support-matrix.html) for cuDNN versions with the various supported CUDA, CUDA driver, and NVIDIA hardware.\n\nIf you want to disable CUDA support, export the environment variable `USE_CUDA=0`.\nOther potentially useful environment variables are documented in `cmake/EnvVarForwarding.cmake`. If\nCUDA is installed in a non-standard location, set PATH so that the nvcc you\nwant to use can be found (e.g., `export PATH=/usr/local/cuda-12.8/bin:$PATH`).\n\nIf you are building for NVIDIA's Jetson platforms (Jetson Nano, TX1, TX2, AGX Xavier), Instructions to install PyTorch for Jetson Nano are [available here](https://devtalk.nvidia.com/default/topic/1049071/jetson-nano/pytorch-for-jetson-nano/)\n\n##### AMD ROCm Support\nIf you want to compile with ROCm support, install\n- [AMD ROCm](https://rocm.docs.amd.com/en/latest/deploy/linux/quick_start.html) 4.0 and above installation\n- ROCm is currently supported only for Linux systems.\n\nBy default the build system expects ROCm to be installed in `/opt/rocm`. If ROCm is installed in a different directory, the `ROCM_PATH` environment variable must be set to the ROCm installation directory. The build system automatically detects the AMD GPU architecture. Optionally, the AMD GPU architecture can be explicitly set with the `PYTORCH_ROCM_ARCH` environment variable [AMD GPU architecture](https://rocm.docs.amd.com/projects/install-on-linux/en/latest/reference/system-requirements.html#supported-gpus)\n\nIf you want to disable ROCm support, export the environment variable `USE_ROCM=0`.\nOther potentially useful environment variables are documented in `cmake/EnvVarForwarding.cmake`.\n\n##### Intel GPU Support\nIf you want to compile with Intel GPU support, follow these\n- [PyTorch Prerequisites for Intel GPUs](https://www.intel.com/content/www/us/en/developer/articles/tool/pytorch-prerequisites-for-intel-gpu.html) instructions.\n- Intel GPU is supported for Linux and Windows.\n\nIf you want to disable Intel GPU support, export the environment variable `USE_XPU=0`.\nOther potentially useful environment variables are documented in `cmake/EnvVarForwarding.cmake`.\n\n#### Get the PyTorch Source\n\n```bash\ngit clone https://github.com/pytorch/pytorch\ncd pytorch\n# if you are updating an existing checkout\ngit submodule sync\ngit submodule update --init --recursive\n```\n\n#### Install Dependencies\n\n**Common**\n\n```bash\n# Run this command from the PyTorch directory after cloning the source code using the “Get the PyTorch Source“ section above\npip install --group dev\n```\n\n**On Linux**\n\n```bash\npip install mkl-static mkl-include\n# CUDA only: Add LAPACK support for the GPU if needed\n# magma installation: run with active conda environment. specify CUDA version to install\n.ci/docker/common/install_magma_conda.sh 12.4\n\n# (optional) If using torch.compile with inductor/triton, install the matching version of triton\n# Run from the pytorch directory after cloning\n# For Intel GPU support, please explicitly `export USE_XPU=1` before running command.\nmake triton\n```\n\n**On Windows**\n\n```bash\npip install mkl-static mkl-include\n# Add these packages if torch.distributed is needed.\n# Distributed package support on Windows is a prototype feature and is subject to changes.\nconda install -c conda-forge libuv=1.51\n```\n\n#### Install PyTorch\n\n**On Linux**\n\nIf you're compiling for AMD ROCm then first run this command:\n\n```bash\n# Only run this if you're compiling for ROCm\npython tools/amd_build/build_amd.py\n```\n\nInstall PyTorch\n\n```bash\n# the CMake prefix for conda environment\nexport CMAKE_PREFIX_PATH=\"${CONDA_PREFIX:-'$(dirname $(which conda))/../'}:${CMAKE_PREFIX_PATH}\"\npython -m pip install --no-build-isolation -v -e .\n\n# the CMake prefix for non-conda environment, e.g. Python venv\n# call following after activating the venv\nexport CMAKE_PREFIX_PATH=\"${VIRTUAL_ENV}:${CMAKE_PREFIX_PATH}\"\n```\n\n**On macOS**\n\n```bash\npython -m pip install --no-build-isolation -v -e .\n```\n\n**On Windows**\n\nIf you want to build legacy python code, please refer to [Building on legacy code and CUDA](https://github.com/pytorch/pytorch/blob/main/CONTRIBUTING.md#building-on-legacy-code-and-cuda)\n\n**CPU-only builds**\n\nIn this mode PyTorch computations will run on your CPU, not your GPU.\n\n```cmd\npython -m pip install --no-build-isolation -v -e .\n```\n\nNote on OpenMP: The desired OpenMP implementation is Intel OpenMP (iomp). In order to link against iomp, you'll need to manually download the library and set up the building environment by tweaking `CMAKE_INCLUDE_PATH` and `LIB`. The instruction [here](https://docs.pytorch.org/docs/main/notes/windows.html#building-from-source) is an example for setting up both MKL and Intel OpenMP. Without these configurations for CMake, Microsoft Visual C OpenMP runtime (vcomp) will be used.\n\n**CUDA based build**\n\nIn this mode PyTorch computations will leverage your GPU via CUDA for faster number crunching\n\n[NVTX](https://docs.nvidia.com/gameworks/content/gameworkslibrary/nvtx/nvidia_tools_extension_library_nvtx.htm) is needed to build PyTorch with CUDA.\nNVTX is a part of CUDA distributive, where it is called \"Nsight Compute\". To install it onto an already installed CUDA run CUDA installation once again and check the corresponding checkbox.\nMake sure that CUDA with Nsight Compute is installed after Visual Studio.\n\nCurrently, VS 2017 / 2019, and Ninja are supported as the generator of CMake. If `ninja.exe` is detected in `PATH`, then Ninja will be used as the default generator, otherwise, it will use VS 2017 / 2019.\n
If Ninja is selected as the generator, the latest MSVC will get selected as the underlying toolchain.\n\nAdditional libraries such as\n[Magma](https://developer.nvidia.com/magma), [oneDNN, a.k.a. MKLDNN or DNNL](https://github.com/oneapi-src/oneDNN), and [Sccache](https://github.com/mozilla/sccache) are often needed. Please refer to the [installation-helper](https://github.com/pytorch/pytorch/tree/main/.ci/pytorch/win-test-helpers/installation-helpers) to install them.\n\nYou can refer to the [build_pytorch.bat](https://github.com/pytorch/pytorch/blob/main/.ci/pytorch/win-test-helpers/build_pytorch.bat) script for some other environment variables configurations\n\n```cmd\ncmd\n\n:: Set the environment variables after you have downloaded and unzipped the mkl package,\n:: else CMake would throw an error as `Could NOT find OpenMP`.\nset CMAKE_INCLUDE_PATH={Your directory}\\mkl\\include\nset LIB={Your directory}\\mkl\\lib;%LIB%\n\n:: Read the content in the previous section carefully before you proceed.\n:: [Optional] If you want to override the underlying toolset used by Ninja and Visual Studio with CUDA, please run the following script block.\n:: \"Visual Studio 2019 Developer Command Prompt\" will be run automatically.\n:: Make sure you have CMake >= 3.12 before you do this when you use the Visual Studio generator.\nset CMAKE_GENERATOR_TOOLSET_VERSION=14.27\nset DISTUTILS_USE_SDK=1\nfor /f \"usebackq tokens=*\" %i in (`\"%ProgramFiles(x86)%\\Microsoft Visual Studio\\Installer\\vswhere.exe\" -version [15^,17^) -products * -latest -property installationPath`) do call \"%i\\VC\\Auxiliary\\Build\\vcvarsall.bat\" x64 -vcvars_ver=%CMAKE_GENERATOR_TOOLSET_VERSION%\n\n:: [Optional] If you want to override the CUDA host compiler\nset CUDAHOSTCXX=C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.27.29110\\bin\\HostX64\\x64\\cl.exe\n\npython -m pip install --no-build-isolation -v -e .\n```\n\n**Intel GPU builds**\n\nIn this mode PyTorch with Intel GPU support will be built.\n\nPlease make sure [the common prerequisites](#prerequisites) as well as [the prerequisites for Intel GPU](#intel-gpu-support) are properly installed and the environment variables are configured prior to starting the build. For build tool support, `Visual Studio 2022` is required.\n\nThen PyTorch can be built with the command:\n\n```cmd\n:: CMD Commands:\n:: Set the CMAKE_PREFIX_PATH to help find corresponding packages\n:: %CONDA_PREFIX% only works after `conda activate custom_env`\n\nif defined CMAKE_PREFIX_PATH (\n set \"CMAKE_PREFIX_PATH=%CONDA_PREFIX%\\Library;%CMAKE_PREFIX_PATH%\"\n) else (\n set \"CMAKE_PREFIX_PATH=%CONDA_PREFIX%\\Library\"\n)\n\npython -m pip install --no-build-isolation -v -e .\n```\n\n##### Adjust Build Options (Optional)\n\nYou can adjust the configuration of CMake variables through environment variables, which the\nbuild forwards to CMake (see [`cmake/EnvVarForwarding.cmake`](./cmake/EnvVarForwarding.cmake) for\nthe full list). For example, pointing the build at a specific Conda prefix, CuDNN, or BLAS:\n\nOn Linux\n\n```bash\nexport CMAKE_PREFIX_PATH=\"${CONDA_PREFIX:-'$(dirname $(which conda))/../'}:${CMAKE_PREFIX_PATH}\"\nspin develop\n```\n\nOn macOS\n\n```bash\nexport CMAKE_PREFIX_PATH=\"${CONDA_PREFIX:-'$(dirname $(which conda))/../'}:${CMAKE_PREFIX_PATH}\"\nMACOSX_DEPLOYMENT_TARGET=11.0 spin develop\n```\n\nAfter a first `spin develop`, you can inspect or adjust the CMake cache interactively with\n`ccmake build` (or `cmake-gui build`) and rebuild with `spin develop`; your edits persist, because\nreconfiguration does not use `--fresh` and environment variables only seed cache entries that are\nnot already set. The corollary: once a variable is in the cache, changing its environment variable\nno longer affects it -- edit the cache directly (or delete `build/CMakeCache.txt`) to change it.\nThe build type and compiler are the exception; the build always re-applies them.\n\n### Docker Image\n\n#### Using pre-built images\n\nYou can also pull a pre-built docker image from Docker Hub and run with docker v23.0+\n\n```bash\ndocker run --gpus all --rm -ti --ipc=host pytorch/pytorch:latest\n```\n\nPlease note that PyTorch uses shared memory to share data between processes, so if torch multiprocessing is used (e.g.\nfor multithreaded data loaders) the default shared memory segment size that container runs with is not enough, and you\nshould increase shared memory size either with `--ipc=host` or `--shm-size` command line options to `nvidia-docker run`.\n\n#### Building the image yourself\n\n**NOTE:** Must be built with a Docker version >= 23.0\n\nThe Dockerfile is supplied to build images with CUDA 12.6 support and cuDNN v9.\nYou can pass `PYTHON_VERSION=x.y` make variable to specify which Python version is to be used by Miniconda, or leave it\nunset to use the default, as the Dockerfile uses system Python.\n\n```bash\nmake -f docker.Makefile\n# images are tagged as docker.io/${your_docker_username}/pytorch\n```\n\nYou can also pass the `CMAKE_VARS=\"...\"` environment variable to specify additional CMake variables to be passed to CMake during the build.\nSee [`cmake/EnvVarForwarding.cmake`](./cmake/EnvVarForwarding.cmake) for the list of available variables.\n\n```bash\nmake -f docker.Makefile\n```\n\n### Building the Documentation\n\nTo build documentation in various formats, you will need [Sphinx](https://www.sphinx-doc.org)\nand the `pytorch_sphinx_theme2`.\n\nBefore you build the documentation locally, ensure `torch` is\ninstalled in your environment. For small fixes, you can install the\nnightly version as described in [Getting Started](https://pytorch.org/get-started/locally/).\n\nFor more complex fixes, such as adding a new module and docstrings for\nthe new module, you might need to install torch [from source](#from-source).\nSee [Docstring Guidelines](https://github.com/pytorch/pytorch/wiki/Docstring-Guidelines)\nfor docstring conventions.\n\n```bash\ncd docs/\npip install -r requirements.txt\nmake html\nmake serve\n```\n\nRun `make` to get a list of all available output formats.\n\nIf you get a katex error run `npm install katex`. If it persists, try\n`npm install -g katex`\n\n> [!NOTE]\n> If you see a numpy incompatibility error, run:\n> ```\n> pip install 'numpy<2'\n> ```\n\n\n#### Troubleshooting CI Errors\nYour build may show errors you didn't have locally - here's how to find the errors relevant to the docs.\n\nIf the build has any errors, you will see something like this on the PR:\n\n\"Monosnap\n\nAny doc-related errors will occur in jobs that include \"doc\" somewhere in the title. It doesn't look like any of these jobs are relevant to our docs.\n\n\nLet's take a look anyway. Click on the job to see the logs:\n\n\"Monosnap\n\nAnd we can be sure that this job does not involve docs.\n\nLooking at this build, we can see these jobs are relevant to our docs - and they didn't have any errors:\n\n\"Check\n\nYou might also see a comment on the PR like this:\n\n\"PR\n\nWe can see that some of these issues are relevant to our docs.\n\nOpen the logs by clicking on the `gh` link:\n\n\"View\n\nAnd here we can see there is a doc-related error:\n\n\"Doc\n\nYou can always find the relevant doc builds by going to the `Checks` tab on your PR, and scrolling down to `pull`.\n\n\"checks\"\n\nYou can either click through or toggle the accordion to see all of the jobs here, where you can see the docs jobs highlighted:\n\n\"jobs\"\n\nIf you click through, you'll see the doc jobs at the bottom, like this:\n\n\"View\n\n\n#### Building a PDF\n\nTo compile a PDF of all PyTorch documentation, ensure you have\n`texlive` and LaTeX installed. On macOS, you can install them using:\n\n```\nbrew install --cask mactex\n```\n\nTo create the PDF:\n\n1. Run:\n\n ```\n make latexpdf\n ```\n\n This will generate the necessary files in the `build/latex` directory.\n\n2. Navigate to this directory and execute:\n\n ```\n make LATEXOPTS=\"-interaction=nonstopmode\"\n ```\n\n This will produce a `pytorch.pdf` with the desired content. Run this\n command one more time so that it generates the correct table\n of contents and index.\n\n> [!NOTE]\n> To view the Table of Contents, switch to the **Table of Contents**\n> view in your PDF viewer.\n\n\n### Previous Versions\n\nInstallation instructions and binaries for previous PyTorch versions may be found\non [our website](https://pytorch.org/get-started/previous-versions).\n\n\n## Getting Started\n\nPointers to get you started:\n- [Tutorials: get you started with understanding and using PyTorch](https://pytorch.org/tutorials/)\n- [Examples: easy to understand PyTorch code across all domains](https://github.com/pytorch/examples)\n- [The API Reference](https://pytorch.org/docs/)\n- [Glossary](https://github.com/pytorch/pytorch/blob/main/GLOSSARY.md)\n\n## Resources\n\n* [PyTorch.org](https://pytorch.org/)\n* [PyTorch Tutorials](https://pytorch.org/tutorials/)\n* [PyTorch Examples](https://github.com/pytorch/examples)\n* [PyTorch Models](https://pytorch.org/hub/)\n* [Intro to Deep Learning with PyTorch from Udacity](https://www.udacity.com/course/deep-learning-pytorch--ud188)\n* [Intro to Machine Learning with PyTorch from Udacity](https://www.udacity.com/course/intro-to-machine-learning-nanodegree--nd229)\n* [Deep Neural Networks with PyTorch from Coursera](https://www.coursera.org/learn/deep-neural-networks-with-pytorch)\n* [PyTorch Twitter](https://twitter.com/PyTorch)\n* [PyTorch Blog](https://pytorch.org/blog/)\n* [PyTorch YouTube](https://www.youtube.com/channel/UCWXI5YeOsh03QvJ59PMaXFw)\n\n## Communication\n* Forums: Discuss implementations, research, etc. https://discuss.pytorch.org\n* GitHub Issues: Bug reports, feature requests, install issues, RFCs, thoughts, etc.\n* Slack: The [PyTorch Slack](https://pytorch.slack.com/) hosts a primary audience of moderate to experienced PyTorch users and developers for general chat, online discussions, collaboration, etc. If you are a beginner looking for help, the primary medium is [PyTorch Forums](https://discuss.pytorch.org). If you need a slack invite, please fill this form: https://goo.gl/forms/PP1AGvNHpSaJP8to1\n* Newsletter: No-noise, a one-way email newsletter with important announcements about PyTorch. You can sign-up here: https://eepurl.com/cbG0rv\n* Facebook Page: Important announcements about PyTorch. https://www.facebook.com/pytorch\n* For brand guidelines, please visit our website at [pytorch.org](https://pytorch.org/)\n\n## Releases and Contributing\n\nTypically, PyTorch has three minor releases a year. Please let us know if you encounter a bug by [filing an issue](https://github.com/pytorch/pytorch/issues).\n\nWe appreciate all contributions. If you are planning to contribute back bug-fixes, please do so without any further discussion.\n\nIf you plan to contribute new features, utility functions, or extensions to the core, please first open an issue and discuss the feature with us.\nSending a PR without discussion might end up resulting in a rejected PR because we might be taking the core in a different direction than you might be aware of.\n\nTo learn more about making a contribution to PyTorch, please see our [Contribution page](CONTRIBUTING.md). For more information about PyTorch releases, see [Release page](RELEASE.md).\n\n## The Team\n\nPyTorch is a community-driven project with several skillful engineers and researchers contributing to it.\n\nPyTorch is currently maintained by [Soumith Chintala](https://soumith.ch), [Gregory Chanan](https://github.com/gchanan), [Dmytro Dzhulgakov](https://github.com/dzhulgakov), [Edward Yang](https://github.com/ezyang), [Alban Desmaison](https://github.com/albanD), [Piotr Bialecki](https://github.com/ptrblck) and [Nikita Shulga](https://github.com/malfet) with major contributions coming from hundreds of talented individuals in various forms and means.\nA non-exhaustive but growing list needs to mention: [Trevor Killeen](https://github.com/killeent), [Sasank Chilamkurthy](https://github.com/chsasank), [Sergey Zagoruyko](https://github.com/szagoruyko), [Adam Lerer](https://github.com/adamlerer), [Francisco Massa](https://github.com/fmassa), [Alykhan Tejani](https://github.com/alykhantejani), [Luca Antiga](https://github.com/lantiga), [Alban Desmaison](https://github.com/albanD), [Andreas Koepf](https://github.com/andreaskoepf), [James Bradbury](https://github.com/jekbradbury), [Zeming Lin](https://github.com/ebetica), [Yuandong Tian](https://github.com/yuandong-tian), [Guillaume Lample](https://github.com/glample), [Marat Dukhan](https://github.com/Maratyszcza), [Natalia Gimelshein](https://github.com/ngimel), [Christian Sarofeen](https://github.com/csarofeen), [Martin Raison](https://github.com/martinraison), [Edward Yang](https://github.com/ezyang), [Zachary Devito](https://github.com/zdevito). \n\nNote: This project is unrelated to [hughperkins/pytorch](https://github.com/hughperkins/pytorch) with the same name. Hugh is a valuable contributor to the Torch community and has helped with many things Torch and PyTorch.\n\n## License\n\nPyTorch has a BSD-style license, as found in the [LICENSE](LICENSE) file.\n", + "description_content_type": "text/markdown", + "keywords": [ + "pytorch", + "machine learning" + ], + "author_email": "PyTorch Team ", + "license_expression": "Apache-2.0 AND Apache-2.0 WITH LLVM-exception AND BSD-2-Clause AND BSD-3-Clause AND BSL-1.0 AND MIT", + "license_file": [ + "LICENSE", + "third_party/aiter/3rdparty/composable_kernel/docs/LICENSE.rst", + "third_party/aiter/3rdparty/composable_kernel/LICENSE", + "third_party/aiter/LICENSE", + "third_party/benchmark/LICENSE", + "third_party/composable_kernel/docs/LICENSE.rst", + "third_party/composable_kernel/LICENSE", + "third_party/cpp-httplib/LICENSE", + "third_party/cpuinfo/deps/clog/LICENSE", + "third_party/cpuinfo/LICENSE", + "third_party/cudnn_frontend/LICENSE.txt", + "third_party/cutlass/LICENSE.txt", + "third_party/cutlass/python/LICENSE.txt", + "third_party/fbgemm/external/composable_kernel/docs/LICENSE.rst", + "third_party/fbgemm/external/composable_kernel/LICENSE", + "third_party/fbgemm/external/cpuinfo/deps/clog/LICENSE", + "third_party/fbgemm/external/cpuinfo/LICENSE", + "third_party/fbgemm/external/cutlass/LICENSE.txt", + "third_party/fbgemm/external/cutlass/python/LICENSE.txt", + "third_party/fbgemm/external/googletest/LICENSE", + "third_party/fbgemm/external/hipify_torch/LICENSE.txt", + "third_party/fbgemm/fbgemm_gpu/docs/src/general/LICENSE.rst", + "third_party/fbgemm/fbgemm_gpu/experimental/hstu/LICENSE", + "third_party/fbgemm/fbgemm_gpu/src/quantize_ops/mx/LICENSE", + "third_party/fbgemm/fbgemm_gpu/test/quantize/mx/LICENSE", + "third_party/fbgemm/LICENSE", + "third_party/flash-attention/csrc/composable_kernel/docs/LICENSE.rst", + "third_party/flash-attention/csrc/composable_kernel/LICENSE", + "third_party/flash-attention/csrc/cutlass/LICENSE.txt", + "third_party/flash-attention/csrc/cutlass/python/LICENSE.txt", + "third_party/flash-attention/flash_attn/cute/LICENSE", + "third_party/flash-attention/LICENSE", + "third_party/flash-attention/third_party/aiter/3rdparty/composable_kernel/docs/LICENSE.rst", + "third_party/flash-attention/third_party/aiter/3rdparty/composable_kernel/LICENSE", + "third_party/flash-attention/third_party/aiter/LICENSE", + "third_party/flatbuffers/dart/LICENSE", + "third_party/flatbuffers/LICENSE", + "third_party/flatbuffers/swift/LICENSE", + "third_party/fmt/LICENSE", + "third_party/FP16/LICENSE", + "third_party/FXdiv/LICENSE", + "third_party/gemmlowp/gemmlowp/LICENSE", + "third_party/gloo/LICENSE", + "third_party/googletest/LICENSE", + "third_party/ideep/LICENSE", + "third_party/ideep/mkl-dnn/LICENSE", + "third_party/ideep/mkl-dnn/third_party/gtest/LICENSE", + "third_party/ideep/mkl-dnn/third_party/opencl/LICENSE", + "third_party/kineto/libkineto/third_party/dynolog_headers/LICENSE", + "third_party/kineto/libkineto/third_party/fmt/LICENSE", + "third_party/kineto/libkineto/third_party/googletest/LICENSE", + "third_party/kineto/LICENSE", + "third_party/llvm-openmp/LICENSE.txt", + "third_party/mimalloc/LICENSE", + "third_party/miniz-3.0.2/LICENSE", + "third_party/mslk/external/composable_kernel/docs/LICENSE.rst", + "third_party/mslk/external/composable_kernel/LICENSE", + "third_party/mslk/external/cutlass/LICENSE.txt", + "third_party/mslk/external/cutlass/python/LICENSE.txt", + "third_party/mslk/external/googletest/LICENSE", + "third_party/mslk/external/hipify_torch/LICENSE.txt", + "third_party/mslk/LICENSE", + "third_party/mslk/mslk/attention/flash_attn/LICENSE", + "third_party/NNPACK/LICENSE", + "third_party/NVTX/docs/LICENSE.txt", + "third_party/NVTX/LICENSE.txt", + "third_party/NVTX/python/LICENSE.txt", + "third_party/NVTX/rust/LICENSE", + "third_party/NVTX/tools/docs/github-markdown-css/LICENSE", + "third_party/onnx/LICENSE", + "third_party/onnx/third_party/pybind11/LICENSE", + "third_party/perfetto/LICENSE", + "third_party/protobuf/LICENSE", + "third_party/protobuf/third_party/benchmark/LICENSE", + "third_party/protobuf/third_party/googletest/googlemock/LICENSE", + "third_party/protobuf/third_party/googletest/googlemock/scripts/generator/LICENSE", + "third_party/protobuf/third_party/googletest/googletest/LICENSE", + "third_party/protobuf/third_party/googletest/LICENSE", + "third_party/protobuf/third_party/utf8_range/LICENSE", + "third_party/psimd/LICENSE", + "third_party/pthreadpool/LICENSE", + "third_party/pybind11/LICENSE", + "third_party/python-peachpy/LICENSE.rst", + "third_party/sleef/LICENSE.txt", + "third_party/tensorpipe/LICENSE.txt", + "third_party/tensorpipe/third_party/googletest/googlemock/LICENSE", + "third_party/tensorpipe/third_party/googletest/googlemock/scripts/generator/LICENSE", + "third_party/tensorpipe/third_party/googletest/googletest/LICENSE", + "third_party/tensorpipe/third_party/googletest/LICENSE", + "third_party/tensorpipe/third_party/libnop/LICENSE", + "third_party/tensorpipe/third_party/libuv/LICENSE", + "third_party/tensorpipe/third_party/pybind11/LICENSE", + "third_party/tensorpipe/third_party/pybind11/tools/clang/LICENSE.txt", + "third_party/VulkanMemoryAllocator/LICENSE.txt", + "third_party/XNNPACK/LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Intended Audience :: Education", + "Intended Audience :: Science/Research", + "Topic :: Scientific/Engineering", + "Topic :: Scientific/Engineering :: Mathematics", + "Topic :: Scientific/Engineering :: Artificial Intelligence", + "Topic :: Software Development", + "Topic :: Software Development :: Libraries", + "Topic :: Software Development :: Libraries :: Python Modules", + "Programming Language :: C++", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15" + ], + "requires_dist": [ + "filelock", + "typing-extensions>=4.10.0", + "setuptools>=77.0.3", + "sympy>=1.13.3", + "networkx>=2.5.1", + "jinja2", + "fsspec>=0.8.5", + "cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.3; platform_system == \"Linux\"", + "cuda-bindings<14,>=13.0.3; platform_system == \"Linux\" and python_version < \"3.15\"", + "nvidia-cudnn-cu13==9.24.0.43; platform_system == \"Linux\"", + "nvidia-cusparselt-cu13==0.8.1; platform_system == \"Linux\"", + "nvidia-nccl-cu13==2.30.7; platform_system == \"Linux\"", + "nvidia-nvshmem-cu13==3.4.5; platform_system == \"Linux\"", + "triton~=3.8.0; platform_system == \"Linux\" and python_version < \"3.15\"", + "optree>=0.13.0; extra == \"optree\"", + "opt-einsum>=3.3; extra == \"opt-einsum\"", + "pyyaml; extra == \"pyyaml\"" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://pytorch.org", + "Repository, https://github.com/pytorch/pytorch", + "Documentation, https://pytorch.org/docs", + "Issue Tracker, https://github.com/pytorch/pytorch/issues", + "Forum, https://discuss.pytorch.org" + ], + "provides_extra": [ + "optree", + "opt-einsum", + "pyyaml" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/cb/03/10388a42375ee7e4ac9b94eb2c5c569c8b5795e377e701c9ac3ad63de890/fastapi-0.141.1-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3" + }, + "hash": "sha256=bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.4", + "name": "fastapi", + "version": "0.141.1", + "summary": "FastAPI framework, high performance, easy to learn, fast to code, ready for production", + "description": "

\n \"FastAPI\"\n

\n

\n FastAPI framework, high performance, easy to learn, fast to code, ready for production\n

\n

\n\n \"Test\"\n\n\n \"Coverage\"\n\n\n \"Package\n\n\n \"Supported\n\n

\n\n---\n\n**Documentation**: [https://fastapi.tiangolo.com](https://fastapi.tiangolo.com)\n\n**Source Code**: [https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi)\n\n---\n\nFastAPI is a modern, fast (high-performance), web framework for building APIs with Python based on standard Python type hints.\n\nThe key features are:\n\n* **Fast**: Very high performance, on par with **NodeJS** and **Go** (thanks to Starlette and Pydantic). [One of the fastest Python frameworks available](#performance).\n* **Fast to code**: Increase the speed to develop features by about 200% to 300%. *\n* **Fewer bugs**: Reduce about 40% of human (developer) induced errors. *\n* **Intuitive**: Great editor support. Completion everywhere. Less time debugging.\n* **Easy**: Designed to be easy to use and learn. Less time reading docs.\n* **Short**: Minimize code duplication. Multiple features from each parameter declaration. Fewer bugs.\n* **Robust**: Get production-ready code. With automatic interactive documentation.\n* **Standards-based**: Based on (and fully compatible with) the open standards for APIs: [OpenAPI](https://github.com/OAI/OpenAPI-Specification) (previously known as Swagger) and [JSON Schema](https://json-schema.org/).\n\n* estimation based on tests conducted by an internal development team, building production applications.\n\n## Sponsors\n\n\n### Keystone Sponsor\n\n\n\n### Gold Sponsors\n\n\n\n\n\n\n\n\n\n\n### Silver Sponsors\n\n\n\n\n\n\n\n\n\n\n[Other sponsors](https://fastapi.tiangolo.com/fastapi-people/#sponsors)\n\n## Opinions\n\n\n\n
\n\n\"_[...] I'm using **FastAPI** a ton these days. [...] I'm actually planning to use it for all of my team's **ML services at Microsoft**. Some of them are getting integrated into the core **Windows** product and some **Office** products._\"\n\n
Kabir Khan - Microsoft (ref)
\n\n---\n\n\"_We adopted the **FastAPI** library to spawn a **REST** server that can be queried to obtain **predictions**. [for Ludwig]_\"\n\n
Piero Molino, Yaroslav Dudin, and Sai Sumanth Miryala - Uber (ref)
\n\n---\n\n\"_**Netflix** is pleased to announce the open-source release of our **crisis management** orchestration framework: **Dispatch**! [built with **FastAPI**]_\"\n\n
Kevin Glisson, Marc Vilanova, Forest Monsen - Netflix (ref)
\n\n---\n\n\"_If anyone is looking to build a production Python API, I would highly recommend **FastAPI**. It is **beautifully designed**, **simple to use** and **highly scalable**, it has become a **key component** in our API first development strategy and is driving many automations and services such as our Virtual TAC Engineer._\"\n\n
Deon Pillsbury - Cisco (ref)
\n\n---\n\n
\n\n## FastAPI Conf\n\n[**FastAPI Conf '26**](https://fastapiconf.com) is happening on **October 28, 2026** in **Amsterdam, NL**. All about FastAPI, right from the source. 🎤\n\n\"FastAPI\n\n## FastAPI mini documentary\n\nThere's a [FastAPI mini documentary](https://www.youtube.com/watch?v=mpR8ngthqiE) released at the end of 2025, you can watch it online:\n\n\"FastAPI\n\n## **Typer**, the FastAPI of CLIs\n\n\n\nIf you are building a CLI app to be used in the terminal instead of a web API, check out [**Typer**](https://typer.tiangolo.com/).\n\n**Typer** is FastAPI's little sibling. And it's intended to be the **FastAPI of CLIs**. ⌨️ 🚀\n\n## Requirements\n\nFastAPI stands on the shoulders of giants:\n\n* [Starlette](https://starlette.dev/) for the web parts.\n* [Pydantic](https://pydantic.dev/docs/) for the data parts.\n\n## Installation\n\nFirst, [install `uv`](https://docs.astral.sh/uv/getting-started/installation/), and then add FastAPI to your project:\n\n
\n\n```console\n$ uv add \"fastapi[standard]\"\n\n---> 100%\n```\n\n
\n\n**Note**: Make sure you put `\"fastapi[standard]\"` in quotes to ensure it works in all terminals.\n\nIf you prefer to use `pip`, install `fastapi[standard]` inside a virtual environment. See the [installation guide](tutorial/#install-fastapi) for the alternative steps.\n\n## Example\n\n### Create it\n\nCreate a file `main.py` with:\n\n```Python\nfrom fastapi import FastAPI\n\napp = FastAPI()\n\n\n@app.get(\"/\")\ndef read_root():\n return {\"Hello\": \"World\"}\n\n\n@app.get(\"/items/{item_id}\")\ndef read_item(item_id: int, q: str | None = None):\n return {\"item_id\": item_id, \"q\": q}\n```\n\n
\nOr use async def...\n\nIf your code uses `async` / `await`, use `async def`:\n\n```Python hl_lines=\"7 12\"\nfrom fastapi import FastAPI\n\napp = FastAPI()\n\n\n@app.get(\"/\")\nasync def read_root():\n return {\"Hello\": \"World\"}\n\n\n@app.get(\"/items/{item_id}\")\nasync def read_item(item_id: int, q: str | None = None):\n return {\"item_id\": item_id, \"q\": q}\n```\n\n**Note**:\n\nIf you don't know, check the _\"In a hurry?\"_ section about [`async` and `await` in the docs](https://fastapi.tiangolo.com/async/#in-a-hurry).\n\n
\n\n### Run it\n\nRun the server with:\n\n
\n\n```console\n$ uv run fastapi dev\n\n ╭────────── FastAPI CLI - Development mode ───────────╮\n │ │\n │ Serving at: http://127.0.0.1:8000 │\n │ │\n │ API docs: http://127.0.0.1:8000/docs │\n │ │\n │ Running in development mode, for production use: │\n │ │\n │ fastapi run │\n │ │\n ╰─────────────────────────────────────────────────────╯\n\nINFO: Will watch for changes in these directories: ['/home/user/code/awesomeapp']\nINFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)\nINFO: Started reloader process [2248755] using WatchFiles\nINFO: Started server process [2248757]\nINFO: Waiting for application startup.\nINFO: Application startup complete.\n```\n\n
\n\n
\nAbout the command fastapi dev...\n\nThe command `fastapi dev` reads your `main.py` file automatically, detects the **FastAPI** app in it, and starts a server using [Uvicorn](https://uvicorn.dev).\n\nBy default, `fastapi dev` will start with auto-reload enabled for local development.\n\nYou can read more about it in the [FastAPI CLI docs](https://fastapi.tiangolo.com/fastapi-cli/).\n\n
\n\n### Check it\n\nOpen your browser at [http://127.0.0.1:8000/items/5?q=somequery](http://127.0.0.1:8000/items/5?q=somequery).\n\nYou will see the JSON response as:\n\n```JSON\n{\"item_id\": 5, \"q\": \"somequery\"}\n```\n\nYou already created an API that:\n\n* Receives HTTP requests in the _paths_ `/` and `/items/{item_id}`.\n* Both _paths_ take `GET` operations (also known as HTTP _methods_).\n* The _path_ `/items/{item_id}` has a _path parameter_ `item_id` that should be an `int`.\n* The _path_ `/items/{item_id}` has an optional `str` _query parameter_ `q`.\n\n### Interactive API docs\n\nNow go to [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs).\n\nYou will see the automatic interactive API documentation (provided by [Swagger UI](https://github.com/swagger-api/swagger-ui)):\n\n![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png)\n\n### Alternative API docs\n\nAnd now, go to [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc).\n\nYou will see the alternative automatic documentation (provided by [ReDoc](https://github.com/Redocly/redoc)):\n\n![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png)\n\n## Example upgrade\n\nNow modify the file `main.py` to receive a body from a `PUT` request.\n\nDeclare the body using standard Python types, thanks to Pydantic.\n\n```Python hl_lines=\"2 7-10 23-25\"\nfrom fastapi import FastAPI\nfrom pydantic import BaseModel\n\napp = FastAPI()\n\n\nclass Item(BaseModel):\n name: str\n price: float\n is_offer: bool | None = None\n\n\n@app.get(\"/\")\ndef read_root():\n return {\"Hello\": \"World\"}\n\n\n@app.get(\"/items/{item_id}\")\ndef read_item(item_id: int, q: str | None = None):\n return {\"item_id\": item_id, \"q\": q}\n\n\n@app.put(\"/items/{item_id}\")\ndef update_item(item_id: int, item: Item):\n return {\"item_name\": item.name, \"item_id\": item_id}\n```\n\nThe `fastapi dev` server should reload automatically.\n\n### Interactive API docs upgrade\n\nNow go to [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs).\n\n* The interactive API documentation will be automatically updated, including the new body:\n\n![Swagger UI](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png)\n\n* Click on the button \"Try it out\", it allows you to fill the parameters and directly interact with the API:\n\n![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-04-swagger-03.png)\n\n* Then click on the \"Execute\" button, the user interface will communicate with your API, send the parameters, get the results and show them on the screen:\n\n![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-05-swagger-04.png)\n\n### Alternative API docs upgrade\n\nAnd now, go to [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc).\n\n* The alternative documentation will also reflect the new query parameter and body:\n\n![ReDoc](https://fastapi.tiangolo.com/img/index/index-06-redoc-02.png)\n\n### Recap\n\nIn summary, you declare **once** the types of parameters, body, etc. as function parameters.\n\nYou do that with standard modern Python types.\n\nYou don't have to learn a new syntax, the methods or classes of a specific library, etc.\n\nJust standard **Python**.\n\nFor example, for an `int`:\n\n```Python\nitem_id: int\n```\n\nor for a more complex `Item` model:\n\n```Python\nitem: Item\n```\n\n...and with that single declaration you get:\n\n* Editor support, including:\n * Completion.\n * Type checks.\n* Validation of data:\n * Automatic and clear errors when the data is invalid.\n * Validation even for deeply nested JSON objects.\n* Conversion of input data: coming from the network to Python data and types. Reading from:\n * JSON.\n * Path parameters.\n * Query parameters.\n * Cookies.\n * Headers.\n * Forms.\n * Files.\n* Conversion of output data: converting from Python data and types to network data (as JSON):\n * Convert Python types (`str`, `int`, `float`, `bool`, `list`, etc).\n * `datetime` objects.\n * `UUID` objects.\n * Database models.\n * ...and many more.\n* Automatic interactive API documentation, including 2 alternative user interfaces:\n * Swagger UI.\n * ReDoc.\n\n---\n\nComing back to the previous code example, **FastAPI** will:\n\n* Validate that there is an `item_id` in the path for `GET` and `PUT` requests.\n* Validate that the `item_id` is of type `int` for `GET` and `PUT` requests.\n * If it is not, the client will see a useful, clear error.\n* Check if there is an optional query parameter named `q` (as in `http://127.0.0.1:8000/items/foo?q=somequery`) for `GET` requests.\n * As the `q` parameter is declared with `= None`, it is optional.\n * Without the `None` it would be required (as is the body in the case with `PUT`).\n* For `PUT` requests to `/items/{item_id}`, read the body as JSON:\n * Check that it has a required attribute `name` that should be a `str`.\n * Check that it has a required attribute `price` that has to be a `float`.\n * Check that it has an optional attribute `is_offer`, that should be a `bool`, if present.\n * All this would also work for deeply nested JSON objects.\n* Convert from and to JSON automatically.\n* Document everything with OpenAPI, that can be used by:\n * Interactive documentation systems.\n * Automatic client code generation systems, for many languages.\n* Provide 2 interactive documentation web interfaces directly.\n\n---\n\nWe just scratched the surface, but you already get the idea of how it all works.\n\nTry changing the line with:\n\n```Python\n return {\"item_name\": item.name, \"item_id\": item_id}\n```\n\n...from:\n\n```Python\n ... \"item_name\": item.name ...\n```\n\n...to:\n\n```Python\n ... \"item_price\": item.price ...\n```\n\n...and see how your editor will auto-complete the attributes and know their types:\n\n![editor support](https://fastapi.tiangolo.com/img/vscode-completion.png)\n\nFor a more complete example including more features, see the Tutorial - User Guide.\n\n**Spoiler alert**: the tutorial - user guide includes:\n\n* Declaration of **parameters** from other different places such as: **headers**, **cookies**, **form fields** and **files**.\n* How to set **validation constraints** such as `maximum_length` or `regex`.\n* A very powerful and easy to use **Dependency Injection** system.\n* Security and authentication, including support for **OAuth2** with **JWT tokens** and **HTTP Basic** auth.\n* More advanced (but equally easy) techniques for declaring **deeply nested JSON models** (thanks to Pydantic).\n* **GraphQL** integration with [Strawberry](https://strawberry.rocks) and other libraries.\n* Many extra features (thanks to Starlette) such as:\n * **WebSockets**\n * extremely easy tests based on HTTPX and `pytest`\n * **CORS**\n * **Cookie Sessions**\n * ...and more.\n\n### Deploy your app (optional)\n\nYou can optionally deploy your FastAPI app to [FastAPI Cloud](https://fastapicloud.com) with a single command. 🚀\n\n
\n\n```console\n$ uv run fastapi deploy\n\nDeploying to FastAPI Cloud...\n\n✅ Deployment successful!\n\n🐔 Ready the chicken! Your app is ready at https://myapp.fastapicloud.dev\n```\n\n
\n\nThe CLI will automatically detect your FastAPI application and deploy it to the cloud. If you are not logged in, your browser will open to complete the authentication process.\n\nThat's it! Now you can access your app at that URL. ✨\n\n#### About FastAPI Cloud\n\n**[FastAPI Cloud](https://fastapicloud.com)** is built by the same author and team behind **FastAPI**.\n\nIt streamlines the process of **building**, **deploying**, and **accessing** an API with minimal effort.\n\nIt brings the same **developer experience** of building apps with FastAPI to **deploying** them to the cloud. 🎉\n\nFastAPI Cloud is the primary sponsor and funding provider for the *FastAPI and friends* open source projects. ✨\n\n#### Deploy to other cloud providers\n\nFastAPI is open source and based on standards. You can deploy FastAPI apps to any cloud provider you choose.\n\nFollow your cloud provider's guides to deploy FastAPI apps with them. 🤓\n\n## Performance\n\nIndependent TechEmpower benchmarks show **FastAPI** applications running under Uvicorn as [one of the fastest Python frameworks available](https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7), only below Starlette and Uvicorn themselves (used internally by FastAPI). (*)\n\nTo understand more about it, see the section [Benchmarks](https://fastapi.tiangolo.com/benchmarks/).\n\n## Dependencies\n\nFastAPI depends on Pydantic and Starlette.\n\n### `standard` Dependencies\n\nWhen you install FastAPI with `uv add \"fastapi[standard]\"` it comes with the `standard` group of optional dependencies:\n\nUsed by Pydantic:\n\n* [`email-validator`](https://github.com/JoshData/python-email-validator) - for email validation.\n\nUsed by Starlette:\n\n* [`httpx`](https://www.python-httpx.org) - Required if you want to use the `TestClient`.\n* [`jinja2`](https://jinja.palletsprojects.com) - Required if you want to use the default template configuration.\n* [`python-multipart`](https://github.com/Kludex/python-multipart) - Required if you want to support form \"parsing\", with `request.form()`.\n\nUsed by FastAPI:\n\n* [`uvicorn`](https://uvicorn.dev) - for the server that loads and serves your application. This includes `uvicorn[standard]`, which includes some dependencies (e.g. `uvloop`) needed for high performance serving.\n* `fastapi-cli[standard]` - to provide the `fastapi` command.\n * This includes `fastapi-cloud-cli`, which allows you to deploy your FastAPI application to [FastAPI Cloud](https://fastapicloud.com).\n\n### Without `standard` Dependencies\n\nIf you don't want to include the `standard` optional dependencies, you can install with `uv add fastapi` instead of `uv add \"fastapi[standard]\"`.\n\n### Without `fastapi-cloud-cli`\n\nIf you want to install FastAPI with the standard dependencies but without the `fastapi-cloud-cli`, you can install with `uv add \"fastapi[standard-no-fastapi-cloud-cli]\"`.\n\n### Additional Optional Dependencies\n\nThere are some additional dependencies you might want to install.\n\nAdditional optional Pydantic dependencies:\n\n* [`pydantic-settings`](https://pydantic.dev/docs/validation/latest/concepts/pydantic_settings/) - for settings management.\n* [`pydantic-extra-types`](https://github.com/pydantic/pydantic-extra-types) - for extra types to be used with Pydantic.\n\nAdditional optional FastAPI dependencies:\n\n* [`orjson`](https://github.com/ijl/orjson) - Required if you want to use `ORJSONResponse`.\n* [`ujson`](https://github.com/ultrajson/ultrajson) - Required if you want to use `UJSONResponse`.\n\n## License\n\nThis project is licensed under the terms of the MIT license.\n", + "description_content_type": "text/markdown", + "author_email": "=?utf-8?q?Sebasti=C3=A1n_Ram=C3=ADrez?= ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Intended Audience :: Information Technology", + "Intended Audience :: System Administrators", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python", + "Topic :: Internet", + "Topic :: Software Development :: Libraries :: Application Frameworks", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Software Development :: Libraries", + "Topic :: Software Development", + "Typing :: Typed", + "Development Status :: 4 - Beta", + "Environment :: Web Environment", + "Framework :: AsyncIO", + "Framework :: FastAPI", + "Framework :: Pydantic", + "Framework :: Pydantic :: 2", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Topic :: Internet :: WWW/HTTP :: HTTP Servers", + "Topic :: Internet :: WWW/HTTP" + ], + "requires_dist": [ + "starlette>=0.46.0", + "pydantic>=2.9.0", + "typing-extensions>=4.8.0", + "typing-inspection>=0.4.2", + "annotated-doc>=0.0.2", + "fastapi-cli[standard]>=0.0.32; extra == \"standard\"", + "fastar>=0.9.0; extra == \"standard\"", + "httpx<1.0.0,>=0.23.0; extra == \"standard\"", + "jinja2>=3.1.5; extra == \"standard\"", + "python-multipart>=0.0.18; extra == \"standard\"", + "email-validator>=2.0.0; extra == \"standard\"", + "uvicorn[standard]>=0.12.0; extra == \"standard\"", + "pydantic-settings>=2.0.0; extra == \"standard\"", + "pydantic-extra-types>=2.0.0; extra == \"standard\"", + "fastapi-cli[standard-no-fastapi-cloud-cli]>=0.0.32; extra == \"standard-no-fastapi-cloud-cli\"", + "httpx<1.0.0,>=0.23.0; extra == \"standard-no-fastapi-cloud-cli\"", + "jinja2>=3.1.5; extra == \"standard-no-fastapi-cloud-cli\"", + "python-multipart>=0.0.18; extra == \"standard-no-fastapi-cloud-cli\"", + "email-validator>=2.0.0; extra == \"standard-no-fastapi-cloud-cli\"", + "uvicorn[standard]>=0.12.0; extra == \"standard-no-fastapi-cloud-cli\"", + "pydantic-settings>=2.0.0; extra == \"standard-no-fastapi-cloud-cli\"", + "pydantic-extra-types>=2.0.0; extra == \"standard-no-fastapi-cloud-cli\"", + "fastapi-cli[standard]>=0.0.32; extra == \"all\"", + "httpx<1.0.0,>=0.23.0; extra == \"all\"", + "jinja2>=3.1.5; extra == \"all\"", + "python-multipart>=0.0.18; extra == \"all\"", + "itsdangerous>=1.1.0; extra == \"all\"", + "pyyaml>=5.3.1; extra == \"all\"", + "email-validator>=2.0.0; extra == \"all\"", + "uvicorn[standard]>=0.12.0; extra == \"all\"", + "pydantic-settings>=2.0.0; extra == \"all\"", + "pydantic-extra-types>=2.0.0; extra == \"all\"" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://github.com/fastapi/fastapi", + "Documentation, https://fastapi.tiangolo.com/", + "Repository, https://github.com/fastapi/fastapi", + "Issues, https://github.com/fastapi/fastapi/issues", + "Changelog, https://fastapi.tiangolo.com/release-notes/" + ], + "provides_extra": [ + "standard", + "standard-no-fastapi-cloud-cli", + "all" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/38/0c/b54a4fdd7f90a3af8b02ebc9ce6712c2c208b7926a2f7bad95c33ebbe943/uvicorn-0.54.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf" + }, + "hash": "sha256=505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.5", + "name": "uvicorn", + "version": "0.54.0", + "summary": "The lightning-fast ASGI server.", + "description": "

\n uvicorn\n

\n\n

\nAn ASGI web server, for Python.\n

\n\n---\n\n[![Build Status](https://github.com/Kludex/uvicorn/workflows/Test%20Suite/badge.svg)](https://github.com/Kludex/uvicorn/actions)\n[![Package version](https://badge.fury.io/py/uvicorn.svg)](https://pypi.python.org/pypi/uvicorn)\n[![Supported Python Version](https://img.shields.io/pypi/pyversions/uvicorn.svg?color=%2334D058)](https://pypi.org/project/uvicorn)\n[![Discord](https://img.shields.io/discord/1051468649518616576?logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2)](https://discord.gg/RxKUF5JuHs)\n\n---\n\n**Documentation**: [https://uvicorn.dev](https://uvicorn.dev)\n\n**Source Code**: [https://www.github.com/Kludex/uvicorn](https://www.github.com/Kludex/uvicorn)\n\n---\n\nUvicorn is an ASGI web server implementation for Python.\n\nUntil recently Python has lacked a minimal low-level server/application interface for\nasync frameworks. The [ASGI specification][asgi] fills this gap, and means we're now able to\nstart building a common set of tooling usable across all async frameworks.\n\nUvicorn currently supports HTTP/1.1, HTTP/2 and WebSockets.\n\n## Quickstart\n\nInstall using `pip`:\n\n```shell\n$ pip install uvicorn\n```\n\nThis will install uvicorn with minimal (pure Python) dependencies.\n\n```shell\n$ pip install 'uvicorn[standard]'\n```\n\nThis will install uvicorn with \"Cython-based\" dependencies (where possible) and other \"optional extras\".\n\nIn this context, \"Cython-based\" means the following:\n\n- the event loop `uvloop` will be installed and used if possible.\n- the http protocol will be handled by `httptools` if possible.\n\nMoreover, \"optional extras\" means that:\n\n- the websocket protocol will be handled by `websockets` (should you want to use `wsproto` you'd need to install it manually) if possible.\n- the `--reload` flag in development mode will use `watchfiles`.\n- `python-dotenv` will be installed should you want to use the `--env-file` option.\n- `PyYAML` will be installed to allow you to provide a `.yaml` file to `--log-config`, if desired.\n\nCreate an application, in `example.py`:\n\n```python\nasync def app(scope, receive, send):\n assert scope['type'] == 'http'\n\n await send({\n 'type': 'http.response.start',\n 'status': 200,\n 'headers': [\n (b'content-type', b'text/plain'),\n ],\n })\n await send({\n 'type': 'http.response.body',\n 'body': b'Hello, world!',\n })\n```\n\nRun the server:\n\n```shell\n$ uvicorn example:app\n```\n\n---\n\n## Why ASGI?\n\nMost well established Python Web frameworks started out as WSGI-based frameworks.\n\nWSGI applications are a single, synchronous callable that takes a request and returns a response.\nThis doesn’t allow for long-lived connections, like you get with long-poll HTTP or WebSocket connections,\nwhich WSGI doesn't support well.\n\nHaving an async concurrency model also allows for options such as lightweight background tasks,\nand can be less of a limiting factor for endpoints that have long periods being blocked on network\nI/O such as dealing with slow HTTP requests.\n\n---\n\n## Alternative ASGI servers\n\nA strength of the ASGI protocol is that it decouples the server implementation\nfrom the application framework. This allows for an ecosystem of interoperating\nwebservers and application frameworks.\n\n### Daphne\n\nThe first ASGI server implementation, originally developed to power Django Channels, is [the Daphne webserver][daphne].\n\nIt is run widely in production, and supports HTTP/1.1, HTTP/2, and WebSockets.\n\nAny of the example applications given here can equally well be run using `daphne` instead.\n\n```\n$ pip install daphne\n$ daphne app:App\n```\n\n### Hypercorn\n\n[Hypercorn][hypercorn] was initially part of the Quart web framework, before\nbeing separated out into a standalone ASGI server.\n\nHypercorn supports HTTP/1.1, HTTP/2, and WebSockets.\n\nIt also supports [the excellent `trio` async framework][trio], as an alternative to `asyncio`.\n\n```\n$ pip install hypercorn\n$ hypercorn app:App\n```\n\n### Mangum\n\n[Mangum][mangum] is an adapter for using ASGI applications with AWS Lambda & API Gateway.\n\n### Granian\n\n[Granian][granian] is an ASGI compatible Rust HTTP server which supports HTTP/2, TLS and WebSockets.\n\n---\n\n

Uvicorn is BSD licensed code.
Designed & crafted with care.

— 🦄 —

\n\n[asgi]: https://asgi.readthedocs.io/en/latest/\n[daphne]: https://github.com/django/daphne\n[hypercorn]: https://github.com/pgjones/hypercorn\n[trio]: https://trio.readthedocs.io\n[mangum]: https://github.com/jordaneremieff/mangum\n[granian]: https://github.com/emmett-framework/granian\n", + "description_content_type": "text/markdown", + "author_email": "Tom Christie ", + "maintainer_email": "Marcelo Trylesinski ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.md" + ], + "classifier": [ + "Development Status :: 4 - Beta", + "Environment :: Web Environment", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Internet :: WWW/HTTP" + ], + "requires_dist": [ + "click>=7.0", + "h11>=0.8", + "typing-extensions>=4.0; python_version < '3.11'", + "httptools>=0.8.0; extra == 'standard'", + "python-dotenv>=0.13; extra == 'standard'", + "pyyaml>=5.1; extra == 'standard'", + "uvloop>=0.15.1; (sys_platform != 'win32' and (sys_platform != 'cygwin' and platform_python_implementation != 'PyPy')) and extra == 'standard'", + "watchfiles>=0.20; extra == 'standard'", + "websockets>=13.0; extra == 'standard'" + ], + "requires_python": ">=3.10", + "project_url": [ + "Changelog, https://uvicorn.dev/release-notes", + "Funding, https://github.com/sponsors/Kludex", + "Homepage, https://uvicorn.dev/", + "Source, https://github.com/Kludex/uvicorn" + ], + "provides_extra": [ + "standard" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl", + "archive_info": { + "hashes": { + "sha256": "eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988" + }, + "hash": "sha256=eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "psutil", + "version": "7.2.2", + "platform": [ + "Platform Independent" + ], + "summary": "Cross-platform lib for process and system monitoring.", + "description": "| |downloads| |stars| |forks| |contributors| |packages|\n| |version| |license| |stackoverflow| |twitter| |tidelift|\n| |github-actions-wheels| |github-actions-bsd|\n\n.. |downloads| image:: https://img.shields.io/pypi/dm/psutil.svg\n :target: https://clickpy.clickhouse.com/dashboard/psutil\n :alt: Downloads\n\n.. |stars| image:: https://img.shields.io/github/stars/giampaolo/psutil.svg\n :target: https://github.com/giampaolo/psutil/stargazers\n :alt: Github stars\n\n.. |forks| image:: https://img.shields.io/github/forks/giampaolo/psutil.svg\n :target: https://github.com/giampaolo/psutil/network/members\n :alt: Github forks\n\n.. |contributors| image:: https://img.shields.io/github/contributors/giampaolo/psutil.svg\n :target: https://github.com/giampaolo/psutil/graphs/contributors\n :alt: Contributors\n\n.. |stackoverflow| image:: https://img.shields.io/badge/stackoverflow-Ask%20questions-blue.svg\n :target: https://stackoverflow.com/questions/tagged/psutil\n :alt: Stackoverflow\n\n.. |github-actions-wheels| image:: https://img.shields.io/github/actions/workflow/status/giampaolo/psutil/.github/workflows/build.yml.svg?label=Linux%2C%20macOS%2C%20Windows\n :target: https://github.com/giampaolo/psutil/actions?query=workflow%3Abuild\n :alt: Linux, macOS, Windows\n\n.. |github-actions-bsd| image:: https://img.shields.io/github/actions/workflow/status/giampaolo/psutil/.github/workflows/bsd.yml.svg?label=FreeBSD,%20NetBSD,%20OpenBSD\n :target: https://github.com/giampaolo/psutil/actions?query=workflow%3Absd-tests\n :alt: FreeBSD, NetBSD, OpenBSD\n\n.. |version| image:: https://img.shields.io/pypi/v/psutil.svg?label=pypi\n :target: https://pypi.org/project/psutil\n :alt: Latest version\n\n.. |packages| image:: https://repology.org/badge/tiny-repos/python:psutil.svg\n :target: https://repology.org/metapackage/python:psutil/versions\n :alt: Binary packages\n\n.. |license| image:: https://img.shields.io/pypi/l/psutil.svg\n :target: https://github.com/giampaolo/psutil/blob/master/LICENSE\n :alt: License\n\n.. |twitter| image:: https://img.shields.io/twitter/follow/grodola?style=flat\n :target: https://twitter.com/grodola\n :alt: Twitter Follow\n\n.. |tidelift| image:: https://tidelift.com/badges/github/giampaolo/psutil?style=flat\n :target: https://tidelift.com/subscription/pkg/pypi-psutil?utm_source=pypi-psutil&utm_medium=referral&utm_campaign=readme\n :alt: Tidelift\n\n-----\n\nQuick links\n===========\n\n- `Home page `_\n- `Install `_\n- `Documentation `_\n- `Download `_\n- `Forum `_\n- `StackOverflow `_\n- `Blog `_\n- `What's new `_\n\n\nSummary\n=======\n\npsutil (process and system utilities) is a cross-platform library for\nretrieving information on **running processes** and **system utilization**\n(CPU, memory, disks, network, sensors) in Python.\nIt is useful mainly for **system monitoring**, **profiling and limiting process\nresources** and **management of running processes**.\nIt implements many functionalities offered by classic UNIX command line tools\nsuch as *ps, top, iotop, lsof, netstat, ifconfig, free* and others.\npsutil currently supports the following platforms:\n\n- **Linux**\n- **Windows**\n- **macOS**\n- **FreeBSD, OpenBSD**, **NetBSD**\n- **Sun Solaris**\n- **AIX**\n\nSupported Python versions are cPython 3.6+ and `PyPy `__.\nLatest psutil version supporting Python 2.7 is\n`psutil 6.1.1 `__.\n\nExample usages\n==============\n\nThis represents pretty much the whole psutil API.\n\nCPU\n---\n\n.. code-block:: python\n\n >>> import psutil\n >>>\n >>> psutil.cpu_times()\n scputimes(user=3961.46, nice=169.729, system=2150.659, idle=16900.540, iowait=629.59, irq=0.0, softirq=19.42, steal=0.0, guest=0, guest_nice=0.0)\n >>>\n >>> for x in range(3):\n ... psutil.cpu_percent(interval=1)\n ...\n 4.0\n 5.9\n 3.8\n >>>\n >>> for x in range(3):\n ... psutil.cpu_percent(interval=1, percpu=True)\n ...\n [4.0, 6.9, 3.7, 9.2]\n [7.0, 8.5, 2.4, 2.1]\n [1.2, 9.0, 9.9, 7.2]\n >>>\n >>> for x in range(3):\n ... psutil.cpu_times_percent(interval=1, percpu=False)\n ...\n scputimes(user=1.5, nice=0.0, system=0.5, idle=96.5, iowait=1.5, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)\n scputimes(user=1.0, nice=0.0, system=0.0, idle=99.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)\n scputimes(user=2.0, nice=0.0, system=0.0, idle=98.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)\n >>>\n >>> psutil.cpu_count()\n 4\n >>> psutil.cpu_count(logical=False)\n 2\n >>>\n >>> psutil.cpu_stats()\n scpustats(ctx_switches=20455687, interrupts=6598984, soft_interrupts=2134212, syscalls=0)\n >>>\n >>> psutil.cpu_freq()\n scpufreq(current=931.42925, min=800.0, max=3500.0)\n >>>\n >>> psutil.getloadavg() # also on Windows (emulated)\n (3.14, 3.89, 4.67)\n\nMemory\n------\n\n.. code-block:: python\n\n >>> psutil.virtual_memory()\n svmem(total=10367352832, available=6472179712, percent=37.6, used=8186245120, free=2181107712, active=4748992512, inactive=2758115328, buffers=790724608, cached=3500347392, shared=787554304)\n >>> psutil.swap_memory()\n sswap(total=2097147904, used=296128512, free=1801019392, percent=14.1, sin=304193536, sout=677842944)\n >>>\n\nDisks\n-----\n\n.. code-block:: python\n\n >>> psutil.disk_partitions()\n [sdiskpart(device='/dev/sda1', mountpoint='/', fstype='ext4', opts='rw,nosuid'),\n sdiskpart(device='/dev/sda2', mountpoint='/home', fstype='ext', opts='rw')]\n >>>\n >>> psutil.disk_usage('/')\n sdiskusage(total=21378641920, used=4809781248, free=15482871808, percent=22.5)\n >>>\n >>> psutil.disk_io_counters(perdisk=False)\n sdiskio(read_count=719566, write_count=1082197, read_bytes=18626220032, write_bytes=24081764352, read_time=5023392, write_time=63199568, read_merged_count=619166, write_merged_count=812396, busy_time=4523412)\n >>>\n\nNetwork\n-------\n\n.. code-block:: python\n\n >>> psutil.net_io_counters(pernic=True)\n {'eth0': netio(bytes_sent=485291293, bytes_recv=6004858642, packets_sent=3251564, packets_recv=4787798, errin=0, errout=0, dropin=0, dropout=0),\n 'lo': netio(bytes_sent=2838627, bytes_recv=2838627, packets_sent=30567, packets_recv=30567, errin=0, errout=0, dropin=0, dropout=0)}\n >>>\n >>> psutil.net_connections(kind='tcp')\n [sconn(fd=115, family=, type=, laddr=addr(ip='10.0.0.1', port=48776), raddr=addr(ip='93.186.135.91', port=80), status='ESTABLISHED', pid=1254),\n sconn(fd=117, family=, type=, laddr=addr(ip='10.0.0.1', port=43761), raddr=addr(ip='72.14.234.100', port=80), status='CLOSING', pid=2987),\n ...]\n >>>\n >>> psutil.net_if_addrs()\n {'lo': [snicaddr(family=, address='127.0.0.1', netmask='255.0.0.0', broadcast='127.0.0.1', ptp=None),\n snicaddr(family=, address='::1', netmask='ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', broadcast=None, ptp=None),\n snicaddr(family=, address='00:00:00:00:00:00', netmask=None, broadcast='00:00:00:00:00:00', ptp=None)],\n 'wlan0': [snicaddr(family=, address='192.168.1.3', netmask='255.255.255.0', broadcast='192.168.1.255', ptp=None),\n snicaddr(family=, address='fe80::c685:8ff:fe45:641%wlan0', netmask='ffff:ffff:ffff:ffff::', broadcast=None, ptp=None),\n snicaddr(family=, address='c4:85:08:45:06:41', netmask=None, broadcast='ff:ff:ff:ff:ff:ff', ptp=None)]}\n >>>\n >>> psutil.net_if_stats()\n {'lo': snicstats(isup=True, duplex=, speed=0, mtu=65536, flags='up,loopback,running'),\n 'wlan0': snicstats(isup=True, duplex=, speed=100, mtu=1500, flags='up,broadcast,running,multicast')}\n >>>\n\nSensors\n-------\n\n.. code-block:: python\n\n >>> import psutil\n >>> psutil.sensors_temperatures()\n {'acpitz': [shwtemp(label='', current=47.0, high=103.0, critical=103.0)],\n 'asus': [shwtemp(label='', current=47.0, high=None, critical=None)],\n 'coretemp': [shwtemp(label='Physical id 0', current=52.0, high=100.0, critical=100.0),\n shwtemp(label='Core 0', current=45.0, high=100.0, critical=100.0)]}\n >>>\n >>> psutil.sensors_fans()\n {'asus': [sfan(label='cpu_fan', current=3200)]}\n >>>\n >>> psutil.sensors_battery()\n sbattery(percent=93, secsleft=16628, power_plugged=False)\n >>>\n\nOther system info\n-----------------\n\n.. code-block:: python\n\n >>> import psutil\n >>> psutil.users()\n [suser(name='giampaolo', terminal='pts/2', host='localhost', started=1340737536.0, pid=1352),\n suser(name='giampaolo', terminal='pts/3', host='localhost', started=1340737792.0, pid=1788)]\n >>>\n >>> psutil.boot_time()\n 1365519115.0\n >>>\n\nProcess management\n------------------\n\n.. code-block:: python\n\n >>> import psutil\n >>> psutil.pids()\n [1, 2, 3, 4, 5, 6, 7, 46, 48, 50, 51, 178, 182, 222, 223, 224, 268, 1215,\n 1216, 1220, 1221, 1243, 1244, 1301, 1601, 2237, 2355, 2637, 2774, 3932,\n 4176, 4177, 4185, 4187, 4189, 4225, 4243, 4245, 4263, 4282, 4306, 4311,\n 4312, 4313, 4314, 4337, 4339, 4357, 4358, 4363, 4383, 4395, 4408, 4433,\n 4443, 4445, 4446, 5167, 5234, 5235, 5252, 5318, 5424, 5644, 6987, 7054,\n 7055, 7071]\n >>>\n >>> p = psutil.Process(7055)\n >>> p\n psutil.Process(pid=7055, name='python3', status='running', started='09:04:44')\n >>> p.pid\n 7055\n >>> p.name()\n 'python3'\n >>> p.exe()\n '/usr/bin/python3'\n >>> p.cwd()\n '/home/giampaolo'\n >>> p.cmdline()\n ['/usr/bin/python3', 'main.py']\n >>>\n >>> p.ppid()\n 7054\n >>> p.parent()\n psutil.Process(pid=4699, name='bash', status='sleeping', started='09:06:44')\n >>> p.parents()\n [psutil.Process(pid=4699, name='bash', started='09:06:44'),\n psutil.Process(pid=4689, name='gnome-terminal-server', status='sleeping', started='0:06:44'),\n psutil.Process(pid=1, name='systemd', status='sleeping', started='05:56:55')]\n >>> p.children(recursive=True)\n [psutil.Process(pid=29835, name='python3', status='sleeping', started='11:45:38'),\n psutil.Process(pid=29836, name='python3', status='waking', started='11:43:39')]\n >>>\n >>> p.status()\n 'running'\n >>> p.create_time()\n 1267551141.5019531\n >>> p.terminal()\n '/dev/pts/0'\n >>>\n >>> p.username()\n 'giampaolo'\n >>> p.uids()\n puids(real=1000, effective=1000, saved=1000)\n >>> p.gids()\n pgids(real=1000, effective=1000, saved=1000)\n >>>\n >>> p.cpu_times()\n pcputimes(user=1.02, system=0.31, children_user=0.32, children_system=0.1, iowait=0.0)\n >>> p.cpu_percent(interval=1.0)\n 12.1\n >>> p.cpu_affinity()\n [0, 1, 2, 3]\n >>> p.cpu_affinity([0, 1]) # set\n >>> p.cpu_num()\n 1\n >>>\n >>> p.memory_info()\n pmem(rss=10915840, vms=67608576, shared=3313664, text=2310144, lib=0, data=7262208, dirty=0)\n >>> p.memory_full_info() # \"real\" USS memory usage (Linux, macOS, Win only)\n pfullmem(rss=10199040, vms=52133888, shared=3887104, text=2867200, lib=0, data=5967872, dirty=0, uss=6545408, pss=6872064, swap=0)\n >>> p.memory_percent()\n 0.7823\n >>> p.memory_maps()\n [pmmap_grouped(path='/lib/x8664-linux-gnu/libutil-2.15.so', rss=32768, size=2125824, pss=32768, shared_clean=0, shared_dirty=0, private_clean=20480, private_dirty=12288, referenced=32768, anonymous=12288, swap=0),\n pmmap_grouped(path='/lib/x8664-linux-gnu/libc-2.15.so', rss=3821568, size=3842048, pss=3821568, shared_clean=0, shared_dirty=0, private_clean=0, private_dirty=3821568, referenced=3575808, anonymous=3821568, swap=0),\n pmmap_grouped(path='[heap]', rss=32768, size=139264, pss=32768, shared_clean=0, shared_dirty=0, private_clean=0, private_dirty=32768, referenced=32768, anonymous=32768, swap=0),\n pmmap_grouped(path='[stack]', rss=2465792, size=2494464, pss=2465792, shared_clean=0, shared_dirty=0, private_clean=0, private_dirty=2465792, referenced=2277376, anonymous=2465792, swap=0),\n ...]\n >>>\n >>> p.io_counters()\n pio(read_count=478001, write_count=59371, read_bytes=700416, write_bytes=69632, read_chars=456232, write_chars=517543)\n >>>\n >>> p.open_files()\n [popenfile(path='/home/giampaolo/monit.py', fd=3, position=0, mode='r', flags=32768),\n popenfile(path='/var/log/monit.log', fd=4, position=235542, mode='a', flags=33793)]\n >>>\n >>> p.net_connections(kind='tcp')\n [pconn(fd=115, family=, type=, laddr=addr(ip='10.0.0.1', port=48776), raddr=addr(ip='93.186.135.91', port=80), status='ESTABLISHED'),\n pconn(fd=117, family=, type=, laddr=addr(ip='10.0.0.1', port=43761), raddr=addr(ip='72.14.234.100', port=80), status='CLOSING')]\n >>>\n >>> p.threads()\n [pthread(id=5234, user_time=22.5, system_time=9.2891),\n pthread(id=5237, user_time=0.0707, system_time=1.1)]\n >>>\n >>> p.num_threads()\n 4\n >>> p.num_fds()\n 8\n >>> p.num_ctx_switches()\n pctxsw(voluntary=78, involuntary=19)\n >>>\n >>> p.nice()\n 0\n >>> p.nice(10) # set\n >>>\n >>> p.ionice(psutil.IOPRIO_CLASS_IDLE) # IO priority (Win and Linux only)\n >>> p.ionice()\n pionice(ioclass=, value=0)\n >>>\n >>> p.rlimit(psutil.RLIMIT_NOFILE, (5, 5)) # set resource limits (Linux only)\n >>> p.rlimit(psutil.RLIMIT_NOFILE)\n (5, 5)\n >>>\n >>> p.environ()\n {'LC_PAPER': 'it_IT.UTF-8', 'SHELL': '/bin/bash', 'GREP_OPTIONS': '--color=auto',\n 'XDG_CONFIG_DIRS': '/etc/xdg/xdg-ubuntu:/usr/share/upstart/xdg:/etc/xdg',\n ...}\n >>>\n >>> p.as_dict()\n {'status': 'running', 'num_ctx_switches': pctxsw(voluntary=63, involuntary=1), 'pid': 5457, ...}\n >>> p.is_running()\n True\n >>> p.suspend()\n >>> p.resume()\n >>>\n >>> p.terminate()\n >>> p.kill()\n >>> p.wait(timeout=3)\n \n >>>\n >>> psutil.test()\n USER PID %CPU %MEM VSZ RSS TTY START TIME COMMAND\n root 1 0.0 0.0 24584 2240 Jun17 00:00 init\n root 2 0.0 0.0 0 0 Jun17 00:00 kthreadd\n ...\n giampaolo 31475 0.0 0.0 20760 3024 /dev/pts/0 Jun19 00:00 python2.4\n giampaolo 31721 0.0 2.2 773060 181896 00:04 10:30 chrome\n root 31763 0.0 0.0 0 0 00:05 00:00 kworker/0:1\n >>>\n\nFurther process APIs\n--------------------\n\n.. code-block:: python\n\n >>> import psutil\n >>> for proc in psutil.process_iter(['pid', 'name']):\n ... print(proc.info)\n ...\n {'pid': 1, 'name': 'systemd'}\n {'pid': 2, 'name': 'kthreadd'}\n {'pid': 3, 'name': 'ksoftirqd/0'}\n ...\n >>>\n >>> psutil.pid_exists(3)\n True\n >>>\n >>> def on_terminate(proc):\n ... print(\"process {} terminated\".format(proc))\n ...\n >>> # waits for multiple processes to terminate\n >>> gone, alive = psutil.wait_procs(procs_list, timeout=3, callback=on_terminate)\n >>>\n\nHeap info\n---------\n\n.. code-block:: python\n\n >>> import psutil\n >>> psutil.heap_info()\n pheap(heap_used=5177792, mmap_used=819200)\n >>> psutil.heap_trim()\n\nSee also `psleak `__\n\nWindows services\n----------------\n\n.. code-block:: python\n\n >>> list(psutil.win_service_iter())\n [,\n ,\n ,\n ,\n ...]\n >>> s = psutil.win_service_get('alg')\n >>> s.as_dict()\n {'binpath': 'C:\\\\Windows\\\\System32\\\\alg.exe',\n 'description': 'Provides support for 3rd party protocol plug-ins for Internet Connection Sharing',\n 'display_name': 'Application Layer Gateway Service',\n 'name': 'alg',\n 'pid': None,\n 'start_type': 'manual',\n 'status': 'stopped',\n 'username': 'NT AUTHORITY\\\\LocalService'}\n\nProjects using psutil\n=====================\n\nHere's some I find particularly interesting:\n\n- https://github.com/giampaolo/psleak\n- https://github.com/google/grr\n- https://github.com/facebook/osquery/\n- https://github.com/nicolargo/glances\n- https://github.com/aristocratos/bpytop\n- https://github.com/Jahaja/psdash\n- https://github.com/ajenti/ajenti\n- https://github.com/home-assistant/home-assistant/\n\nPortings\n========\n\n- Go: https://github.com/shirou/gopsutil\n- C: https://github.com/hamon-in/cpslib\n- Rust: https://github.com/rust-psutil/rust-psutil\n- Nim: https://github.com/johnscillieri/psutil-nim\n\n\n\n", + "description_content_type": "text/x-rst", + "keywords": [ + "ps", + "top", + "kill", + "free", + "lsof", + "netstat", + "nice", + "tty", + "ionice", + "uptime", + "taskmgr", + "process", + "df", + "iotop", + "iostat", + "ifconfig", + "taskset", + "who", + "pidof", + "pmap", + "smem", + "pstree", + "monitoring", + "ulimit", + "prlimit", + "smem", + "performance", + "metrics", + "agent", + "observability" + ], + "home_page": "https://github.com/giampaolo/psutil", + "author": "Giampaolo Rodola", + "author_email": "g.rodola@gmail.com", + "license": "BSD-3-Clause", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Environment :: Console", + "Intended Audience :: Developers", + "Intended Audience :: Information Technology", + "Intended Audience :: System Administrators", + "Operating System :: MacOS :: MacOS X", + "Operating System :: Microsoft :: Windows :: Windows 10", + "Operating System :: Microsoft :: Windows :: Windows 11", + "Operating System :: Microsoft :: Windows :: Windows 7", + "Operating System :: Microsoft :: Windows :: Windows 8", + "Operating System :: Microsoft :: Windows :: Windows 8.1", + "Operating System :: Microsoft :: Windows :: Windows Server 2003", + "Operating System :: Microsoft :: Windows :: Windows Server 2008", + "Operating System :: Microsoft :: Windows :: Windows Vista", + "Operating System :: Microsoft :: Windows", + "Operating System :: Microsoft", + "Operating System :: OS Independent", + "Operating System :: POSIX :: AIX", + "Operating System :: POSIX :: BSD :: FreeBSD", + "Operating System :: POSIX :: BSD :: NetBSD", + "Operating System :: POSIX :: BSD :: OpenBSD", + "Operating System :: POSIX :: BSD", + "Operating System :: POSIX :: Linux", + "Operating System :: POSIX :: SunOS/Solaris", + "Operating System :: POSIX", + "Programming Language :: C", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Programming Language :: Python", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Software Development :: Libraries", + "Topic :: System :: Benchmark", + "Topic :: System :: Hardware", + "Topic :: System :: Monitoring", + "Topic :: System :: Networking :: Monitoring :: Hardware Watchdog", + "Topic :: System :: Networking :: Monitoring", + "Topic :: System :: Networking", + "Topic :: System :: Operating System", + "Topic :: System :: Systems Administration", + "Topic :: Utilities" + ], + "requires_dist": [ + "psleak ; extra == 'dev'", + "pytest ; extra == 'dev'", + "pytest-instafail ; extra == 'dev'", + "pytest-xdist ; extra == 'dev'", + "setuptools ; extra == 'dev'", + "abi3audit ; extra == 'dev'", + "black ; extra == 'dev'", + "check-manifest ; extra == 'dev'", + "coverage ; extra == 'dev'", + "packaging ; extra == 'dev'", + "pylint ; extra == 'dev'", + "pyperf ; extra == 'dev'", + "pypinfo ; extra == 'dev'", + "pytest-cov ; extra == 'dev'", + "requests ; extra == 'dev'", + "rstcheck ; extra == 'dev'", + "ruff ; extra == 'dev'", + "sphinx ; extra == 'dev'", + "sphinx-rtd-theme ; extra == 'dev'", + "toml-sort ; extra == 'dev'", + "twine ; extra == 'dev'", + "validate-pyproject[all] ; extra == 'dev'", + "virtualenv ; extra == 'dev'", + "vulture ; extra == 'dev'", + "wheel ; extra == 'dev'", + "colorama ; (os_name == \"nt\") and extra == 'dev'", + "pyreadline3 ; (os_name == \"nt\") and extra == 'dev'", + "pywin32 ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'dev'", + "wheel ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'dev'", + "wmi ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'dev'", + "psleak ; extra == 'test'", + "pytest ; extra == 'test'", + "pytest-instafail ; extra == 'test'", + "pytest-xdist ; extra == 'test'", + "setuptools ; extra == 'test'", + "pywin32 ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'test'", + "wheel ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'test'", + "wmi ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'test'" + ], + "requires_python": ">=3.6", + "provides_extra": [ + "dev", + "test" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/f1/e0/492879f69d94f91f60fc8cd05ba03650e9520afebb2fb7aa12777d7c7f38/pillow-12.3.0-cp314-cp314-win_amd64.whl", + "archive_info": { + "hashes": { + "sha256": "fdafc9cce40277e0f7a0feabce0ee50dd2fa1800f3b38015e51296b5e814048d" + }, + "hash": "sha256=fdafc9cce40277e0f7a0feabce0ee50dd2fa1800f3b38015e51296b5e814048d" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.4", + "name": "pillow", + "version": "12.3.0", + "dynamic": [ + "license-file" + ], + "summary": "Python Imaging Library (fork)", + "description": "

\n \"Pillow\n

\n\n# Pillow\n\n## Python Imaging Library (Fork)\n\nPillow is the friendly PIL fork by [Jeffrey 'Alex' Clark and\ncontributors](https://github.com/python-pillow/Pillow/graphs/contributors).\nPIL is the Python Imaging Library by Fredrik Lundh and contributors.\nDevelopment is supported by:\n- [Tidelift](https://tidelift.com/subscription/pkg/pypi-pillow?utm_source=pypi-pillow&utm_medium=readme&utm_campaign=enterprise) (since 2018)\n- [Thanks.dev](https://thanks.dev) (since 2023)\n- [GitHub Sponsors](https://github.com/sponsors/python-pillow) (since 2026)\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
docs\n \n
tests\n \n \n \n \n \n \n \n \n
package\n \n \n \n \n \n
social\n \n \n
\n\n## Overview\n\nThe Python Imaging Library adds image processing capabilities to your Python interpreter.\n\nThis library provides extensive file format support, an efficient internal representation, and fairly powerful image processing capabilities.\n\nThe core image library is designed for fast access to data stored in a few basic pixel formats. It should provide a solid foundation for a general image processing tool.\n\n## More information\n\n- [Documentation](https://pillow.readthedocs.io/)\n - [Installation](https://pillow.readthedocs.io/en/latest/installation/basic-installation.html)\n - [Handbook](https://pillow.readthedocs.io/en/latest/handbook/index.html)\n- [Contribute](https://github.com/python-pillow/Pillow/blob/main/.github/CONTRIBUTING.md)\n - [Issues](https://github.com/python-pillow/Pillow/issues)\n - [Pull requests](https://github.com/python-pillow/Pillow/pulls)\n- [Release notes](https://pillow.readthedocs.io/en/stable/releasenotes/index.html)\n- [Changelog](https://github.com/python-pillow/Pillow/releases)\n - [Pre-fork](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst#pre-fork)\n\n## Report a vulnerability\n\nTo report sensitive vulnerability information, report it [privately on GitHub](https://github.com/python-pillow/Pillow/security/advisories/new).\n\nIf you cannot use GitHub, use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure.\n\nDO NOT report sensitive vulnerability information in public.\n", + "description_content_type": "text/markdown", + "keywords": [ + "Imaging" + ], + "author_email": "Jeffrey 'Alex' Clark ", + "license_expression": "MIT-CMU", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 6 - Mature", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Multimedia :: Graphics", + "Topic :: Multimedia :: Graphics :: Capture :: Digital Camera", + "Topic :: Multimedia :: Graphics :: Capture :: Screen Capture", + "Topic :: Multimedia :: Graphics :: Graphics Conversion", + "Topic :: Multimedia :: Graphics :: Viewers", + "Typing :: Typed" + ], + "requires_dist": [ + "furo; extra == \"docs\"", + "olefile; extra == \"docs\"", + "sphinx>=8.2; extra == \"docs\"", + "sphinx-autobuild; extra == \"docs\"", + "sphinx-copybutton; extra == \"docs\"", + "sphinx-inline-tabs; extra == \"docs\"", + "sphinxext-opengraph; extra == \"docs\"", + "olefile; extra == \"fpx\"", + "olefile; extra == \"mic\"", + "arro3-compute; extra == \"test-arrow\"", + "arro3-core; extra == \"test-arrow\"", + "nanoarrow; extra == \"test-arrow\"", + "pyarrow; extra == \"test-arrow\"", + "coverage>=7.4.2; extra == \"tests\"", + "defusedxml; extra == \"tests\"", + "markdown2; extra == \"tests\"", + "olefile; extra == \"tests\"", + "packaging; extra == \"tests\"", + "pytest; extra == \"tests\"", + "pytest-cov; extra == \"tests\"", + "pytest-timeout; extra == \"tests\"", + "pytest-xdist; extra == \"tests\"", + "setuptools; extra == \"tests\"", + "trove-classifiers>=2024.10.12; extra == \"tests\"", + "defusedxml; extra == \"xmp\"" + ], + "requires_python": ">=3.10", + "project_url": [ + "Release notes, https://pillow.readthedocs.io/en/stable/releasenotes/index.html", + "Changelog, https://github.com/python-pillow/Pillow/releases", + "Documentation, https://pillow.readthedocs.io", + "Funding, https://tidelift.com/subscription/pkg/pypi-pillow?utm_source=pypi-pillow&utm_medium=pypi", + "Homepage, https://python-pillow.github.io", + "Mastodon, https://fosstodon.org/@pillow", + "Source, https://github.com/python-pillow/Pillow" + ], + "provides_extra": [ + "docs", + "fpx", + "mic", + "test-arrow", + "tests", + "xmp" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/1b/6d/3fba214c1e5e0f69991677ec3bc17023f0421776975e1de0c682dca475e2/safetensors-0.8.0-cp310-abi3-win_amd64.whl", + "archive_info": { + "hashes": { + "sha256": "096ec1a98435df7beb08853bb5aa9081a84f23d0adc67ed1a0a10550f608373f" + }, + "hash": "sha256=096ec1a98435df7beb08853bb5aa9081a84f23d0adc67ed1a0a10550f608373f" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.4", + "name": "safetensors", + "version": "0.8.0", + "description": "## Installation\n\n```\npip install safetensors\n```\n\n\n## Usage\n\n### Numpy\n\n```python\nfrom safetensors.numpy import save_file, load_file\nimport numpy as np\n\ntensors = {\n \"a\": np.zeros((2, 2)),\n \"b\": np.zeros((2, 3), dtype=np.uint8)\n}\n\nsave_file(tensors, \"./model.safetensors\")\n\n\n# Now loading\nloaded = load_file(\"./model.safetensors\")\n```\n\n### Torch\n\n```python\nfrom safetensors.torch import save_file, load_file\nimport torch\n\ntensors = {\n \"a\": torch.zeros((2, 2)),\n \"b\": torch.zeros((2, 3), dtype=torch.uint8)\n}\n\nsave_file(tensors, \"./model.safetensors\")\n\n\n# Now loading\nloaded = load_file(\"./model.safetensors\")\n```\n\n### Developing\n\n```\n# inside ./safetensors/bindings/python\npip install .[dev]\n```\nShould be enough to install this library locally.\n\n### Testing\n\n```\n# inside ./safetensors/bindings/python\npip install .[dev]\npytest -sv tests/\n```\n\n", + "description_content_type": "text/markdown; charset=UTF-8; variant=GFM", + "author_email": "Nicolas Patry , Luc Georges , Daniël De Kok ", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Intended Audience :: Education", + "Intended Audience :: Science/Research", + "License :: OSI Approved :: Apache Software License", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Topic :: Scientific/Engineering :: Artificial Intelligence", + "Typing :: Typed" + ], + "requires_dist": [ + "safetensors[torch] ; extra == 'all'", + "safetensors[numpy] ; extra == 'all'", + "safetensors[jax] ; extra == 'all'", + "safetensors[paddlepaddle] ; extra == 'all'", + "safetensors[convert] ; extra == 'all'", + "safetensors[quality] ; extra == 'all'", + "safetensors[testing] ; extra == 'all'", + "safetensors[torch] ; extra == 'convert'", + "huggingface-hub>=1.4 ; extra == 'convert'", + "safetensors[all] ; extra == 'dev'", + "safetensors[pinned-tf] ; extra == 'dev'", + "safetensors[numpy] ; extra == 'jax'", + "flax>=0.6.3 ; extra == 'jax'", + "jax>=0.3.25 ; extra == 'jax'", + "jaxlib>=0.3.25 ; extra == 'jax'", + "mlx>=0.0.9 ; extra == 'mlx'", + "numpy>=1.24.6 ; extra == 'numpy'", + "safetensors[numpy] ; extra == 'paddlepaddle'", + "paddlepaddle>=2.4.1 ; extra == 'paddlepaddle'", + "safetensors[numpy] ; extra == 'pinned-tf'", + "tensorflow==2.18.0 ; extra == 'pinned-tf'", + "ruff ; extra == 'quality'", + "safetensors[numpy] ; extra == 'tensorflow'", + "tensorflow>=2.11.0 ; extra == 'tensorflow'", + "safetensors[numpy] ; extra == 'testing'", + "h5py>=3.7.0 ; extra == 'testing'", + "setuptools-rust>=1.12.0 ; extra == 'testing'", + "pytest>=9.0 ; extra == 'testing'", + "pytest-benchmark>=5.2 ; extra == 'testing'", + "hypothesis>=6.70.2 ; extra == 'testing'", + "fsspec>=2024.6.0 ; extra == 'testing'", + "s3fs>=2024.6.0 ; extra == 'testing'", + "safetensors[numpy] ; extra == 'tf-nightly'", + "tf-nightly ; extra == 'tf-nightly'", + "safetensors[numpy] ; extra == 'torch'", + "torch>=2.4 ; extra == 'torch'" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://github.com/huggingface/safetensors", + "Source, https://github.com/huggingface/safetensors" + ], + "provides_extra": [ + "all", + "convert", + "dev", + "jax", + "mlx", + "numpy", + "paddlepaddle", + "pinned-tf", + "quality", + "tensorflow", + "testing", + "tf-nightly", + "torch" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101" + }, + "hash": "sha256=117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "annotated-doc", + "version": "0.0.5", + "summary": "Document parameters, class attributes, return types, and variables inline, with Annotated.", + "description": "# Annotated Doc\n\nDocument parameters, class attributes, return types, and variables inline, with `Annotated`.\n\n\n \"Test\"\n\n\n \"Coverage\"\n\n\n \"Package\n\n\n \"Supported\n\n\n## Installation\n\n```bash\npip install annotated-doc\n```\n\nOr with `uv`:\n\n```Python\nuv add annotated-doc\n```\n\n## Usage\n\nImport `Doc` and pass a single literal string with the documentation for the specific parameter, class attribute, return type, or variable.\n\nFor example, to document a parameter `name` in a function `hi` you could do:\n\n```Python\nfrom typing import Annotated\n\nfrom annotated_doc import Doc\n\ndef hi(name: Annotated[str, Doc(\"Who to say hi to\")]) -> None:\n print(f\"Hi, {name}!\")\n```\n\nYou can also use it to document class attributes:\n\n```Python\nfrom typing import Annotated\n\nfrom annotated_doc import Doc\n\nclass User:\n name: Annotated[str, Doc(\"The user's name\")]\n age: Annotated[int, Doc(\"The user's age\")]\n```\n\nThe same way, you could document return types and variables, or anything that could have a type annotation with `Annotated`.\n\n## Who Uses This\n\n`annotated-doc` was made for:\n\n* [FastAPI](https://fastapi.tiangolo.com/)\n* [Typer](https://typer.tiangolo.com/)\n* [SQLModel](https://sqlmodel.tiangolo.com/)\n* [Asyncer](https://asyncer.tiangolo.com/)\n\n`annotated-doc` is supported by [griffe-typingdoc](https://github.com/mkdocstrings/griffe-typingdoc), which powers reference documentation like the one in the [FastAPI Reference](https://fastapi.tiangolo.com/reference/).\n\n## Reasons not to use `annotated-doc`\n\nYou are already comfortable with one of the existing docstring formats, like:\n\n* Sphinx\n* numpydoc\n* Google\n* Keras\n\nYour team is already comfortable using them.\n\nYou prefer having the documentation about parameters all together in a docstring, separated from the code defining them.\n\nYou care about a specific set of users, using one specific editor, and that editor already has support for the specific docstring format you use.\n\n## Reasons to use `annotated-doc`\n\n* No micro-syntax to learn for newcomers, it’s **just Python** syntax.\n* **Editing** would be already fully supported by default by any editor (current or future) supporting Python syntax, including syntax errors, syntax highlighting, etc.\n* **Rendering** would be relatively straightforward to implement by static tools (tools that don't need runtime execution), as the information can be extracted from the AST they normally already create.\n* **Deduplication of information**: the name of a parameter would be defined in a single place, not duplicated inside of a docstring.\n* **Elimination** of the possibility of having **inconsistencies** when removing a parameter or class variable and **forgetting to remove** its documentation.\n* **Minimization** of the probability of adding a new parameter or class variable and **forgetting to add its documentation**.\n* **Elimination** of the possibility of having **inconsistencies** between the **name** of a parameter in the **signature** and the name in the docstring when it is renamed.\n* **Access** to the documentation string for each symbol at **runtime**, including existing (older) Python versions.\n* A more formalized way to document other symbols, like type aliases, that could use Annotated.\n* **Support** for apps using FastAPI, Typer and others.\n* **AI Accessibility**: AI tools will have an easier way understanding each parameter as the distance from documentation to parameter is much closer.\n\n## History\n\nI ([@tiangolo](https://github.com/tiangolo)) originally wanted for this to be part of the Python standard library (in [PEP 727](https://peps.python.org/pep-0727/)), but the proposal was withdrawn as there was a fair amount of negative feedback and opposition.\n\nThe conclusion was that this was better done as an external effort, in a third-party library.\n\nSo, here it is, with a simpler approach, as a third-party library, in a way that can be used by others, starting with FastAPI and friends.\n\n## License\n\nThis project is licensed under the terms of the MIT license.\n", + "description_content_type": "text/markdown", + "author_email": "=?utf-8?q?Sebasti=C3=A1n_Ram=C3=ADrez?= ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Intended Audience :: Information Technology", + "Intended Audience :: System Administrators", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python", + "Topic :: Internet", + "Topic :: Software Development :: Libraries :: Application Frameworks", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Software Development :: Libraries", + "Topic :: Software Development", + "Typing :: Typed", + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14" + ], + "requires_python": ">=3.9", + "project_url": [ + "Homepage, https://github.com/fastapi/annotated-doc", + "Documentation, https://github.com/fastapi/annotated-doc", + "Repository, https://github.com/fastapi/annotated-doc", + "Issues, https://github.com/fastapi/annotated-doc/issues", + "Changelog, https://github.com/fastapi/annotated-doc/release-notes.md" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360" + }, + "hash": "sha256=255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "click", + "version": "8.5.0", + "summary": "Composable command line interface toolkit", + "description": "
\"\"
\n\n# Click\n\nClick is a Python package for creating beautiful command line interfaces\nin a composable way with as little code as necessary. It's the \"Command\nLine Interface Creation Kit\". It's highly configurable but comes with\nsensible defaults out of the box.\n\nIt aims to make the process of writing command line tools quick and fun\nwhile also preventing any frustration caused by the inability to\nimplement an intended CLI API.\n\nClick in three points:\n\n- Arbitrary nesting of commands\n- Automatic help page generation\n- Supports lazy loading of subcommands at runtime\n\n\n## A Simple Example\n\n```python\nimport click\n\n@click.command()\n@click.option(\"--count\", default=1, help=\"Number of greetings.\")\n@click.option(\"--name\", prompt=\"Your name\", help=\"The person to greet.\")\ndef hello(count, name):\n \"\"\"Simple program that greets NAME for a total of COUNT times.\"\"\"\n for _ in range(count):\n click.echo(f\"Hello, {name}!\")\n\nif __name__ == '__main__':\n hello()\n```\n\n```\n$ python hello.py --count=3\nYour name: Click\nHello, Click!\nHello, Click!\nHello, Click!\n```\n\n\n## Donate\n\nThe Pallets organization develops and supports Click and other popular\npackages. In order to grow the community of contributors and users, and\nallow the maintainers to devote more time to the projects, [please\ndonate today][].\n\n[please donate today]: https://palletsprojects.com/donate\n\n## Contributing\n\nSee our [detailed contributing documentation][contrib] for many ways to\ncontribute, including reporting issues, requesting features, asking or answering\nquestions, and making PRs.\n\n[contrib]: https://palletsprojects.com/contributing/\n\n", + "description_content_type": "text/markdown", + "maintainer_email": "Pallets ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.txt" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Typing :: Typed" + ], + "requires_python": ">=3.10", + "project_url": [ + "Changes, https://click.palletsprojects.com/page/changes/", + "Chat, https://discord.gg/pallets", + "Documentation, https://click.palletsprojects.com/", + "Donate, https://palletsprojects.com/donate", + "Source, https://github.com/pallets/click/" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/6c/c0/a98505f18594f1bce828bb159cec0fcf9860562f1a2c85913409fc8f3d9e/fsspec-2026.9.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f" + }, + "hash": "sha256=8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "fsspec", + "version": "2026.9.0", + "summary": "File-system specification", + "description": "# filesystem_spec\n\n[![PyPI version](https://badge.fury.io/py/fsspec.svg)](https://pypi.python.org/pypi/fsspec/)\n[![Anaconda-Server Badge](https://anaconda.org/conda-forge/fsspec/badges/version.svg)](https://anaconda.org/conda-forge/fsspec)\n![Build](https://github.com/fsspec/filesystem_spec/workflows/CI/badge.svg)\n[![Docs](https://readthedocs.org/projects/filesystem-spec/badge/?version=latest)](https://filesystem-spec.readthedocs.io/en/latest/?badge=latest)\n\nA specification for pythonic filesystems.\n\n## Install\n\n```bash\npip install fsspec\n```\n\nwould install the base fsspec. Various optionally supported features might require specification of custom\nextra require, e.g. `pip install fsspec[ssh]` will install dependencies for `ssh` backends support.\nUse `pip install fsspec[full]` for installation of all known extra dependencies.\n\nUp-to-date package also provided through conda-forge distribution:\n\n```bash\nconda install -c conda-forge fsspec\n```\n\n\n## Purpose\n\nTo produce a template or specification for a file-system interface, that specific implementations should follow,\nso that applications making use of them can rely on a common behaviour and not have to worry about the specific\ninternal implementation decisions with any given backend. Many such implementations are included in this package,\nor in sister projects such as `s3fs` and `gcsfs`.\n\nIn addition, if this is well-designed, then additional functionality, such as a key-value store or FUSE\nmounting of the file-system implementation may be available for all implementations \"for free\".\n\n## Documentation\n\nPlease refer to [RTD](https://filesystem-spec.readthedocs.io/en/latest/?badge=latest)\n\n## Develop\n\nfsspec uses GitHub Actions for CI. Environment files can be found\nin the \"ci/\" directory. Note that the main environment is called \"py38\",\nbut it is expected that the version of python installed be adjustable at\nCI runtime. For local use, pick a version suitable for you.\n\n```bash\n# For a new environment (mamba / conda).\nmamba create -n fsspec -c conda-forge python=3.10 -y\nconda activate fsspec\n\n# Standard dev install with docs and tests.\npip install -e \".[dev,doc,test]\"\n\n# Full tests except for downstream\npip install s3fs\npip uninstall s3fs\npip install -e .[dev,doc,test_full]\npip install s3fs --no-deps\npytest -v\n\n# Downstream tests.\nsh install_s3fs.sh\n# Windows powershell.\ninstall_s3fs.sh\n```\n\n### Testing\n\nTests can be run in the dev environment, if activated, via ``pytest fsspec``.\n\nThe full fsspec suite requires a system-level docker, docker-compose, and fuse\ninstallation. If only making changes to one backend implementation, it is\nnot generally necessary to run all tests locally.\n\nIt is expected that contributors ensure that any change to fsspec does not\ncause issues or regressions for either other fsspec-related packages such\nas gcsfs and s3fs, nor for downstream users of fsspec. The \"downstream\" CI\nrun and corresponding environment file run a set of tests from the dask\ntest suite, and very minimal tests against pandas and zarr from the\ntest_downstream.py module in this repo.\n\n### Code Formatting\n\nfsspec uses [Black](https://black.readthedocs.io/en/stable) to ensure\na consistent code format throughout the project.\nRun ``black fsspec`` from the root of the filesystem_spec repository to\nauto-format your code. Additionally, many editors have plugins that will apply\n``black`` as you edit files. ``black`` is included in the ``tox`` environments.\n\nOptionally, you may wish to setup [pre-commit hooks](https://pre-commit.com) to\nautomatically run ``black`` when you make a git commit.\nRun ``pre-commit install --install-hooks`` from the root of the\nfilesystem_spec repository to setup pre-commit hooks. ``black`` will now be run\nbefore you commit, reformatting any changed files. You can format without\ncommitting via ``pre-commit run`` or skip these checks with ``git commit\n--no-verify``.\n\n## Support\n\nWork on this repository is supported in part by:\n\n\"Anaconda, Inc. - Advancing AI through open source.\"\n\n\"anaconda\n", + "description_content_type": "text/markdown", + "keywords": [ + "file" + ], + "maintainer_email": "Martin Durant ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14" + ], + "requires_dist": [ + "adlfs; extra == 'abfs'", + "adlfs; extra == 'adl'", + "pyarrow>=1; extra == 'arrow'", + "dask; extra == 'dask'", + "distributed; extra == 'dask'", + "pre-commit; extra == 'dev'", + "ruff>=0.5; extra == 'dev'", + "numpydoc; extra == 'doc'", + "sphinx; extra == 'doc'", + "sphinx-design; extra == 'doc'", + "sphinx-rtd-theme; extra == 'doc'", + "yarl; extra == 'doc'", + "dropbox; extra == 'dropbox'", + "dropboxdrivefs; extra == 'dropbox'", + "requests; extra == 'dropbox'", + "adlfs; extra == 'full'", + "aiohttp!=4.0.0a0,!=4.0.0a1; extra == 'full'", + "dask; extra == 'full'", + "distributed; extra == 'full'", + "dropbox; extra == 'full'", + "dropboxdrivefs; extra == 'full'", + "fusepy; extra == 'full'", + "gcsfs>=2026.4.0; extra == 'full'", + "libarchive-c; extra == 'full'", + "ocifs; extra == 'full'", + "panel; extra == 'full'", + "paramiko; extra == 'full'", + "pyarrow>=1; extra == 'full'", + "pygit2; extra == 'full'", + "requests; extra == 'full'", + "s3fs>=2026.6.0; extra == 'full'", + "smbprotocol; extra == 'full'", + "tqdm; extra == 'full'", + "fusepy; extra == 'fuse'", + "gcsfs>=2026.4.0; extra == 'gcs'", + "pygit2; extra == 'git'", + "requests; extra == 'github'", + "gcsfs>=2026.4.0; extra == 'gs'", + "panel; extra == 'gui'", + "pyarrow>=1; extra == 'hdfs'", + "aiohttp!=4.0.0a0,!=4.0.0a1; extra == 'http'", + "libarchive-c; extra == 'libarchive'", + "ocifs; extra == 'oci'", + "s3fs>=2026.6.0; extra == 's3'", + "paramiko; extra == 'sftp'", + "smbprotocol; extra == 'smb'", + "paramiko; extra == 'ssh'", + "aiohttp!=4.0.0a0,!=4.0.0a1; extra == 'test'", + "numpy; extra == 'test'", + "pytest; extra == 'test'", + "pytest-asyncio!=0.22.0; extra == 'test'", + "pytest-benchmark; extra == 'test'", + "pytest-cov; extra == 'test'", + "pytest-mock; extra == 'test'", + "pytest-recording; extra == 'test'", + "pytest-rerunfailures; extra == 'test'", + "requests; extra == 'test'", + "aiobotocore<3.0.0,>=2.5.4; extra == 'test-downstream'", + "dask[dataframe,test]; extra == 'test-downstream'", + "moto[server]<5,>4; extra == 'test-downstream'", + "pytest-timeout; extra == 'test-downstream'", + "xarray; extra == 'test-downstream'", + "zarr; extra == 'test-downstream'", + "adlfs; extra == 'test-full'", + "aiohttp!=4.0.0a0,!=4.0.0a1; extra == 'test-full'", + "backports-zstd; (python_version < '3.14') and extra == 'test-full'", + "cloudpickle; extra == 'test-full'", + "dask; extra == 'test-full'", + "distributed; extra == 'test-full'", + "dropbox; extra == 'test-full'", + "dropboxdrivefs; extra == 'test-full'", + "fastparquet; extra == 'test-full'", + "fusepy; extra == 'test-full'", + "gcsfs>=2026.4.0; extra == 'test-full'", + "jinja2; extra == 'test-full'", + "kerchunk; extra == 'test-full'", + "libarchive-c; extra == 'test-full'", + "lz4; extra == 'test-full'", + "notebook; extra == 'test-full'", + "numpy; extra == 'test-full'", + "ocifs; extra == 'test-full'", + "pandas<3.0.0; extra == 'test-full'", + "panel; extra == 'test-full'", + "paramiko; extra == 'test-full'", + "pyarrow>=1; extra == 'test-full'", + "pyftpdlib; extra == 'test-full'", + "pygit2; extra == 'test-full'", + "pytest; extra == 'test-full'", + "pytest-asyncio!=0.22.0; extra == 'test-full'", + "pytest-benchmark; extra == 'test-full'", + "pytest-cov; extra == 'test-full'", + "pytest-mock; extra == 'test-full'", + "pytest-recording; extra == 'test-full'", + "pytest-rerunfailures; extra == 'test-full'", + "python-snappy; extra == 'test-full'", + "requests; extra == 'test-full'", + "s3fs>=2026.6.0; extra == 'test-full'", + "smbprotocol; extra == 'test-full'", + "tqdm; extra == 'test-full'", + "urllib3; extra == 'test-full'", + "zarr<3.2.0; extra == 'test-full'", + "zstandard; (python_version < '3.14') and extra == 'test-full'", + "tqdm; extra == 'tqdm'" + ], + "requires_python": ">=3.10", + "project_url": [ + "Changelog, https://filesystem-spec.readthedocs.io/en/latest/changelog.html", + "Documentation, https://filesystem-spec.readthedocs.io/en/latest/", + "Homepage, https://github.com/fsspec/filesystem_spec" + ], + "provides_extra": [ + "abfs", + "adl", + "arrow", + "dask", + "dev", + "doc", + "dropbox", + "entrypoints", + "full", + "fuse", + "gcs", + "git", + "github", + "gs", + "gui", + "hdfs", + "http", + "libarchive", + "oci", + "s3", + "sftp", + "smb", + "ssh", + "test", + "test-downstream", + "test-full", + "tqdm" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86" + }, + "hash": "sha256=63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "h11", + "version": "0.16.0", + "dynamic": [ + "author", + "author-email", + "classifier", + "description", + "home-page", + "license", + "license-file", + "requires-python", + "summary" + ], + "summary": "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1", + "description": "h11\n===\n\n.. image:: https://travis-ci.org/python-hyper/h11.svg?branch=master\n :target: https://travis-ci.org/python-hyper/h11\n :alt: Automated test status\n\n.. image:: https://codecov.io/gh/python-hyper/h11/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/python-hyper/h11\n :alt: Test coverage\n\n.. image:: https://readthedocs.org/projects/h11/badge/?version=latest\n :target: http://h11.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation Status\n\nThis is a little HTTP/1.1 library written from scratch in Python,\nheavily inspired by `hyper-h2 `_.\n\nIt's a \"bring-your-own-I/O\" library; h11 contains no IO code\nwhatsoever. This means you can hook h11 up to your favorite network\nAPI, and that could be anything you want: synchronous, threaded,\nasynchronous, or your own implementation of `RFC 6214\n`_ -- h11 won't judge you.\n(Compare this to the current state of the art, where every time a `new\nnetwork API `_ comes along then someone\ngets to start over reimplementing the entire HTTP protocol from\nscratch.) Cory Benfield made an `excellent blog post describing the\nbenefits of this approach\n`_, or if you like video\nthen here's his `PyCon 2016 talk on the same theme\n`_.\n\nThis also means that h11 is not immediately useful out of the box:\nit's a toolkit for building programs that speak HTTP, not something\nthat could directly replace ``requests`` or ``twisted.web`` or\nwhatever. But h11 makes it much easier to implement something like\n``requests`` or ``twisted.web``.\n\nAt a high level, working with h11 goes like this:\n\n1) First, create an ``h11.Connection`` object to track the state of a\n single HTTP/1.1 connection.\n\n2) When you read data off the network, pass it to\n ``conn.receive_data(...)``; you'll get back a list of objects\n representing high-level HTTP \"events\".\n\n3) When you want to send a high-level HTTP event, create the\n corresponding \"event\" object and pass it to ``conn.send(...)``;\n this will give you back some bytes that you can then push out\n through the network.\n\nFor example, a client might instantiate and then send a\n``h11.Request`` object, then zero or more ``h11.Data`` objects for the\nrequest body (e.g., if this is a POST), and then a\n``h11.EndOfMessage`` to indicate the end of the message. Then the\nserver would then send back a ``h11.Response``, some ``h11.Data``, and\nits own ``h11.EndOfMessage``. If either side violates the protocol,\nyou'll get a ``h11.ProtocolError`` exception.\n\nh11 is suitable for implementing both servers and clients, and has a\npleasantly symmetric API: the events you send as a client are exactly\nthe ones that you receive as a server and vice-versa.\n\n`Here's an example of a tiny HTTP client\n`_\n\nIt also has `a fine manual `_.\n\nFAQ\n---\n\n*Whyyyyy?*\n\nI wanted to play with HTTP in `Curio\n`__ and `Trio\n`__, which at the time didn't have any\nHTTP libraries. So I thought, no big deal, Python has, like, a dozen\ndifferent implementations of HTTP, surely I can find one that's\nreusable. I didn't find one, but I did find Cory's call-to-arms\nblog-post. So I figured, well, fine, if I have to implement HTTP from\nscratch, at least I can make sure no-one *else* has to ever again.\n\n*Should I use it?*\n\nMaybe. You should be aware that it's a very young project. But, it's\nfeature complete and has an exhaustive test-suite and complete docs,\nso the next step is for people to try using it and see how it goes\n:-). If you do then please let us know -- if nothing else we'll want\nto talk to you before making any incompatible changes!\n\n*What are the features/limitations?*\n\nRoughly speaking, it's trying to be a robust, complete, and non-hacky\nimplementation of the first \"chapter\" of the HTTP/1.1 spec: `RFC 7230:\nHTTP/1.1 Message Syntax and Routing\n`_. That is, it mostly focuses on\nimplementing HTTP at the level of taking bytes on and off the wire,\nand the headers related to that, and tries to be anal about spec\nconformance. It doesn't know about higher-level concerns like URL\nrouting, conditional GETs, cross-origin cookie policies, or content\nnegotiation. But it does know how to take care of framing,\ncross-version differences in keep-alive handling, and the \"obsolete\nline folding\" rule, so you can focus your energies on the hard /\ninteresting parts for your application, and it tries to support the\nfull specification in the sense that any useful HTTP/1.1 conformant\napplication should be able to use h11.\n\nIt's pure Python, and has no dependencies outside of the standard\nlibrary.\n\nIt has a test suite with 100.0% coverage for both statements and\nbranches.\n\nCurrently it supports Python 3 (testing on 3.8-3.12) and PyPy 3.\nThe last Python 2-compatible version was h11 0.11.x.\n(Originally it had a Cython wrapper for `http-parser\n`_ and a beautiful nested state\nmachine implemented with ``yield from`` to postprocess the output. But\nI had to take these out -- the new *parser* needs fewer lines-of-code\nthan the old *parser wrapper*, is written in pure Python, uses no\nexotic language syntax, and has more features. It's sad, really; that\nold state machine was really slick. I just need a few sentences here\nto mourn that.)\n\nI don't know how fast it is. I haven't benchmarked or profiled it yet,\nso it's probably got a few pointless hot spots, and I've been trying\nto err on the side of simplicity and robustness instead of\nmicro-optimization. But at the architectural level I tried hard to\navoid fundamentally bad decisions, e.g., I believe that all the\nparsing algorithms remain linear-time even in the face of pathological\ninput like slowloris, and there are no byte-by-byte loops. (I also\nbelieve that it maintains bounded memory usage in the face of\narbitrary/pathological input.)\n\nThe whole library is ~800 lines-of-code. You can read and understand\nthe whole thing in less than an hour. Most of the energy invested in\nthis so far has been spent on trying to keep things simple by\nminimizing special-cases and ad hoc state manipulation; even though it\nis now quite small and simple, I'm still annoyed that I haven't\nfigured out how to make it even smaller and simpler. (Unfortunately,\nHTTP does not lend itself to simplicity.)\n\nThe API is ~feature complete and I don't expect the general outlines\nto change much, but you can't judge an API's ergonomics until you\nactually document and use it, so I'd expect some changes in the\ndetails.\n\n*How do I try it?*\n\n.. code-block:: sh\n\n $ pip install h11\n $ git clone git@github.com:python-hyper/h11\n $ cd h11/examples\n $ python basic-client.py\n\nand go from there.\n\n*License?*\n\nMIT\n\n*Code of conduct?*\n\nContributors are requested to follow our `code of conduct\n`_ in\nall project spaces.\n", + "home_page": "https://github.com/python-hyper/h11", + "author": "Nathaniel J. Smith", + "author_email": "njs@pobox.com", + "license": "MIT", + "license_file": [ + "LICENSE.txt" + ], + "classifier": [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Topic :: Internet :: WWW/HTTP", + "Topic :: System :: Networking" + ], + "requires_python": ">=3.8" + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0" + }, + "hash": "sha256=e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "networkx", + "version": "3.7", + "dynamic": [ + "license-file" + ], + "platform": [ + "Linux", + "Mac OSX", + "Windows", + "Unix" + ], + "summary": "Python package for creating and manipulating graphs and networks", + "description": "NetworkX\n========\n\n\n.. image::\n https://github.com/networkx/networkx/actions/workflows/test.yml/badge.svg?branch=main\n :target: https://github.com/networkx/networkx/actions/workflows/test.yml\n\n.. image::\n https://img.shields.io/pypi/v/networkx.svg?\n :target: https://pypi.python.org/pypi/networkx\n\n.. image::\n https://img.shields.io/pypi/l/networkx.svg?\n :target: https://github.com/networkx/networkx/blob/main/LICENSE.txt\n\n.. image::\n https://img.shields.io/pypi/pyversions/networkx.svg?\n :target: https://pypi.python.org/pypi/networkx\n\n.. image::\n https://insights.linuxfoundation.org/api/badge/health-score?project=networkx\n :target: https://insights.linuxfoundation.org/project/networkx\n\n\nNetworkX is a Python package for the creation, manipulation,\nand study of the structure, dynamics, and functions\nof complex networks.\n\n- **Website (including documentation):** https://networkx.org\n- **Mailing list:** https://groups.google.com/forum/#!forum/networkx-discuss\n- **Source:** https://github.com/networkx/networkx\n- **Bug reports:** https://github.com/networkx/networkx/issues\n- **Report a security vulnerability:** https://tidelift.com/security\n- **Tutorial:** https://networkx.org/documentation/latest/tutorial.html\n- **GitHub Discussions:** https://github.com/networkx/networkx/discussions\n- **Discord (Scientific Python) invite link:** https://discord.com/invite/vur45CbwMz\n- **NetworkX meetings calendar (open to all):** https://scientific-python.org/calendars/networkx.ics\n\nSimple example\n--------------\n\nFind the shortest path between two nodes in an undirected graph:\n\n.. code:: pycon\n\n >>> import networkx as nx\n >>> G = nx.Graph()\n >>> G.add_edge(\"A\", \"B\", weight=4)\n >>> G.add_edge(\"B\", \"D\", weight=2)\n >>> G.add_edge(\"A\", \"C\", weight=3)\n >>> G.add_edge(\"C\", \"D\", weight=4)\n >>> nx.shortest_path(G, \"A\", \"D\", weight=\"weight\")\n ['A', 'B', 'D']\n\nInstall\n-------\n\nInstall the latest released version of NetworkX:\n\n.. code:: shell\n\n $ pip install networkx\n\nInstall with all optional dependencies:\n\n.. code:: shell\n\n $ pip install networkx[default]\n\nFor additional details,\nplease see the `installation guide `_.\n\nBugs\n----\n\nPlease report any bugs that you find `here `_.\nOr, even better, fork the repository on `GitHub `_\nand create a pull request (PR). We welcome all changes, big or small, and we\nwill help you make the PR if you are new to `git` (just ask on the issue and/or\nsee the `contributor guide `_).\n\nLicense\n-------\n\nReleased under the `3-clause BSD license `_::\n\n Copyright (c) 2004-2026, NetworkX Developers\n Aric Hagberg \n Dan Schult \n Pieter Swart \n", + "description_content_type": "text/x-rst", + "keywords": [ + "Networks", + "Graph Theory", + "Mathematics", + "network", + "graph", + "discrete mathematics", + "math" + ], + "author_email": "Aric Hagberg ", + "maintainer_email": "NetworkX Developers ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.txt" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Intended Audience :: Science/Research", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Programming Language :: Python :: 3 :: Only", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Scientific/Engineering :: Bio-Informatics", + "Topic :: Scientific/Engineering :: Information Analysis", + "Topic :: Scientific/Engineering :: Mathematics", + "Topic :: Scientific/Engineering :: Physics" + ], + "requires_dist": [ + "asv>=0.6.5; extra == \"benchmarking\"", + "py-rattler<0.22,>=0.21; extra == \"benchmarking\"", + "virtualenv; extra == \"benchmarking\"", + "numpy>=2.2; extra == \"default\"", + "scipy>=1.15; extra == \"default\"", + "matplotlib>=3.10; extra == \"default\"", + "pandas>=2.3; extra == \"default\"", + "pre-commit>=4.1; extra == \"developer\"", + "mypy>=1.15; extra == \"developer\"", + "sphinx>=8.0; extra == \"doc\"", + "pydata-sphinx-theme>=0.16; extra == \"doc\"", + "sphinx-gallery>=0.18; extra == \"doc\"", + "numpydoc>=1.8.0; extra == \"doc\"", + "pillow>=10; extra == \"doc\"", + "texext>=0.6.7; extra == \"doc\"", + "myst-nb>=1.1; extra == \"doc\"", + "intersphinx-registry; extra == \"doc\"", + "osmnx>=2.0.0; extra == \"example\"", + "momepy>=0.7.2; extra == \"example\"", + "contextily>=1.6; extra == \"example\"", + "seaborn>=0.13; extra == \"example\"", + "cairocffi>=1.7; extra == \"example\"", + "igraph>=0.11; extra == \"example\"", + "scikit-learn>=1.6; extra == \"example\"", + "iplotx>=0.9.0; extra == \"example\"", + "hiveplotlib>=0.28; extra == \"example\"", + "lxml>=4.6; extra == \"extra\"", + "pygraphviz>=2.0; extra == \"extra\"", + "pydot>=3.0.1; extra == \"extra\"", + "sympy>=1.10; extra == \"extra\"", + "build>=0.10; extra == \"release\"", + "twine>=4.0; extra == \"release\"", + "wheel>=0.40; extra == \"release\"", + "changelist==0.5; extra == \"release\"", + "pytest>=7.2; extra == \"test\"", + "pytest-cov>=4.0; extra == \"test\"", + "pytest-xdist>=3.0; extra == \"test\"", + "pytest-mpl; extra == \"test-extras\"", + "pytest-randomly; extra == \"test-extras\"" + ], + "requires_python": "!=3.14.1,>=3.12", + "project_url": [ + "Homepage, https://networkx.org/", + "Bug Tracker, https://github.com/networkx/networkx/issues", + "Documentation, https://networkx.org/documentation/stable/", + "Source Code, https://github.com/networkx/networkx" + ], + "provides_extra": [ + "benchmarking", + "default", + "developer", + "doc", + "example", + "extra", + "release", + "test", + "test-extras" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73" + }, + "hash": "sha256=346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "pydantic", + "version": "2.13.5", + "summary": "Data validation using Python type hints", + "description": "# Pydantic Validation\n\n[![CI](https://img.shields.io/github/actions/workflow/status/pydantic/pydantic/ci.yml?branch=main&logo=github&label=CI)](https://github.com/pydantic/pydantic/actions?query=event%3Apush+branch%3Amain+workflow%3ACI)\n[![Coverage](https://coverage-badge.samuelcolvin.workers.dev/pydantic/pydantic.svg)](https://coverage-badge.samuelcolvin.workers.dev/redirect/pydantic/pydantic)\n[![pypi](https://img.shields.io/pypi/v/pydantic.svg)](https://pypi.python.org/pypi/pydantic)\n[![CondaForge](https://img.shields.io/conda/v/conda-forge/pydantic.svg)](https://anaconda.org/conda-forge/pydantic)\n[![downloads](https://static.pepy.tech/badge/pydantic/month)](https://pepy.tech/project/pydantic)\n[![versions](https://img.shields.io/pypi/pyversions/pydantic.svg)](https://github.com/pydantic/pydantic)\n[![license](https://img.shields.io/github/license/pydantic/pydantic.svg)](https://github.com/pydantic/pydantic/blob/main/LICENSE)\n[![Pydantic v2](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/pydantic/pydantic/main/docs/badge/v2.json)](https://docs.pydantic.dev/latest/contributing/#badges)\n[![llms.txt](https://img.shields.io/badge/llms.txt-green)](https://docs.pydantic.dev/latest/llms.txt)\n\nData validation using Python type hints.\n\nFast and extensible, Pydantic plays nicely with your linters/IDE/brain.\nDefine how data should be in pure, canonical Python 3.9+; validate it with Pydantic.\n\n## Pydantic Logfire :fire:\n\nWe've launched Pydantic Logfire to help you monitor your applications.\n[Learn more](https://pydantic.dev/logfire/?utm_source=pydantic_validation)\n\n## Pydantic V1.10 vs. V2\n\nPydantic V2 is a ground-up rewrite that offers many new features, performance improvements, and some breaking changes compared to Pydantic V1.\n\nIf you're using Pydantic V1 you may want to look at the\n[pydantic V1.10 Documentation](https://docs.pydantic.dev/) or,\n[`1.10.X-fixes` git branch](https://github.com/pydantic/pydantic/tree/1.10.X-fixes). Pydantic V2 also ships with the latest version of Pydantic V1 built in so that you can incrementally upgrade your code base and projects: `from pydantic import v1 as pydantic_v1`.\n\n## Help\n\nSee [documentation](https://docs.pydantic.dev/) for more details.\n\n## Installation\n\nInstall using `pip install -U pydantic` or `conda install pydantic -c conda-forge`.\nFor more installation options to make Pydantic even faster,\nsee the [Install](https://docs.pydantic.dev/install/) section in the documentation.\n\n## A Simple Example\n\n```python\nfrom datetime import datetime\nfrom typing import Optional\nfrom pydantic import BaseModel\n\nclass User(BaseModel):\n id: int\n name: str = 'John Doe'\n signup_ts: Optional[datetime] = None\n friends: list[int] = []\n\nexternal_data = {'id': '123', 'signup_ts': '2017-06-01 12:22', 'friends': [1, '2', b'3']}\nuser = User(**external_data)\nprint(user)\n#> User id=123 name='John Doe' signup_ts=datetime.datetime(2017, 6, 1, 12, 22) friends=[1, 2, 3]\nprint(user.id)\n#> 123\n```\n\n## Contributing\n\nFor guidance on setting up a development environment and how to make a\ncontribution to Pydantic, see\n[Contributing to Pydantic](https://docs.pydantic.dev/contributing/).\n\n## Reporting a Security Vulnerability\n\nSee our [security policy](https://github.com/pydantic/pydantic/security/policy).\n\n## Changelog\n\n\n\n\n\n## v2.13.5 (2026-08-28)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.5)\n\n### What's Changed\n\n#### Fixes\n\n* Allow reuse of validators when plugins are set by [@Viicos](https://github.com/Viicos) in [#13535](https://github.com/pydantic/pydantic/pull/13535)\n* Fix missing GC traversal on some `pydantic-core` struct fields by [@Viicos](https://github.com/Viicos) in [#13624](https://github.com/pydantic/pydantic/pull/13624)\n* Fix missing GC traversal in `pydantic-core` for `GeneralFieldsSerializer` by [@Viicos](https://github.com/Viicos) in [#13629](https://github.com/pydantic/pydantic/pull/13629)\n* Count validated model fields once in smart unions by [@tamird](https://github.com/tamird) in [#13731](https://github.com/pydantic/pydantic/pull/13731)\n\n## v2.13.4 (2026-05-06)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.4)\n\n### What's Changed\n\n#### Packaging\n\n* Bump libc from 0.2.155 to 0.2.185 by [@Viicos](https://github.com/Viicos) in [#13109](https://github.com/pydantic/pydantic/pull/13109)\n* Adapt `pydantic-core` linker flags on macOS by [@washingtoneg](https://github.com/washingtoneg) and [@Viicos](https://github.com/Viicos) in [#13147](https://github.com/pydantic/pydantic/pull/13147)\n\n#### Fixes\n\n* Preserve `RootModel` core metadata by [@Viicos](https://github.com/Viicos) in [#13129](https://github.com/pydantic/pydantic/pull/13129)\n\n## v2.13.3 (2026-04-20)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.3)\n\n### What's Changed\n\n#### Fixes\n\n* Handle `AttributeError` subclasses with `from_attributes` by [@Viicos](https://github.com/Viicos) in [#13096](https://github.com/pydantic/pydantic/pull/13096)\n\n## v2.13.2 (2026-04-17)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.2)\n\n### What's Changed\n\n#### Fixes\n\n* Fix `ValidationInfo.field_name` missing with `model_validate_json()` by [@Viicos](https://github.com/Viicos) in [#13084](https://github.com/pydantic/pydantic/pull/13084)\n\n## v2.13.1 (2026-04-15)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.1)\n\n### What's Changed\n\n#### Fixes\n\n* Fix `ValidationInfo.data` missing with `model_validate_json()` by [@davidhewitt](https://github.com/davidhewitt) in [#13079](https://github.com/pydantic/pydantic/pull/13079)\n\n## v2.13.0 (2026-04-13)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.0)\n\nThe highlights of the v2.13 release are available in the [blog post](https://pydantic.dev/articles/pydantic-v2-13-release).\nSeveral minor changes (considered non-breaking changes according to our [versioning policy](https://pydantic.dev/docs/validation/2.13/get-started/version-policy/#pydantic-v2))\nare also included in this release. Make sure to look into them before upgrading.\n\nThis release contains the updated `pydantic.v1` namespace, matching version 1.10.26 which includes support for Python 3.14.\n\n### What's Changed\n\nSee the beta releases for all changes sinces 2.12.\n\n#### New Features\n\n* Allow default factories of private attributes to take validated model data by [@Viicos](https://github.com/Viicos) in [#13013](https://github.com/pydantic/pydantic/pull/13013)\n\n#### Changes\n\n* Warn when serializing fixed length tuples with too few items by [@arvindsaripalli](https://github.com/arvindsaripalli) in [#13016](https://github.com/pydantic/pydantic/pull/13016)\n\n#### Fixes\n\n* Change type of `Any` when synthesizing `_build_sources` for `BaseSettings.__init__()` signature in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#13049](https://github.com/pydantic/pydantic/pull/13049)\n* Fix model equality when using runtime `extra` configuration by [@Viicos](https://github.com/Viicos) in [#13062](https://github.com/pydantic/pydantic/pull/13062)\n\n#### Packaging\n\n* Add zizmor for GitHub Actions workflow linting by [@Viicos](https://github.com/Viicos) in [#13039](https://github.com/pydantic/pydantic/pull/13039)\n* Update jiter to v0.14.0 to fix a segmentation fault on musl Linux by [@Viicos](https://github.com/Viicos) in [#13064](https://github.com/pydantic/pydantic/pull/13064)\n\n### New Contributors\n\n* [@arvindsaripalli](https://github.com/arvindsaripalli) made their first contribution in [#13016](https://github.com/pydantic/pydantic/pull/13016)\n\n## v2.13.0b3 (2026-03-31)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.0b3)\n\n### What's Changed\n\n#### New Features\n\n* Add `ascii_only` option to `StringConstraints` by [@ai-man-codes](https://github.com/ai-man-codes) in [#12907](https://github.com/pydantic/pydantic/pull/12907)\n* Support `exclude_if` in computed fields by [@andresliszt](https://github.com/andresliszt) in [#12748](https://github.com/pydantic/pydantic/pull/12748)\n* Push down constraints in unions involving `MISSING` sentinel by [@Viicos](https://github.com/Viicos) in [#12908](https://github.com/pydantic/pydantic/pull/12908)\n\n#### Changes\n\n* Track extra fields set after init in `model_fields_set` by [@navalprakhar](https://github.com/navalprakhar) in [#12817](https://github.com/pydantic/pydantic/pull/12817)\n* Do not include annotations that are not part of named tuple fields by [@galuszkak](https://github.com/galuszkak) in [#12951](https://github.com/pydantic/pydantic/pull/12951)\n* No longer fall back to trying all union members when the variant selected by discriminator fails to serialize by [@navalprakhar](https://github.com/navalprakhar) in [#12825](https://github.com/pydantic/pydantic/pull/12825)\n\n#### Fixes\n\n* Support discriminator metadata outside union type alias by [@Viicos](https://github.com/Viicos) in [#12785](https://github.com/pydantic/pydantic/pull/12785)\n* Respect `extras_schema` when only `extra_fields_behavior` is set on the config in JSON Schema generation for typed dictionaries by [@Viicos](https://github.com/Viicos) in [#12810](https://github.com/pydantic/pydantic/pull/12810)\n* Ensure `__pydantic_private__` is set in `model_construct()` with user-defined `model_post_init()` by [@nightcityblade](https://github.com/nightcityblade) in [#12816](https://github.com/pydantic/pydantic/pull/12816)\n* Handle all schema generation errors in `InstanceOf` by [@Viicos](https://github.com/Viicos) in [#12705](https://github.com/pydantic/pydantic/pull/12705)\n* Allow dynamic models created with `create_model()` to be used as annotations in the Mypy plugin by [@Br1an67](https://github.com/Br1an67) in [#12879](https://github.com/pydantic/pydantic/pull/12879)\n* Check for `PlaceholderNode` in Mypy plugin by [@Viicos](https://github.com/Viicos) in [#12929](https://github.com/pydantic/pydantic/pull/12929)\n* Try other branches in smart union in case of omit errors by [@mikeedjones](https://github.com/mikeedjones) in [#12758](https://github.com/pydantic/pydantic/pull/12758)\n* Patch unset attributes with `MISSING` during model serialization with `exclude_unset` by [@davidhewitt](https://github.com/davidhewitt) in [#12905](https://github.com/pydantic/pydantic/pull/12905)\n* Ensure custom `__init__()` is called when using `model_validate_strings()` by [@siewcapital](https://github.com/siewcapital) in [#12897](https://github.com/pydantic/pydantic/pull/12897)\n\n#### Packaging\n\n* Add riscv64 build target for manylinux by [@boosterl](https://github.com/boosterl) in [#12723](https://github.com/pydantic/pydantic/pull/12723)\n\n### New Contributors\n\n* [@kelsonbrito50](https://github.com/kelsonbrito50) made their first contribution in [#12860](https://github.com/pydantic/pydantic/pull/12860)\n* [@boosterl](https://github.com/boosterl) made their first contribution in [#12723](https://github.com/pydantic/pydantic/pull/12723)\n* [@adityagiri3600](https://github.com/adityagiri3600) made their first contribution in [#12868](https://github.com/pydantic/pydantic/pull/12868)\n* [@navalprakhar](https://github.com/navalprakhar) made their first contribution in [#12817](https://github.com/pydantic/pydantic/pull/12817)\n* [@Br1an67](https://github.com/Br1an67) made their first contribution in [#12879](https://github.com/pydantic/pydantic/pull/12879)\n* [@rmorshea](https://github.com/rmorshea) made their first contribution in [#12910](https://github.com/pydantic/pydantic/pull/12910)\n* [@N3XT3R1337](https://github.com/N3XT3R1337) made their first contribution in [#12922](https://github.com/pydantic/pydantic/pull/12922)\n* [@ai-man-codes](https://github.com/ai-man-codes) made their first contribution in [#12907](https://github.com/pydantic/pydantic/pull/12907)\n* [@Yume05-dev](https://github.com/Yume05-dev) made their first contribution in [#12953](https://github.com/pydantic/pydantic/pull/12953)\n* [@galuszkak](https://github.com/galuszkak) made their first contribution in [#12951](https://github.com/pydantic/pydantic/pull/12951)\n* [@siewcapital](https://github.com/siewcapital) made their first contribution in [#12897](https://github.com/pydantic/pydantic/pull/12897)\n\n## v2.13.0b2 (2026-02-24)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.0b2)\n\n### What's Changed\n\n#### Fixes\n\n* Fix backported V1 namespace by [@Viicos](https://github.com/Viicos) in [#12855](https://github.com/pydantic/pydantic/pull/12855)\n* Allow any type form to be used in `validate_as()` by [@bledden](https://github.com/bledden) in [#12846](https://github.com/pydantic/pydantic/pull/12846)\n* Fix walrus operator precedence in `UrlConstraints.__get_pydantic_core_schema__()` by [@bysiber](https://github.com/bysiber) in [#12826](https://github.com/pydantic/pydantic/pull/12826)\n\n### New Contributors\n\n* [@bledden](https://github.com/bledden) made their first contribution in [#12846](https://github.com/pydantic/pydantic/pull/12846)\n* [@bysiber](https://github.com/bysiber) made their first contribution in [#12827](https://github.com/pydantic/pydantic/pull/12827)\n\n## v2.13.0b1 (2026-02-23)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.0b1)\n\nThis is the first beta release of the 2.13 version, mainly providing bug fixes and performance improvements\nfor validation and serialization.\n\nNotable changes include:\n\n* Add a new `polymorphic_serialization` option, solving issues with `serialize_as_any` introduced in 2.12.\n* Latest V1.10.26 release under the `pydantic.v1` namespace. This version includes support for Python 3.14.\n* The [`pydantic-core`](https://github.com/pydantic/pydantic-core/) repository was merged inside the main `pydantic` one.\n\n### What's Changed\n\n#### New Features\n\n* Add `polymorphic_serialization` option by [@davidhewitt](https://github.com/davidhewitt) in [#12518](https://github.com/pydantic/pydantic/pull/12518)\n* Support Root models with `Literal` root types as discriminator field types by [@YassinNouh21](https://github.com/YassinNouh21) in [#12680](https://github.com/pydantic/pydantic/pull/12680)\n\n#### Changes\n\n* Migrate `pydantic-core` CI by [@Viicos](https://github.com/Viicos) in [#12752](https://github.com/pydantic/pydantic/pull/12752)\n* Import `pydantic-core` into pydantic by [@davidhewitt](https://github.com/davidhewitt) in [#12481](https://github.com/pydantic/pydantic/pull/12481)\n* Backport V1 changes up to v1.10.26 by [@Viicos](https://github.com/Viicos) in [#12663](https://github.com/pydantic/pydantic/pull/12663)\n* Use the `complex()` constructor unconditionally when validating `complex` Python data by [@tanmaymunjal](https://github.com/tanmaymunjal) in [#12498](https://github.com/pydantic/pydantic/pull/12498)\n* Add support for three-tuple input for `Decimal` by [@tanmaymunjal](https://github.com/tanmaymunjal) in [#12500](https://github.com/pydantic/pydantic/pull/12500)\n* Align `@field_serializer` logic with `@field_validator` by [@Viicos](https://github.com/Viicos) in [#12577](https://github.com/pydantic/pydantic/pull/12577)\n* Make `PydanticUserError` a `RuntimeError` instead of a `TypeError` by [@poliakovva](https://github.com/poliakovva) in [#12579](https://github.com/pydantic/pydantic/pull/12579)\n* Remove redundant serialization attempts in nested unions by [@davidhewitt](https://github.com/davidhewitt) in [#12604](https://github.com/pydantic/pydantic/pull/12604)\n* Copy `root` value when making root model shallow copies by [@YassinNouh21](https://github.com/YassinNouh21) in [#12679](https://github.com/pydantic/pydantic/pull/12679)\n* Ensure deterministic JSON schema defaults by sorting sets by [@drshvik](https://github.com/drshvik) in [#12760](https://github.com/pydantic/pydantic/pull/12760)\n\n#### Performance\n\n* Refactor `DecoratorInfos.build()` implementation by [@Viicos](https://github.com/Viicos) in [#12536](https://github.com/pydantic/pydantic/pull/12536)\n* Cache compiled regex in `pydantic-core` by [@Viicos](https://github.com/Viicos) in [#12549](https://github.com/pydantic/pydantic/pull/12549)\n* Optimize creation of `Literal` validators by [@davidhewitt](https://github.com/davidhewitt) in [#12569](https://github.com/pydantic/pydantic/pull/12569)\n* Optimize implementation of `LookupKey` by [@davidhewitt](https://github.com/davidhewitt) in [#12571](https://github.com/pydantic/pydantic/pull/12571)\n* Use python strings for field names by [@davidhewitt](https://github.com/davidhewitt) in [#12631](https://github.com/pydantic/pydantic/pull/12631)\n* Optimize datetime formatting code by [@davidhewitt](https://github.com/davidhewitt) in [#12626](https://github.com/pydantic/pydantic/pull/12626)\n* Validate JSON model data by iteration by [@davidhewitt](https://github.com/davidhewitt) in [#12550](https://github.com/pydantic/pydantic/pull/12550)\n* Optimize annotations evaluation of Pydantic models by [@Viicos](https://github.com/Viicos) in [#12681](https://github.com/pydantic/pydantic/pull/12681)\n* Optimize `FieldInfo._copy()` by [@Viicos](https://github.com/Viicos) in [#12727](https://github.com/pydantic/pydantic/pull/12727)\n\n#### Fixes\n\n* Fix `FieldInfo` rebuilding when parameterizing generic models with an `Annotated` type by [@Viicos](https://github.com/Viicos) in [#12463](https://github.com/pydantic/pydantic/pull/12463)\n* Fix nested model schema deduplication in JSON schema generation by [@marwan-alloreview](https://github.com/marwan-alloreview) in [#12494](https://github.com/pydantic/pydantic/pull/12494)\n* Fix `InitVar` being ignored when using with the `pydantic.Field()` function by [@Viicos](https://github.com/Viicos) in [#12495](https://github.com/pydantic/pydantic/pull/12495)\n* Fix support for enums with `NamedTuple` as values by [@Viicos](https://github.com/Viicos) in [#12506](https://github.com/pydantic/pydantic/pull/12506)\n* Do not delete mock validator/serializer in `rebuild_dataclass()` by [@Viicos](https://github.com/Viicos) in [#12513](https://github.com/pydantic/pydantic/pull/12513)\n* Require test suite to pass with free threading, switch back to global generic types cache by [@davidhewitt](https://github.com/davidhewitt) in [#12537](https://github.com/pydantic/pydantic/pull/12537)\n* Refactor `__pydantic_extra__` annotation handling by [@Viicos](https://github.com/Viicos) in [#12563](https://github.com/pydantic/pydantic/pull/12563)\n* Do not add claim of UUID \"safety\" provision by [@davidhewitt](https://github.com/davidhewitt) in [#12567](https://github.com/pydantic/pydantic/pull/12567)\n* Use Python hash to perform lookup in tagged union serializer by [@davidhewitt](https://github.com/davidhewitt) in [#12594](https://github.com/pydantic/pydantic/pull/12594)\n* Do not emit serialization warning `MISSING` sentinel is present in a nested model by [@Viicos](https://github.com/Viicos) in [#12635](https://github.com/pydantic/pydantic/pull/12635)\n* Do not eagerly evaluate annotations in signature logic by [@Viicos](https://github.com/Viicos) in [#12660](https://github.com/pydantic/pydantic/pull/12660)\n* Fix serialization of typed dict unions when `exclude_none` is set by [@davidhewitt](https://github.com/davidhewitt) in [#12677](https://github.com/pydantic/pydantic/pull/12677)\n* Do not reuse prebuilt serializers/validators on rebuilds by [@lmmx](https://github.com/lmmx) in [#12689](https://github.com/pydantic/pydantic/pull/12689)\n* Fix type annotation of `field_definitions` in `create_model()` by [@lehmann-hqs](https://github.com/lehmann-hqs) in [#12734](https://github.com/pydantic/pydantic/pull/12734)\n* Fix incorrect dataclass constructor signature when overriding class `kw_only` with `Field()` by [@jfadia](https://github.com/jfadia) in [#12741](https://github.com/pydantic/pydantic/pull/12741)\n* Use `typing.Union` when replacing types under Python 3.14 by [@Viicos](https://github.com/Viicos) in [#12733](https://github.com/pydantic/pydantic/pull/12733)\n* Improve ImportString error when internal imports fail by [@tsembp](https://github.com/tsembp) in [#12740](https://github.com/pydantic/pydantic/pull/12740)\n* Fix serializing complex numbers with negative zero imaginary part by [@lhnwrk](https://github.com/lhnwrk) in [#12770](https://github.com/pydantic/pydantic/pull/12770)\n* Preserve custom docstrings on stdlib dataclasses in JSON schema by [@nightcityblade](https://github.com/nightcityblade) in [#12815](https://github.com/pydantic/pydantic/pull/12815)\n\n#### Packaging\n\n* Bump Rust url dependency from 2.5.4 to 2.5.7 in `pydantic-core` by [@dependabot](https://github.com/dependabot)[bot] in [#12508](https://github.com/pydantic/pydantic/pull/12508)\n* Bump Rust minimum version to 1.88, use edition 2024 by [@davidhewitt](https://github.com/davidhewitt) and [@Viicos](https://github.com/Viicos) in [#12551](https://github.com/pydantic/pydantic/pull/12551) and [#12752](https://github.com/pydantic/pydantic/pull/12752)\n* Bump PyO3 to 0.28, jiter to 0.13 by [@davidhewitt](https://github.com/davidhewitt) in [#12767](https://github.com/pydantic/pydantic/pull/12767)\n\n### New Contributors\n\n* [@marwan-alloreview](https://github.com/marwan-alloreview) made their first contribution in [#12494](https://github.com/pydantic/pydantic/pull/12494)\n* [@tanmaymunjal](https://github.com/tanmaymunjal) made their first contribution in [#12498](https://github.com/pydantic/pydantic/pull/12498)\n* [@poliakovva](https://github.com/poliakovva) made their first contribution in [#12579](https://github.com/pydantic/pydantic/pull/12579)\n* [@lehmann-hqs](https://github.com/lehmann-hqs) made their first contribution in [#12734](https://github.com/pydantic/pydantic/pull/12734)\n* [@jfadia](https://github.com/jfadia) made their first contribution in [#12741](https://github.com/pydantic/pydantic/pull/12741)\n* [@tsembp](https://github.com/tsembp) made their first contribution in [#12740](https://github.com/pydantic/pydantic/pull/12740)\n* [@drshvik](https://github.com/drshvik) made their first contribution in [#12760](https://github.com/pydantic/pydantic/pull/12760)\n* [@lhnwrk](https://github.com/lhnwrk) made their first contribution in [#12770](https://github.com/pydantic/pydantic/pull/12770)\n* [@nightcityblade](https://github.com/nightcityblade) made their first contribution in [#12815](https://github.com/pydantic/pydantic/pull/12811)\n\n## v2.12.5 (2025-11-26)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.5)\n\nThis is the fifth 2.12 patch release, addressing an issue with the `MISSING` sentinel and providing several documentation improvements.\n\nThe next 2.13 minor release will be published in a couple weeks, and will include a new *polymorphic serialization* feature addressing\nthe remaining unexpected changes to the *serialize as any* behavior.\n\n* Fix pickle error when using `model_construct()` on a model with `MISSING` as a default value by [@ornariece](https://github.com/ornariece) in [#12522](https://github.com/pydantic/pydantic/pull/12522).\n* Several updates to the documentation by [@Viicos](https://github.com/Viicos).\n\n## v2.12.4 (2025-11-05)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.4)\n\nThis is the fourth 2.12 patch release, fixing more regressions, and reverting a change in the `build()` method\nof the [`AnyUrl` and Dsn types](https://docs.pydantic.dev/latest/api/networks/).\n\nThis patch release also fixes an issue with the serialization of IP address types, when `serialize_as_any` is used. The next patch release\nwill try to address the remaining issues with *serialize as any* behavior by introducing a new *polymorphic serialization* feature, that\nshould be used in most cases in place of *serialize as any*.\n\n* Fix issue with forward references in parent `TypedDict` classes by [@Viicos](https://github.com/Viicos) in [#12427](https://github.com/pydantic/pydantic/pull/12427).\n\n This issue is only relevant on Python 3.14 and greater.\n\n* Exclude fields with `exclude_if` from JSON Schema required fields by [@Viicos](https://github.com/Viicos) in [#12430](https://github.com/pydantic/pydantic/pull/12430)\n* Revert URL percent-encoding of credentials in the `build()` method\n of the [`AnyUrl` and Dsn types](https://docs.pydantic.dev/latest/api/networks/) by [@davidhewitt](https://github.com/davidhewitt) in\n [pydantic-core#1833](https://github.com/pydantic/pydantic-core/pull/1833).\n\n This was initially considered as a bugfix, but caused regressions and as such was fully reverted. The next release will include\n an opt-in option to percent-encode components of the URL.\n\n* Add type inference for IP address types by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1868](https://github.com/pydantic/pydantic-core/pull/1868).\n\n The 2.12 changes to the `serialize_as_any` behavior made it so that IP address types could not properly serialize to JSON.\n\n* Avoid getting default values from defaultdict by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1853](https://github.com/pydantic/pydantic-core/pull/1853).\n\n This fixes a subtle regression in the validation behavior of the [`collections.defaultdict`](https://docs.python.org/3/library/collections.html#collections.defaultdict)\n type.\n\n* Fix issue with field serializers on nested typed dictionaries by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1879](https://github.com/pydantic/pydantic-core/pull/1879).\n* Add more `pydantic-core` builds for the three-threaded version of Python 3.14 by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1864](https://github.com/pydantic/pydantic-core/pull/1864).\n\n## v2.12.3 (2025-10-17)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.3)\n\n### What's Changed\n\nThis is the third 2.12 patch release, fixing issues related to the `FieldInfo` class, and reverting a change to the supported\n[*after* model validator](https://docs.pydantic.dev/latest/concepts/validators/#model-validators) function signatures.\n\n* Raise a warning when an invalid after model validator function signature is raised by [@Viicos](https://github.com/Viicos) in [#12414](https://github.com/pydantic/pydantic/pull/12414).\n Starting in 2.12.0, using class methods for *after* model validators raised an error, but the error wasn't raised concistently. We decided\n to emit a deprecation warning instead.\n* Add [`FieldInfo.asdict()`](https://docs.pydantic.dev/latest/api/fields/#pydantic.fields.FieldInfo.asdict) method, improve documentation around `FieldInfo` by [@Viicos](https://github.com/Viicos) in [#12411](https://github.com/pydantic/pydantic/pull/12411).\n This also add back support for mutations on `FieldInfo` classes, that are reused as `Annotated` metadata. **However**, note that this is still\n *not* a supported pattern. Instead, please refer to the [added example](https://docs.pydantic.dev/latest/examples/dynamic_models/) in the documentation.\n\nThe [blog post](https://pydantic.dev/articles/pydantic-v2-12-release#changes) section on changes was also updated to document the changes related to `serialize_as_any`.\n\n## v2.12.2 (2025-10-14)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.2)\n\n### What's Changed\n\n#### Fixes\n\n* Release a new `pydantic-core` version, as a corrupted CPython 3.10 `manylinux2014_aarch64` wheel got uploaded ([pydantic-core#1843](https://github.com/pydantic/pydantic-core/pull/1843)).\n* Fix issue with recursive generic models with a parent model class by [@Viicos](https://github.com/Viicos) in [#12398](https://github.com/pydantic/pydantic/pull/12398)\n\n## v2.12.1 (2025-10-13)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.1)\n\n### What's Changed\n\nThis is the first 2.12 patch release, addressing most (but not all yet) regressions from the initial 2.12.0 release.\n\n#### Fixes\n\n* Do not evaluate annotations when inspecting validators and serializers by [@Viicos](https://github.com/Viicos) in [#12355](https://github.com/pydantic/pydantic/pull/12355)\n* Make sure `None` is converted as `NoneType` in Python 3.14 by [@Viicos](https://github.com/Viicos) in [#12370](https://github.com/pydantic/pydantic/pull/12370)\n* Backport V1 runtime warning when using Python 3.14 by [@Viicos](https://github.com/Viicos) in [#12367](https://github.com/pydantic/pydantic/pull/12367)\n* Fix error message for invalid validator signatures by [@Viicos](https://github.com/Viicos) in [#12366](https://github.com/pydantic/pydantic/pull/12366)\n* Populate field name in `ValidationInfo` for validation of default value by [@Viicos](https://github.com/Viicos) in [pydantic-core#1826](https://github.com/pydantic/pydantic-core/pull/1826)\n* Encode credentials in `MultiHostUrl` builder by [@willswire](https://github.com/willswire) in [pydantic-core#1829](https://github.com/pydantic/pydantic-core/pull/1829)\n* Respect field serializers when using `serialize_as_any` serialization flag by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1829](https://github.com/pydantic/pydantic-core/pull/1829)\n* Fix various `RootModel` serialization issues by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1836](https://github.com/pydantic/pydantic-core/pull/1836)\n\n### New Contributors\n\n* [@willswire](https://github.com/willswire) made their first contribution in [pydantic-core#1829](https://github.com/pydantic/pydantic-core/pull/1829)\n\n## v2.12.0 (2025-10-07)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.0)\n\nThis is the final 2.12 release. It features the work of 20 external contributors and provides useful new features, along with initial Python 3.14 support.\nSeveral minor changes (considered non-breaking changes according to our [versioning policy](https://docs.pydantic.dev/2.12/version-policy/#pydantic-v2))\nare also included in this release. Make sure to look into them before upgrading.\n\n**Note that Pydantic V1 is not compatible with Python 3.14 and greater**.\n\n### What's Changed\n\nSee the beta releases for all changes sinces 2.11.\n\n#### New Features\n\n* Add `extra` parameter to the validate functions by [@anvilpete](https://github.com/anvilpete) in [#12233](https://github.com/pydantic/pydantic/pull/12233)\n* Add `exclude_computed_fields` serialization option by [@Viicos](https://github.com/Viicos) in [#12334](https://github.com/pydantic/pydantic/pull/12334)\n* Add `preverse_empty_path` URL options by [@Viicos](https://github.com/Viicos) in [#12336](https://github.com/pydantic/pydantic/pull/12336)\n* Add `union_format` parameter to JSON Schema generation by [@Viicos](https://github.com/Viicos) in [#12147](https://github.com/pydantic/pydantic/pull/12147)\n* Add `__qualname__` parameter for `create_model` by [@Atry](https://github.com/Atry) in [#12001](https://github.com/pydantic/pydantic/pull/12001)\n\n#### Fixes\n\n* Do not try to infer name from lambda definitions in pipelines API by [@Viicos](https://github.com/Viicos) in [#12289](https://github.com/pydantic/pydantic/pull/12289)\n* Use proper namespace for functions in `TypeAdapter` by [@Viicos](https://github.com/Viicos) in [#12324](https://github.com/pydantic/pydantic/pull/12324)\n* Use `Any` for context type annotation in `TypeAdapter` by [@inducer](https://github.com/inducer) in [#12279](https://github.com/pydantic/pydantic/pull/12279)\n* Expose `FieldInfo` in `pydantic.fields.__all__` by [@Viicos](https://github.com/Viicos) in [#12339](https://github.com/pydantic/pydantic/pull/12339)\n* Respect `validation_alias` in `@validate_call` by [@Viicos](https://github.com/Viicos) in [#12340](https://github.com/pydantic/pydantic/pull/12340)\n* Use `Any` as context annotation in plugin API by [@Viicos](https://github.com/Viicos) in [#12341](https://github.com/pydantic/pydantic/pull/12341)\n* Use proper `stacklevel` in warnings when possible by [@Viicos](https://github.com/Viicos) in [#12342](https://github.com/pydantic/pydantic/pull/12342)\n\n#### Packaging\n\n* Update V1 copy to v1.10.24 by [@Viicos](https://github.com/Viicos) in [#12338](https://github.com/pydantic/pydantic/pull/12338)\n\n### New Contributors\n\n* [@anvilpete](https://github.com/anvilpete) made their first contribution in [#12233](https://github.com/pydantic/pydantic/pull/12233)\n* [@JonathanWindell](https://github.com/JonathanWindell) made their first contribution in [#12327](https://github.com/pydantic/pydantic/pull/12327)\n* [@inducer](https://github.com/inducer) made their first contribution in [#12279](https://github.com/pydantic/pydantic/pull/12279)\n* [@Atry](https://github.com/Atry) made their first contribution in [#12001](https://github.com/pydantic/pydantic/pull/12001)\n\n## v2.12.0b1 (2025-10-03)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.0b1)\n\nThis is the first beta release of the upcoming 2.12 release.\n\n### What's Changed\n\n#### New Features\n\n* Add support for `exclude_if` at the field level by [@andresliszt](https://github.com/andresliszt) in [#12141](https://github.com/pydantic/pydantic/pull/12141)\n* Add `ValidateAs` annotation helper by [@Viicos](https://github.com/Viicos) in [#11942](https://github.com/pydantic/pydantic/pull/11942)\n* Add configuration options for validation and JSON serialization of temporal types by [@ollz272](https://github.com/ollz272) in [#12068](https://github.com/pydantic/pydantic/pull/12068)\n* Add support for PEP 728 by [@Viicos](https://github.com/Viicos) in [#12179](https://github.com/pydantic/pydantic/pull/12179)\n* Add field name in serialization error by [@NicolasPllr1](https://github.com/NicolasPllr1) in [pydantic-core#1799](https://github.com/pydantic/pydantic-core/pull/1799)\n* Add option to preserve empty URL paths by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1789](https://github.com/pydantic/pydantic-core/pull/1789)\n\n#### Changes\n\n* Raise error if an incompatible `pydantic-core` version is installed by [@Viicos](https://github.com/Viicos) in [#12196](https://github.com/pydantic/pydantic/pull/12196)\n* Remove runtime warning for experimental features by [@Viicos](https://github.com/Viicos) in [#12265](https://github.com/pydantic/pydantic/pull/12265)\n* Warn if registering virtual subclasses on Pydantic models by [@Viicos](https://github.com/Viicos) in [#11669](https://github.com/pydantic/pydantic/pull/11669)\n\n#### Fixes\n\n* Fix `__getattr__()` behavior on Pydantic models when a property raised an `AttributeError` and extra values are present by [@raspuchin](https://github.com/raspuchin) in [#12106](https://github.com/pydantic/pydantic/pull/12106)\n* Add test to prevent regression with Pydantic models used as annotated metadata by [@Viicos](https://github.com/Viicos) in [#12133](https://github.com/pydantic/pydantic/pull/12133)\n* Allow to use property setters on Pydantic dataclasses with `validate_assignment` set by [@Viicos](https://github.com/Viicos) in [#12173](https://github.com/pydantic/pydantic/pull/12173)\n* Fix mypy v2 plugin for upcoming mypy release by [@cdce8p](https://github.com/cdce8p) in [#12209](https://github.com/pydantic/pydantic/pull/12209)\n* Respect custom title in functions JSON Schema by [@Viicos](https://github.com/Viicos) in [#11892](https://github.com/pydantic/pydantic/pull/11892)\n* Fix `ImportString` JSON serialization for objects with a `name` attribute by [@chr1sj0nes](https://github.com/chr1sj0nes) in [#12219](https://github.com/pydantic/pydantic/pull/12219)\n* Do not error on fields overridden by methods in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#12290](https://github.com/pydantic/pydantic/pull/12290)\n\n#### Packaging\n\n* Bump `pydantic-core` to v2.40.1 by [@Viicos](https://github.com/Viicos) in [#12314](https://github.com/pydantic/pydantic/pull/12314)\n\n### New Contributors\n\n* [@raspuchin](https://github.com/raspuchin) made their first contribution in [#12106](https://github.com/pydantic/pydantic/pull/12106)\n* [@chr1sj0nes](https://github.com/chr1sj0nes) made their first contribution in [#12219](https://github.com/pydantic/pydantic/pull/12219)\n\n## v2.12.0a1 (2025-07-26)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.0a1)\n\nThis is the first alpha release of the upcoming 2.12 release, which adds initial support for Python 3.14.\n\n### What's Changed\n\n#### New Features\n\n* Add `__pydantic_on_complete__()` hook that is called once model is fully ready to be used by [@DouweM](https://github.com/DouweM) in [#11762](https://github.com/pydantic/pydantic/pull/11762)\n* Add initial support for Python 3.14 by [@Viicos](https://github.com/Viicos) in [#11991](https://github.com/pydantic/pydantic/pull/11991)\n* Add regex patterns to JSON schema for `Decimal` type by [@Dima-Bulavenko](https://github.com/Dima-Bulavenko) in [#11987](https://github.com/pydantic/pydantic/pull/11987)\n* Add support for `doc` attribute on dataclass fields by [@Viicos](https://github.com/Viicos) in [#12077](https://github.com/pydantic/pydantic/pull/12077)\n* Add experimental `MISSING` sentinel by [@Viicos](https://github.com/Viicos) in [#11883](https://github.com/pydantic/pydantic/pull/11883)\n\n#### Changes\n\n* Allow config and bases to be specified together in `create_model()` by [@Viicos](https://github.com/Viicos) in [#11714](https://github.com/pydantic/pydantic/pull/11714)\n* Move some field logic out of the `GenerateSchema` class by [@Viicos](https://github.com/Viicos) in [#11733](https://github.com/pydantic/pydantic/pull/11733)\n* Always make use of `inspect.getsourcelines()` for docstring extraction on Python 3.13 and greater by [@Viicos](https://github.com/Viicos) in [#11829](https://github.com/pydantic/pydantic/pull/11829)\n* Only support the latest Mypy version by [@Viicos](https://github.com/Viicos) in [#11832](https://github.com/pydantic/pydantic/pull/11832)\n* Do not implicitly convert after model validators to class methods by [@Viicos](https://github.com/Viicos) in [#11957](https://github.com/pydantic/pydantic/pull/11957)\n* Refactor `FieldInfo` creation implementation by [@Viicos](https://github.com/Viicos) in [#11898](https://github.com/pydantic/pydantic/pull/11898)\n* Make `Secret` covariant by [@bluenote10](https://github.com/bluenote10) in [#12008](https://github.com/pydantic/pydantic/pull/12008)\n* Emit warning when field-specific metadata is used in invalid contexts by [@Viicos](https://github.com/Viicos) in [#12028](https://github.com/pydantic/pydantic/pull/12028)\n\n#### Fixes\n\n* Properly fetch plain serializer function when serializing default value in JSON Schema by [@Viicos](https://github.com/Viicos) in [#11721](https://github.com/pydantic/pydantic/pull/11721)\n* Remove generics cache workaround by [@Viicos](https://github.com/Viicos) in [#11755](https://github.com/pydantic/pydantic/pull/11755)\n* Remove coercion of decimal constraints by [@Viicos](https://github.com/Viicos) in [#11772](https://github.com/pydantic/pydantic/pull/11772)\n* Fix crash when expanding root type in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11735](https://github.com/pydantic/pydantic/pull/11735)\n* Only mark model as complete once all fields are complete by [@DouweM](https://github.com/DouweM) in [#11759](https://github.com/pydantic/pydantic/pull/11759)\n* Do not provide `field_name` in validator core schemas by [@DouweM](https://github.com/DouweM) in [#11761](https://github.com/pydantic/pydantic/pull/11761)\n* Fix issue with recursive generic models by [@Viicos](https://github.com/Viicos) in [#11775](https://github.com/pydantic/pydantic/pull/11775)\n* Fix qualified name comparison of private attributes during namespace inspection by [@karta9821](https://github.com/karta9821) in [#11803](https://github.com/pydantic/pydantic/pull/11803)\n* Make sure Pydantic dataclasses with slots and `validate_assignment` can be unpickled by [@Viicos](https://github.com/Viicos) in [#11769](https://github.com/pydantic/pydantic/pull/11769)\n* Traverse `function-before` schemas during schema gathering by [@Viicos](https://github.com/Viicos) in [#11801](https://github.com/pydantic/pydantic/pull/11801)\n* Fix check for stdlib dataclasses by [@Viicos](https://github.com/Viicos) in [#11822](https://github.com/pydantic/pydantic/pull/11822)\n* Check if `FieldInfo` is complete after applying type variable map by [@Viicos](https://github.com/Viicos) in [#11855](https://github.com/pydantic/pydantic/pull/11855)\n* Do not delete mock validator/serializer in `model_rebuild()` by [@Viicos](https://github.com/Viicos) in [#11890](https://github.com/pydantic/pydantic/pull/11890)\n* Rebuild dataclass fields before schema generation by [@Viicos](https://github.com/Viicos) in [#11949](https://github.com/pydantic/pydantic/pull/11949)\n* Always store the original field assignment on `FieldInfo` by [@Viicos](https://github.com/Viicos) in [#11946](https://github.com/pydantic/pydantic/pull/11946)\n* Do not use deprecated methods as default field values by [@Viicos](https://github.com/Viicos) in [#11914](https://github.com/pydantic/pydantic/pull/11914)\n* Allow callable discriminator to be applied on PEP 695 type aliases by [@Viicos](https://github.com/Viicos) in [#11941](https://github.com/pydantic/pydantic/pull/11941)\n* Suppress core schema generation warning when using `SkipValidation` by [@ygsh0816](https://github.com/ygsh0816) in [#12002](https://github.com/pydantic/pydantic/pull/12002)\n* Do not emit typechecking error for invalid `Field()` default with `validate_default` set to `True` by [@Viicos](https://github.com/Viicos) in [#11988](https://github.com/pydantic/pydantic/pull/11988)\n* Refactor logic to support Pydantic's `Field()` function in dataclasses by [@Viicos](https://github.com/Viicos) in [#12051](https://github.com/pydantic/pydantic/pull/12051)\n\n#### Packaging\n\n* Update project metadata to use PEP 639 by [@Viicos](https://github.com/Viicos) in [#11694](https://github.com/pydantic/pydantic/pull/11694)\n* Bump `mkdocs-llmstxt` to v0.2.0 by [@Viicos](https://github.com/Viicos) in [#11725](https://github.com/pydantic/pydantic/pull/11725)\n* Bump `pydantic-core` to v2.35.1 by [@Viicos](https://github.com/Viicos) in [#11963](https://github.com/pydantic/pydantic/pull/11963)\n* Bump dawidd6/action-download-artifact from 10 to 11 by [@dependabot](https://github.com/dependabot)[bot] in [#12033](https://github.com/pydantic/pydantic/pull/12033)\n* Bump astral-sh/setup-uv from 5 to 6 by [@dependabot](https://github.com/dependabot)[bot] in [#11826](https://github.com/pydantic/pydantic/pull/11826)\n* Update mypy to 1.17.0 by [@Viicos](https://github.com/Viicos) in [#12076](https://github.com/pydantic/pydantic/pull/12076)\n\n### New Contributors\n\n* [@parth-paradkar](https://github.com/parth-paradkar) made their first contribution in [#11695](https://github.com/pydantic/pydantic/pull/11695)\n* [@dqkqd](https://github.com/dqkqd) made their first contribution in [#11739](https://github.com/pydantic/pydantic/pull/11739)\n* [@fhightower](https://github.com/fhightower) made their first contribution in [#11722](https://github.com/pydantic/pydantic/pull/11722)\n* [@gbaian10](https://github.com/gbaian10) made their first contribution in [#11766](https://github.com/pydantic/pydantic/pull/11766)\n* [@DouweM](https://github.com/DouweM) made their first contribution in [#11759](https://github.com/pydantic/pydantic/pull/11759)\n* [@bowenliang123](https://github.com/bowenliang123) made their first contribution in [#11719](https://github.com/pydantic/pydantic/pull/11719)\n* [@rawwar](https://github.com/rawwar) made their first contribution in [#11799](https://github.com/pydantic/pydantic/pull/11799)\n* [@karta9821](https://github.com/karta9821) made their first contribution in [#11803](https://github.com/pydantic/pydantic/pull/11803)\n* [@jinnovation](https://github.com/jinnovation) made their first contribution in [#11834](https://github.com/pydantic/pydantic/pull/11834)\n* [@zmievsa](https://github.com/zmievsa) made their first contribution in [#11861](https://github.com/pydantic/pydantic/pull/11861)\n* [@Otto-AA](https://github.com/Otto-AA) made their first contribution in [#11860](https://github.com/pydantic/pydantic/pull/11860)\n* [@ygsh0816](https://github.com/ygsh0816) made their first contribution in [#12002](https://github.com/pydantic/pydantic/pull/12002)\n* [@lukland](https://github.com/lukland) made their first contribution in [#12015](https://github.com/pydantic/pydantic/pull/12015)\n* [@Dima-Bulavenko](https://github.com/Dima-Bulavenko) made their first contribution in [#11987](https://github.com/pydantic/pydantic/pull/11987)\n* [@GSemikozov](https://github.com/GSemikozov) made their first contribution in [#12050](https://github.com/pydantic/pydantic/pull/12050)\n* [@hannah-heywa](https://github.com/hannah-heywa) made their first contribution in [#12082](https://github.com/pydantic/pydantic/pull/12082)\n\n## v2.11.10 (2025-10-04)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.10)\n\n### What's Changed\n\n#### Fixes\n\n* Backport v1.10.24 changes by [@Viicos](https://github.com/Viicos)\n\n## v2.11.9 (2025-09-13)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.9)\n\n### What's Changed\n\n#### Fixes\n\n* Backport v1.10.23 changes by [@Viicos](https://github.com/Viicos)\n\n## v2.11.8 (2025-09-13)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.8)\n\n### What's Changed\n\n#### Fixes\n\n* Fix mypy plugin for mypy 1.18 by [@cdce8p](https://github.com/cdce8p) in [#12209](https://github.com/pydantic/pydantic/pull/12209)\n\n## v2.11.7 (2025-06-14)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.7)\n\n### What's Changed\n\n#### Fixes\n\n* Copy `FieldInfo` instance if necessary during `FieldInfo` build by [@Viicos](https://github.com/Viicos) in [#11898](https://github.com/pydantic/pydantic/pull/11898)\n\n## v2.11.6 (2025-06-13)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.6)\n\n### What's Changed\n\n#### Fixes\n\n* Rebuild dataclass fields before schema generation by [@Viicos](https://github.com/Viicos) in [#11949](https://github.com/pydantic/pydantic/pull/11949)\n* Always store the original field assignment on `FieldInfo` by [@Viicos](https://github.com/Viicos) in [#11946](https://github.com/pydantic/pydantic/pull/11946)\n\n## v2.11.5 (2025-05-22)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.5)\n\n### What's Changed\n\n#### Fixes\n\n* Check if `FieldInfo` is complete after applying type variable map by [@Viicos](https://github.com/Viicos) in [#11855](https://github.com/pydantic/pydantic/pull/11855)\n* Do not delete mock validator/serializer in `model_rebuild()` by [@Viicos](https://github.com/Viicos) in [#11890](https://github.com/pydantic/pydantic/pull/11890)\n* Do not duplicate metadata on model rebuild by [@Viicos](https://github.com/Viicos) in [#11902](https://github.com/pydantic/pydantic/pull/11902)\n\n## v2.11.4 (2025-04-29)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.4)\n\n### What's Changed\n\n#### Changes\n\n* Allow config and bases to be specified together in `create_model()` by [@Viicos](https://github.com/Viicos) in [#11714](https://github.com/pydantic/pydantic/pull/11714).\n This change was backported as it was previously possible (although not meant to be supported)\n to provide `model_config` as a field, which would make it possible to provide both configuration\n and bases.\n\n#### Fixes\n\n* Remove generics cache workaround by [@Viicos](https://github.com/Viicos) in [#11755](https://github.com/pydantic/pydantic/pull/11755)\n* Remove coercion of decimal constraints by [@Viicos](https://github.com/Viicos) in [#11772](https://github.com/pydantic/pydantic/pull/11772)\n* Fix crash when expanding root type in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11735](https://github.com/pydantic/pydantic/pull/11735)\n* Fix issue with recursive generic models by [@Viicos](https://github.com/Viicos) in [#11775](https://github.com/pydantic/pydantic/pull/11775)\n* Traverse `function-before` schemas during schema gathering by [@Viicos](https://github.com/Viicos) in [#11801](https://github.com/pydantic/pydantic/pull/11801)\n\n#### Packaging\n\n* Bump `mkdocs-llmstxt` to v0.2.0 by [@Viicos](https://github.com/Viicos) in [#11725](https://github.com/pydantic/pydantic/pull/11725)\n\n## v2.11.3 (2025-04-08)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.3)\n\n### What's Changed\n\n#### Fixes\n\n* Preserve field description when rebuilding model fields by [@Viicos](https://github.com/Viicos) in [#11698](https://github.com/pydantic/pydantic/pull/11698)\n\n#### Packaging\n\n* Update V1 copy to v1.10.21 by [@Viicos](https://github.com/Viicos) in [#11706](https://github.com/pydantic/pydantic/pull/11706)\n\n## v2.11.2 (2025-04-03)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.2)\n\n### What's Changed\n\n#### Fixes\n\n* Bump `pydantic-core` to v2.33.1 by [@Viicos](https://github.com/Viicos) in [#11678](https://github.com/pydantic/pydantic/pull/11678)\n* Make sure `__pydantic_private__` exists before setting private attributes by [@Viicos](https://github.com/Viicos) in [#11666](https://github.com/pydantic/pydantic/pull/11666)\n* Do not override `FieldInfo._complete` when using field from parent class by [@Viicos](https://github.com/Viicos) in [#11668](https://github.com/pydantic/pydantic/pull/11668)\n* Provide the available definitions when applying discriminated unions by [@Viicos](https://github.com/Viicos) in [#11670](https://github.com/pydantic/pydantic/pull/11670)\n* Do not expand root type in the mypy plugin for variables by [@Viicos](https://github.com/Viicos) in [#11676](https://github.com/pydantic/pydantic/pull/11676)\n* Mention the attribute name in model fields deprecation message by [@Viicos](https://github.com/Viicos) in [#11674](https://github.com/pydantic/pydantic/pull/11674)\n* Properly validate parameterized mappings by [@Viicos](https://github.com/Viicos) in [#11658](https://github.com/pydantic/pydantic/pull/11658)\n\n## v2.11.1 (2025-03-28)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.1)\n\n### What's Changed\n\n#### Fixes\n\n* Do not override `'definitions-ref'` schemas containing serialization schemas or metadata by [@Viicos](https://github.com/Viicos) in [#11644](https://github.com/pydantic/pydantic/pull/11644)\n\n## v2.11.0 (2025-03-27)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0)\n\n### What's Changed\n\nPydantic v2.11 is a version strongly focused on build time performance of Pydantic models (and core schema generation in general).\nSee the [blog post](https://pydantic.dev/articles/pydantic-v2-11-release) for more details.\n\n#### New Features\n\n* Add `encoded_string()` method to the URL types by [@YassinNouh21](https://github.com/YassinNouh21) in [#11580](https://github.com/pydantic/pydantic/pull/11580)\n* Add support for `defer_build` with `@validate_call` decorator by [@Viicos](https://github.com/Viicos) in [#11584](https://github.com/pydantic/pydantic/pull/11584)\n* Allow `@with_config` decorator to be used with keyword arguments by [@Viicos](https://github.com/Viicos) in [#11608](https://github.com/pydantic/pydantic/pull/11608)\n* Simplify customization of default value inclusion in JSON Schema generation by [@Viicos](https://github.com/Viicos) in [#11634](https://github.com/pydantic/pydantic/pull/11634)\n* Add `generate_arguments_schema()` function by [@Viicos](https://github.com/Viicos) in [#11572](https://github.com/pydantic/pydantic/pull/11572)\n\n#### Fixes\n\n* Allow generic typed dictionaries to be used for unpacked variadic keyword parameters by [@Viicos](https://github.com/Viicos) in [#11571](https://github.com/pydantic/pydantic/pull/11571)\n* Fix runtime error when computing model string representation involving cached properties and self-referenced models by [@Viicos](https://github.com/Viicos) in [#11579](https://github.com/pydantic/pydantic/pull/11579)\n* Preserve other steps when using the ellipsis in the pipeline API by [@Viicos](https://github.com/Viicos) in [#11626](https://github.com/pydantic/pydantic/pull/11626)\n* Fix deferred discriminator application logic by [@Viicos](https://github.com/Viicos) in [#11591](https://github.com/pydantic/pydantic/pull/11591)\n\n#### Packaging\n\n* Bump `pydantic-core` to v2.33.0 by [@Viicos](https://github.com/Viicos) in [#11631](https://github.com/pydantic/pydantic/pull/11631)\n\n### New Contributors\n\n* [@cmenon12](https://github.com/cmenon12) made their first contribution in [#11562](https://github.com/pydantic/pydantic/pull/11562)\n* [@Jeukoh](https://github.com/Jeukoh) made their first contribution in [#11611](https://github.com/pydantic/pydantic/pull/11611)\n\n## v2.11.0b2 (2025-03-17)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0b2)\n\n### What's Changed\n\n#### New Features\n\n* Add experimental support for free threading by [@Viicos](https://github.com/Viicos) in [#11516](https://github.com/pydantic/pydantic/pull/11516)\n\n#### Fixes\n\n* Fix `NotRequired` qualifier not taken into account in stringified annotation by [@Viicos](https://github.com/Viicos) in [#11559](https://github.com/pydantic/pydantic/pull/11559)\n\n#### Packaging\n\n* Bump `pydantic-core` to v2.32.0 by [@Viicos](https://github.com/Viicos) in [#11567](https://github.com/pydantic/pydantic/pull/11567)\n\n### New Contributors\n\n* [@joren485](https://github.com/joren485) made their first contribution in [#11547](https://github.com/pydantic/pydantic/pull/11547)\n\n## v2.11.0b1 (2025-03-06)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0b1)\n\n### What's Changed\n\n#### New Features\n\n* Support unsubstituted type variables with both a default and a bound or constraints by [@FyZzyss](https://github.com/FyZzyss) in https://github.com/pydantic/pydantic/pull/10789\n* Add a `default_factory_takes_validated_data` property to `FieldInfo` by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11034\n* Raise a better error when a generic alias is used inside `type[]` by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11088\n* Properly support PEP 695 generics syntax by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11189\n* Properly support type variable defaults by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11332\n* Add support for validating v6, v7, v8 UUIDs by [@astei](https://github.com/astei) in https://github.com/pydantic/pydantic/pull/11436\n* Improve alias configuration APIs by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11468\n\n#### Changes\n\n* Rework `create_model` field definitions format by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11032\n* Raise a deprecation warning when a field is annotated as final with a default value by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11168\n* Deprecate accessing `model_fields` and `model_computed_fields` on instances by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11169\n* **Breaking Change:** Move core schema generation logic for path types inside the `GenerateSchema` class by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/10846\n* Remove Python 3.8 Support by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11258\n* Optimize calls to `get_type_ref` by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/10863\n* Disable `pydantic-core` core schema validation by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11271\n\n#### Performance\n\n* Only evaluate `FieldInfo` annotations if required during schema building by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/10769\n* Improve `__setattr__` performance of Pydantic models by caching setter functions by [@MarkusSintonen](https://github.com/MarkusSintonen) in https://github.com/pydantic/pydantic/pull/10868\n* Improve annotation application performance by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11186\n* Improve performance of `_typing_extra` module by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11255\n* Refactor and optimize schema cleaning logic by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11244\n* Create a single dictionary when creating a `CoreConfig` instance by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11384\n* Bump `pydantic-core` and thus use `SchemaValidator` and `SchemaSerializer` caching by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11402\n* Reuse cached core schemas for parametrized generic Pydantic models by [@MarkusSintonen](https://github.com/MarkusSintonen) in https://github.com/pydantic/pydantic/pull/11434\n\n#### Fixes\n\n* Improve `TypeAdapter` instance repr by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/10872\n* Use the correct frame when instantiating a parametrized `TypeAdapter` by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/10893\n* Infer final fields with a default value as class variables in the mypy plugin by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11121\n* Recursively unpack `Literal` values if using PEP 695 type aliases by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11114\n* Override `__subclasscheck__` on `ModelMetaclass` to avoid memory leak and performance issues by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11116\n* Remove unused `_extract_get_pydantic_json_schema()` parameter by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11155\n* Improve discriminated union error message for invalid union variants by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11161\n* Unpack PEP 695 type aliases if using the `Annotated` form by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11109\n* Add missing stacklevel in `deprecated_instance_property` warning by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11200\n* Copy `WithJsonSchema` schema to avoid sharing mutated data by [@thejcannon](https://github.com/thejcannon) in https://github.com/pydantic/pydantic/pull/11014\n* Do not cache parametrized models when in the process of parametrizing another model by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/10704\n* Add discriminated union related metadata entries to the `CoreMetadata` definition by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11216\n* Consolidate schema definitions logic in the `_Definitions` class by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11208\n* Support initializing root model fields with values of the `root` type in the mypy plugin by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11212\n* Fix various issues with dataclasses and `use_attribute_docstrings` by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11246\n* Only compute normalized decimal places if necessary in `decimal_places_validator` by [@misrasaurabh1](https://github.com/misrasaurabh1) in https://github.com/pydantic/pydantic/pull/11281\n* Add support for `validation_alias` in the mypy plugin by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11295\n* Fix JSON Schema reference collection with `\"examples\"` keys by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11305\n* Do not transform model serializer functions as class methods in the mypy plugin by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11298\n* Simplify `GenerateJsonSchema.literal_schema()` implementation by [@misrasaurabh1](https://github.com/misrasaurabh1) in https://github.com/pydantic/pydantic/pull/11321\n* Add additional allowed schemes for `ClickHouseDsn` by [@Maze21127](https://github.com/Maze21127) in https://github.com/pydantic/pydantic/pull/11319\n* Coerce decimal constraints to `Decimal` instances by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11350\n* Use the correct JSON Schema mode when handling function schemas by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11367\n* Improve exception message when encountering recursion errors during type evaluation by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11356\n* Always include `additionalProperties: True` for arbitrary dictionary schemas by [@austinyu](https://github.com/austinyu) in https://github.com/pydantic/pydantic/pull/11392\n* Expose `fallback` parameter in serialization methods by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11398\n* Fix path serialization behavior by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11416\n* Do not reuse validators and serializers during model rebuild by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11429\n* Collect model fields when rebuilding a model by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11388\n* Allow cached properties to be altered on frozen models by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11432\n* Fix tuple serialization for `Sequence` types by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11435\n* Fix: do not check for `__get_validators__` on classes where `__get_pydantic_core_schema__` is also defined by [@tlambert03](https://github.com/tlambert03) in https://github.com/pydantic/pydantic/pull/11444\n* Allow callable instances to be used as serializers by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11451\n* Improve error thrown when overriding field with a property by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11459\n* Fix JSON Schema generation with referenceable core schemas holding JSON metadata by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11475\n* Support strict specification on union member types by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11481\n* Implicitly set `validate_by_name` to `True` when `validate_by_alias` is `False` by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11503\n* Change type of `Any` when synthesizing `BaseSettings.__init__` signature in the mypy plugin by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11497\n* Support type variable defaults referencing other type variables by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11520\n* Fix `ValueError` on year zero by [@davidhewitt](https://github.com/davidhewitt) in https://github.com/pydantic/pydantic-core/pull/1583\n* `dataclass` `InitVar` shouldn't be required on serialization by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic-core/pull/1602\n\n#### Packaging\n\n* Add a `check_pydantic_core_version()` function by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11324\n* Remove `greenlet` development dependency by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11351\n* Use the `typing-inspection` library by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11479\n* Bump `pydantic-core` to `v2.31.1` by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11526\n\n## New Contributors\n\n* [@FyZzyss](https://github.com/FyZzyss) made their first contribution in https://github.com/pydantic/pydantic/pull/10789\n* [@tamird](https://github.com/tamird) made their first contribution in https://github.com/pydantic/pydantic/pull/10948\n* [@felixxm](https://github.com/felixxm) made their first contribution in https://github.com/pydantic/pydantic/pull/11077\n* [@alexprabhat99](https://github.com/alexprabhat99) made their first contribution in https://github.com/pydantic/pydantic/pull/11082\n* [@Kharianne](https://github.com/Kharianne) made their first contribution in https://github.com/pydantic/pydantic/pull/11111\n* [@mdaffad](https://github.com/mdaffad) made their first contribution in https://github.com/pydantic/pydantic/pull/11177\n* [@thejcannon](https://github.com/thejcannon) made their first contribution in https://github.com/pydantic/pydantic/pull/11014\n* [@thomasfrimannkoren](https://github.com/thomasfrimannkoren) made their first contribution in https://github.com/pydantic/pydantic/pull/11251\n* [@usernameMAI](https://github.com/usernameMAI) made their first contribution in https://github.com/pydantic/pydantic/pull/11275\n* [@ananiavito](https://github.com/ananiavito) made their first contribution in https://github.com/pydantic/pydantic/pull/11302\n* [@pawamoy](https://github.com/pawamoy) made their first contribution in https://github.com/pydantic/pydantic/pull/11311\n* [@Maze21127](https://github.com/Maze21127) made their first contribution in https://github.com/pydantic/pydantic/pull/11319\n* [@kauabh](https://github.com/kauabh) made their first contribution in https://github.com/pydantic/pydantic/pull/11369\n* [@jaceklaskowski](https://github.com/jaceklaskowski) made their first contribution in https://github.com/pydantic/pydantic/pull/11353\n* [@tmpbeing](https://github.com/tmpbeing) made their first contribution in https://github.com/pydantic/pydantic/pull/11375\n* [@petyosi](https://github.com/petyosi) made their first contribution in https://github.com/pydantic/pydantic/pull/11405\n* [@austinyu](https://github.com/austinyu) made their first contribution in https://github.com/pydantic/pydantic/pull/11392\n* [@mikeedjones](https://github.com/mikeedjones) made their first contribution in https://github.com/pydantic/pydantic/pull/11402\n* [@astei](https://github.com/astei) made their first contribution in https://github.com/pydantic/pydantic/pull/11436\n* [@dsayling](https://github.com/dsayling) made their first contribution in https://github.com/pydantic/pydantic/pull/11522\n* [@sobolevn](https://github.com/sobolevn) made their first contribution in https://github.com/pydantic/pydantic-core/pull/1645\n\n## v2.11.0a2 (2025-02-10)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0a2)\n\n### What's Changed\n\nPydantic v2.11 is a version strongly focused on build time performance of Pydantic models (and core schema generation in general).\nThis is another early alpha release, meant to collect early feedback from users having issues with core schema builds.\n\n#### Performance\n\n* Create a single dictionary when creating a `CoreConfig` instance by [@sydney-runkle](https://github.com/sydney-runkle) in [#11384](https://github.com/pydantic/pydantic/pull/11384)\n\n#### Fixes\n\n* Use the correct JSON Schema mode when handling function schemas by [@Viicos](https://github.com/Viicos) in [#11367](https://github.com/pydantic/pydantic/pull/11367)\n* Fix JSON Schema reference logic with `examples` keys by [@Viicos](https://github.com/Viicos) in [#11366](https://github.com/pydantic/pydantic/pull/11366)\n* Improve exception message when encountering recursion errors during type evaluation by [@Viicos](https://github.com/Viicos) in [#11356](https://github.com/pydantic/pydantic/pull/11356)\n* Always include `additionalProperties: True` for arbitrary dictionary schemas by [@austinyu](https://github.com/austinyu) in [#11392](https://github.com/pydantic/pydantic/pull/11392)\n* Expose `fallback` parameter in serialization methods by [@Viicos](https://github.com/Viicos) in [#11398](https://github.com/pydantic/pydantic/pull/11398)\n* Fix path serialization behavior by [@sydney-runkle](https://github.com/sydney-runkle) in [#11416](https://github.com/pydantic/pydantic/pull/11416)\n\n#### Packaging\n\n* Bump `ruff` from 0.9.2 to 0.9.5 by [@Viicos](https://github.com/Viicos) in [#11407](https://github.com/pydantic/pydantic/pull/11407)\n* Bump `pydantic-core` to v2.29.0 by [@mikeedjones](https://github.com/mikeedjones) in [#11402](https://github.com/pydantic/pydantic/pull/11402)\n* Use locally-built rust with symbols & pgo by [@davidhewitt](https://github.com/davidhewitt) in [#11403](https://github.com/pydantic/pydantic/pull/11403)\n\n### New Contributors\n\n* [@kauabh](https://github.com/kauabh) made their first contribution in [#11369](https://github.com/pydantic/pydantic/pull/11369)\n* [@jaceklaskowski](https://github.com/jaceklaskowski) made their first contribution in [#11353](https://github.com/pydantic/pydantic/pull/11353)\n* [@tmpbeing](https://github.com/tmpbeing) made their first contribution in [#11375](https://github.com/pydantic/pydantic/pull/11375)\n* [@petyosi](https://github.com/petyosi) made their first contribution in [#11405](https://github.com/pydantic/pydantic/pull/11405)\n* [@austinyu](https://github.com/austinyu) made their first contribution in [#11392](https://github.com/pydantic/pydantic/pull/11392)\n* [@mikeedjones](https://github.com/mikeedjones) made their first contribution in [#11402](https://github.com/pydantic/pydantic/pull/11402)\n\n## v2.11.0a1 (2025-01-30)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0a1)\n\n### What's Changed\n\nPydantic v2.11 is a version strongly focused on build time performance of Pydantic models (and core schema generation in general).\nThis is an early alpha release, meant to collect early feedback from users having issues with core schema builds.\n\n#### New Features\n\n* Support unsubstituted type variables with both a default and a bound or constraints by [@FyZzyss](https://github.com/FyZzyss) in [#10789](https://github.com/pydantic/pydantic/pull/10789)\n* Add a `default_factory_takes_validated_data` property to `FieldInfo` by [@Viicos](https://github.com/Viicos) in [#11034](https://github.com/pydantic/pydantic/pull/11034)\n* Raise a better error when a generic alias is used inside `type[]` by [@Viicos](https://github.com/Viicos) in [#11088](https://github.com/pydantic/pydantic/pull/11088)\n* Properly support PEP 695 generics syntax by [@Viicos](https://github.com/Viicos) in [#11189](https://github.com/pydantic/pydantic/pull/11189)\n* Properly support type variable defaults by [@Viicos](https://github.com/Viicos) in [#11332](https://github.com/pydantic/pydantic/pull/11332)\n\n#### Changes\n\n* Rework `create_model` field definitions format by [@Viicos](https://github.com/Viicos) in [#11032](https://github.com/pydantic/pydantic/pull/11032)\n* Raise a deprecation warning when a field is annotated as final with a default value by [@Viicos](https://github.com/Viicos) in [#11168](https://github.com/pydantic/pydantic/pull/11168)\n* Deprecate accessing `model_fields` and `model_computed_fields` on instances by [@Viicos](https://github.com/Viicos) in [#11169](https://github.com/pydantic/pydantic/pull/11169)\n* Move core schema generation logic for path types inside the `GenerateSchema` class by [@sydney-runkle](https://github.com/sydney-runkle) in [#10846](https://github.com/pydantic/pydantic/pull/10846)\n* Move `deque` schema gen to `GenerateSchema` class by [@sydney-runkle](https://github.com/sydney-runkle) in [#11239](https://github.com/pydantic/pydantic/pull/11239)\n* Move `Mapping` schema gen to `GenerateSchema` to complete removal of `prepare_annotations_for_known_type` workaround by [@sydney-runkle](https://github.com/sydney-runkle) in [#11247](https://github.com/pydantic/pydantic/pull/11247)\n* Remove Python 3.8 Support by [@sydney-runkle](https://github.com/sydney-runkle) in [#11258](https://github.com/pydantic/pydantic/pull/11258)\n* Disable `pydantic-core` core schema validation by [@sydney-runkle](https://github.com/sydney-runkle) in [#11271](https://github.com/pydantic/pydantic/pull/11271)\n\n#### Performance\n\n* Only evaluate `FieldInfo` annotations if required during schema building by [@Viicos](https://github.com/Viicos) in [#10769](https://github.com/pydantic/pydantic/pull/10769)\n* Optimize calls to `get_type_ref` by [@Viicos](https://github.com/Viicos) in [#10863](https://github.com/pydantic/pydantic/pull/10863)\n* Improve `__setattr__` performance of Pydantic models by caching setter functions by [@MarkusSintonen](https://github.com/MarkusSintonen) in [#10868](https://github.com/pydantic/pydantic/pull/10868)\n* Improve annotation application performance by [@Viicos](https://github.com/Viicos) in [#11186](https://github.com/pydantic/pydantic/pull/11186)\n* Improve performance of `_typing_extra` module by [@Viicos](https://github.com/Viicos) in [#11255](https://github.com/pydantic/pydantic/pull/11255)\n* Refactor and optimize schema cleaning logic by [@Viicos](https://github.com/Viicos) and [@MarkusSintonen](https://github.com/MarkusSintonen) in [#11244](https://github.com/pydantic/pydantic/pull/11244)\n\n#### Fixes\n\n* Add validation tests for `_internal/_validators.py` by [@tkasuz](https://github.com/tkasuz) in [#10763](https://github.com/pydantic/pydantic/pull/10763)\n* Improve `TypeAdapter` instance repr by [@sydney-runkle](https://github.com/sydney-runkle) in [#10872](https://github.com/pydantic/pydantic/pull/10872)\n* Revert \"ci: use locally built pydantic-core with debug symbols by [@sydney-runkle](https://github.com/sydney-runkle) in [#10942](https://github.com/pydantic/pydantic/pull/10942)\n* Re-enable all FastAPI tests by [@tamird](https://github.com/tamird) in [#10948](https://github.com/pydantic/pydantic/pull/10948)\n* Fix typo in HISTORY.md. by [@felixxm](https://github.com/felixxm) in [#11077](https://github.com/pydantic/pydantic/pull/11077)\n* Infer final fields with a default value as class variables in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11121](https://github.com/pydantic/pydantic/pull/11121)\n* Recursively unpack `Literal` values if using PEP 695 type aliases by [@Viicos](https://github.com/Viicos) in [#11114](https://github.com/pydantic/pydantic/pull/11114)\n* Override `__subclasscheck__` on `ModelMetaclass` to avoid memory leak and performance issues by [@Viicos](https://github.com/Viicos) in [#11116](https://github.com/pydantic/pydantic/pull/11116)\n* Remove unused `_extract_get_pydantic_json_schema()` parameter by [@Viicos](https://github.com/Viicos) in [#11155](https://github.com/pydantic/pydantic/pull/11155)\n* Add FastAPI and SQLModel to third-party tests by [@sydney-runkle](https://github.com/sydney-runkle) in [#11044](https://github.com/pydantic/pydantic/pull/11044)\n* Fix conditional expressions syntax for third-party tests by [@Viicos](https://github.com/Viicos) in [#11162](https://github.com/pydantic/pydantic/pull/11162)\n* Move FastAPI tests to third-party workflow by [@Viicos](https://github.com/Viicos) in [#11164](https://github.com/pydantic/pydantic/pull/11164)\n* Improve discriminated union error message for invalid union variants by [@Viicos](https://github.com/Viicos) in [#11161](https://github.com/pydantic/pydantic/pull/11161)\n* Unpack PEP 695 type aliases if using the `Annotated` form by [@Viicos](https://github.com/Viicos) in [#11109](https://github.com/pydantic/pydantic/pull/11109)\n* Include `openapi-python-client` check in issue creation for third-party failures, use `main` branch by [@sydney-runkle](https://github.com/sydney-runkle) in [#11182](https://github.com/pydantic/pydantic/pull/11182)\n* Add pandera third-party tests by [@Viicos](https://github.com/Viicos) in [#11193](https://github.com/pydantic/pydantic/pull/11193)\n* Add ODMantic third-party tests by [@sydney-runkle](https://github.com/sydney-runkle) in [#11197](https://github.com/pydantic/pydantic/pull/11197)\n* Add missing stacklevel in `deprecated_instance_property` warning by [@Viicos](https://github.com/Viicos) in [#11200](https://github.com/pydantic/pydantic/pull/11200)\n* Copy `WithJsonSchema` schema to avoid sharing mutated data by [@thejcannon](https://github.com/thejcannon) in [#11014](https://github.com/pydantic/pydantic/pull/11014)\n* Do not cache parametrized models when in the process of parametrizing another model by [@Viicos](https://github.com/Viicos) in [#10704](https://github.com/pydantic/pydantic/pull/10704)\n* Re-enable Beanie third-party tests by [@Viicos](https://github.com/Viicos) in [#11214](https://github.com/pydantic/pydantic/pull/11214)\n* Add discriminated union related metadata entries to the `CoreMetadata` definition by [@Viicos](https://github.com/Viicos) in [#11216](https://github.com/pydantic/pydantic/pull/11216)\n* Consolidate schema definitions logic in the `_Definitions` class by [@Viicos](https://github.com/Viicos) in [#11208](https://github.com/pydantic/pydantic/pull/11208)\n* Support initializing root model fields with values of the `root` type in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11212](https://github.com/pydantic/pydantic/pull/11212)\n* Fix various issues with dataclasses and `use_attribute_docstrings` by [@Viicos](https://github.com/Viicos) in [#11246](https://github.com/pydantic/pydantic/pull/11246)\n* Only compute normalized decimal places if necessary in `decimal_places_validator` by [@misrasaurabh1](https://github.com/misrasaurabh1) in [#11281](https://github.com/pydantic/pydantic/pull/11281)\n* Fix two misplaced sentences in validation errors documentation by [@ananiavito](https://github.com/ananiavito) in [#11302](https://github.com/pydantic/pydantic/pull/11302)\n* Fix mkdocstrings inventory example in documentation by [@pawamoy](https://github.com/pawamoy) in [#11311](https://github.com/pydantic/pydantic/pull/11311)\n* Add support for `validation_alias` in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11295](https://github.com/pydantic/pydantic/pull/11295)\n* Do not transform model serializer functions as class methods in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11298](https://github.com/pydantic/pydantic/pull/11298)\n* Simplify `GenerateJsonSchema.literal_schema()` implementation by [@misrasaurabh1](https://github.com/misrasaurabh1) in [#11321](https://github.com/pydantic/pydantic/pull/11321)\n* Add additional allowed schemes for `ClickHouseDsn` by [@Maze21127](https://github.com/Maze21127) in [#11319](https://github.com/pydantic/pydantic/pull/11319)\n* Coerce decimal constraints to `Decimal` instances by [@Viicos](https://github.com/Viicos) in [#11350](https://github.com/pydantic/pydantic/pull/11350)\n* Fix `ValueError` on year zero by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1583](https://github.com/pydantic/pydantic-core/pull/1583)\n\n#### Packaging\n\n* Bump dawidd6/action-download-artifact from 6 to 7 by [@dependabot](https://github.com/dependabot) in [#11018](https://github.com/pydantic/pydantic/pull/11018)\n* Re-enable memray related tests on Python 3.12+ by [@Viicos](https://github.com/Viicos) in [#11191](https://github.com/pydantic/pydantic/pull/11191)\n* Bump astral-sh/setup-uv to 5 by [@dependabot](https://github.com/dependabot) in [#11205](https://github.com/pydantic/pydantic/pull/11205)\n* Bump `ruff` to v0.9.0 by [@sydney-runkle](https://github.com/sydney-runkle) in [#11254](https://github.com/pydantic/pydantic/pull/11254)\n* Regular `uv.lock` deps update by [@sydney-runkle](https://github.com/sydney-runkle) in [#11333](https://github.com/pydantic/pydantic/pull/11333)\n* Add a `check_pydantic_core_version()` function by [@Viicos](https://github.com/Viicos) in [#11324](https://github.com/pydantic/pydantic/pull/11324)\n* Remove `greenlet` development dependency by [@Viicos](https://github.com/Viicos) in [#11351](https://github.com/pydantic/pydantic/pull/11351)\n* Bump `pydantic-core` to v2.28.0 by [@Viicos](https://github.com/Viicos) in [#11364](https://github.com/pydantic/pydantic/pull/11364)\n\n### New Contributors\n\n* [@FyZzyss](https://github.com/FyZzyss) made their first contribution in [#10789](https://github.com/pydantic/pydantic/pull/10789)\n* [@tamird](https://github.com/tamird) made their first contribution in [#10948](https://github.com/pydantic/pydantic/pull/10948)\n* [@felixxm](https://github.com/felixxm) made their first contribution in [#11077](https://github.com/pydantic/pydantic/pull/11077)\n* [@alexprabhat99](https://github.com/alexprabhat99) made their first contribution in [#11082](https://github.com/pydantic/pydantic/pull/11082)\n* [@Kharianne](https://github.com/Kharianne) made their first contribution in [#11111](https://github.com/pydantic/pydantic/pull/11111)\n* [@mdaffad](https://github.com/mdaffad) made their first contribution in [#11177](https://github.com/pydantic/pydantic/pull/11177)\n* [@thejcannon](https://github.com/thejcannon) made their first contribution in [#11014](https://github.com/pydantic/pydantic/pull/11014)\n* [@thomasfrimannkoren](https://github.com/thomasfrimannkoren) made their first contribution in [#11251](https://github.com/pydantic/pydantic/pull/11251)\n* [@usernameMAI](https://github.com/usernameMAI) made their first contribution in [#11275](https://github.com/pydantic/pydantic/pull/11275)\n* [@ananiavito](https://github.com/ananiavito) made their first contribution in [#11302](https://github.com/pydantic/pydantic/pull/11302)\n* [@pawamoy](https://github.com/pawamoy) made their first contribution in [#11311](https://github.com/pydantic/pydantic/pull/11311)\n* [@Maze21127](https://github.com/Maze21127) made their first contribution in [#11319](https://github.com/pydantic/pydantic/pull/11319)\n\n## v2.10.6 (2025-01-23)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.6)\n\n### What's Changed\n\n#### Fixes\n\n* Fix JSON Schema reference collection with `'examples'` keys by [@Viicos](https://github.com/Viicos) in [#11325](https://github.com/pydantic/pydantic/pull/11325)\n* Fix url python serialization by [@sydney-runkle](https://github.com/sydney-runkle) in [#11331](https://github.com/pydantic/pydantic/pull/11331)\n\n## v2.10.5 (2025-01-08)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.5)\n\n### What's Changed\n\n#### Fixes\n\n* Remove custom MRO implementation of Pydantic models by [@Viicos](https://github.com/Viicos) in [#11184](https://github.com/pydantic/pydantic/pull/11184)\n* Fix URL serialization for unions by [@sydney-runkle](https://github.com/sydney-runkle) in [#11233](https://github.com/pydantic/pydantic/pull/11233)\n\n## v2.10.4 (2024-12-18)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.4)\n\n### What's Changed\n\n#### Fixes\n\n* Fix for comparison of `AnyUrl` objects by [@alexprabhat99](https://github.com/alexprabhat99) in [#11082](https://github.com/pydantic/pydantic/pull/11082)\n* Properly fetch PEP 695 type params for functions, do not fetch annotations from signature by [@Viicos](https://github.com/Viicos) in [#11093](https://github.com/pydantic/pydantic/pull/11093)\n* Include JSON Schema input core schema in function schemas by [@Viicos](https://github.com/Viicos) in [#11085](https://github.com/pydantic/pydantic/pull/11085)\n* Add `len` to `_BaseUrl` to avoid TypeError by [@Kharianne](https://github.com/Kharianne) in [#11111](https://github.com/pydantic/pydantic/pull/11111)\n* Make sure the type reference is removed from the seen references by [@Viicos](https://github.com/Viicos) in [#11143](https://github.com/pydantic/pydantic/pull/11143)\n\n### New Contributors\n\n* [@FyZzyss](https://github.com/FyZzyss) made their first contribution in [#10789](https://github.com/pydantic/pydantic/pull/10789)\n* [@tamird](https://github.com/tamird) made their first contribution in [#10948](https://github.com/pydantic/pydantic/pull/10948)\n* [@felixxm](https://github.com/felixxm) made their first contribution in [#11077](https://github.com/pydantic/pydantic/pull/11077)\n* [@alexprabhat99](https://github.com/alexprabhat99) made their first contribution in [#11082](https://github.com/pydantic/pydantic/pull/11082)\n* [@Kharianne](https://github.com/Kharianne) made their first contribution in [#11111](https://github.com/pydantic/pydantic/pull/11111)\n\n#### Packaging\n\n* Bump `pydantic-core` to v2.27.2 by [@davidhewitt](https://github.com/davidhewitt) in [#11138](https://github.com/pydantic/pydantic/pull/11138)\n\n## v2.10.3 (2024-12-03)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.3)\n\n### What's Changed\n\n#### Fixes\n\n* Set fields when `defer_build` is set on Pydantic dataclasses by [@Viicos](https://github.com/Viicos) in [#10984](https://github.com/pydantic/pydantic/pull/10984)\n* Do not resolve the JSON Schema reference for `dict` core schema keys by [@Viicos](https://github.com/Viicos) in [#10989](https://github.com/pydantic/pydantic/pull/10989)\n* Use the globals of the function when evaluating the return type for `PlainSerializer` and `WrapSerializer` functions by [@Viicos](https://github.com/Viicos) in [#11008](https://github.com/pydantic/pydantic/pull/11008)\n* Fix host required enforcement for urls to be compatible with v2.9 behavior by [@sydney-runkle](https://github.com/sydney-runkle) in [#11027](https://github.com/pydantic/pydantic/pull/11027)\n* Add a `default_factory_takes_validated_data` property to `FieldInfo` by [@Viicos](https://github.com/Viicos) in [#11034](https://github.com/pydantic/pydantic/pull/11034)\n* Fix url json schema in `serialization` mode by [@sydney-runkle](https://github.com/sydney-runkle) in [#11035](https://github.com/pydantic/pydantic/pull/11035)\n\n## v2.10.2 (2024-11-25)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.2)\n\n### What's Changed\n\n#### Fixes\n\n* Only evaluate FieldInfo annotations if required during schema building by [@Viicos](https://github.com/Viicos) in [#10769](https://github.com/pydantic/pydantic/pull/10769)\n* Do not evaluate annotations for private fields by [@Viicos](https://github.com/Viicos) in [#10962](https://github.com/pydantic/pydantic/pull/10962)\n* Support serialization as any for `Secret` types and `Url` types by [@sydney-runkle](https://github.com/sydney-runkle) in [#10947](https://github.com/pydantic/pydantic/pull/10947)\n* Fix type hint of `Field.default` to be compatible with Python 3.8 and 3.9 by [@Viicos](https://github.com/Viicos) in [#10972](https://github.com/pydantic/pydantic/pull/10972)\n* Add hashing support for URL types by [@sydney-runkle](https://github.com/sydney-runkle) in [#10975](https://github.com/pydantic/pydantic/pull/10975)\n* Hide `BaseModel.__replace__` definition from type checkers by [@Viicos](https://github.com/Viicos) in [#10979](https://github.com/pydantic/pydantic/pull/10979)\n\n## v2.10.1 (2024-11-21)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.1)\n\n### What's Changed\n\n#### Fixes\n\n* Use the correct frame when instantiating a parametrized `TypeAdapter` by [@Viicos](https://github.com/Viicos) in [#10893](https://github.com/pydantic/pydantic/pull/10893)\n* Relax check for validated data in `default_factory` utils by [@sydney-runkle](https://github.com/sydney-runkle) in [#10909](https://github.com/pydantic/pydantic/pull/10909)\n* Fix type checking issue with `model_fields` and `model_computed_fields` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10911](https://github.com/pydantic/pydantic/pull/10911)\n* Use the parent configuration during schema generation for stdlib `dataclass`es by [@sydney-runkle](https://github.com/sydney-runkle) in [#10928](https://github.com/pydantic/pydantic/pull/10928)\n* Use the `globals` of the function when evaluating the return type of serializers and `computed_field`s by [@Viicos](https://github.com/Viicos) in [#10929](https://github.com/pydantic/pydantic/pull/10929)\n* Fix URL constraint application by [@sydney-runkle](https://github.com/sydney-runkle) in [#10922](https://github.com/pydantic/pydantic/pull/10922)\n* Fix URL equality with different validation methods by [@sydney-runkle](https://github.com/sydney-runkle) in [#10934](https://github.com/pydantic/pydantic/pull/10934)\n* Fix JSON schema title when specified as `''` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10936](https://github.com/pydantic/pydantic/pull/10936)\n* Fix `python` mode serialization for `complex` inference by [@sydney-runkle](https://github.com/sydney-runkle) in [pydantic-core#1549](https://github.com/pydantic/pydantic-core/pull/1549)\n\n#### Packaging\n\n* Bump `pydantic-core` version to `v2.27.1` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10938](https://github.com/pydantic/pydantic/pull/10938)\n\n### New Contributors\n\n## v2.10.0 (2024-11-20)\n\nThe code released in v2.10.0 is practically identical to that of v2.10.0b2.\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.0)\n\nSee the [v2.10 release blog post](https://pydantic.dev/articles/pydantic-v2-10-release) for the highlights!\n\n### What's Changed\n\n#### New Features\n\n* Support `fractions.Fraction` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10318](https://github.com/pydantic/pydantic/pull/10318)\n* Support `Hashable` for json validation by [@sydney-runkle](https://github.com/sydney-runkle) in [#10324](https://github.com/pydantic/pydantic/pull/10324)\n* Add a `SocketPath` type for `linux` systems by [@theunkn0wn1](https://github.com/theunkn0wn1) in [#10378](https://github.com/pydantic/pydantic/pull/10378)\n* Allow arbitrary refs in JSON schema `examples` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10417](https://github.com/pydantic/pydantic/pull/10417)\n* Support `defer_build` for Pydantic dataclasses by [@Viicos](https://github.com/Viicos) in [#10313](https://github.com/pydantic/pydantic/pull/10313)\n* Adding v1 / v2 incompatibility warning for nested v1 model by [@sydney-runkle](https://github.com/sydney-runkle) in [#10431](https://github.com/pydantic/pydantic/pull/10431)\n* Add support for unpacked `TypedDict` to type hint variadic keyword arguments with `@validate_call` by [@Viicos](https://github.com/Viicos) in [#10416](https://github.com/pydantic/pydantic/pull/10416)\n* Support compiled patterns in `protected_namespaces` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10522](https://github.com/pydantic/pydantic/pull/10522)\n* Add support for `propertyNames` in JSON schema by [@FlorianSW](https://github.com/FlorianSW) in [#10478](https://github.com/pydantic/pydantic/pull/10478)\n* Adding `__replace__` protocol for Python 3.13+ support by [@sydney-runkle](https://github.com/sydney-runkle) in [#10596](https://github.com/pydantic/pydantic/pull/10596)\n* Expose public `sort` method for JSON schema generation by [@sydney-runkle](https://github.com/sydney-runkle) in [#10595](https://github.com/pydantic/pydantic/pull/10595)\n* Add runtime validation of `@validate_call` callable argument by [@kc0506](https://github.com/kc0506) in [#10627](https://github.com/pydantic/pydantic/pull/10627)\n* Add `experimental_allow_partial` support by [@samuelcolvin](https://github.com/samuelcolvin) in [#10748](https://github.com/pydantic/pydantic/pull/10748)\n* Support default factories taking validated data as an argument by [@Viicos](https://github.com/Viicos) in [#10678](https://github.com/pydantic/pydantic/pull/10678)\n* Allow subclassing `ValidationError` and `PydanticCustomError` by [@Youssefares](https://github.com/Youssefares) in [pydantic/pydantic-core#1413](https://github.com/pydantic/pydantic-core/pull/1413)\n* Add `trailing-strings` support to `experimental_allow_partial` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10825](https://github.com/pydantic/pydantic/pull/10825)\n* Add `rebuild()` method for `TypeAdapter` and simplify `defer_build` patterns by [@sydney-runkle](https://github.com/sydney-runkle) in [#10537](https://github.com/pydantic/pydantic/pull/10537)\n* Improve `TypeAdapter` instance repr by [@sydney-runkle](https://github.com/sydney-runkle) in [#10872](https://github.com/pydantic/pydantic/pull/10872)\n\n#### Changes\n\n* Don't allow customization of `SchemaGenerator` until interface is more stable by [@sydney-runkle](https://github.com/sydney-runkle) in [#10303](https://github.com/pydantic/pydantic/pull/10303)\n* Cleanly `defer_build` on `TypeAdapters`, removing experimental flag by [@sydney-runkle](https://github.com/sydney-runkle) in [#10329](https://github.com/pydantic/pydantic/pull/10329)\n* Fix `mro` of generic subclass by [@kc0506](https://github.com/kc0506) in [#10100](https://github.com/pydantic/pydantic/pull/10100)\n* Strip whitespaces on JSON Schema title generation by [@sydney-runkle](https://github.com/sydney-runkle) in [#10404](https://github.com/pydantic/pydantic/pull/10404)\n* Use `b64decode` and `b64encode` for `Base64Bytes` type by [@sydney-runkle](https://github.com/sydney-runkle) in [#10486](https://github.com/pydantic/pydantic/pull/10486)\n* Relax protected namespace config default by [@sydney-runkle](https://github.com/sydney-runkle) in [#10441](https://github.com/pydantic/pydantic/pull/10441)\n* Revalidate parametrized generics if instance's origin is subclass of OG class by [@sydney-runkle](https://github.com/sydney-runkle) in [#10666](https://github.com/pydantic/pydantic/pull/10666)\n* Warn if configuration is specified on the `@dataclass` decorator and with the `__pydantic_config__` attribute by [@sydney-runkle](https://github.com/sydney-runkle) in [#10406](https://github.com/pydantic/pydantic/pull/10406)\n* Recommend against using `Ellipsis` (...) with `Field` by [@Viicos](https://github.com/Viicos) in [#10661](https://github.com/pydantic/pydantic/pull/10661)\n* Migrate to subclassing instead of annotated approach for pydantic url types by [@sydney-runkle](https://github.com/sydney-runkle) in [#10662](https://github.com/pydantic/pydantic/pull/10662)\n* Change JSON schema generation of `Literal`s and `Enums` by [@Viicos](https://github.com/Viicos) in [#10692](https://github.com/pydantic/pydantic/pull/10692)\n* Simplify unions involving `Any` or `Never` when replacing type variables by [@Viicos](https://github.com/Viicos) in [#10338](https://github.com/pydantic/pydantic/pull/10338)\n* Do not require padding when decoding `base64` bytes by [@bschoenmaeckers](https://github.com/bschoenmaeckers) in [pydantic/pydantic-core#1448](https://github.com/pydantic/pydantic-core/pull/1448)\n* Support dates all the way to 1BC by [@changhc](https://github.com/changhc) in [pydantic/speedate#77](https://github.com/pydantic/speedate/pull/77)\n\n#### Performance\n\n* Schema cleaning: skip unnecessary copies during schema walking by [@Viicos](https://github.com/Viicos) in [#10286](https://github.com/pydantic/pydantic/pull/10286)\n* Refactor namespace logic for annotations evaluation by [@Viicos](https://github.com/Viicos) in [#10530](https://github.com/pydantic/pydantic/pull/10530)\n* Improve email regexp on edge cases by [@AlekseyLobanov](https://github.com/AlekseyLobanov) in [#10601](https://github.com/pydantic/pydantic/pull/10601)\n* `CoreMetadata` refactor with an emphasis on documentation, schema build time performance, and reducing complexity by [@sydney-runkle](https://github.com/sydney-runkle) in [#10675](https://github.com/pydantic/pydantic/pull/10675)\n\n#### Packaging\n\n* Bump `pydantic-core` to `v2.27.0` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10825](https://github.com/pydantic/pydantic/pull/10825)\n* Replaced pdm with uv by [@frfahim](https://github.com/frfahim) in [#10727](https://github.com/pydantic/pydantic/pull/10727)\n\n#### Fixes\n\n* Remove guarding check on `computed_field` with `field_serializer` by [@nix010](https://github.com/nix010) in [#10390](https://github.com/pydantic/pydantic/pull/10390)\n* Fix `Predicate` issue in `v2.9.0` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10321](https://github.com/pydantic/pydantic/pull/10321)\n* Fixing `annotated-types` bound by [@sydney-runkle](https://github.com/sydney-runkle) in [#10327](https://github.com/pydantic/pydantic/pull/10327)\n* Turn `tzdata` install requirement into optional `timezone` dependency by [@jakob-keller](https://github.com/jakob-keller) in [#10331](https://github.com/pydantic/pydantic/pull/10331)\n* Use correct types namespace when building `namedtuple` core schemas by [@Viicos](https://github.com/Viicos) in [#10337](https://github.com/pydantic/pydantic/pull/10337)\n* Fix evaluation of stringified annotations during namespace inspection by [@Viicos](https://github.com/Viicos) in [#10347](https://github.com/pydantic/pydantic/pull/10347)\n* Fix `IncEx` type alias definition by [@Viicos](https://github.com/Viicos) in [#10339](https://github.com/pydantic/pydantic/pull/10339)\n* Do not error when trying to evaluate annotations of private attributes by [@Viicos](https://github.com/Viicos) in [#10358](https://github.com/pydantic/pydantic/pull/10358)\n* Fix nested type statement by [@kc0506](https://github.com/kc0506) in [#10369](https://github.com/pydantic/pydantic/pull/10369)\n* Improve typing of `ModelMetaclass.mro` by [@Viicos](https://github.com/Viicos) in [#10372](https://github.com/pydantic/pydantic/pull/10372)\n* Fix class access of deprecated `computed_field`s by [@Viicos](https://github.com/Viicos) in [#10391](https://github.com/pydantic/pydantic/pull/10391)\n* Make sure `inspect.iscoroutinefunction` works on coroutines decorated with `@validate_call` by [@MovisLi](https://github.com/MovisLi) in [#10374](https://github.com/pydantic/pydantic/pull/10374)\n* Fix `NameError` when using `validate_call` with PEP 695 on a class by [@kc0506](https://github.com/kc0506) in [#10380](https://github.com/pydantic/pydantic/pull/10380)\n* Fix `ZoneInfo` with various invalid types by [@sydney-runkle](https://github.com/sydney-runkle) in [#10408](https://github.com/pydantic/pydantic/pull/10408)\n* Fix `PydanticUserError` on empty `model_config` with annotations by [@cdwilson](https://github.com/cdwilson) in [#10412](https://github.com/pydantic/pydantic/pull/10412)\n* Fix variance issue in `_IncEx` type alias, only allow `True` by [@Viicos](https://github.com/Viicos) in [#10414](https://github.com/pydantic/pydantic/pull/10414)\n* Fix serialization schema generation when using `PlainValidator` by [@Viicos](https://github.com/Viicos) in [#10427](https://github.com/pydantic/pydantic/pull/10427)\n* Fix schema generation error when serialization schema holds references by [@Viicos](https://github.com/Viicos) in [#10444](https://github.com/pydantic/pydantic/pull/10444)\n* Inline references if possible when generating schema for `json_schema_input_type` by [@Viicos](https://github.com/Viicos) in [#10439](https://github.com/pydantic/pydantic/pull/10439)\n* Fix recursive arguments in `Representation` by [@Viicos](https://github.com/Viicos) in [#10480](https://github.com/pydantic/pydantic/pull/10480)\n* Fix representation for builtin function types by [@kschwab](https://github.com/kschwab) in [#10479](https://github.com/pydantic/pydantic/pull/10479)\n* Add python validators for decimal constraints (`max_digits` and `decimal_places`) by [@sydney-runkle](https://github.com/sydney-runkle) in [#10506](https://github.com/pydantic/pydantic/pull/10506)\n* Only fetch `__pydantic_core_schema__` from the current class during schema generation by [@Viicos](https://github.com/Viicos) in [#10518](https://github.com/pydantic/pydantic/pull/10518)\n* Fix `stacklevel` on deprecation warnings for `BaseModel` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10520](https://github.com/pydantic/pydantic/pull/10520)\n* Fix warning `stacklevel` in `BaseModel.__init__` by [@Viicos](https://github.com/Viicos) in [#10526](https://github.com/pydantic/pydantic/pull/10526)\n* Improve error handling for in-evaluable refs for discriminator application by [@sydney-runkle](https://github.com/sydney-runkle) in [#10440](https://github.com/pydantic/pydantic/pull/10440)\n* Change the signature of `ConfigWrapper.core_config` to take the title directly by [@Viicos](https://github.com/Viicos) in [#10562](https://github.com/pydantic/pydantic/pull/10562)\n* Do not use the previous config from the stack for dataclasses without config by [@Viicos](https://github.com/Viicos) in [#10576](https://github.com/pydantic/pydantic/pull/10576)\n* Fix serialization for IP types with `mode='python'` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10594](https://github.com/pydantic/pydantic/pull/10594)\n* Support constraint application for `Base64Etc` types by [@sydney-runkle](https://github.com/sydney-runkle) in [#10584](https://github.com/pydantic/pydantic/pull/10584)\n* Fix `validate_call` ignoring `Field` in `Annotated` by [@kc0506](https://github.com/kc0506) in [#10610](https://github.com/pydantic/pydantic/pull/10610)\n* Raise an error when `Self` is invalid by [@kc0506](https://github.com/kc0506) in [#10609](https://github.com/pydantic/pydantic/pull/10609)\n* Using `core_schema.InvalidSchema` instead of metadata injection + checks by [@sydney-runkle](https://github.com/sydney-runkle) in [#10523](https://github.com/pydantic/pydantic/pull/10523)\n* Tweak type alias logic by [@kc0506](https://github.com/kc0506) in [#10643](https://github.com/pydantic/pydantic/pull/10643)\n* Support usage of `type` with `typing.Self` and type aliases by [@kc0506](https://github.com/kc0506) in [#10621](https://github.com/pydantic/pydantic/pull/10621)\n* Use overloads for `Field` and `PrivateAttr` functions by [@Viicos](https://github.com/Viicos) in [#10651](https://github.com/pydantic/pydantic/pull/10651)\n* Clean up the `mypy` plugin implementation by [@Viicos](https://github.com/Viicos) in [#10669](https://github.com/pydantic/pydantic/pull/10669)\n* Properly check for `typing_extensions` variant of `TypeAliasType` by [@Daraan](https://github.com/Daraan) in [#10713](https://github.com/pydantic/pydantic/pull/10713)\n* Allow any mapping in `BaseModel.model_copy()` by [@Viicos](https://github.com/Viicos) in [#10751](https://github.com/pydantic/pydantic/pull/10751)\n* Fix `isinstance` behavior for urls by [@sydney-runkle](https://github.com/sydney-runkle) in [#10766](https://github.com/pydantic/pydantic/pull/10766)\n* Ensure `cached_property` can be set on Pydantic models by [@Viicos](https://github.com/Viicos) in [#10774](https://github.com/pydantic/pydantic/pull/10774)\n* Fix equality checks for primitives in literals by [@sydney-runkle](https://github.com/sydney-runkle) in [pydantic/pydantic-core#1459](https://github.com/pydantic/pydantic-core/pull/1459)\n* Properly enforce `host_required` for URLs by [@Viicos](https://github.com/Viicos) in [pydantic/pydantic-core#1488](https://github.com/pydantic/pydantic-core/pull/1488)\n* Fix when `coerce_numbers_to_str` enabled and string has invalid Unicode character by [@andrey-berenda](https://github.com/andrey-berenda) in [pydantic/pydantic-core#1515](https://github.com/pydantic/pydantic-core/pull/1515)\n* Fix serializing `complex` values in `Enum`s by [@changhc](https://github.com/changhc) in [pydantic/pydantic-core#1524](https://github.com/pydantic/pydantic-core/pull/1524)\n* Refactor `_typing_extra` module by [@Viicos](https://github.com/Viicos) in [#10725](https://github.com/pydantic/pydantic/pull/10725)\n* Support intuitive equality for urls by [@sydney-runkle](https://github.com/sydney-runkle) in [#10798](https://github.com/pydantic/pydantic/pull/10798)\n* Add `bytearray` to `TypeAdapter.validate_json` signature by [@samuelcolvin](https://github.com/samuelcolvin) in [#10802](https://github.com/pydantic/pydantic/pull/10802)\n* Ensure class access of method descriptors is performed when used as a default with `Field` by [@Viicos](https://github.com/Viicos) in [#10816](https://github.com/pydantic/pydantic/pull/10816)\n* Fix circular import with `validate_call` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10807](https://github.com/pydantic/pydantic/pull/10807)\n* Fix error when using type aliases referencing other type aliases by [@Viicos](https://github.com/Viicos) in [#10809](https://github.com/pydantic/pydantic/pull/10809)\n* Fix `IncEx` type alias to be compatible with mypy by [@Viicos](https://github.com/Viicos) in [#10813](https://github.com/pydantic/pydantic/pull/10813)\n* Make `__signature__` a lazy property, do not deepcopy defaults by [@Viicos](https://github.com/Viicos) in [#10818](https://github.com/pydantic/pydantic/pull/10818)\n* Make `__signature__` lazy for dataclasses, too by [@sydney-runkle](https://github.com/sydney-runkle) in [#10832](https://github.com/pydantic/pydantic/pull/10832)\n* Subclass all single host url classes from `AnyUrl` to preserve behavior from v2.9 by [@sydney-runkle](https://github.com/sydney-runkle) in [#10856](https://github.com/pydantic/pydantic/pull/10856)\n\n### New Contributors\n\n* [@jakob-keller](https://github.com/jakob-keller) made their first contribution in [#10331](https://github.com/pydantic/pydantic/pull/10331)\n* [@MovisLi](https://github.com/MovisLi) made their first contribution in [#10374](https://github.com/pydantic/pydantic/pull/10374)\n* [@joaopalmeiro](https://github.com/joaopalmeiro) made their first contribution in [#10405](https://github.com/pydantic/pydantic/pull/10405)\n* [@theunkn0wn1](https://github.com/theunkn0wn1) made their first contribution in [#10378](https://github.com/pydantic/pydantic/pull/10378)\n* [@cdwilson](https://github.com/cdwilson) made their first contribution in [#10412](https://github.com/pydantic/pydantic/pull/10412)\n* [@dlax](https://github.com/dlax) made their first contribution in [#10421](https://github.com/pydantic/pydantic/pull/10421)\n* [@kschwab](https://github.com/kschwab) made their first contribution in [#10479](https://github.com/pydantic/pydantic/pull/10479)\n* [@santibreo](https://github.com/santibreo) made their first contribution in [#10453](https://github.com/pydantic/pydantic/pull/10453)\n* [@FlorianSW](https://github.com/FlorianSW) made their first contribution in [#10478](https://github.com/pydantic/pydantic/pull/10478)\n* [@tkasuz](https://github.com/tkasuz) made their first contribution in [#10555](https://github.com/pydantic/pydantic/pull/10555)\n* [@AlekseyLobanov](https://github.com/AlekseyLobanov) made their first contribution in [#10601](https://github.com/pydantic/pydantic/pull/10601)\n* [@NiclasvanEyk](https://github.com/NiclasvanEyk) made their first contribution in [#10667](https://github.com/pydantic/pydantic/pull/10667)\n* [@mschoettle](https://github.com/mschoettle) made their first contribution in [#10677](https://github.com/pydantic/pydantic/pull/10677)\n* [@Daraan](https://github.com/Daraan) made their first contribution in [#10713](https://github.com/pydantic/pydantic/pull/10713)\n* [@k4nar](https://github.com/k4nar) made their first contribution in [#10736](https://github.com/pydantic/pydantic/pull/10736)\n* [@UriyaHarpeness](https://github.com/UriyaHarpeness) made their first contribution in [#10740](https://github.com/pydantic/pydantic/pull/10740)\n* [@frfahim](https://github.com/frfahim) made their first contribution in [#10727](https://github.com/pydantic/pydantic/pull/10727)\n\n## v2.10.0b2 (2024-11-13)\n\nPre-release, see [the GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.0b2) for details.\n\n## v2.10.0b1 (2024-11-06)\n\nPre-release, see [the GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.0b1) for details.\n\n\n... see [here](https://docs.pydantic.dev/changelog/#v0322-2019-08-17) for earlier changes.\n", + "description_content_type": "text/markdown", + "author_email": "Samuel Colvin , Eric Jolibois , Hasan Ramezani , Adrian Garcia Badaracco <1755071+adriangb@users.noreply.github.com>, Terrence Dorsey , David Montague , Serge Matveenko , Marcelo Trylesinski , Sydney Runkle , David Hewitt , Alex Hall , Victorien Plot ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Framework :: Hypothesis", + "Framework :: Pydantic", + "Intended Audience :: Developers", + "Intended Audience :: Information Technology", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Internet", + "Topic :: Software Development :: Libraries :: Python Modules" + ], + "requires_dist": [ + "annotated-types>=0.6.0", + "pydantic-core==2.46.5", + "typing-extensions>=4.14.1", + "typing-inspection>=0.4.2", + "email-validator>=2.0.0; extra == 'email'", + "tzdata; (python_version >= '3.9' and platform_system == 'Windows') and extra == 'timezone'" + ], + "requires_python": ">=3.9", + "project_url": [ + "Homepage, https://github.com/pydantic/pydantic", + "Documentation, https://docs.pydantic.dev", + "Funding, https://github.com/sponsors/samuelcolvin", + "Source, https://github.com/pydantic/pydantic", + "Changelog, https://docs.pydantic.dev/latest/changelog/" + ], + "provides_extra": [ + "email", + "timezone" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/f7/3c/60674207246bc0a4009d2391b7c7251c7159f279c8d2ab8aae8ef46f3dee/pydantic_core-2.46.5-cp314-cp314-win_amd64.whl", + "archive_info": { + "hashes": { + "sha256": "fa10ef4112775900e7a0661068635eb67b2ab824fbde764de6e0e21982a93db0" + }, + "hash": "sha256=fa10ef4112775900e7a0661068635eb67b2ab824fbde764de6e0e21982a93db0" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "pydantic_core", + "version": "2.46.5", + "summary": "Core functionality for Pydantic validation and serialization", + "description": "# pydantic-core\n\n[![CI](https://github.com/pydantic/pydantic-core/workflows/ci/badge.svg?event=push)](https://github.com/pydantic/pydantic-core/actions?query=event%3Apush+branch%3Amain+workflow%3Aci)\n[![Coverage](https://codecov.io/gh/pydantic/pydantic-core/branch/main/graph/badge.svg)](https://codecov.io/gh/pydantic/pydantic-core)\n[![pypi](https://img.shields.io/pypi/v/pydantic-core.svg)](https://pypi.python.org/pypi/pydantic-core)\n[![versions](https://img.shields.io/pypi/pyversions/pydantic-core.svg)](https://github.com/pydantic/pydantic-core)\n[![license](https://img.shields.io/github/license/pydantic/pydantic-core.svg)](https://github.com/pydantic/pydantic-core/blob/main/LICENSE)\n\nThis package provides the core functionality for [pydantic](https://docs.pydantic.dev) validation and serialization.\n\nPydantic-core is currently around 17x faster than pydantic V1.\nSee [`tests/benchmarks/`](./tests/benchmarks/) for details.\n\n## Example of direct usage\n\n*NOTE: You should not need to use pydantic-core directly; instead, use pydantic, which in turn uses pydantic-core.*\n\n```py\nfrom pydantic_core import SchemaValidator, ValidationError\n\n\nv = SchemaValidator(\n {\n 'type': 'typed-dict',\n 'fields': {\n 'name': {\n 'type': 'typed-dict-field',\n 'schema': {\n 'type': 'str',\n },\n },\n 'age': {\n 'type': 'typed-dict-field',\n 'schema': {\n 'type': 'int',\n 'ge': 18,\n },\n },\n 'is_developer': {\n 'type': 'typed-dict-field',\n 'schema': {\n 'type': 'default',\n 'schema': {'type': 'bool'},\n 'default': True,\n },\n },\n },\n }\n)\n\nr1 = v.validate_python({'name': 'Samuel', 'age': 35})\nassert r1 == {'name': 'Samuel', 'age': 35, 'is_developer': True}\n\n# pydantic-core can also validate JSON directly\nr2 = v.validate_json('{\"name\": \"Samuel\", \"age\": 35}')\nassert r1 == r2\n\ntry:\n v.validate_python({'name': 'Samuel', 'age': 11})\nexcept ValidationError as e:\n print(e)\n \"\"\"\n 1 validation error for model\n age\n Input should be greater than or equal to 18\n [type=greater_than_equal, context={ge: 18}, input_value=11, input_type=int]\n \"\"\"\n```\n\n## Getting Started\n\n### Prerequisites\n\nYou'll need:\n\n1. **[Rust](https://rustup.rs/)** - Rust stable (or nightly for coverage)\n2. **[uv](https://docs.astral.sh/uv/getting-started/installation/)** - Fast Python package manager (will install Python 3.9+ automatically)\n3. **[git](https://git-scm.com/)** - For version control\n4. **[make](https://www.gnu.org/software/make/)** - For running development commands (or use `nmake` on Windows)\n\n### Quick Start\n\n```bash\n# Clone the repository (or from your fork)\ngit clone git@github.com:pydantic/pydantic-core.git\ncd pydantic-core\n\n# Install all dependencies using uv, setup pre-commit hooks, and build the development version\nmake install\n```\n\nVerify your installation by running:\n\n```bash\nmake\n```\n\nThis runs a full development cycle: formatting, building, linting, and testing\n\n### Development Commands\n\nRun `make help` to see all available commands, or use these common ones:\n\n```bash\nmake build-dev # to build the package during development\nmake build-prod # to perform an optimised build for benchmarking\nmake test # to run the tests\nmake testcov # to run the tests and generate a coverage report\nmake lint # to run the linter\nmake format # to format python and rust code\nmake all # to run to run build-dev + format + lint + test\n```\n\n### Useful Resources\n\n* [`python/pydantic_core/_pydantic_core.pyi`](./python/pydantic_core/_pydantic_core.pyi) - Python API types\n* [`python/pydantic_core/core_schema.py`](./python/pydantic_core/core_schema.py) - Core schema definitions\n* [`tests/`](./tests) - Comprehensive usage examples\n\n## Profiling\n\nIt's possible to profile the code using the [`flamegraph` utility from `flamegraph-rs`](https://github.com/flamegraph-rs/flamegraph). (Tested on Linux.) You can install this with `cargo install flamegraph`.\n\nRun `make build-profiling` to install a release build with debugging symbols included (needed for profiling).\n\nOnce that is built, you can profile pytest benchmarks with (e.g.):\n\n```bash\nflamegraph -- pytest tests/benchmarks/test_micro_benchmarks.py -k test_list_of_ints_core_py --benchmark-enable\n```\n\nThe `flamegraph` command will produce an interactive SVG at `flamegraph.svg`.\n\n## Releasing\n\nTBC (needs to be integrated into `pydantic` repository release process).\n\n", + "description_content_type": "text/markdown; charset=UTF-8; variant=GFM", + "home_page": "https://github.com/pydantic/pydantic", + "author_email": "Samuel Colvin , Adrian Garcia Badaracco <1755071+adriangb@users.noreply.github.com>, David Montague , David Hewitt , Sydney Runkle , Victorien Plot ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 3 - Alpha", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Programming Language :: Python :: Implementation :: GraalPy", + "Programming Language :: Rust", + "Framework :: Pydantic", + "Intended Audience :: Developers", + "Intended Audience :: Information Technology", + "Operating System :: POSIX :: Linux", + "Operating System :: Microsoft :: Windows", + "Operating System :: MacOS", + "Typing :: Typed" + ], + "requires_dist": [ + "typing-extensions>=4.14.1" + ], + "requires_python": ">=3.9", + "project_url": [ + "Funding, https://github.com/sponsors/samuelcolvin", + "Homepage, https://github.com/pydantic", + "Source, https://github.com/pydantic/pydantic/tree/main/pydantic-core" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0" + }, + "hash": "sha256=f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "annotated-types", + "version": "0.8.0", + "summary": "Reusable constraint types to use with typing.Annotated", + "description": "# annotated-types\n\n[![CI](https://github.com/annotated-types/annotated-types/workflows/CI/badge.svg?event=push)](https://github.com/annotated-types/annotated-types/actions?query=event%3Apush+branch%3Amain+workflow%3ACI)\n[![pypi](https://img.shields.io/pypi/v/annotated-types.svg)](https://pypi.python.org/pypi/annotated-types)\n[![versions](https://img.shields.io/pypi/pyversions/annotated-types.svg)](https://github.com/annotated-types/annotated-types)\n[![license](https://img.shields.io/github/license/annotated-types/annotated-types.svg)](https://github.com/annotated-types/annotated-types/blob/main/LICENSE)\n\n[PEP-593](https://peps.python.org/pep-0593/) added `typing.Annotated` as a way of\nadding context-specific metadata to existing types, and specifies that\n`Annotated[T, x]` _should_ be treated as `T` by any tool or library without special\nlogic for `x`.\n\nThis package provides metadata objects which can be used to represent common\nconstraints such as upper and lower bounds on scalar values and collection sizes,\na `Predicate` marker for runtime checks, and\ndescriptions of how we intend these metadata to be interpreted. In some cases,\nwe also note alternative representations which do not require this package.\n\n## Install\n\n```bash\npip install annotated-types\n```\n\n## Examples\n\n```python\nfrom typing import Annotated\nfrom annotated_types import Gt, Len, Predicate\n\nclass MyClass:\n age: Annotated[int, Gt(18)] # Valid: 19, 20, ...\n # Invalid: 17, 18, \"19\", 19.0, ...\n factors: list[Annotated[int, Predicate(is_prime)]] # Valid: 2, 3, 5, 7, 11, ...\n # Invalid: 4, 8, -2, 5.0, \"prime\", ...\n\n my_list: Annotated[list[int], Len(0, 10)] # Valid: [], [10, 20, 30, 40, 50]\n # Invalid: (1, 2), [\"abc\"], [0] * 20\n```\n\n## Documentation\n\n_While `annotated-types` avoids runtime checks for performance, users should not\nconstruct invalid combinations such as `MultipleOf(\"non-numeric\")` or `Annotated[int, Len(3)]`.\nDownstream implementors may choose to raise an error, emit a warning, silently ignore\na metadata item, etc., if the metadata objects described below are used with an\nincompatible type - or for any other reason!_\n\n### Gt, Ge, Lt, Le\n\nExpress inclusive and/or exclusive bounds on orderable values - which may be numbers,\ndates, times, strings, sets, etc. Note that the boundary value need not be of the\nsame type that was annotated, so long as they can be compared: `Annotated[int, Gt(1.5)]`\nis fine, for example, and implies that the value is an integer x such that `x > 1.5`.\n\nWe suggest that implementors may also interpret `functools.partial(operator.le, 1.5)`\nas being equivalent to `Gt(1.5)`, for users who wish to avoid a runtime dependency on\nthe `annotated-types` package.\n\nTo be explicit, these types have the following meanings:\n\n* `Gt(x)` - value must be \"Greater Than\" `x` - equivalent to exclusive minimum\n* `Ge(x)` - value must be \"Greater than or Equal\" to `x` - equivalent to inclusive minimum\n* `Lt(x)` - value must be \"Less Than\" `x` - equivalent to exclusive maximum\n* `Le(x)` - value must be \"Less than or Equal\" to `x` - equivalent to inclusive maximum\n\n### Interval\n\n`Interval(gt, ge, lt, le)` allows you to specify an upper and lower bound with a single\nmetadata object. `None` attributes should be ignored, and non-`None` attributes\ntreated as per the single bounds above.\n\n### MultipleOf\n\n`MultipleOf(multiple_of=x)` might be interpreted in two ways:\n\n1. Python semantics, implying `value % multiple_of == 0`, or\n2. [JSONschema semantics](https://json-schema.org/draft/2020-12/json-schema-validation.html#rfc.section.6.2.1),\n where `int(value / multiple_of) == value / multiple_of`.\n\nWe encourage users to be aware of these two common interpretations and their\ndistinct behaviours, especially since very large or non-integer numbers make\nit easy to cause silent data corruption due to floating-point imprecision.\n\nWe encourage libraries to carefully document which interpretation they implement.\n\n### MinLen, MaxLen, Len\n\n`Len()` implies that `min_length <= len(value) <= max_length` - lower and upper bounds are inclusive.\n\nAs well as `Len()` which can optionally include upper and lower bounds, we also\nprovide `MinLen(x)` and `MaxLen(y)` which are equivalent to `Len(min_length=x)`\nand `Len(max_length=y)` respectively.\n\n`Len`, `MinLen`, and `MaxLen` may be used with any type which supports `len(value)`.\n\nExamples of usage:\n\n* `Annotated[list, MaxLen(10)]` (or `Annotated[list, Len(max_length=10)]`) - list must have a length of 10 or less\n* `Annotated[str, MaxLen(10)]` - string must have a length of 10 or less\n* `Annotated[list, MinLen(3)]` (or `Annotated[list, Len(min_length=3)]`) - list must have a length of 3 or more\n* `Annotated[list, Len(4, 6)]` - list must have a length of 4, 5, or 6\n* `Annotated[list, Len(8, 8)]` - list must have a length of exactly 8\n\n#### Changed in v0.4.0\n\n* `min_inclusive` has been renamed to `min_length`, no change in meaning\n* `max_exclusive` has been renamed to `max_length`, upper bound is now **inclusive** instead of **exclusive**\n* The recommendation that slices are interpreted as `Len` has been removed due to ambiguity and different semantic\n meaning of the upper bound in slices vs. `Len`\n\nSee [issue #23](https://github.com/annotated-types/annotated-types/issues/23) for discussion.\n\n### Timezone\n\n`Timezone` can be used with a `datetime` or a `time` to express which timezones\nare allowed. `Annotated[datetime, Timezone(None)]` must be a naive datetime.\n`Timezone[...]` ([literal ellipsis](https://docs.python.org/3/library/constants.html#Ellipsis))\nexpresses that any timezone-aware datetime is allowed. You may also pass a specific\ntimezone string or [`tzinfo`](https://docs.python.org/3/library/datetime.html#tzinfo-objects)\nobject such as `Timezone(timezone.utc)` or `Timezone(\"Africa/Abidjan\")` to express that you only\nallow a specific timezone, though we note that this is often a symptom of fragile design.\n\n#### Changed in v0.x.x\n\n* `Timezone` accepts [`tzinfo`](https://docs.python.org/3/library/datetime.html#tzinfo-objects) objects instead of\n `timezone`, extending compatibility to [`zoneinfo`](https://docs.python.org/3/library/zoneinfo.html) and third party libraries.\n\n### Unit\n\n`Unit(unit: str)` expresses that the annotated numeric value is the magnitude of\na quantity with the specified unit. For example, `Annotated[float, Unit(\"m/s\")]`\nwould be a float representing a velocity in meters per second.\n\nPlease note that `annotated_types` itself makes no attempt to parse or validate\nthe unit string in any way. That is left entirely to downstream libraries,\nsuch as [`pint`](https://pint.readthedocs.io) or\n[`astropy.units`](https://docs.astropy.org/en/stable/units/).\n\nAn example of how a library might use this metadata:\n\n```python\nfrom annotated_types import Unit\nfrom typing import Annotated, TypeVar, Callable, Any, get_origin, get_args\n\n# given a type annotated with a unit:\nMeters = Annotated[float, Unit(\"m\")]\n\n\n# you can cast the annotation to a specific unit type with any\n# callable that accepts a string and returns the desired type\nT = TypeVar(\"T\")\ndef cast_unit(tp: Any, unit_cls: Callable[[str], T]) -> T | None:\n if get_origin(tp) is Annotated:\n for arg in get_args(tp):\n if isinstance(arg, Unit):\n return unit_cls(arg.unit)\n return None\n\n\n# using `pint`\nimport pint\npint_unit = cast_unit(Meters, pint.Unit)\n\n\n# using `astropy.units`\nimport astropy.units as u\nastropy_unit = cast_unit(Meters, u.Unit)\n```\n\n### Predicate\n\n`Predicate(func: Callable)` expresses that `func(value)` is truthy for valid values.\nUsers should prefer the statically inspectable metadata above, but if you need\nthe full power and flexibility of arbitrary runtime predicates... here it is.\n\nFor some common constraints, we provide generic types:\n\n* `LowerCase = Annotated[T, Predicate(str.islower)]`\n* `UpperCase = Annotated[T, Predicate(str.isupper)]`\n* `IsDigit = Annotated[T, Predicate(str.isdigit)]`\n* `IsFinite = Annotated[T, Predicate(math.isfinite)]`\n* `IsNotFinite = Annotated[T, Predicate(Not(math.isfinite))]`\n* `IsNan = Annotated[T, Predicate(math.isnan)]`\n* `IsNotNan = Annotated[T, Predicate(Not(math.isnan))]`\n* `IsInfinite = Annotated[T, Predicate(math.isinf)]`\n* `IsNotInfinite = Annotated[T, Predicate(Not(math.isinf))]`\n\nso that you can write e.g. `x: IsFinite[float] = 2.0` instead of the longer\n(but exactly equivalent) `x: Annotated[float, Predicate(math.isfinite)] = 2.0`.\n\nSome libraries might have special logic to handle known or understandable predicates,\nfor example by checking for `str.isdigit` and using its presence to both call custom\nlogic to enforce digit-only strings, and customise some generated external schema.\nUsers are therefore encouraged to avoid indirection like `lambda s: s.lower()`, in\nfavor of introspectable methods such as `str.lower` or `re.compile(\"pattern\").search`.\n\nTo enable basic negation of commonly used predicates like `math.isnan` without introducing introspection that makes it impossible for implementers to introspect the predicate we provide a `Not` wrapper that simply negates the predicate in an introspectable manner. Several of the predicates listed above are created in this manner.\n\nWe do not specify what behaviour should be expected for predicates that raise\nan exception. For example `Annotated[int, Predicate(str.isdigit)]` might silently\nskip invalid constraints, or statically raise an error; or it might try calling it\nand then propagate or discard the resulting\n`TypeError: descriptor 'isdigit' for 'str' objects doesn't apply to a 'int' object`\nexception. We encourage libraries to document the behaviour they choose.\n\n### Doc\n\n`doc()` can be used to add documentation information in `Annotated`, for function and method parameters, variables, class attributes, return types, and any place where `Annotated` can be used.\n\nIt expects a value that can be statically analyzed, as the main use case is for static analysis, editors, documentation generators, and similar tools.\n\nIt returns a `DocInfo` class with a single attribute `documentation` containing the value passed to `doc()`.\n\nThis is the early adopter's alternative form of the [`typing-doc` proposal](https://github.com/tiangolo/fastapi/blob/typing-doc/typing_doc.md).\n\n### Integrating downstream types with `GroupedMetadata`\n\nImplementers may choose to provide a convenience wrapper that groups multiple pieces of metadata.\nThis can help reduce verbosity and cognitive overhead for users.\nFor example, an implementer like Pydantic might provide a `Field` or `Meta` type that accepts keyword arguments and transforms these into low-level metadata:\n\n```python\nfrom dataclasses import dataclass\nfrom typing import Iterator\nfrom annotated_types import GroupedMetadata, Ge\n\n@dataclass\nclass Field(GroupedMetadata):\n ge: int | None = None\n description: str | None = None\n\n def __iter__(self) -> Iterator[object]:\n # Iterating over a GroupedMetadata object should yield annotated-types\n # constraint metadata objects which describe it as fully as possible,\n # and may include other unknown objects too.\n if self.ge is not None:\n yield Ge(self.ge)\n if self.description is not None:\n yield Description(self.description)\n```\n\nLibraries consuming annotated-types constraints should check for `GroupedMetadata` and unpack it by iterating over the object and treating the results as if they had been \"unpacked\" in the `Annotated` type. The same logic should be applied to the [PEP 646 `Unpack` type](https://peps.python.org/pep-0646/), so that `Annotated[T, Field(...)]`, `Annotated[T, Unpack[Field(...)]]` and `Annotated[T, *Field(...)]` are all treated consistently.\n\nLibraries consuming annotated-types should also ignore any metadata they do not recongize that came from unpacking a `GroupedMetadata`, just like they ignore unrecognized metadata in `Annotated` itself.\n\nOur own `annotated_types.Interval` class is a `GroupedMetadata` which unpacks itself into `Gt`, `Lt`, etc., so this is not an abstract concern. Similarly, `annotated_types.Len` is a `GroupedMetadata` which unpacks itself into `MinLen` (optionally) and `MaxLen`.\n\n### Consuming metadata\n\nWe intend to not be prescriptive as to _how_ the metadata and constraints are used, but as an example of how one might parse constraints from types annotations see our [implementation in `test_main.py`](https://github.com/annotated-types/annotated-types/blob/f59cf6d1b5255a0fe359b93896759a180bec30ae/tests/test_main.py#L94-L103).\n\nIt is up to the implementer to determine how this metadata is used.\nYou could use the metadata for runtime type checking, for generating schemas or to generate example data, amongst other use cases.\n\n## Design & History\n\nThis package was designed at the PyCon 2022 sprints by the maintainers of Pydantic\nand Hypothesis, with the goal of making it as easy as possible for end-users to\nprovide more informative annotations for use by runtime libraries.\n\nIt is deliberately minimal, and following PEP-593 allows considerable downstream\ndiscretion in what (if anything!) they choose to support. Nonetheless, we expect\nthat staying simple and covering _only_ the most common use-cases will give users\nand maintainers the best experience we can. If you'd like more constraints for your\ntypes - follow our lead, by defining them and documenting them downstream!\n", + "description_content_type": "text/markdown", + "author_email": "Adrian Garcia Badaracco <1755071+adriangb@users.noreply.github.com>, Samuel Colvin , Zac Hatfield-Dodds ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 4 - Beta", + "Environment :: Console", + "Environment :: MacOS X", + "Intended Audience :: Developers", + "Intended Audience :: Information Technology", + "License :: OSI Approved :: MIT License", + "Operating System :: POSIX :: Linux", + "Operating System :: Unix", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Topic :: Software Development :: Libraries :: Python Modules", + "Typing :: Typed" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://github.com/annotated-types/annotated-types", + "Source, https://github.com/annotated-types/annotated-types", + "Changelog, https://github.com/annotated-types/annotated-types/releases" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/95/9c/c510029fc6ef33a6275cd2c5d3cecd6613dfd6aa401d57c54f1c18852ccf/setuptools-84.0.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670" + }, + "hash": "sha256=51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "setuptools", + "version": "84.0.0", + "dynamic": [ + "license-file" + ], + "summary": "Most extensible Python build backend with support for C/C++ extension modules", + "description": ".. |pypi-version| image:: https://img.shields.io/pypi/v/setuptools.svg\n :target: https://pypi.org/project/setuptools\n\n.. |py-version| image:: https://img.shields.io/pypi/pyversions/setuptools.svg\n\n.. |test-badge| image:: https://github.com/pypa/setuptools/actions/workflows/main.yml/badge.svg\n :target: https://github.com/pypa/setuptools/actions?query=workflow%3A%22tests%22\n :alt: tests\n\n.. |ruff-badge| image:: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v2.json\n :target: https://github.com/astral-sh/ruff\n :alt: Ruff\n\n.. |docs-badge| image:: https://img.shields.io/readthedocs/setuptools/latest.svg\n :target: https://setuptools.pypa.io\n\n.. |skeleton-badge| image:: https://img.shields.io/badge/skeleton-2026-informational\n :target: https://blog.jaraco.com/skeleton\n\n.. |codecov-badge| image:: https://img.shields.io/codecov/c/github/pypa/setuptools/master.svg?logo=codecov&logoColor=white\n :target: https://codecov.io/gh/pypa/setuptools\n\n.. |tidelift-badge| image:: https://tidelift.com/badges/github/pypa/setuptools?style=flat\n :target: https://tidelift.com/subscription/pkg/pypi-setuptools?utm_source=pypi-setuptools&utm_medium=readme\n\n.. |discord-badge| image:: https://img.shields.io/discord/803025117553754132\n :target: https://discord.com/channels/803025117553754132/815945031150993468\n :alt: Discord\n\n|pypi-version| |py-version| |test-badge| |ruff-badge| |docs-badge| |skeleton-badge| |codecov-badge| |discord-badge|\n\nSee the `Quickstart `_\nand the `User's Guide `_ for\ninstructions on how to use Setuptools.\n\nQuestions and comments should be directed to `GitHub Discussions\n`_.\nBug reports and especially tested patches may be\nsubmitted directly to the `bug tracker\n`_.\n\n\nCode of Conduct\n===============\n\nEveryone interacting in the setuptools project's codebases, issue trackers,\nchat rooms, and fora is expected to follow the\n`PSF Code of Conduct `_.\n\n\nFor Enterprise\n==============\n\nAvailable as part of the Tidelift Subscription.\n\nSetuptools and the maintainers of thousands of other packages are working with Tidelift to deliver one enterprise subscription that covers all of the open source you use.\n\n`Learn more `_.\n", + "description_content_type": "text/x-rst", + "keywords": [ + "CPAN", + "PyPI", + "distutils", + "eggs", + "package", + "management" + ], + "author_email": "Python Packaging Authority ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: System :: Archiving :: Packaging", + "Topic :: System :: Systems Administration", + "Topic :: Utilities" + ], + "requires_dist": [ + "pytest!=8.1.*,>=6; extra == \"test\"", + "virtualenv>=13.0.0; extra == \"test\"", + "wheel>=0.44.0; extra == \"test\"", + "pip>=19.1; extra == \"test\"", + "packaging>=24.2; extra == \"test\"", + "jaraco.envs>=2.2; extra == \"test\"", + "pytest-xdist>=3; extra == \"test\"", + "jaraco.path>=3.7.2; extra == \"test\"", + "build[virtualenv]>=1.0.3; extra == \"test\"", + "filelock>=3.4.0; extra == \"test\"", + "ini2toml[lite]>=0.14; extra == \"test\"", + "tomli-w>=1.0.0; extra == \"test\"", + "pytest-timeout; extra == \"test\"", + "pytest-perf; sys_platform != \"cygwin\" and extra == \"test\"", + "jaraco.develop>=7.21; (python_version >= \"3.9\" and sys_platform != \"cygwin\") and extra == \"test\"", + "pytest-home>=0.5; extra == \"test\"", + "pytest-subprocess; extra == \"test\"", + "pyproject-hooks!=1.1; extra == \"test\"", + "jaraco.test>=5.5; extra == \"test\"", + "sphinx>=3.5; extra == \"doc\"", + "jaraco.packaging>=9.3; extra == \"doc\"", + "rst.linker>=1.9; extra == \"doc\"", + "furo; extra == \"doc\"", + "sphinx-lint; extra == \"doc\"", + "jaraco.tidelift>=1.4; extra == \"doc\"", + "pygments-github-lexers==0.0.5; extra == \"doc\"", + "sphinx-favicon; extra == \"doc\"", + "sphinx-inline-tabs; extra == \"doc\"", + "sphinx-reredirects; extra == \"doc\"", + "sphinxcontrib-towncrier; extra == \"doc\"", + "sphinx-notfound-page<2,>=1; extra == \"doc\"", + "pyproject-hooks!=1.1; extra == \"doc\"", + "towncrier<24.7; extra == \"doc\"", + "packaging>=24.2; extra == \"core\"", + "more_itertools>=8.8; extra == \"core\"", + "jaraco.text>=3.7; extra == \"core\"", + "importlib_metadata>=6; python_version < \"3.10\" and extra == \"core\"", + "tomli>=2.0.1; python_version < \"3.11\" and extra == \"core\"", + "wheel>=0.43.0; extra == \"core\"", + "jaraco.functools>=4; extra == \"core\"", + "more_itertools; extra == \"core\"", + "pytest-checkdocs>=2.14; extra == \"check\"", + "pytest-ruff>=0.2.1; sys_platform != \"cygwin\" and extra == \"check\"", + "ruff>=0.13.0; sys_platform != \"cygwin\" and extra == \"check\"", + "pytest-cov; extra == \"cover\"", + "pytest-enabler>=3.4; extra == \"enabler\"", + "pytest-mypy>=1.0.1; platform_python_implementation != \"PyPy\" and extra == \"type\"", + "mypy==1.18.*; extra == \"type\"", + "importlib_metadata>=7.0.2; python_version < \"3.10\" and extra == \"type\"", + "jaraco.develop>=7.21; sys_platform != \"cygwin\" and extra == \"type\"" + ], + "requires_python": ">=3.10", + "project_url": [ + "Source, https://github.com/pypa/setuptools", + "Documentation, https://setuptools.pypa.io/", + "Changelog, https://setuptools.pypa.io/en/stable/history.html" + ], + "provides_extra": [ + "test", + "doc", + "ssl", + "certs", + "core", + "check", + "cover", + "enabler", + "type" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/4e/d6/1ec1b290f9e0fb067899b61e1d37a30c923068bad260b216dbe37a7d2967/starlette-1.7.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e" + }, + "hash": "sha256=67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "starlette", + "version": "1.7.0", + "summary": "The little ASGI library that shines.", + "description": "

\n \n \n \n \"starlette-logo\"\n \n

\n\n

\n ✨ The little ASGI framework that shines. ✨\n

\n\n---\n\n[![Build Status](https://github.com/Kludex/starlette/workflows/Test%20Suite/badge.svg)](https://github.com/Kludex/starlette/actions)\n[![Package version](https://badge.fury.io/py/starlette.svg)](https://pypi.python.org/pypi/starlette)\n[![Supported Python Version](https://img.shields.io/pypi/pyversions/starlette.svg?color=%2334D058)](https://pypi.org/project/starlette)\n[![Discord](https://img.shields.io/discord/1051468649518616576?logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2)](https://discord.gg/RxKUF5JuHs)\n\n---\n\n**Documentation**: https://starlette.dev\n\n**Source Code**: https://github.com/Kludex/starlette\n\n---\n\n# Starlette\n\nStarlette is a lightweight [ASGI][asgi] framework/toolkit,\nwhich is ideal for building async web services in Python.\n\nIt is production-ready, and gives you the following:\n\n* A lightweight, low-complexity HTTP web framework.\n* WebSocket support.\n* In-process background tasks.\n* Startup and shutdown events.\n* Test client built on `httpx2`.\n* CORS, GZip, Static Files, Streaming responses.\n* Session and Cookie support.\n* 100% test coverage.\n* 100% type annotated codebase.\n* Few hard dependencies.\n* Compatible with `asyncio` and `trio` backends.\n* Great overall performance [against independent benchmarks][techempower].\n\n## Installation\n\n```shell\n$ pip install starlette\n```\n\nYou'll also want to install an ASGI server, such as [uvicorn](https://uvicorn.dev) or any of the [other ASGI server implementations](https://asgi.readthedocs.io/en/latest/implementations.html#servers).\n\n```shell\n$ pip install uvicorn\n```\n\n## Example\n\n```python title=\"main.py\"\nfrom starlette.applications import Starlette\nfrom starlette.responses import JSONResponse\nfrom starlette.routing import Route\n\n\nasync def homepage(request):\n return JSONResponse({'hello': 'world'})\n\nroutes = [\n Route(\"/\", endpoint=homepage)\n]\n\napp = Starlette(debug=True, routes=routes)\n```\n\nThen run the application using Uvicorn:\n\n```shell\n$ uvicorn main:app\n```\n\n## Dependencies\n\nStarlette only requires `anyio`, and the following are optional:\n\n* [`httpx2`][httpx2] - Required if you want to use the `TestClient`.\n* [`jinja2`][jinja2] - Required if you want to use `Jinja2Templates`.\n* [`opentelemetry-api`][opentelemetry-api] - Required for `OpenTelemetryMiddleware`.\n* [`python-multipart`][python-multipart] - Required if you want to support form parsing, with `request.form()`.\n* [`itsdangerous`][itsdangerous] - Required for `SessionMiddleware` support.\n* [`pyyaml`][pyyaml] - Required for `SchemaGenerator` support.\n\nYou can install all of these with `pip install starlette[full]`.\n\n## Framework or Toolkit\n\nStarlette is designed to be used either as a complete framework, or as\nan ASGI toolkit. You can use any of its components independently.\n\n```python\nfrom starlette.responses import PlainTextResponse\n\n\nasync def app(scope, receive, send):\n assert scope['type'] == 'http'\n response = PlainTextResponse('Hello, world!')\n await response(scope, receive, send)\n```\n\nRun the `app` application in `example.py`:\n\n```shell\n$ uvicorn example:app\nINFO: Started server process [11509]\nINFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)\n```\n\nRun uvicorn with `--reload` to enable auto-reloading on code changes.\n\n## Modularity\n\nThe modularity that Starlette is designed on promotes building reusable\ncomponents that can be shared between any ASGI framework. This should enable\nan ecosystem of shared middleware and mountable applications.\n\nThe clean API separation also means it's easier to understand each component\nin isolation.\n\n---\n\n

Starlette is BSD licensed code.
Designed & crafted with care.

— ⭐️ —

\n\n[asgi]: https://asgi.readthedocs.io/en/latest/\n[httpx2]: https://pypi.org/project/httpx2/\n[jinja2]: https://jinja.palletsprojects.com/\n[opentelemetry-api]: https://opentelemetry.io/docs/languages/python/api/\n[python-multipart]: https://multipart.fastapiexpert.com/\n[itsdangerous]: https://itsdangerous.palletsprojects.com/\n[sqlalchemy]: https://www.sqlalchemy.org\n[pyyaml]: https://pyyaml.org/wiki/PyYAMLDocumentation\n[techempower]: https://github.com/TechEmpower/FrameworkBenchmarks\n", + "description_content_type": "text/markdown", + "author_email": "Tom Christie ", + "maintainer_email": "Marcelo Trylesinski ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.md" + ], + "classifier": [ + "Development Status :: 3 - Alpha", + "Environment :: Web Environment", + "Framework :: AnyIO", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Topic :: Internet :: WWW/HTTP" + ], + "requires_dist": [ + "anyio<5,>=4.0.0", + "typing-extensions>=4.10.0; python_version < '3.13'", + "httpx2>=2.0.0; extra == 'full'", + "httpx<0.29.0,>=0.27.0; extra == 'full'", + "itsdangerous; extra == 'full'", + "jinja2; extra == 'full'", + "opentelemetry-api; extra == 'full'", + "python-multipart>=0.0.18; extra == 'full'", + "pyyaml; extra == 'full'" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://github.com/Kludex/starlette", + "Documentation, https://starlette.dev/", + "Changelog, https://starlette.dev/release-notes/", + "Funding, https://github.com/sponsors/Kludex", + "Source, https://github.com/Kludex/starlette" + ], + "provides_extra": [ + "full" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/12/b8/4bd346e22b28902df4d651910f5242c28d84e4a5c2435ca5c3f797ed7e2e/anyio-4.15.1-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101" + }, + "hash": "sha256=6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "anyio", + "version": "4.15.1", + "dynamic": [ + "license-file" + ], + "summary": "High-level concurrency and networking framework on top of asyncio or Trio", + "description": ".. image:: https://github.com/agronholm/anyio/actions/workflows/test.yml/badge.svg\n :target: https://github.com/agronholm/anyio/actions/workflows/test.yml\n :alt: Build Status\n.. image:: https://coveralls.io/repos/github/agronholm/anyio/badge.svg?branch=master\n :target: https://coveralls.io/github/agronholm/anyio?branch=master\n :alt: Code Coverage\n.. image:: https://readthedocs.org/projects/anyio/badge/?version=latest\n :target: https://anyio.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation\n.. image:: https://badges.gitter.im/gitterHQ/gitter.svg\n :target: https://gitter.im/python-trio/AnyIO\n :alt: Gitter chat\n.. image:: https://tidelift.com/badges/package/pypi/anyio\n :target: https://tidelift.com/subscription/pkg/pypi-anyio\n :alt: Tidelift\n\nAnyIO is an asynchronous networking and concurrency library that works on top of either asyncio_ or\nTrio_. It implements Trio-like `structured concurrency`_ (SC) on top of asyncio and works in harmony\nwith the native SC of Trio itself.\n\nApplications and libraries written against AnyIO's API will run unmodified on either asyncio_ or\nTrio_. AnyIO can also be adopted into a library or application incrementally – bit by bit, no full\nrefactoring necessary. It will blend in with the native libraries of your chosen backend.\n\nTo find out why you might want to use AnyIO's APIs instead of asyncio's, you can read about it\n`here `_.\n\nDocumentation\n-------------\n\nView full documentation at: https://anyio.readthedocs.io/\n\nFeatures\n--------\n\nAnyIO offers the following functionality:\n\n* Task groups (nurseries_ in trio terminology)\n* High-level networking (TCP, UDP and UNIX sockets)\n\n * `Happy eyeballs`_ algorithm for TCP connections (more robust than that of asyncio on Python\n 3.8)\n * async/await style UDP sockets (unlike asyncio where you still have to use Transports and\n Protocols)\n\n* A versatile API for byte streams and object streams\n* Inter-task synchronization and communication (locks, conditions, events, semaphores, object\n streams and futures)\n* Worker threads\n* Subprocesses\n* Subinterpreter support for code parallelization (on Python 3.13 and later)\n* Asynchronous file I/O (using worker threads)\n* Signal handling\n* Asynchronous versions of the functools_ and itertools_ modules\n\nAnyIO also comes with its own pytest_ plugin which also supports asynchronous fixtures.\nIt even works with the popular Hypothesis_ library.\n\n.. _asyncio: https://docs.python.org/3/library/asyncio.html\n.. _Trio: https://github.com/python-trio/trio\n.. _structured concurrency: https://en.wikipedia.org/wiki/Structured_concurrency\n.. _nurseries: https://trio.readthedocs.io/en/stable/reference-core.html#nurseries-and-spawning\n.. _Happy eyeballs: https://en.wikipedia.org/wiki/Happy_Eyeballs\n.. _pytest: https://docs.pytest.org/en/latest/\n.. _functools: https://docs.python.org/3/library/functools.html\n.. _itertools: https://docs.python.org/3/library/itertools.html\n.. _Hypothesis: https://hypothesis.works/\n\nSecurity contact information\n----------------------------\n\nTo report a security vulnerability, please use the `Tidelift security contact`_.\nTidelift will coordinate the fix and disclosure.\n\n.. _Tidelift security contact: https://tidelift.com/security\n", + "description_content_type": "text/x-rst", + "author_email": "Alex Grönholm ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Framework :: AnyIO", + "Typing :: Typed", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Programming Language :: Python :: Free Threading :: 2 - Beta" + ], + "requires_dist": [ + "exceptiongroup>=1.0.2; python_version < \"3.11\"", + "idna>=2.8", + "typing_extensions>=4.16.0; python_version < \"3.15\"", + "trio>=0.32.0; extra == \"trio\"" + ], + "requires_python": ">=3.10", + "project_url": [ + "Documentation, https://anyio.readthedocs.io/en/latest/", + "Changelog, https://anyio.readthedocs.io/en/stable/versionhistory.html", + "Source code, https://github.com/agronholm/anyio", + "Issue tracker, https://github.com/agronholm/anyio/issues" + ], + "provides_extra": [ + "trio" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c" + }, + "hash": "sha256=ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "idna", + "version": "3.20", + "summary": "Internationalized Domain Names in Applications (IDNA)", + "description": "# Internationalized Domain Names in Applications (IDNA)\n\nSupport for [Internationalized Domain Names in Applications\n(IDNA)](https://tools.ietf.org/html/rfc5891) and [Unicode IDNA\nCompatibility Processing](https://unicode.org/reports/tr46/). It\nsupersedes the standard library's `encodings.idna`, which only\nimplements the 2003 specification, offering broader script coverage and\nlimiting domains with known security vulnerabilities.\n\n## Usage\n\nPackage may be installed from [PyPI](https://pypi.org/project/idna/) via\nthe typical methods (e.g. `python3 -m pip install idna`)\n\nFor typical usage, the `encode` and `decode` functions will take a\ndomain name argument and perform a conversion to ASCII-compatible encoding\n(known as A-labels), or to Unicode strings (known as U-labels)\nrespectively.\n\n```pycon\n>>> import idna\n>>> idna.encode('ドメイン.テスト')\nb'xn--eckwd4c7c.xn--zckzah'\n>>> print(idna.decode('xn--eckwd4c7c.xn--zckzah'))\nドメイン.テスト\n```\n\nConversions can be applied at a per-label basis using the `ulabel` or\n`alabel` functions for specialized use cases.\n\n\n### Compatibility Mapping (UTS #46)\n\nThis library provides support for [Unicode IDNA Compatibility\nProcessing](https://unicode.org/reports/tr46/) which normalizes input from\ndifferent potential ways a user may input a domain prior to performing the IDNA\nconversion operations. This functionality, known as a\n[mapping](https://tools.ietf.org/html/rfc5895), is considered by the\nspecification to be a local user-interface issue distinct from IDNA\nconversion functionality.\n\nFor example, \"Königsgäßchen\" is not a permissible label as capital letters\nare not allowed. UTS #46 will convert this into lower case prior to applying\nthe IDNA conversion.\n\n```pycon\n>>> import idna\n>>> idna.encode('Königsgäßchen')\n...\nidna.core.InvalidCodepoint: Codepoint U+004B at position 1 of 'Königsgäßchen' not allowed\n>>> idna.encode('Königsgäßchen', uts46=True)\nb'xn--knigsgchen-b4a3dun'\n>>> idna.decode('xn--knigsgchen-b4a3dun')\n'königsgäßchen'\n```\n\nWhen performing a decode operation for display purposes, `decode()`\naccepts a `display=True` argument that leaves any `xn--` label that\nfails to decode unchanged. This is useful for user interface display\nwhere a domain is in use, the A-label form can be presented when it\nis not a valid IDN.\n\n\n## Exceptions\n\nAll errors raised during conversion derive from the `idna.IDNAError`\nbase class. The more specific exceptions are:\n\n* `idna.IDNABidiError` — raised when a label contains an illegal\n combination of left-to-right and right-to-left characters.\n* `idna.InvalidCodepoint` — raised when a label contains a codepoint\n that is INVALID for IDNA.\n* `idna.InvalidCodepointContext` — raised when a CONTEXTO or CONTEXTJ\n codepoint appears in a position whose contextual requirements are\n not satisfied.\n\nExceptions carry machine-readable attributes so that applications do\nnot need to parse the message: `code` is a short, stable identifier\nfor the rule that failed (such as `disallowed_codepoint` or\n`label_too_long`); and, when the failure can be attributed to a\nparticular character, `text` (the label or domain being validated),\n`codepoint` (the offending codepoint as an integer) and `position`\nare set. \n\n\n## Command-line tool\n\nThe package supports command-line usage to convert domain names\nbetween their Unicode and ASCII-compatible forms. It can be run either\nas a module (`python3 -m idna`) or, once installed (such as with `uv\ntool` or `pipx`), via the `idna` script:\n\n```bash\n$ uv tool install idna\n$ idna xn--e1afmkfd.xn--p1ai\nпример.рф\n$ idna пример.рф\nxn--e1afmkfd.xn--p1ai\n```\n\nMode can be specified with `-e`/`--encode` or `-d`/`--decode`, otherwise\nit will be chosen automatically based on the first input. Multiple\ndomains can be supplied either as arguments or through standard input.\nUTS #46 mapping is applied by default, which lets the tool accept\ninputs that aren't strictly valid IDNA 2008 by normalising them first,\npass `--strict` to disable UTS #46.\n\nConversion failures are reported on stderr together with the\noffending input; processing continues with the remaining domains and\nthe tool exits with a non-zero status if any conversion failed.\n\n\n## Additional Notes\n\n* **Python version support**. This library supports Python 3.9 and higher.\n As this library serves as a low-level toolkit for a variety of\n applications, we strive to support all versions of Python that are\n not beyond end-of-life. Free-threaded Python is also supported,\n as the library holds no mutable global state the functions can be\n called concurrently from multiple threads.\n\n* **Unicode version**. The IDNA and UTS #46 lookup tables are generated\n from a specific Unicode release. Some Unicode data depends on the\n running Python's `unicodedata` module, so on an older Python a\n character new to Unicode may be rejected as unknown even if this\n library knows about it.\n\n* **Emoji**. It is an occasional request to support emoji domains in\n this library. Encoding of symbols like emoji is expressly prohibited by\n the IDNA technical standard, and emoji domains are broadly phased\n out across the domain industry due to associated security risks.\n\n* **Regenerating lookup tables**. The IDNA and UTS #46 functionality\n relies upon pre-calculated lookup tables, generated using the\n `idna-data` script in [`tools/`](tools/README.md).\n\n", + "description_content_type": "text/markdown", + "author_email": "Kim Davies ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.md" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Intended Audience :: System Administrators", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Internet :: Name Service (DNS)", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Utilities" + ], + "requires_dist": [ + "ruff >= 0.16.0 ; extra == \"all\"", + "mypy >= 1.11.2 ; extra == \"all\"", + "ty >= 0.0.37 ; extra == \"all\"", + "pytest >= 8.3.2 ; extra == \"all\"", + "hypothesis >= 6.141.1 ; extra == \"all\"", + "coverage >= 7.10.0 ; extra == \"all\"" + ], + "requires_python": ">=3.9", + "project_url": [ + "Changelog, https://github.com/kjd/idna/blob/master/HISTORY.md", + "Issue tracker, https://github.com/kjd/idna/issues", + "Source, https://github.com/kjd/idna" + ], + "provides_extra": [ + "all" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5" + }, + "hash": "sha256=e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "sympy", + "version": "1.14.0", + "dynamic": [ + "author", + "author-email", + "classifier", + "description", + "description-content-type", + "home-page", + "keywords", + "license", + "license-file", + "project-url", + "provides-extra", + "requires-dist", + "requires-python", + "summary" + ], + "summary": "Computer algebra system (CAS) in Python", + "description": "# SymPy\n\n[![pypi version](https://img.shields.io/pypi/v/sympy.svg)](https://pypi.python.org/pypi/sympy)\n[![Join the chat at https://gitter.im/sympy/sympy](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/sympy/sympy?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)\n[![Zenodo Badge](https://zenodo.org/badge/18918/sympy/sympy.svg)](https://zenodo.org/badge/latestdoi/18918/sympy/sympy)\n[![Downloads](https://pepy.tech/badge/sympy/month)](https://pepy.tech/project/sympy)\n[![GitHub Issues](https://img.shields.io/badge/issue_tracking-github-blue.svg)](https://github.com/sympy/sympy/issues)\n[![Git Tutorial](https://img.shields.io/badge/PR-Welcome-%23FF8300.svg?)](https://git-scm.com/book/en/v2/GitHub-Contributing-to-a-Project)\n[![Powered by NumFocus](https://img.shields.io/badge/powered%20by-NumFOCUS-orange.svg?style=flat&colorA=E1523D&colorB=007D8A)](https://numfocus.org)\n[![Commits since last release](https://img.shields.io/github/commits-since/sympy/sympy/latest.svg?longCache=true&style=flat-square&logo=git&logoColor=fff)](https://github.com/sympy/sympy/releases)\n\n[![SymPy Banner](https://github.com/sympy/sympy/raw/master/banner.svg)](https://sympy.org/)\n\n\nSee the [AUTHORS](AUTHORS) file for the list of authors.\n\nAnd many more people helped on the SymPy mailing list, reported bugs,\nhelped organize SymPy's participation in the Google Summer of Code, the\nGoogle Highly Open Participation Contest, Google Code-In, wrote and\nblogged about SymPy...\n\nLicense: New BSD License (see the [LICENSE](LICENSE) file for details) covers all\nfiles in the sympy repository unless stated otherwise.\n\nOur mailing list is at\n.\n\nWe have a community chat at [Gitter](https://gitter.im/sympy/sympy). Feel\nfree to ask us anything there. We have a very welcoming and helpful\ncommunity.\n\n## Download\n\nThe recommended installation method is through Anaconda,\n\n\nYou can also get the latest version of SymPy from\n\n\nTo get the git version do\n\n $ git clone https://github.com/sympy/sympy.git\n\nFor other options (tarballs, debs, etc.), see\n.\n\n## Documentation and Usage\n\nFor in-depth instructions on installation and building the\ndocumentation, see the [SymPy Documentation Style Guide](https://docs.sympy.org/dev/documentation-style-guide.html).\n\nEverything is at:\n\n\n\nYou can generate everything at the above site in your local copy of\nSymPy by:\n\n $ cd doc\n $ make html\n\nThen the docs will be in \\_build/html. If\nyou don't want to read that, here is a short usage:\n\nFrom this directory, start Python and:\n\n``` python\n>>> from sympy import Symbol, cos\n>>> x = Symbol('x')\n>>> e = 1/cos(x)\n>>> print(e.series(x, 0, 10))\n1 + x**2/2 + 5*x**4/24 + 61*x**6/720 + 277*x**8/8064 + O(x**10)\n```\n\nSymPy also comes with a console that is a simple wrapper around the\nclassic python console (or IPython when available) that loads the SymPy\nnamespace and executes some common commands for you.\n\nTo start it, issue:\n\n $ bin/isympy\n\nfrom this directory, if SymPy is not installed or simply:\n\n $ isympy\n\nif SymPy is installed.\n\n## Installation\n\nTo install SymPy using PyPI, run the following command:\n\n $ pip install sympy\n\nTo install SymPy using Anaconda, run the following command:\n\n $ conda install -c anaconda sympy\n\nTo install SymPy from GitHub source, first clone SymPy using `git`:\n\n $ git clone https://github.com/sympy/sympy.git\n\nThen, in the `sympy` repository that you cloned, simply run:\n\n $ pip install .\n\nSee for more information.\n\n## Contributing\n\nWe welcome contributions from anyone, even if you are new to open\nsource. Please read our [Introduction to Contributing](https://docs.sympy.org/dev/contributing/introduction-to-contributing.html)\npage and the [SymPy Documentation Style Guide](https://docs.sympy.org/dev/documentation-style-guide.html). If you\nare new and looking for some way to contribute, a good place to start is\nto look at the issues tagged [Easy to Fix](https://github.com/sympy/sympy/issues?q=is%3Aopen+is%3Aissue+label%3A%22Easy+to+Fix%22).\n\nPlease note that all participants in this project are expected to follow\nour Code of Conduct. By participating in this project you agree to abide\nby its terms. See [CODE\\_OF\\_CONDUCT.md](CODE_OF_CONDUCT.md).\n\n## Tests\n\nTo execute all tests, run:\n\n $./setup.py test\n\nin the current directory.\n\nFor the more fine-grained running of tests or doctests, use `bin/test`\nor respectively `bin/doctest`. The master branch is automatically tested\nby GitHub Actions.\n\nTo test pull requests, use\n[sympy-bot](https://github.com/sympy/sympy-bot).\n\n## Regenerate Experimental LaTeX Parser/Lexer\n\nThe parser and lexer were generated with the [ANTLR4](http://antlr4.org)\ntoolchain in `sympy/parsing/latex/_antlr` and checked into the repo.\nPresently, most users should not need to regenerate these files, but\nif you plan to work on this feature, you will need the `antlr4`\ncommand-line tool (and you must ensure that it is in your `PATH`).\nOne way to get it is:\n\n $ conda install -c conda-forge antlr=4.11.1\n\nAlternatively, follow the instructions on the ANTLR website and download\nthe `antlr-4.11.1-complete.jar`. Then export the `CLASSPATH` as instructed\nand instead of creating `antlr4` as an alias, make it an executable file\nwith the following contents:\n``` bash\n#!/bin/bash\njava -jar /usr/local/lib/antlr-4.11.1-complete.jar \"$@\"\n```\n\nAfter making changes to `sympy/parsing/latex/LaTeX.g4`, run:\n\n $ ./setup.py antlr\n\n## Clean\n\nTo clean everything (thus getting the same tree as in the repository):\n\n $ git clean -Xdf\n\nwhich will clear everything ignored by `.gitignore`, and:\n\n $ git clean -df\n\nto clear all untracked files. You can revert the most recent changes in\ngit with:\n\n $ git reset --hard\n\nWARNING: The above commands will all clear changes you may have made,\nand you will lose them forever. Be sure to check things with `git\nstatus`, `git diff`, `git clean -Xn`, and `git clean -n` before doing any\nof those.\n\n## Bugs\n\nOur issue tracker is at . Please\nreport any bugs that you find. Or, even better, fork the repository on\nGitHub and create a pull request. We welcome all changes, big or small,\nand we will help you make the pull request if you are new to git (just\nask on our mailing list or Gitter Channel). If you further have any queries, you can find answers\non Stack Overflow using the [sympy](https://stackoverflow.com/questions/tagged/sympy) tag.\n\n## Brief History\n\nSymPy was started by Ondřej Čertík in 2005, he wrote some code during\nthe summer, then he wrote some more code during summer 2006. In February\n2007, Fabian Pedregosa joined the project and helped fix many things,\ncontributed documentation, and made it alive again. 5 students (Mateusz\nPaprocki, Brian Jorgensen, Jason Gedge, Robert Schwarz, and Chris Wu)\nimproved SymPy incredibly during summer 2007 as part of the Google\nSummer of Code. Pearu Peterson joined the development during the summer\n2007 and he has made SymPy much more competitive by rewriting the core\nfrom scratch, which has made it from 10x to 100x faster. Jurjen N.E. Bos\nhas contributed pretty-printing and other patches. Fredrik Johansson has\nwritten mpmath and contributed a lot of patches.\n\nSymPy has participated in every Google Summer of Code since 2007. You\ncan see for\nfull details. Each year has improved SymPy by bounds. Most of SymPy's\ndevelopment has come from Google Summer of Code students.\n\nIn 2011, Ondřej Čertík stepped down as lead developer, with Aaron\nMeurer, who also started as a Google Summer of Code student, taking his\nplace. Ondřej Čertík is still active in the community but is too busy\nwith work and family to play a lead development role.\n\nSince then, a lot more people have joined the development and some\npeople have also left. You can see the full list in doc/src/aboutus.rst,\nor online at:\n\n\n\nThe git history goes back to 2007 when development moved from svn to hg.\nTo see the history before that point, look at\n.\n\nYou can use git to see the biggest developers. The command:\n\n $ git shortlog -ns\n\nwill show each developer, sorted by commits to the project. The command:\n\n $ git shortlog -ns --since=\"1 year\"\n\nwill show the top developers from the last year.\n\n## Citation\n\nTo cite SymPy in publications use\n\n> Meurer A, Smith CP, Paprocki M, Čertík O, Kirpichev SB, Rocklin M,\n> Kumar A, Ivanov S, Moore JK, Singh S, Rathnayake T, Vig S, Granger BE,\n> Muller RP, Bonazzi F, Gupta H, Vats S, Johansson F, Pedregosa F, Curry\n> MJ, Terrel AR, Roučka Š, Saboo A, Fernando I, Kulal S, Cimrman R,\n> Scopatz A. (2017) SymPy: symbolic computing in Python. *PeerJ Computer\n> Science* 3:e103 \n\nA BibTeX entry for LaTeX users is\n\n``` bibtex\n@article{10.7717/peerj-cs.103,\n title = {SymPy: symbolic computing in Python},\n author = {Meurer, Aaron and Smith, Christopher P. and Paprocki, Mateusz and \\v{C}ert\\'{i}k, Ond\\v{r}ej and Kirpichev, Sergey B. and Rocklin, Matthew and Kumar, Amit and Ivanov, Sergiu and Moore, Jason K. and Singh, Sartaj and Rathnayake, Thilina and Vig, Sean and Granger, Brian E. and Muller, Richard P. and Bonazzi, Francesco and Gupta, Harsh and Vats, Shivam and Johansson, Fredrik and Pedregosa, Fabian and Curry, Matthew J. and Terrel, Andy R. and Rou\\v{c}ka, \\v{S}t\\v{e}p\\'{a}n and Saboo, Ashutosh and Fernando, Isuru and Kulal, Sumith and Cimrman, Robert and Scopatz, Anthony},\n year = 2017,\n month = Jan,\n keywords = {Python, Computer algebra system, Symbolics},\n abstract = {\n SymPy is an open-source computer algebra system written in pure Python. It is built with a focus on extensibility and ease of use, through both interactive and programmatic applications. These characteristics have led SymPy to become a popular symbolic library for the scientific Python ecosystem. This paper presents the architecture of SymPy, a description of its features, and a discussion of select submodules. The supplementary material provides additional examples and further outlines details of the architecture and features of SymPy.\n },\n volume = 3,\n pages = {e103},\n journal = {PeerJ Computer Science},\n issn = {2376-5992},\n url = {https://doi.org/10.7717/peerj-cs.103},\n doi = {10.7717/peerj-cs.103}\n}\n```\n\nSymPy is BSD licensed, so you are free to use it whatever you like, be\nit academic, commercial, creating forks or derivatives, as long as you\ncopy the BSD statement if you redistribute it (see the LICENSE file for\ndetails). That said, although not required by the SymPy license, if it\nis convenient for you, please cite SymPy when using it in your work and\nalso consider contributing all your changes back, so that we can\nincorporate it and all of us will benefit in the end.\n", + "description_content_type": "text/markdown", + "keywords": [ + "Math", + "CAS" + ], + "home_page": "https://sympy.org", + "author": "SymPy development team", + "author_email": "sympy@googlegroups.com", + "license": "BSD", + "license_file": [ + "LICENSE", + "AUTHORS" + ], + "classifier": [ + "License :: OSI Approved :: BSD License", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Topic :: Scientific/Engineering", + "Topic :: Scientific/Engineering :: Mathematics", + "Topic :: Scientific/Engineering :: Physics", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy" + ], + "requires_dist": [ + "mpmath<1.4,>=1.1.0", + "pytest>=7.1.0; extra == \"dev\"", + "hypothesis>=6.70.0; extra == \"dev\"" + ], + "requires_python": ">=3.9", + "project_url": [ + "Source, https://github.com/sympy/sympy" + ], + "provides_extra": [ + "dev" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c" + }, + "hash": "sha256=a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.1", + "name": "mpmath", + "version": "1.3.0", + "summary": "Python library for arbitrary-precision floating-point arithmetic", + "description": "mpmath\n======\n\n|pypi version| |Build status| |Code coverage status| |Zenodo Badge|\n\n.. |pypi version| image:: https://img.shields.io/pypi/v/mpmath.svg\n :target: https://pypi.python.org/pypi/mpmath\n.. |Build status| image:: https://github.com/fredrik-johansson/mpmath/workflows/test/badge.svg\n :target: https://github.com/fredrik-johansson/mpmath/actions?workflow=test\n.. |Code coverage status| image:: https://codecov.io/gh/fredrik-johansson/mpmath/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/fredrik-johansson/mpmath\n.. |Zenodo Badge| image:: https://zenodo.org/badge/2934512.svg\n :target: https://zenodo.org/badge/latestdoi/2934512\n\nA Python library for arbitrary-precision floating-point arithmetic.\n\nWebsite: http://mpmath.org/\nMain author: Fredrik Johansson \n\nMpmath is free software released under the New BSD License (see the\nLICENSE file for details)\n\n0. History and credits\n----------------------\n\nThe following people (among others) have contributed major patches\nor new features to mpmath:\n\n* Pearu Peterson \n* Mario Pernici \n* Ondrej Certik \n* Vinzent Steinberg \n* Nimish Telang \n* Mike Taschuk \n* Case Van Horsen \n* Jorn Baayen \n* Chris Smith \n* Juan Arias de Reyna \n* Ioannis Tziakos \n* Aaron Meurer \n* Stefan Krastanov \n* Ken Allen \n* Timo Hartmann \n* Sergey B Kirpichev \n* Kris Kuhlman \n* Paul Masson \n* Michael Kagalenko \n* Jonathan Warner \n* Max Gaukler \n* Guillermo Navas-Palencia \n* Nike Dattani \n\nNumerous other people have contributed by reporting bugs,\nrequesting new features, or suggesting improvements to the\ndocumentation.\n\nFor a detailed changelog, including individual contributions,\nsee the CHANGES file.\n\nFredrik's work on mpmath during summer 2008 was sponsored by Google\nas part of the Google Summer of Code program.\n\nFredrik's work on mpmath during summer 2009 was sponsored by the\nAmerican Institute of Mathematics under the support of the National Science\nFoundation Grant No. 0757627 (FRG: L-functions and Modular Forms).\n\nAny opinions, findings, and conclusions or recommendations expressed in this\nmaterial are those of the author(s) and do not necessarily reflect the\nviews of the sponsors.\n\nCredit also goes to:\n\n* The authors of the GMP library and the Python wrapper\n gmpy, enabling mpmath to become much faster at\n high precision\n* The authors of MPFR, pari/gp, MPFUN, and other arbitrary-\n precision libraries, whose documentation has been helpful\n for implementing many of the algorithms in mpmath\n* Wikipedia contributors; Abramowitz & Stegun; Gradshteyn & Ryzhik;\n Wolfram Research for MathWorld and the Wolfram Functions site.\n These are the main references used for special functions\n implementations.\n* George Brandl for developing the Sphinx documentation tool\n used to build mpmath's documentation\n\nRelease history:\n\n* Version 1.3.0 released on March 7, 2023\n* Version 1.2.0 released on February 1, 2021\n* Version 1.1.0 released on December 11, 2018\n* Version 1.0.0 released on September 27, 2017\n* Version 0.19 released on June 10, 2014\n* Version 0.18 released on December 31, 2013\n* Version 0.17 released on February 1, 2011\n* Version 0.16 released on September 24, 2010\n* Version 0.15 released on June 6, 2010\n* Version 0.14 released on February 5, 2010\n* Version 0.13 released on August 13, 2009\n* Version 0.12 released on June 9, 2009\n* Version 0.11 released on January 26, 2009\n* Version 0.10 released on October 15, 2008\n* Version 0.9 released on August 23, 2008\n* Version 0.8 released on April 20, 2008\n* Version 0.7 released on March 12, 2008\n* Version 0.6 released on January 13, 2008\n* Version 0.5 released on November 24, 2007\n* Version 0.4 released on November 3, 2007\n* Version 0.3 released on October 5, 2007\n* Version 0.2 released on October 2, 2007\n* Version 0.1 released on September 27, 2007\n\n1. Download & installation\n--------------------------\n\nMpmath requires Python 2.7 or 3.5 (or later versions). It has been tested\nwith CPython 2.7, 3.5 through 3.7 and for PyPy.\n\nThe latest release of mpmath can be downloaded from the mpmath\nwebsite and from https://github.com/fredrik-johansson/mpmath/releases\n\nIt should also be available in the Python Package Index at\nhttps://pypi.python.org/pypi/mpmath\n\nTo install latest release of Mpmath with pip, simply run\n\n``pip install mpmath``\n\nOr unpack the mpmath archive and run\n\n``python setup.py install``\n\nMpmath can also be installed using\n\n``python -m easy_install mpmath``\n\nThe latest development code is available from\nhttps://github.com/fredrik-johansson/mpmath\n\nSee the main documentation for more detailed instructions.\n\n2. Running tests\n----------------\n\nThe unit tests in mpmath/tests/ can be run via the script\nruntests.py, but it is recommended to run them with py.test\n(https://pytest.org/), especially\nto generate more useful reports in case there are failures.\n\nYou may also want to check out the demo scripts in the demo\ndirectory.\n\nThe master branch is automatically tested by Travis CI.\n\n3. Documentation\n----------------\n\nDocumentation in reStructuredText format is available in the\ndoc directory included with the source package. These files\nare human-readable, but can be compiled to prettier HTML using\nthe build.py script (requires Sphinx, http://sphinx.pocoo.org/).\n\nSee setup.txt in the documentation for more information.\n\nThe most recent documentation is also available in HTML format:\n\nhttp://mpmath.org/doc/current/\n\n4. Known problems\n-----------------\n\nMpmath is a work in progress. Major issues include:\n\n* Some functions may return incorrect values when given extremely\n large arguments or arguments very close to singularities.\n\n* Directed rounding works for arithmetic operations. It is implemented\n heuristically for other operations, and their results may be off by one\n or two units in the last place (even if otherwise accurate).\n\n* Some IEEE 754 features are not available. Inifinities and NaN are\n partially supported; denormal rounding is currently not available\n at all.\n\n* The interface for switching precision and rounding is not finalized.\n The current method is not threadsafe.\n\n5. Help and bug reports\n-----------------------\n\nGeneral questions and comments can be sent to the mpmath mailinglist,\nmpmath@googlegroups.com\n\nYou can also report bugs and send patches to the mpmath issue tracker,\nhttps://github.com/fredrik-johansson/mpmath/issues\n", + "home_page": "http://mpmath.org/", + "author": "Fredrik Johansson", + "author_email": "fredrik.johansson@gmail.com", + "license": "BSD", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "License :: OSI Approved :: BSD License", + "Topic :: Scientific/Engineering :: Mathematics", + "Topic :: Software Development :: Libraries :: Python Modules", + "Programming Language :: Python", + "Programming Language :: Python :: 2", + "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.5", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy" + ], + "requires_dist": [ + "pytest (>=4.6) ; extra == 'develop'", + "pycodestyle ; extra == 'develop'", + "pytest-cov ; extra == 'develop'", + "codecov ; extra == 'develop'", + "wheel ; extra == 'develop'", + "sphinx ; extra == 'docs'", + "gmpy2 (>=2.1.0a4) ; (platform_python_implementation != \"PyPy\") and extra == 'gmpy'", + "pytest (>=4.6) ; extra == 'tests'" + ], + "project_url": [ + "Source, https://github.com/fredrik-johansson/mpmath", + "Tracker, https://github.com/fredrik-johansson/mpmath/issues", + "Documentation, http://mpmath.org/doc/current/" + ], + "provides_extra": [ + "develop", + "docs", + "gmpy", + "tests" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8" + }, + "hash": "sha256=481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "typing_extensions", + "version": "4.16.0", + "summary": "Backported and Experimental Type Hints for Python 3.9+", + "description": "# Typing Extensions\n\n[![Chat at https://gitter.im/python/typing](https://badges.gitter.im/python/typing.svg)](https://gitter.im/python/typing)\n\n[Documentation](https://typing-extensions.readthedocs.io/en/latest/#) –\n[PyPI](https://pypi.org/project/typing-extensions/)\n\n## Overview\n\nThe `typing_extensions` module serves two related purposes:\n\n- Enable use of new type system features on older Python versions. For example,\n `typing.TypeGuard` is new in Python 3.10, but `typing_extensions` allows\n users on previous Python versions to use it too.\n- Enable experimentation with new type system PEPs before they are accepted and\n added to the `typing` module.\n\n`typing_extensions` is treated specially by static type checkers such as\nmypy and pyright. Objects defined in `typing_extensions` are treated the same\nway as equivalent forms in `typing`.\n\n`typing_extensions` uses\n[Semantic Versioning](https://semver.org/). The\nmajor version will be incremented only for backwards-incompatible changes.\nTherefore, it's safe to depend\non `typing_extensions` like this: `typing_extensions ~=x.y`,\nwhere `x.y` is the first version that includes all features you need.\n[This](https://packaging.python.org/en/latest/specifications/version-specifiers/#compatible-release)\nis equivalent to `typing_extensions >=x.y, <(x+1)`. Do not depend on `~= x.y.z`\nunless you really know what you're doing; that defeats the purpose of\nsemantic versioning.\n\n## Included items\n\nSee [the documentation](https://typing-extensions.readthedocs.io/en/latest/#) for a\ncomplete listing of module contents.\n\n## Contributing\n\nSee [CONTRIBUTING.md](https://github.com/python/typing_extensions/blob/main/CONTRIBUTING.md)\nfor how to contribute to `typing_extensions`.\n\n", + "description_content_type": "text/markdown", + "keywords": [ + "annotations", + "backport", + "checker", + "checking", + "function", + "hinting", + "hints", + "type", + "typechecking", + "typehinting", + "typehints", + "typing" + ], + "author_email": "\"Guido van Rossum, Jukka Lehtosalo, Łukasz Langa, Michael Lee\" ", + "license_expression": "PSF-2.0", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Environment :: Console", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Topic :: Software Development" + ], + "requires_python": ">=3.9", + "project_url": [ + "Bug Tracker, https://github.com/python/typing_extensions/issues", + "Changes, https://github.com/python/typing_extensions/blob/main/CHANGELOG.md", + "Documentation, https://typing-extensions.readthedocs.io/", + "Home, https://github.com/python/typing_extensions", + "Q & A, https://github.com/python/typing/discussions", + "Repository, https://github.com/python/typing_extensions" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147" + }, + "hash": "sha256=65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "typing-inspection", + "version": "0.4.4", + "summary": "Runtime typing introspection tools", + "description": "# typing-inspection\n\n[![CI](https://img.shields.io/github/actions/workflow/status/pydantic/typing-inspection/ci.yml?branch=main&logo=github&label=CI)](https://github.com/pydantic/typing-inspection/actions?query=event%3Apush+branch%3Amain+workflow%3ACI)\n[![Coverage](https://coverage-badge.samuelcolvin.workers.dev/pydantic/typing-inspection.svg)](https://coverage-badge.samuelcolvin.workers.dev/redirect/pydantic/typing-inspection)\n[![PyPI](https://img.shields.io/pypi/v/typing-inspection.svg)](https://pypi.org/project/typing-inspection/)\n[![Versions](https://img.shields.io/pypi/pyversions/typing-inspection.svg)](https://github.com/pydantic/typing-inspection)\n[![License](https://img.shields.io/github/license/pydantic/typing-inspection.svg)](https://github.com/pydantic/typing-inspection/blob/main/LICENSE)\n[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)\n\n`typing-inspection` provides tools to inspect type annotations at runtime.\n\n## Installation\n\nFrom [PyPI](https://pypi.org/project/typing-inspection/):\n\n```bash\npip install typing-inspection\n```\n\nThe library can be imported from the `typing_inspection` module.\n", + "description_content_type": "text/markdown", + "author_email": "Victorien Plot ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Programming Language :: Python :: Implementation :: CPython", + "Topic :: Software Development :: Libraries :: Python Modules", + "Typing :: Typed" + ], + "requires_dist": [ + "typing-extensions>=4.15.0" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://github.com/pydantic/typing-inspection", + "Documentation, https://pydantic.github.io/typing-inspection/dev/", + "Source, https://github.com/pydantic/typing-inspection", + "Changelog, https://github.com/pydantic/typing-inspection/blob/main/HISTORY.md" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/7a/6d/db8b86e168fef0cf904737e275bccb683558088ef971e92d3b41ce980699/filelock-4.0.3-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "30cd166e2aee2c7534ce2c33c6367c4cd051b8368e20e2c4eb0c34f699bacfab" + }, + "hash": "sha256=30cd166e2aee2c7534ce2c33c6367c4cd051b8368e20e2c4eb0c34f699bacfab" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "filelock", + "version": "4.0.3", + "summary": "A platform independent file lock.", + "description": "# filelock\n\n[![PyPI](https://img.shields.io/pypi/v/filelock)](https://pypi.org/project/filelock/)\n[![Supported Python versions](https://img.shields.io/pypi/pyversions/filelock.svg)](https://pypi.org/project/filelock/)\n[![Documentation status](https://readthedocs.org/projects/py-filelock/badge/?version=latest)](https://py-filelock.readthedocs.io/en/latest/?badge=latest)\n[![Downloads](https://static.pepy.tech/badge/filelock/month)](https://pepy.tech/project/filelock)\n[![check](https://github.com/tox-dev/py-filelock/actions/workflows/check.yaml/badge.svg)](https://github.com/tox-dev/py-filelock/actions/workflows/check.yaml)\n\nFor more information checkout the [official documentation](https://py-filelock.readthedocs.io/en/latest/index.html).\n", + "description_content_type": "text/markdown", + "keywords": [ + "application", + "cache", + "directory", + "log", + "user" + ], + "maintainer_email": "Bernát Gábor ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Topic :: Internet", + "Topic :: Software Development :: Libraries", + "Topic :: System" + ], + "requires_python": ">=3.10", + "project_url": [ + "Documentation, https://py-filelock.readthedocs.io", + "Homepage, https://github.com/tox-dev/py-filelock", + "Source, https://github.com/tox-dev/py-filelock", + "Tracker, https://github.com/tox-dev/py-filelock/issues" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67" + }, + "hash": "sha256=85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "Jinja2", + "version": "3.1.6", + "summary": "A very fast and expressive template engine.", + "description": "# Jinja\n\nJinja is a fast, expressive, extensible templating engine. Special\nplaceholders in the template allow writing code similar to Python\nsyntax. Then the template is passed data to render the final document.\n\nIt includes:\n\n- Template inheritance and inclusion.\n- Define and import macros within templates.\n- HTML templates can use autoescaping to prevent XSS from untrusted\n user input.\n- A sandboxed environment can safely render untrusted templates.\n- AsyncIO support for generating templates and calling async\n functions.\n- I18N support with Babel.\n- Templates are compiled to optimized Python code just-in-time and\n cached, or can be compiled ahead-of-time.\n- Exceptions point to the correct line in templates to make debugging\n easier.\n- Extensible filters, tests, functions, and even syntax.\n\nJinja's philosophy is that while application logic belongs in Python if\npossible, it shouldn't make the template designer's job difficult by\nrestricting functionality too much.\n\n\n## In A Nutshell\n\n```jinja\n{% extends \"base.html\" %}\n{% block title %}Members{% endblock %}\n{% block content %}\n \n{% endblock %}\n```\n\n## Donate\n\nThe Pallets organization develops and supports Jinja and other popular\npackages. In order to grow the community of contributors and users, and\nallow the maintainers to devote more time to the projects, [please\ndonate today][].\n\n[please donate today]: https://palletsprojects.com/donate\n\n## Contributing\n\nSee our [detailed contributing documentation][contrib] for many ways to\ncontribute, including reporting issues, requesting features, asking or answering\nquestions, and making PRs.\n\n[contrib]: https://palletsprojects.com/contributing/\n\n", + "description_content_type": "text/markdown", + "maintainer_email": "Pallets ", + "license_file": [ + "LICENSE.txt" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Environment :: Web Environment", + "Intended Audience :: Developers", + "License :: OSI Approved :: BSD License", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Topic :: Internet :: WWW/HTTP :: Dynamic Content", + "Topic :: Text Processing :: Markup :: HTML", + "Typing :: Typed" + ], + "requires_dist": [ + "MarkupSafe>=2.0", + "Babel>=2.7 ; extra == \"i18n\"" + ], + "requires_python": ">=3.7", + "project_url": [ + "Changes, https://jinja.palletsprojects.com/changes/", + "Chat, https://discord.gg/pallets", + "Documentation, https://jinja.palletsprojects.com/", + "Donate, https://palletsprojects.com/donate", + "Source, https://github.com/pallets/jinja/" + ], + "provides_extra": [ + "i18n" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", + "archive_info": { + "hashes": { + "sha256": "bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581" + }, + "hash": "sha256=bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "MarkupSafe", + "version": "3.0.3", + "dynamic": [ + "license-file" + ], + "summary": "Safely add untrusted strings to HTML/XML markup.", + "description": "
\"\"
\n\n# MarkupSafe\n\nMarkupSafe implements a text object that escapes characters so it is\nsafe to use in HTML and XML. Characters that have special meanings are\nreplaced so that they display as the actual characters. This mitigates\ninjection attacks, meaning untrusted user input can safely be displayed\non a page.\n\n\n## Examples\n\n```pycon\n>>> from markupsafe import Markup, escape\n\n>>> # escape replaces special characters and wraps in Markup\n>>> escape(\"\")\nMarkup('<script>alert(document.cookie);</script>')\n\n>>> # wrap in Markup to mark text \"safe\" and prevent escaping\n>>> Markup(\"Hello\")\nMarkup('hello')\n\n>>> escape(Markup(\"Hello\"))\nMarkup('hello')\n\n>>> # Markup is a str subclass\n>>> # methods and operators escape their arguments\n>>> template = Markup(\"Hello {name}\")\n>>> template.format(name='\"World\"')\nMarkup('Hello "World"')\n```\n\n## Donate\n\nThe Pallets organization develops and supports MarkupSafe and other\npopular packages. In order to grow the community of contributors and\nusers, and allow the maintainers to devote more time to the projects,\n[please donate today][].\n\n[please donate today]: https://palletsprojects.com/donate\n\n## Contributing\n\nSee our [detailed contributing documentation][contrib] for many ways to\ncontribute, including reporting issues, requesting features, asking or answering\nquestions, and making PRs.\n\n[contrib]: https://palletsprojects.com/contributing/\n", + "description_content_type": "text/markdown", + "maintainer_email": "Pallets ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.txt" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Environment :: Web Environment", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Topic :: Internet :: WWW/HTTP :: Dynamic Content", + "Topic :: Text Processing :: Markup :: HTML", + "Typing :: Typed" + ], + "requires_python": ">=3.9", + "project_url": [ + "Donate, https://palletsprojects.com/donate", + "Documentation, https://markupsafe.palletsprojects.com/", + "Changes, https://markupsafe.palletsprojects.com/page/changes/", + "Source, https://github.com/pallets/markupsafe/", + "Chat, https://discord.gg/pallets" + ] + } + } + ], + "environment": { + "implementation_name": "cpython", + "implementation_version": "3.14.7", + "os_name": "nt", + "platform_machine": "AMD64", + "platform_release": "2025Server", + "platform_system": "Windows", + "platform_version": "10.0.26100", + "python_full_version": "3.14.7", + "platform_python_implementation": "CPython", + "python_version": "3.14", + "sys_platform": "win32" + } +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-cpu-rpc-restart-acceptance/probe-results.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-cpu-rpc-restart-acceptance/probe-results.json new file mode 100644 index 000000000..146366c81 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-cpu-rpc-restart-acceptance/probe-results.json @@ -0,0 +1,304 @@ +{ + "recorded_at": "2026-09-26T06:19:56.635087+00:00", + "status": "passed", + "core_status": "passed", + "adapter_status": "not selected", + "environment": { + "release": "2.14.0", + "torch": "2.14.0+cpu", + "build": "cpu", + "adapter": "none", + "python": "3.14", + "interpreter": "\\\\?\\C:\\Users\\runneradmin\\AppData\\Local\\Temp\\pumas-torch-native-cpu-d2m_g5ii\\launcher-data\\managed-python\\python\\5dc2484c3bc035e81d37fb9af266e3546b42d2553d222081cd129940f1bbf9b7\\cpython-3.14.7-windows-x86_64-none\\python.exe", + "implementation": "cpython", + "platform": "Windows-2025Server-10.0.26100-SP0", + "machine": "AMD64", + "artifacts": [ + { + "name": "torch", + "version": "2.14.0+cpu", + "url": "https://download-r2.pytorch.org/whl/cpu/torch-2.14.0%2Bcpu-cp314-cp314-win_amd64.whl", + "sha256": "ca9b3c2c652587f7b26c86d30be3648f553bd07fb3cf9b3edb645e7eafe295a3" + }, + { + "name": "fastapi", + "version": "0.141.1", + "url": "https://files.pythonhosted.org/packages/cb/03/10388a42375ee7e4ac9b94eb2c5c569c8b5795e377e701c9ac3ad63de890/fastapi-0.141.1-py3-none-any.whl", + "sha256": "bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3" + }, + { + "name": "uvicorn", + "version": "0.54.0", + "url": "https://files.pythonhosted.org/packages/38/0c/b54a4fdd7f90a3af8b02ebc9ce6712c2c208b7926a2f7bad95c33ebbe943/uvicorn-0.54.0-py3-none-any.whl", + "sha256": "505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf" + }, + { + "name": "psutil", + "version": "7.2.2", + "url": "https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl", + "sha256": "eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988" + }, + { + "name": "pillow", + "version": "12.3.0", + "url": "https://files.pythonhosted.org/packages/f1/e0/492879f69d94f91f60fc8cd05ba03650e9520afebb2fb7aa12777d7c7f38/pillow-12.3.0-cp314-cp314-win_amd64.whl", + "sha256": "fdafc9cce40277e0f7a0feabce0ee50dd2fa1800f3b38015e51296b5e814048d" + }, + { + "name": "safetensors", + "version": "0.8.0", + "url": "https://files.pythonhosted.org/packages/1b/6d/3fba214c1e5e0f69991677ec3bc17023f0421776975e1de0c682dca475e2/safetensors-0.8.0-cp310-abi3-win_amd64.whl", + "sha256": "096ec1a98435df7beb08853bb5aa9081a84f23d0adc67ed1a0a10550f608373f" + }, + { + "name": "annotated-doc", + "version": "0.0.5", + "url": "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", + "sha256": "117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101" + }, + { + "name": "click", + "version": "8.5.0", + "url": "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", + "sha256": "255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360" + }, + { + "name": "fsspec", + "version": "2026.9.0", + "url": "https://files.pythonhosted.org/packages/6c/c0/a98505f18594f1bce828bb159cec0fcf9860562f1a2c85913409fc8f3d9e/fsspec-2026.9.0-py3-none-any.whl", + "sha256": "8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f" + }, + { + "name": "h11", + "version": "0.16.0", + "url": "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", + "sha256": "63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86" + }, + { + "name": "networkx", + "version": "3.7", + "url": "https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl", + "sha256": "e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0" + }, + { + "name": "pydantic", + "version": "2.13.5", + "url": "https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl", + "sha256": "346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73" + }, + { + "name": "pydantic-core", + "version": "2.46.5", + "url": "https://files.pythonhosted.org/packages/f7/3c/60674207246bc0a4009d2391b7c7251c7159f279c8d2ab8aae8ef46f3dee/pydantic_core-2.46.5-cp314-cp314-win_amd64.whl", + "sha256": "fa10ef4112775900e7a0661068635eb67b2ab824fbde764de6e0e21982a93db0" + }, + { + "name": "annotated-types", + "version": "0.8.0", + "url": "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", + "sha256": "f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0" + }, + { + "name": "setuptools", + "version": "84.0.0", + "url": "https://files.pythonhosted.org/packages/95/9c/c510029fc6ef33a6275cd2c5d3cecd6613dfd6aa401d57c54f1c18852ccf/setuptools-84.0.0-py3-none-any.whl", + "sha256": "51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670" + }, + { + "name": "starlette", + "version": "1.7.0", + "url": "https://files.pythonhosted.org/packages/4e/d6/1ec1b290f9e0fb067899b61e1d37a30c923068bad260b216dbe37a7d2967/starlette-1.7.0-py3-none-any.whl", + "sha256": "67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e" + }, + { + "name": "anyio", + "version": "4.15.1", + "url": "https://files.pythonhosted.org/packages/12/b8/4bd346e22b28902df4d651910f5242c28d84e4a5c2435ca5c3f797ed7e2e/anyio-4.15.1-py3-none-any.whl", + "sha256": "6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101" + }, + { + "name": "idna", + "version": "3.20", + "url": "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl", + "sha256": "ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c" + }, + { + "name": "sympy", + "version": "1.14.0", + "url": "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", + "sha256": "e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5" + }, + { + "name": "mpmath", + "version": "1.3.0", + "url": "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", + "sha256": "a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c" + }, + { + "name": "typing-extensions", + "version": "4.16.0", + "url": "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", + "sha256": "481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8" + }, + { + "name": "typing-inspection", + "version": "0.4.4", + "url": "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", + "sha256": "65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147" + }, + { + "name": "filelock", + "version": "4.0.3", + "url": "https://files.pythonhosted.org/packages/7a/6d/db8b86e168fef0cf904737e275bccb683558088ef971e92d3b41ce980699/filelock-4.0.3-py3-none-any.whl", + "sha256": "30cd166e2aee2c7534ce2c33c6367c4cd051b8368e20e2c4eb0c34f699bacfab" + }, + { + "name": "jinja2", + "version": "3.1.6", + "url": "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", + "sha256": "85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67" + }, + { + "name": "markupsafe", + "version": "3.0.3", + "url": "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", + "sha256": "bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581" + } + ] + }, + "context": { + "python": "3.14.7 (main, Sep 1 2026, 14:17:30) [MSC v.1944 64 bit (AMD64)]", + "executable": "C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\pumas-torch-native-cpu-d2m_g5ii\\torch-versions\\.torch-install-HKXQJa\\runtime\\venv\\Scripts\\python.exe", + "platform": "Windows-2025Server-10.0.26100-SP0", + "hardware": { + "cuda": null, + "hip": null, + "devices": [] + }, + "hardware_fingerprint": "494fb1d79639aecf4bb2b6043473616914037c874c14d9805f8e3f9d38b2c602", + "driver_version": null, + "runtime_files_sha256": { + "control_api.py": "ee5160f121a749d8d11cd929abfb9d98a1a109235dac3690c9e2118f9cca54d0", + "device_manager.py": "9ab6d63eb943989bc19f1fed89098aca27b168536fa2529734d1ee4f37585379", + "diffusion.py": "c4dadfc949c17a460f8fc8a446b03139da0c574b45b3f561403fdf83e495b6d3", + "flux2.py": "39f864e1e15ffb2b697bb95418d474cb98a760feca9acd48a74b5cf05642fea2", + "image_api.py": "bb39ac05aee7ea4d4357360accfa27ee261f58d1cd9cc35af28470012673a7ec", + "loaders/__init__.py": "80cec9242f95b73881b038b890a5d9465a14be86a631b2a0e1bf9efacac543fe", + "loaders/dllm_loader.py": "2c5656bce01a6d133925d02ca72606f8ae951d66186ac07d3fcb7fd5580b1a13", + "loaders/safetensors_loader.py": "661a000b791396067d253a27a26cb5905ae40ce8d50817ba54bc1afce803396f", + "loaders/sherry_loader.py": "360ac3f66c4438e3ffe3d9dc99ef2a27ae69efdd26f8d3564f638ae7802e5b3f", + "model_manager.py": "cfc049050f9003f87d622fe57da5c4ab4efb5105523fcbab926d8770d82be3f8", + "nunchaku_compat.py": "27b42f9cae80e474c0b2162e6bf572f822d525134bf2fc3bddd551c031bb5d70", + "openai_api.py": "a3c712e6307fe3b60d1b7acdcbeb9413b011eb370ad656f862ef9399f3342f8c", + "probe_runtime.py": "9b9e1d81087aefffdb383038724b471daeb0456814e5f2fa17e0b4da46255e25", + "resolve_runtime.py": "e0476a77398ac18059160ca55c8bb74dfc32bbcf9938bab7a5ab329c70b027f1", + "serve.py": "88bf72ea3eac013dc7678bebe0e3b3053c141e8ec1222a210bd18b2a47601af4", + "validation.py": "f53cca26ddbddbc3c924ff07d32aaf9ced6061a7f1628379b4c0db2c9da7feb1" + }, + "interpreter_sha256": "80da2dbc9aca9420877223d6bf9ec0f5d9fd066a79ed65a3e3870037ff4e03e8", + "installed_distributions": { + "torch": "2.14.0+cpu", + "fastapi": "0.141.1", + "uvicorn": "0.54.0", + "psutil": "7.2.2", + "pillow": "12.3.0", + "safetensors": "0.8.0", + "annotated-doc": "0.0.5", + "click": "8.5.0", + "fsspec": "2026.9.0", + "h11": "0.16.0", + "networkx": "3.7", + "pydantic": "2.13.5", + "pydantic-core": "2.46.5", + "annotated-types": "0.8.0", + "setuptools": "84.0.0", + "starlette": "1.7.0", + "anyio": "4.15.1", + "idna": "3.20", + "sympy": "1.14.0", + "mpmath": "1.3.0", + "typing-extensions": "4.16.0", + "typing-inspection": "0.4.4", + "filelock": "4.0.3", + "jinja2": "3.1.6", + "markupsafe": "3.0.3" + }, + "all_installed_distributions": { + "annotated-doc": "0.0.5", + "annotated-types": "0.8.0", + "anyio": "4.15.1", + "click": "8.5.0", + "fastapi": "0.141.1", + "filelock": "4.0.3", + "fsspec": "2026.9.0", + "h11": "0.16.0", + "idna": "3.20", + "jinja2": "3.1.6", + "markupsafe": "3.0.3", + "mpmath": "1.3.0", + "networkx": "3.7", + "pillow": "12.3.0", + "pip": "26.2.1", + "psutil": "7.2.2", + "pydantic": "2.13.5", + "pydantic-core": "2.46.5", + "safetensors": "0.8.0", + "setuptools": "84.0.0", + "starlette": "1.7.0", + "sympy": "1.14.0", + "torch": "2.14.0+cpu", + "typing-extensions": "4.16.0", + "typing-inspection": "0.4.4", + "uvicorn": "0.54.0" + }, + "distributions_sha256": "fb628c6fb5305166cad9332e5cf97765df173d14d44b7a0296950ad749e0254e", + "resolution_sha256": "a1b110eff3116387751ac1a601cb1b0b3c7afd10cae01753b5381473a97039fc", + "sidecar_sha256": "88bf72ea3eac013dc7678bebe0e3b3053c141e8ec1222a210bd18b2a47601af4" + }, + "capabilities": { + "torch_import": { + "status": "passed", + "version": "2.14.0+cpu" + }, + "cpu_tensor": { + "status": "passed" + }, + "cuda_tensor": { + "status": "unavailable", + "scope": "CUDA tensor operation", + "reason": "CUDA is not available" + }, + "sidecar_app": { + "status": "passed", + "health": { + "status": "ok", + "protocol": 3, + "capabilities": [ + "image_generation" + ] + }, + "scope": "in-process app construction and health endpoint" + }, + "flux2_klein": { + "status": "not selected", + "scope": "optional adapter" + }, + "nunchaku_z_image": { + "status": "not selected", + "scope": "optional adapter" + }, + "image_device": { + "status": "unavailable", + "scope": "adapter device requirement", + "reason": "No NVIDIA sm_120 CUDA device detected" + }, + "sidecar_startup": { + "status": "not tested", + "scope": "socket startup requires an explicit trial" + }, + "image_generation": { + "status": "not tested", + "scope": "no model loaded or inference performed" + } + } +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-cpu-rpc-restart-acceptance/resolution.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-cpu-rpc-restart-acceptance/resolution.json new file mode 100644 index 000000000..35966fca8 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-cpu-rpc-restart-acceptance/resolution.json @@ -0,0 +1,163 @@ +{ + "release": "2.14.0", + "torch": "2.14.0+cpu", + "build": "cpu", + "adapter": "none", + "python": "3.14", + "interpreter": "\\\\?\\C:\\Users\\runneradmin\\AppData\\Local\\Temp\\pumas-torch-native-cpu-d2m_g5ii\\launcher-data\\managed-python\\python\\5dc2484c3bc035e81d37fb9af266e3546b42d2553d222081cd129940f1bbf9b7\\cpython-3.14.7-windows-x86_64-none\\python.exe", + "implementation": "cpython", + "platform": "Windows-2025Server-10.0.26100-SP0", + "machine": "AMD64", + "artifacts": [ + { + "name": "torch", + "version": "2.14.0+cpu", + "url": "https://download-r2.pytorch.org/whl/cpu/torch-2.14.0%2Bcpu-cp314-cp314-win_amd64.whl", + "sha256": "ca9b3c2c652587f7b26c86d30be3648f553bd07fb3cf9b3edb645e7eafe295a3" + }, + { + "name": "fastapi", + "version": "0.141.1", + "url": "https://files.pythonhosted.org/packages/cb/03/10388a42375ee7e4ac9b94eb2c5c569c8b5795e377e701c9ac3ad63de890/fastapi-0.141.1-py3-none-any.whl", + "sha256": "bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3" + }, + { + "name": "uvicorn", + "version": "0.54.0", + "url": "https://files.pythonhosted.org/packages/38/0c/b54a4fdd7f90a3af8b02ebc9ce6712c2c208b7926a2f7bad95c33ebbe943/uvicorn-0.54.0-py3-none-any.whl", + "sha256": "505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf" + }, + { + "name": "psutil", + "version": "7.2.2", + "url": "https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl", + "sha256": "eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988" + }, + { + "name": "pillow", + "version": "12.3.0", + "url": "https://files.pythonhosted.org/packages/f1/e0/492879f69d94f91f60fc8cd05ba03650e9520afebb2fb7aa12777d7c7f38/pillow-12.3.0-cp314-cp314-win_amd64.whl", + "sha256": "fdafc9cce40277e0f7a0feabce0ee50dd2fa1800f3b38015e51296b5e814048d" + }, + { + "name": "safetensors", + "version": "0.8.0", + "url": "https://files.pythonhosted.org/packages/1b/6d/3fba214c1e5e0f69991677ec3bc17023f0421776975e1de0c682dca475e2/safetensors-0.8.0-cp310-abi3-win_amd64.whl", + "sha256": "096ec1a98435df7beb08853bb5aa9081a84f23d0adc67ed1a0a10550f608373f" + }, + { + "name": "annotated-doc", + "version": "0.0.5", + "url": "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", + "sha256": "117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101" + }, + { + "name": "click", + "version": "8.5.0", + "url": "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", + "sha256": "255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360" + }, + { + "name": "fsspec", + "version": "2026.9.0", + "url": "https://files.pythonhosted.org/packages/6c/c0/a98505f18594f1bce828bb159cec0fcf9860562f1a2c85913409fc8f3d9e/fsspec-2026.9.0-py3-none-any.whl", + "sha256": "8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f" + }, + { + "name": "h11", + "version": "0.16.0", + "url": "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", + "sha256": "63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86" + }, + { + "name": "networkx", + "version": "3.7", + "url": "https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl", + "sha256": "e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0" + }, + { + "name": "pydantic", + "version": "2.13.5", + "url": "https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl", + "sha256": "346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73" + }, + { + "name": "pydantic-core", + "version": "2.46.5", + "url": "https://files.pythonhosted.org/packages/f7/3c/60674207246bc0a4009d2391b7c7251c7159f279c8d2ab8aae8ef46f3dee/pydantic_core-2.46.5-cp314-cp314-win_amd64.whl", + "sha256": "fa10ef4112775900e7a0661068635eb67b2ab824fbde764de6e0e21982a93db0" + }, + { + "name": "annotated-types", + "version": "0.8.0", + "url": "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", + "sha256": "f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0" + }, + { + "name": "setuptools", + "version": "84.0.0", + "url": "https://files.pythonhosted.org/packages/95/9c/c510029fc6ef33a6275cd2c5d3cecd6613dfd6aa401d57c54f1c18852ccf/setuptools-84.0.0-py3-none-any.whl", + "sha256": "51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670" + }, + { + "name": "starlette", + "version": "1.7.0", + "url": "https://files.pythonhosted.org/packages/4e/d6/1ec1b290f9e0fb067899b61e1d37a30c923068bad260b216dbe37a7d2967/starlette-1.7.0-py3-none-any.whl", + "sha256": "67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e" + }, + { + "name": "anyio", + "version": "4.15.1", + "url": "https://files.pythonhosted.org/packages/12/b8/4bd346e22b28902df4d651910f5242c28d84e4a5c2435ca5c3f797ed7e2e/anyio-4.15.1-py3-none-any.whl", + "sha256": "6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101" + }, + { + "name": "idna", + "version": "3.20", + "url": "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl", + "sha256": "ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c" + }, + { + "name": "sympy", + "version": "1.14.0", + "url": "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", + "sha256": "e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5" + }, + { + "name": "mpmath", + "version": "1.3.0", + "url": "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", + "sha256": "a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c" + }, + { + "name": "typing-extensions", + "version": "4.16.0", + "url": "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", + "sha256": "481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8" + }, + { + "name": "typing-inspection", + "version": "0.4.4", + "url": "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", + "sha256": "65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147" + }, + { + "name": "filelock", + "version": "4.0.3", + "url": "https://files.pythonhosted.org/packages/7a/6d/db8b86e168fef0cf904737e275bccb683558088ef971e92d3b41ce980699/filelock-4.0.3-py3-none-any.whl", + "sha256": "30cd166e2aee2c7534ce2c33c6367c4cd051b8368e20e2c4eb0c34f699bacfab" + }, + { + "name": "jinja2", + "version": "3.1.6", + "url": "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", + "sha256": "85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67" + }, + { + "name": "markupsafe", + "version": "3.0.3", + "url": "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", + "sha256": "bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581" + } + ] +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-cpu-rpc-restart-acceptance/restart-backend-session.txt b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-cpu-rpc-restart-acceptance/restart-backend-session.txt new file mode 100644 index 000000000..7e2662d01 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-cpu-rpc-restart-acceptance/restart-backend-session.txt @@ -0,0 +1,21 @@ +2026-09-26T06:20:05.904423Z  INFO Starting Pumas RPC Server +2026-09-26T06:20:05.904667Z  INFO Launcher root configured +2026-09-26T06:20:07.968964Z  INFO Rebuilding model index +2026-09-26T06:20:07.969420Z  INFO Rebuilt index with 0 models +2026-09-26T06:20:07.993357Z  INFO IPC server listening on 127.0.0.1:56596 +2026-09-26T06:20:07.994090Z  INFO IPC server started on port 56596 +2026-09-26T06:20:07.994869Z  INFO Started watching model library at "\\\\?\\C:\\Users\\runneradmin\\AppData\\Local\\Temp\\pumas-torch-native-cpu-d2m_g5ii\\shared-resources\\models" +2026-09-26T06:20:07.998240Z  INFO Validation complete: 0 valid, 0 removed, 0 orphaned +2026-09-26T06:20:07.998304Z  INFO ollama version manager initialized successfully +2026-09-26T06:20:08.005515Z  INFO Validation complete: 1 valid, 0 removed, 0 orphaned +2026-09-26T06:20:08.008149Z  INFO torch version manager initialized successfully +2026-09-26T06:20:08.009255Z  INFO Validation complete: 0 valid, 0 removed, 0 orphaned +2026-09-26T06:20:08.009300Z  INFO llama-cpp version manager initialized successfully +2026-09-26T06:20:08.009320Z  INFO Initialized 3 version manager(s) +2026-09-26T06:20:08.009524Z  INFO Size calculator initialized +2026-09-26T06:20:08.009784Z  INFO Plugin loader initialized (0 plugins) +2026-09-26T06:20:08.010916Z  INFO Server listening on 127.0.0.1:56597 with max 64 in-flight requests and 33554432 byte request bodies +RPC_PORT=56597 +2026-09-26T06:20:08.011004Z  INFO RPC server running on 127.0.0.1:56597 +2026-09-26T06:20:15.985130Z  INFO Shutdown signal received, exiting +2026-09-26T06:20:15.986167Z  WARN File watcher channel disconnected diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-cpu-rpc-restart-acceptance/runtime.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-cpu-rpc-restart-acceptance/runtime.json new file mode 100644 index 000000000..dd41eccd0 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-cpu-rpc-restart-acceptance/runtime.json @@ -0,0 +1,181 @@ +{ + "adapter": "none", + "artifacts": [ + { + "name": "torch", + "sha256": "ca9b3c2c652587f7b26c86d30be3648f553bd07fb3cf9b3edb645e7eafe295a3", + "url": "https://download-r2.pytorch.org/whl/cpu/torch-2.14.0%2Bcpu-cp314-cp314-win_amd64.whl", + "version": "2.14.0+cpu" + }, + { + "name": "fastapi", + "sha256": "bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3", + "url": "https://files.pythonhosted.org/packages/cb/03/10388a42375ee7e4ac9b94eb2c5c569c8b5795e377e701c9ac3ad63de890/fastapi-0.141.1-py3-none-any.whl", + "version": "0.141.1" + }, + { + "name": "uvicorn", + "sha256": "505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf", + "url": "https://files.pythonhosted.org/packages/38/0c/b54a4fdd7f90a3af8b02ebc9ce6712c2c208b7926a2f7bad95c33ebbe943/uvicorn-0.54.0-py3-none-any.whl", + "version": "0.54.0" + }, + { + "name": "psutil", + "sha256": "eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988", + "url": "https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl", + "version": "7.2.2" + }, + { + "name": "pillow", + "sha256": "fdafc9cce40277e0f7a0feabce0ee50dd2fa1800f3b38015e51296b5e814048d", + "url": "https://files.pythonhosted.org/packages/f1/e0/492879f69d94f91f60fc8cd05ba03650e9520afebb2fb7aa12777d7c7f38/pillow-12.3.0-cp314-cp314-win_amd64.whl", + "version": "12.3.0" + }, + { + "name": "safetensors", + "sha256": "096ec1a98435df7beb08853bb5aa9081a84f23d0adc67ed1a0a10550f608373f", + "url": "https://files.pythonhosted.org/packages/1b/6d/3fba214c1e5e0f69991677ec3bc17023f0421776975e1de0c682dca475e2/safetensors-0.8.0-cp310-abi3-win_amd64.whl", + "version": "0.8.0" + }, + { + "name": "annotated-doc", + "sha256": "117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101", + "url": "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", + "version": "0.0.5" + }, + { + "name": "click", + "sha256": "255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360", + "url": "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", + "version": "8.5.0" + }, + { + "name": "fsspec", + "sha256": "8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f", + "url": "https://files.pythonhosted.org/packages/6c/c0/a98505f18594f1bce828bb159cec0fcf9860562f1a2c85913409fc8f3d9e/fsspec-2026.9.0-py3-none-any.whl", + "version": "2026.9.0" + }, + { + "name": "h11", + "sha256": "63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", + "url": "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", + "version": "0.16.0" + }, + { + "name": "networkx", + "sha256": "e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0", + "url": "https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl", + "version": "3.7" + }, + { + "name": "pydantic", + "sha256": "346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73", + "url": "https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl", + "version": "2.13.5" + }, + { + "name": "pydantic-core", + "sha256": "fa10ef4112775900e7a0661068635eb67b2ab824fbde764de6e0e21982a93db0", + "url": "https://files.pythonhosted.org/packages/f7/3c/60674207246bc0a4009d2391b7c7251c7159f279c8d2ab8aae8ef46f3dee/pydantic_core-2.46.5-cp314-cp314-win_amd64.whl", + "version": "2.46.5" + }, + { + "name": "annotated-types", + "sha256": "f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0", + "url": "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", + "version": "0.8.0" + }, + { + "name": "setuptools", + "sha256": "51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670", + "url": "https://files.pythonhosted.org/packages/95/9c/c510029fc6ef33a6275cd2c5d3cecd6613dfd6aa401d57c54f1c18852ccf/setuptools-84.0.0-py3-none-any.whl", + "version": "84.0.0" + }, + { + "name": "starlette", + "sha256": "67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e", + "url": "https://files.pythonhosted.org/packages/4e/d6/1ec1b290f9e0fb067899b61e1d37a30c923068bad260b216dbe37a7d2967/starlette-1.7.0-py3-none-any.whl", + "version": "1.7.0" + }, + { + "name": "anyio", + "sha256": "6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101", + "url": "https://files.pythonhosted.org/packages/12/b8/4bd346e22b28902df4d651910f5242c28d84e4a5c2435ca5c3f797ed7e2e/anyio-4.15.1-py3-none-any.whl", + "version": "4.15.1" + }, + { + "name": "idna", + "sha256": "ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c", + "url": "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl", + "version": "3.20" + }, + { + "name": "sympy", + "sha256": "e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", + "url": "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", + "version": "1.14.0" + }, + { + "name": "mpmath", + "sha256": "a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", + "url": "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", + "version": "1.3.0" + }, + { + "name": "typing-extensions", + "sha256": "481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", + "url": "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", + "version": "4.16.0" + }, + { + "name": "typing-inspection", + "sha256": "65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147", + "url": "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", + "version": "0.4.4" + }, + { + "name": "filelock", + "sha256": "30cd166e2aee2c7534ce2c33c6367c4cd051b8368e20e2c4eb0c34f699bacfab", + "url": "https://files.pythonhosted.org/packages/7a/6d/db8b86e168fef0cf904737e275bccb683558088ef971e92d3b41ce980699/filelock-4.0.3-py3-none-any.whl", + "version": "4.0.3" + }, + { + "name": "jinja2", + "sha256": "85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", + "url": "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", + "version": "3.1.6" + }, + { + "name": "markupsafe", + "sha256": "bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", + "url": "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", + "version": "3.0.3" + } + ], + "build": "cpu", + "capabilities": [ + "image_generation" + ], + "managed_python": { + "distribution": { + "catalogKey": "cpython-3.14.7-windows-x86_64-none", + "implementation": "CPython", + "sourceUrl": "https://releases.astral.sh/github/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-x86_64-pc-windows-msvc-install_only_stripped.tar.gz", + "targetTriple": "x86_64-pc-windows-msvc", + "version": "3.14.7" + }, + "executable": { + "path": "\\\\?\\C:\\Users\\runneradmin\\AppData\\Local\\Temp\\pumas-torch-native-cpu-d2m_g5ii\\launcher-data\\managed-python\\python\\5dc2484c3bc035e81d37fb9af266e3546b42d2553d222081cd129940f1bbf9b7\\cpython-3.14.7-windows-x86_64-none\\python.exe", + "sha256": "716fbcb56cb6753dd9ea9f7acb3f988e9c4ba65ab492cb32b9bcd0ab81938737" + }, + "provider": { + "archiveSha256": "cae6a3bc25239f83dffb467a4b180508d9da23986c04639ebfa44e43e6a84bff", + "name": "uv", + "version": "0.12.18" + } + }, + "protocol": 3, + "python": "python3.14", + "qualification": "not verified by Pumas", + "recipe_id": "upstream-preview-v2.14.0-cpu-python3.14-none" +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-current-source-cpu-rpc-restart-acceptance/README.md b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-current-source-cpu-rpc-restart-acceptance/README.md new file mode 100644 index 000000000..2112d0275 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-current-source-cpu-rpc-restart-acceptance/README.md @@ -0,0 +1,32 @@ +# Torch v2.14.0 current-source Windows CPU/Core RPC acceptance + +The native RPC E2E job in [workflow run 36229508586](https://github.com/MrScripty/Pumas-Library/actions/runs/36229508586) +passed on code commit `21041697` for Windows x86_64 (windows-2025). It discovered `v2.14.0`, +resolved and installed 25 hashed official CPU/Core artifacts, then restarted a +second backend against the same launcher root. The persisted active release and +managed Python interpreter were verified; a fresh CPU tensor operation returned +`14` with Torch `2.14.0+cpu` on device `cpu`. + +The run installed Pumas-managed CPython 3.14.7 for `x86_64-pc-windows-msvc` using the +pinned uv 0.12.18 provider and the target's official Python Build Standalone +install-only archive. The resolver probe passed, protocol 3 sidecar trial/stop +passed, shutdown was graceful, and the acceptance harness reported +`cleanup_safe: true`. This run verifies the metadata-lock follow-up on the +current runtime source. It is native RPC acceptance, not Electron UI-driven +installation or image generation through Tuldok. + +## Retained evidence + +- [Acceptance result](acceptance.json) records release discovery, both-session + restart, managed-interpreter identity and hash, CPU operation, probes, + sidecar lifecycle, and cleanup. +- [Initial backend log](initial-backend-session.txt) and + [restart backend log](restart-backend-session.txt) record process lifecycles. +- [Installed runtime](runtime.json), [resolution](resolution.json), + [pip resolution](pip-resolution.json), and [runtime probes](probe-results.json) + retain the exact wheel and dependency artifacts, installed profile, and + runtime checks. +- [Python archive manifest](managed-python-licenses/full-archive-manifest.json) + records full-archive license hashes. The full collection's + [README](../managed-python-license-collection/README.md) links the target's + legal files and authoritative manifest. diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-current-source-cpu-rpc-restart-acceptance/acceptance.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-current-source-cpu-rpc-restart-acceptance/acceptance.json new file mode 100644 index 000000000..a58458fdb --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-current-source-cpu-rpc-restart-acceptance/acceptance.json @@ -0,0 +1,65 @@ +{ + "architecture": "AMD64", + "artifact_count": 25, + "build": "cpu", + "cleanup_safe": true, + "cpython_version": "3.14.7", + "distribution_catalog_key": "cpython-3.14.7-windows-x86_64-none", + "distribution_implementation": "CPython", + "distribution_source_url": "https://releases.astral.sh/github/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-x86_64-pc-windows-msvc-install_only_stripped.tar.gz", + "executable_path": "\\\\?\\C:\\Users\\runneradmin\\AppData\\Local\\Temp\\pumas-torch-native-cpu-g2wvex9d\\launcher-data\\managed-python\\python\\5dc2484c3bc035e81d37fb9af266e3546b42d2553d222081cd129940f1bbf9b7\\cpython-3.14.7-windows-x86_64-none\\python.exe", + "executable_sha256": "716fbcb56cb6753dd9ea9f7acb3f988e9c4ba65ab492cb32b9bcd0ab81938737", + "platform": "win32", + "probe": "passed", + "provider": "uv", + "provider_archive_sha256": "cae6a3bc25239f83dffb467a4b180508d9da23986c04639ebfa44e43e6a84bff", + "provider_version": "0.12.18", + "python": "python3.14", + "release": "v2.14.0", + "restart": { + "active_version": "v2.14.0", + "cpu_operation": { + "device": "cpu", + "result": 14, + "version": "2.14.0+cpu" + }, + "interpreter": "persisted", + "managed_python": { + "cpython_version": "3.14.7", + "distribution_catalog_key": "cpython-3.14.7-windows-x86_64-none", + "distribution_implementation": "CPython", + "distribution_source_url": "https://releases.astral.sh/github/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-x86_64-pc-windows-msvc-install_only_stripped.tar.gz", + "executable_path": "\\\\?\\C:\\Users\\runneradmin\\AppData\\Local\\Temp\\pumas-torch-native-cpu-g2wvex9d\\launcher-data\\managed-python\\python\\5dc2484c3bc035e81d37fb9af266e3546b42d2553d222081cd129940f1bbf9b7\\cpython-3.14.7-windows-x86_64-none\\python.exe", + "executable_sha256": "716fbcb56cb6753dd9ea9f7acb3f988e9c4ba65ab492cb32b9bcd0ab81938737", + "provider": "uv", + "provider_archive_sha256": "cae6a3bc25239f83dffb467a4b180508d9da23986c04639ebfa44e43e6a84bff", + "provider_version": "0.12.18", + "target": "x86_64-pc-windows-msvc" + }, + "probe": "passed", + "profile_id": "torch-managed-python-acceptance", + "same_launcher_root": true, + "shutdown": "graceful", + "sidecar_generation": "1", + "sidecar_protocol": 3, + "stop_result": true, + "trial": "passed" + }, + "sidecar_generation": "1", + "sidecar_protocol": 3, + "stop_result": true, + "stopped": true, + "success": true, + "target": "x86_64-pc-windows-msvc", + "trial": "passed", + "version_preflight": { + "attempts": [ + { + "number": 1, + "status": "requested_tag_found" + } + ], + "elapsed_seconds": 1.08, + "status": "passed" + } +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-current-source-cpu-rpc-restart-acceptance/initial-backend-session.txt b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-current-source-cpu-rpc-restart-acceptance/initial-backend-session.txt new file mode 100644 index 000000000..b254f4983 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-current-source-cpu-rpc-restart-acceptance/initial-backend-session.txt @@ -0,0 +1,27 @@ +2026-09-26T08:25:58.182343Z  INFO Starting Pumas RPC Server +2026-09-26T08:25:58.182625Z  INFO Launcher root configured +2026-09-26T08:25:58.760498Z  INFO Created FTS5 table: model_search +2026-09-26T08:25:58.775505Z  INFO Populated FTS5 table from models +2026-09-26T08:25:58.776029Z  INFO Rebuilding model index +2026-09-26T08:25:58.776566Z  INFO Rebuilt index with 0 models +2026-09-26T08:25:59.311605Z  INFO IPC server listening on 127.0.0.1:51761 +2026-09-26T08:25:59.312411Z  INFO IPC server started on port 51761 +2026-09-26T08:25:59.313348Z  INFO Started watching model library at "\\\\?\\C:\\Users\\runneradmin\\AppData\\Local\\Temp\\pumas-torch-native-cpu-g2wvex9d\\shared-resources\\models" +2026-09-26T08:25:59.320954Z  INFO Validation complete: 0 valid, 0 removed, 0 orphaned +2026-09-26T08:25:59.321099Z  INFO ollama version manager initialized successfully +2026-09-26T08:25:59.323304Z  INFO Validation complete: 0 valid, 0 removed, 0 orphaned +2026-09-26T08:25:59.323786Z  INFO torch version manager initialized successfully +2026-09-26T08:25:59.324805Z  INFO Validation complete: 0 valid, 0 removed, 0 orphaned +2026-09-26T08:25:59.324847Z  INFO llama-cpp version manager initialized successfully +2026-09-26T08:25:59.324865Z  INFO Initialized 3 version manager(s) +2026-09-26T08:25:59.325081Z  INFO Size calculator initialized +2026-09-26T08:25:59.325542Z  INFO Plugin loader initialized (0 plugins) +2026-09-26T08:25:59.326971Z  INFO Server listening on 127.0.0.1:51762 with max 64 in-flight requests and 33554432 byte request bodies +RPC_PORT=51762 +2026-09-26T08:25:59.327104Z  INFO RPC server running on 127.0.0.1:51762 +2026-09-26T08:26:00.215162Z  INFO Fetched 69 releases from GitHub for pytorch/pytorch +2026-09-26T08:29:06.649987Z  INFO Finalizing installation for v2.14.0 +2026-09-26T08:29:06.684756Z  INFO Installation of v2.14.0 finalized +2026-09-26T08:29:12.326306Z  INFO Set active version: v2.14.0 +2026-09-26T08:29:16.363731Z  INFO Shutdown signal received, exiting +2026-09-26T08:29:16.364938Z  WARN File watcher channel disconnected diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-current-source-cpu-rpc-restart-acceptance/managed-python-licenses/full-archive-manifest.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-current-source-cpu-rpc-restart-acceptance/managed-python-licenses/full-archive-manifest.json new file mode 100644 index 000000000..a1bfc5887 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-current-source-cpu-rpc-restart-acceptance/managed-python-licenses/full-archive-manifest.json @@ -0,0 +1,114 @@ +{ + "archive_name": "cpython-3.14.7+20260901-x86_64-pc-windows-msvc-pgo-full.tar.zst", + "archive_sha256": "5363ec4aab59c24417f9877217aae95ca17f9ae6eb99c3bbfb25e4a76dcadafe", + "archive_size": 49262780, + "archive_url": "https://github.com/astral-sh/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-x86_64-pc-windows-msvc-pgo-full.tar.zst", + "asset_id": 539917754, + "files": [ + { + "declared": false, + "path": "licenses/LICENSE.bdb.txt", + "sha256": "8f2d533ab34899499d5b07f209854b101b17dba2c69f3251860aecf3e4005faa" + }, + { + "declared": false, + "path": "licenses/LICENSE.bzip2.txt", + "sha256": "bd5628cc76fb0ebf9c657d1dd4d1a240a1a7b216c31663e7bbf1131c0b70a910" + }, + { + "declared": true, + "path": "licenses/LICENSE.cpython.txt", + "sha256": "8fe98bf9822926d854f56ffd8d97877d8b942617aa44eb7ea77fd99e22f2537e" + }, + { + "declared": false, + "path": "licenses/LICENSE.expat.txt", + "sha256": "8a9cfe4b5924f4b25881aa0c9f5e4561c5f31065d0c4a13cdcdbcf917edf39aa" + }, + { + "declared": false, + "path": "licenses/LICENSE.libX11.txt", + "sha256": "f353accfe2976df31ea297a77d1d454bd51ef6be8c3df39bd6aca95901579357" + }, + { + "declared": false, + "path": "licenses/LICENSE.libXau.txt", + "sha256": "cec808cd2163fccdc8de4a91d526490777afbaeea060e1168c40a804694b7444" + }, + { + "declared": false, + "path": "licenses/LICENSE.libedit.txt", + "sha256": "d9932ccdd42eccf6cdded7bcb35b088e64cfc7c24d355af2cc0d02edb6b637d3" + }, + { + "declared": false, + "path": "licenses/LICENSE.libffi.txt", + "sha256": "9afb8970cd29fc1031fa647278e4bef613399e2e3468a1e3a397f4d158c6101c" + }, + { + "declared": false, + "path": "licenses/LICENSE.liblzma.txt", + "sha256": "d87d218dd908b3243ec4cbc72af400e5b7437513ea9d9229291d0812b8464fec" + }, + { + "declared": false, + "path": "licenses/LICENSE.libuuid.txt", + "sha256": "cbccaa3efe07a9a602751375085be572d4410a250b996716fbe8c5255c7ec6f2" + }, + { + "declared": false, + "path": "licenses/LICENSE.libxcb.txt", + "sha256": "29a9539190e6de1af5fd06a9139c7103137cd1f9290b08c7b11bce89c01c14d2" + }, + { + "declared": false, + "path": "licenses/LICENSE.mpdecimal.txt", + "sha256": "f094277cd46e1f6e4d87916cc4b51e22f613d45eb81f48231c3cb7caf8fc8a6a" + }, + { + "declared": false, + "path": "licenses/LICENSE.ncurses.txt", + "sha256": "4f571cad3ea6c888bf0a7092e5b215dddb3142e9e3f1857fd5fac6cf13d345d7" + }, + { + "declared": false, + "path": "licenses/LICENSE.openssl-1.1.txt", + "sha256": "ad89e3fed746413af1d34d5353978ee1520cedd361c853f8022e7bb210ac6b31" + }, + { + "declared": false, + "path": "licenses/LICENSE.openssl-3.txt", + "sha256": "ed72ce2b51ee58f117e5a021e2e04af158857f40269fbc03491f0b2a99dbcc96" + }, + { + "declared": false, + "path": "licenses/LICENSE.sqlite.txt", + "sha256": "d8eb9aba7ef6b5ed06cb3ec19a7242316af2e5933c638eb67fb781c13884e01d" + }, + { + "declared": false, + "path": "licenses/LICENSE.tcl.txt", + "sha256": "41613eabfc08921a7da9c4bfd7f3ce5d5406f55214b253d89f392ed86eebeb8f" + }, + { + "declared": false, + "path": "licenses/LICENSE.tix.txt", + "sha256": "8cdff3addb9e9eb108c78e2cf5e05f26b216c098304945733bbec382b2eaef66" + }, + { + "declared": false, + "path": "licenses/LICENSE.zlib.txt", + "sha256": "365e36720db366054863235aea5d6f440142ab968834bfaf81fa9d187c99b9b8" + } + ], + "mapping_authority": "https://github.com/astral-sh/python-build-standalone/blob/20260901/src/release.rs", + "python_json": { + "path": "PYTHON.json", + "sha256": "621218c8ca0ff0d9a92ba0533a2d460d6832cc277286852800e605e8062ec401", + "size": 68368 + }, + "release_id": 380696527, + "scope": "selected_full_archive_license_directory_and_declared_references", + "source_url": "https://releases.astral.sh/github/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-x86_64-pc-windows-msvc-install_only_stripped.tar.gz", + "target": "x86_64-pc-windows-msvc" +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-current-source-cpu-rpc-restart-acceptance/pip-resolution.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-current-source-cpu-rpc-restart-acceptance/pip-resolution.json new file mode 100644 index 000000000..f6f0858e7 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-current-source-cpu-rpc-restart-acceptance/pip-resolution.json @@ -0,0 +1,2073 @@ +{ + "version": "1", + "pip_version": "26.2.1", + "install": [ + { + "download_info": { + "url": "https://download-r2.pytorch.org/whl/cpu/torch-2.14.0%2Bcpu-cp314-cp314-win_amd64.whl", + "archive_info": { + "hashes": { + "sha256": "ca9b3c2c652587f7b26c86d30be3648f553bd07fb3cf9b3edb645e7eafe295a3" + }, + "hash": "sha256=ca9b3c2c652587f7b26c86d30be3648f553bd07fb3cf9b3edb645e7eafe295a3" + } + }, + "is_direct": true, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.4", + "name": "torch", + "version": "2.14.0+cpu", + "summary": "Tensors and Dynamic neural networks in Python with strong GPU acceleration", + "description": "\n \n \n \"PyTorch\n\n\n--------------------------------------------------------------------------------\n\nPyTorch is a Python package that provides two high-level features:\n- Tensor computation (like NumPy) with strong GPU acceleration\n- Deep neural networks built on a tape-based autograd system\n\nYou can reuse your favorite Python packages such as NumPy, SciPy, and Cython to extend PyTorch when needed.\n\nOur trunk health (Continuous Integration signals) can be found at [hud.pytorch.org](https://hud.pytorch.org/ci/pytorch/pytorch/main).\n\n\n\n- [More About PyTorch](#more-about-pytorch)\n - [A GPU-Ready Tensor Library](#a-gpu-ready-tensor-library)\n - [Dynamic Neural Networks: Tape-Based Autograd](#dynamic-neural-networks-tape-based-autograd)\n - [Python First](#python-first)\n - [Imperative Experiences](#imperative-experiences)\n - [Fast and Lean](#fast-and-lean)\n - [Extensions Without Pain](#extensions-without-pain)\n- [Installation](#installation)\n - [Binaries](#binaries)\n - [NVIDIA Jetson Platforms](#nvidia-jetson-platforms)\n - [From Source](#from-source)\n - [Prerequisites](#prerequisites)\n - [NVIDIA CUDA Support](#nvidia-cuda-support)\n - [AMD ROCm Support](#amd-rocm-support)\n - [Intel GPU Support](#intel-gpu-support)\n - [Get the PyTorch Source](#get-the-pytorch-source)\n - [Install Dependencies](#install-dependencies)\n - [Install PyTorch](#install-pytorch)\n - [Adjust Build Options (Optional)](#adjust-build-options-optional)\n - [Docker Image](#docker-image)\n - [Using pre-built images](#using-pre-built-images)\n - [Building the image yourself](#building-the-image-yourself)\n - [Building the Documentation](#building-the-documentation)\n - [Troubleshooting CI Errors](#troubleshooting-ci-errors)\n - [Building a PDF](#building-a-pdf)\n - [Previous Versions](#previous-versions)\n- [Getting Started](#getting-started)\n- [Resources](#resources)\n- [Communication](#communication)\n- [Releases and Contributing](#releases-and-contributing)\n- [The Team](#the-team)\n- [License](#license)\n\n\n\n## More About PyTorch\n\n[Learn the basics of PyTorch](https://pytorch.org/tutorials/beginner/basics/intro.html)\n\nAt a granular level, PyTorch is a library that consists of the following components:\n\n| Component | Description |\n| ---- | --- |\n| [**torch**](https://pytorch.org/docs/stable/torch.html) | A Tensor library like NumPy, with strong GPU support |\n| [**torch.autograd**](https://pytorch.org/docs/stable/autograd.html) | A tape-based automatic differentiation library that supports all differentiable Tensor operations in torch |\n| [**torch.jit**](https://pytorch.org/docs/stable/jit.html) | A compilation stack (TorchScript) to create serializable and optimizable models from PyTorch code |\n| [**torch.nn**](https://pytorch.org/docs/stable/nn.html) | A neural networks library deeply integrated with autograd designed for maximum flexibility |\n| [**torch.multiprocessing**](https://pytorch.org/docs/stable/multiprocessing.html) | Python multiprocessing, but with magical memory sharing of torch Tensors across processes. Useful for data loading and Hogwild training |\n| [**torch.utils**](https://pytorch.org/docs/stable/data.html) | DataLoader and other utility functions for convenience |\n\nUsually, PyTorch is used either as:\n\n- A replacement for NumPy to use the power of GPUs.\n- A deep learning research platform that provides maximum flexibility and speed.\n\nElaborating Further:\n\n### A GPU-Ready Tensor Library\n\nIf you use NumPy, then you have used Tensors (a.k.a. ndarray).\n\n![Tensor illustration](https://github.com/pytorch/pytorch/raw/main/docs/source/_static/img/tensor_illustration.png)\n\nPyTorch provides Tensors that can live either on the CPU or the GPU and accelerates the\ncomputation by a huge amount.\n\nWe provide a wide variety of tensor routines to accelerate and fit your scientific computation needs\nsuch as slicing, indexing, mathematical operations, linear algebra, reductions.\nAnd they are fast!\n\n### Dynamic Neural Networks: Tape-Based Autograd\n\nPyTorch has a unique way of building neural networks: using and replaying a tape recorder.\n\nMost frameworks such as TensorFlow, Theano, Caffe, and CNTK have a static view of the world.\nOne has to build a neural network and reuse the same structure again and again.\nChanging the way the network behaves means that one has to start from scratch.\n\nWith PyTorch, we use a technique called reverse-mode auto-differentiation, which allows you to\nchange the way your network behaves arbitrarily with zero lag or overhead. Our inspiration comes\nfrom several research papers on this topic, as well as current and past work such as\n[torch-autograd](https://github.com/twitter/torch-autograd),\n[autograd](https://github.com/HIPS/autograd),\n[Chainer](https://chainer.org), etc.\n\nWhile this technique is not unique to PyTorch, it's one of the fastest implementations of it to date.\nYou get the best of speed and flexibility for your crazy research.\n\n![Dynamic graph](https://github.com/pytorch/pytorch/raw/main/docs/source/_static/img/dynamic_graph.gif)\n\n### Python First\n\nPyTorch is not a Python binding into a monolithic C++ framework.\nIt is built to be deeply integrated into Python.\nYou can use it naturally like you would use [NumPy](https://www.numpy.org/) / [SciPy](https://www.scipy.org/) / [scikit-learn](https://scikit-learn.org) etc.\nYou can write your new neural network layers in Python itself, using your favorite libraries\nand use packages such as [Cython](https://cython.org/) and [Numba](https://numba.pydata.org/).\nOur goal is to not reinvent the wheel where appropriate.\n\n### Imperative Experiences\n\nPyTorch is designed to be intuitive, linear in thought, and easy to use.\nWhen you execute a line of code, it gets executed. There isn't an asynchronous view of the world.\nWhen you drop into a debugger or receive error messages and stack traces, understanding them is straightforward.\nThe stack trace points to exactly where your code was defined.\nWe hope you never spend hours debugging your code because of bad stack traces or asynchronous and opaque execution engines.\n\n### Fast and Lean\n\nPyTorch has minimal framework overhead. We integrate acceleration libraries\nsuch as [Intel MKL](https://software.intel.com/mkl) and NVIDIA ([cuDNN](https://developer.nvidia.com/cudnn), [NCCL](https://developer.nvidia.com/nccl)) to maximize speed.\nAt the core, its CPU and GPU Tensor and neural network backends\nare mature and have been tested for years.\n\nHence, PyTorch is quite fast — whether you run small or large neural networks.\n\nThe memory usage in PyTorch is extremely efficient compared to Torch or some of the alternatives.\nWe've written custom memory allocators for the GPU to make sure that\nyour deep learning models are maximally memory efficient.\nThis enables you to train bigger deep learning models than before.\n\n### Extensions Without Pain\n\nWriting new neural network modules, or interfacing with PyTorch's Tensor API, was designed to be straightforward\nand with minimal abstractions.\n\nYou can write new neural network layers in Python using the torch API\n[or your favorite NumPy-based libraries such as SciPy](https://pytorch.org/tutorials/advanced/numpy_extensions_tutorial.html).\n\nIf you want to write your layers in C/C++, we provide a convenient extension API that is efficient and with minimal boilerplate.\nNo wrapper code needs to be written. You can see [a tutorial here](https://pytorch.org/tutorials/advanced/cpp_extension.html) and [an example here](https://github.com/pytorch/extension-cpp).\n\n\n## Installation\n\n### Binaries\nCommands to install binaries via Conda or pip wheels are on our website: [https://pytorch.org/get-started/locally/](https://pytorch.org/get-started/locally/)\n\n\n#### NVIDIA Jetson Platforms\n\nPython wheels for NVIDIA's Jetson Nano, Jetson TX1/TX2, Jetson Xavier NX/AGX, and Jetson AGX Orin are provided [here](https://forums.developer.nvidia.com/t/pytorch-for-jetson-version-1-10-now-available/72048) and the L4T container is published [here](https://catalog.ngc.nvidia.com/orgs/nvidia/containers/l4t-pytorch)\n\nThey require JetPack 4.2 and above, and [@dusty-nv](https://github.com/dusty-nv) and [@ptrblck](https://github.com/ptrblck) are maintaining them.\n\n\n### From Source\n\n#### Prerequisites\nIf you are installing from source, you will need:\n- Python 3.10 or later\n- A compiler that fully supports C++20, such as clang or gcc (gcc 11.3.0 or newer is required, on Linux)\n- Visual Studio or Visual Studio Build Tool (Windows only)\n- At least 10 GB of free disk space\n- 30-60 minutes for the initial build (subsequent rebuilds are much faster)\n\n\\* PyTorch CI uses Visual C++ BuildTools, which come with Visual Studio Enterprise,\nProfessional, or Community Editions. You can also install the build tools from\nhttps://visualstudio.microsoft.com/visual-cpp-build-tools/. The build tools *do not*\ncome with Visual Studio Code by default.\n\nAn example of environment setup is shown below:\n\n* Linux:\n\n```bash\n$ source /bin/activate\n$ conda create -y -n \n$ conda activate \n```\n* Windows:\n\n```bash\n$ source \\Scripts\\activate.bat\n$ conda create -y -n \n$ conda activate \n$ call \"C:\\Program Files\\Microsoft Visual Studio\\\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat\" x64\n```\n\nA conda environment is not required. You can also do a PyTorch build in a\nstandard virtual environment, e.g., created with tools like `uv`, provided\nyour system has installed all the necessary dependencies unavailable as pip\npackages (e.g., CUDA, MKL.)\n\n##### NVIDIA CUDA Support\nIf you want to compile with CUDA support, [select a supported version of CUDA from our support matrix](https://pytorch.org/get-started/locally/), then install the following:\n- [NVIDIA CUDA](https://developer.nvidia.com/cuda-downloads)\n- [NVIDIA cuDNN](https://developer.nvidia.com/cudnn) v9.0 or above\n- [Compiler](https://gist.github.com/ax3l/9489132) compatible with CUDA\n\nNote: You could refer to the [cuDNN Support Matrix](https://docs.nvidia.com/deeplearning/cudnn/backend/latest/reference/support-matrix.html) for cuDNN versions with the various supported CUDA, CUDA driver, and NVIDIA hardware.\n\nIf you want to disable CUDA support, export the environment variable `USE_CUDA=0`.\nOther potentially useful environment variables are documented in `cmake/EnvVarForwarding.cmake`. If\nCUDA is installed in a non-standard location, set PATH so that the nvcc you\nwant to use can be found (e.g., `export PATH=/usr/local/cuda-12.8/bin:$PATH`).\n\nIf you are building for NVIDIA's Jetson platforms (Jetson Nano, TX1, TX2, AGX Xavier), Instructions to install PyTorch for Jetson Nano are [available here](https://devtalk.nvidia.com/default/topic/1049071/jetson-nano/pytorch-for-jetson-nano/)\n\n##### AMD ROCm Support\nIf you want to compile with ROCm support, install\n- [AMD ROCm](https://rocm.docs.amd.com/en/latest/deploy/linux/quick_start.html) 4.0 and above installation\n- ROCm is currently supported only for Linux systems.\n\nBy default the build system expects ROCm to be installed in `/opt/rocm`. If ROCm is installed in a different directory, the `ROCM_PATH` environment variable must be set to the ROCm installation directory. The build system automatically detects the AMD GPU architecture. Optionally, the AMD GPU architecture can be explicitly set with the `PYTORCH_ROCM_ARCH` environment variable [AMD GPU architecture](https://rocm.docs.amd.com/projects/install-on-linux/en/latest/reference/system-requirements.html#supported-gpus)\n\nIf you want to disable ROCm support, export the environment variable `USE_ROCM=0`.\nOther potentially useful environment variables are documented in `cmake/EnvVarForwarding.cmake`.\n\n##### Intel GPU Support\nIf you want to compile with Intel GPU support, follow these\n- [PyTorch Prerequisites for Intel GPUs](https://www.intel.com/content/www/us/en/developer/articles/tool/pytorch-prerequisites-for-intel-gpu.html) instructions.\n- Intel GPU is supported for Linux and Windows.\n\nIf you want to disable Intel GPU support, export the environment variable `USE_XPU=0`.\nOther potentially useful environment variables are documented in `cmake/EnvVarForwarding.cmake`.\n\n#### Get the PyTorch Source\n\n```bash\ngit clone https://github.com/pytorch/pytorch\ncd pytorch\n# if you are updating an existing checkout\ngit submodule sync\ngit submodule update --init --recursive\n```\n\n#### Install Dependencies\n\n**Common**\n\n```bash\n# Run this command from the PyTorch directory after cloning the source code using the “Get the PyTorch Source“ section above\npip install --group dev\n```\n\n**On Linux**\n\n```bash\npip install mkl-static mkl-include\n# CUDA only: Add LAPACK support for the GPU if needed\n# magma installation: run with active conda environment. specify CUDA version to install\n.ci/docker/common/install_magma_conda.sh 12.4\n\n# (optional) If using torch.compile with inductor/triton, install the matching version of triton\n# Run from the pytorch directory after cloning\n# For Intel GPU support, please explicitly `export USE_XPU=1` before running command.\nmake triton\n```\n\n**On Windows**\n\n```bash\npip install mkl-static mkl-include\n# Add these packages if torch.distributed is needed.\n# Distributed package support on Windows is a prototype feature and is subject to changes.\nconda install -c conda-forge libuv=1.51\n```\n\n#### Install PyTorch\n\n**On Linux**\n\nIf you're compiling for AMD ROCm then first run this command:\n\n```bash\n# Only run this if you're compiling for ROCm\npython tools/amd_build/build_amd.py\n```\n\nInstall PyTorch\n\n```bash\n# the CMake prefix for conda environment\nexport CMAKE_PREFIX_PATH=\"${CONDA_PREFIX:-'$(dirname $(which conda))/../'}:${CMAKE_PREFIX_PATH}\"\npython -m pip install --no-build-isolation -v -e .\n\n# the CMake prefix for non-conda environment, e.g. Python venv\n# call following after activating the venv\nexport CMAKE_PREFIX_PATH=\"${VIRTUAL_ENV}:${CMAKE_PREFIX_PATH}\"\n```\n\n**On macOS**\n\n```bash\npython -m pip install --no-build-isolation -v -e .\n```\n\n**On Windows**\n\nIf you want to build legacy python code, please refer to [Building on legacy code and CUDA](https://github.com/pytorch/pytorch/blob/main/CONTRIBUTING.md#building-on-legacy-code-and-cuda)\n\n**CPU-only builds**\n\nIn this mode PyTorch computations will run on your CPU, not your GPU.\n\n```cmd\npython -m pip install --no-build-isolation -v -e .\n```\n\nNote on OpenMP: The desired OpenMP implementation is Intel OpenMP (iomp). In order to link against iomp, you'll need to manually download the library and set up the building environment by tweaking `CMAKE_INCLUDE_PATH` and `LIB`. The instruction [here](https://docs.pytorch.org/docs/main/notes/windows.html#building-from-source) is an example for setting up both MKL and Intel OpenMP. Without these configurations for CMake, Microsoft Visual C OpenMP runtime (vcomp) will be used.\n\n**CUDA based build**\n\nIn this mode PyTorch computations will leverage your GPU via CUDA for faster number crunching\n\n[NVTX](https://docs.nvidia.com/gameworks/content/gameworkslibrary/nvtx/nvidia_tools_extension_library_nvtx.htm) is needed to build PyTorch with CUDA.\nNVTX is a part of CUDA distributive, where it is called \"Nsight Compute\". To install it onto an already installed CUDA run CUDA installation once again and check the corresponding checkbox.\nMake sure that CUDA with Nsight Compute is installed after Visual Studio.\n\nCurrently, VS 2017 / 2019, and Ninja are supported as the generator of CMake. If `ninja.exe` is detected in `PATH`, then Ninja will be used as the default generator, otherwise, it will use VS 2017 / 2019.\n
If Ninja is selected as the generator, the latest MSVC will get selected as the underlying toolchain.\n\nAdditional libraries such as\n[Magma](https://developer.nvidia.com/magma), [oneDNN, a.k.a. MKLDNN or DNNL](https://github.com/oneapi-src/oneDNN), and [Sccache](https://github.com/mozilla/sccache) are often needed. Please refer to the [installation-helper](https://github.com/pytorch/pytorch/tree/main/.ci/pytorch/win-test-helpers/installation-helpers) to install them.\n\nYou can refer to the [build_pytorch.bat](https://github.com/pytorch/pytorch/blob/main/.ci/pytorch/win-test-helpers/build_pytorch.bat) script for some other environment variables configurations\n\n```cmd\ncmd\n\n:: Set the environment variables after you have downloaded and unzipped the mkl package,\n:: else CMake would throw an error as `Could NOT find OpenMP`.\nset CMAKE_INCLUDE_PATH={Your directory}\\mkl\\include\nset LIB={Your directory}\\mkl\\lib;%LIB%\n\n:: Read the content in the previous section carefully before you proceed.\n:: [Optional] If you want to override the underlying toolset used by Ninja and Visual Studio with CUDA, please run the following script block.\n:: \"Visual Studio 2019 Developer Command Prompt\" will be run automatically.\n:: Make sure you have CMake >= 3.12 before you do this when you use the Visual Studio generator.\nset CMAKE_GENERATOR_TOOLSET_VERSION=14.27\nset DISTUTILS_USE_SDK=1\nfor /f \"usebackq tokens=*\" %i in (`\"%ProgramFiles(x86)%\\Microsoft Visual Studio\\Installer\\vswhere.exe\" -version [15^,17^) -products * -latest -property installationPath`) do call \"%i\\VC\\Auxiliary\\Build\\vcvarsall.bat\" x64 -vcvars_ver=%CMAKE_GENERATOR_TOOLSET_VERSION%\n\n:: [Optional] If you want to override the CUDA host compiler\nset CUDAHOSTCXX=C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.27.29110\\bin\\HostX64\\x64\\cl.exe\n\npython -m pip install --no-build-isolation -v -e .\n```\n\n**Intel GPU builds**\n\nIn this mode PyTorch with Intel GPU support will be built.\n\nPlease make sure [the common prerequisites](#prerequisites) as well as [the prerequisites for Intel GPU](#intel-gpu-support) are properly installed and the environment variables are configured prior to starting the build. For build tool support, `Visual Studio 2022` is required.\n\nThen PyTorch can be built with the command:\n\n```cmd\n:: CMD Commands:\n:: Set the CMAKE_PREFIX_PATH to help find corresponding packages\n:: %CONDA_PREFIX% only works after `conda activate custom_env`\n\nif defined CMAKE_PREFIX_PATH (\n set \"CMAKE_PREFIX_PATH=%CONDA_PREFIX%\\Library;%CMAKE_PREFIX_PATH%\"\n) else (\n set \"CMAKE_PREFIX_PATH=%CONDA_PREFIX%\\Library\"\n)\n\npython -m pip install --no-build-isolation -v -e .\n```\n\n##### Adjust Build Options (Optional)\n\nYou can adjust the configuration of CMake variables through environment variables, which the\nbuild forwards to CMake (see [`cmake/EnvVarForwarding.cmake`](./cmake/EnvVarForwarding.cmake) for\nthe full list). For example, pointing the build at a specific Conda prefix, CuDNN, or BLAS:\n\nOn Linux\n\n```bash\nexport CMAKE_PREFIX_PATH=\"${CONDA_PREFIX:-'$(dirname $(which conda))/../'}:${CMAKE_PREFIX_PATH}\"\nspin develop\n```\n\nOn macOS\n\n```bash\nexport CMAKE_PREFIX_PATH=\"${CONDA_PREFIX:-'$(dirname $(which conda))/../'}:${CMAKE_PREFIX_PATH}\"\nMACOSX_DEPLOYMENT_TARGET=11.0 spin develop\n```\n\nAfter a first `spin develop`, you can inspect or adjust the CMake cache interactively with\n`ccmake build` (or `cmake-gui build`) and rebuild with `spin develop`; your edits persist, because\nreconfiguration does not use `--fresh` and environment variables only seed cache entries that are\nnot already set. The corollary: once a variable is in the cache, changing its environment variable\nno longer affects it -- edit the cache directly (or delete `build/CMakeCache.txt`) to change it.\nThe build type and compiler are the exception; the build always re-applies them.\n\n### Docker Image\n\n#### Using pre-built images\n\nYou can also pull a pre-built docker image from Docker Hub and run with docker v23.0+\n\n```bash\ndocker run --gpus all --rm -ti --ipc=host pytorch/pytorch:latest\n```\n\nPlease note that PyTorch uses shared memory to share data between processes, so if torch multiprocessing is used (e.g.\nfor multithreaded data loaders) the default shared memory segment size that container runs with is not enough, and you\nshould increase shared memory size either with `--ipc=host` or `--shm-size` command line options to `nvidia-docker run`.\n\n#### Building the image yourself\n\n**NOTE:** Must be built with a Docker version >= 23.0\n\nThe Dockerfile is supplied to build images with CUDA 12.6 support and cuDNN v9.\nYou can pass `PYTHON_VERSION=x.y` make variable to specify which Python version is to be used by Miniconda, or leave it\nunset to use the default, as the Dockerfile uses system Python.\n\n```bash\nmake -f docker.Makefile\n# images are tagged as docker.io/${your_docker_username}/pytorch\n```\n\nYou can also pass the `CMAKE_VARS=\"...\"` environment variable to specify additional CMake variables to be passed to CMake during the build.\nSee [`cmake/EnvVarForwarding.cmake`](./cmake/EnvVarForwarding.cmake) for the list of available variables.\n\n```bash\nmake -f docker.Makefile\n```\n\n### Building the Documentation\n\nTo build documentation in various formats, you will need [Sphinx](https://www.sphinx-doc.org)\nand the `pytorch_sphinx_theme2`.\n\nBefore you build the documentation locally, ensure `torch` is\ninstalled in your environment. For small fixes, you can install the\nnightly version as described in [Getting Started](https://pytorch.org/get-started/locally/).\n\nFor more complex fixes, such as adding a new module and docstrings for\nthe new module, you might need to install torch [from source](#from-source).\nSee [Docstring Guidelines](https://github.com/pytorch/pytorch/wiki/Docstring-Guidelines)\nfor docstring conventions.\n\n```bash\ncd docs/\npip install -r requirements.txt\nmake html\nmake serve\n```\n\nRun `make` to get a list of all available output formats.\n\nIf you get a katex error run `npm install katex`. If it persists, try\n`npm install -g katex`\n\n> [!NOTE]\n> If you see a numpy incompatibility error, run:\n> ```\n> pip install 'numpy<2'\n> ```\n\n\n#### Troubleshooting CI Errors\nYour build may show errors you didn't have locally - here's how to find the errors relevant to the docs.\n\nIf the build has any errors, you will see something like this on the PR:\n\n\"Monosnap\n\nAny doc-related errors will occur in jobs that include \"doc\" somewhere in the title. It doesn't look like any of these jobs are relevant to our docs.\n\n\nLet's take a look anyway. Click on the job to see the logs:\n\n\"Monosnap\n\nAnd we can be sure that this job does not involve docs.\n\nLooking at this build, we can see these jobs are relevant to our docs - and they didn't have any errors:\n\n\"Check\n\nYou might also see a comment on the PR like this:\n\n\"PR\n\nWe can see that some of these issues are relevant to our docs.\n\nOpen the logs by clicking on the `gh` link:\n\n\"View\n\nAnd here we can see there is a doc-related error:\n\n\"Doc\n\nYou can always find the relevant doc builds by going to the `Checks` tab on your PR, and scrolling down to `pull`.\n\n\"checks\"\n\nYou can either click through or toggle the accordion to see all of the jobs here, where you can see the docs jobs highlighted:\n\n\"jobs\"\n\nIf you click through, you'll see the doc jobs at the bottom, like this:\n\n\"View\n\n\n#### Building a PDF\n\nTo compile a PDF of all PyTorch documentation, ensure you have\n`texlive` and LaTeX installed. On macOS, you can install them using:\n\n```\nbrew install --cask mactex\n```\n\nTo create the PDF:\n\n1. Run:\n\n ```\n make latexpdf\n ```\n\n This will generate the necessary files in the `build/latex` directory.\n\n2. Navigate to this directory and execute:\n\n ```\n make LATEXOPTS=\"-interaction=nonstopmode\"\n ```\n\n This will produce a `pytorch.pdf` with the desired content. Run this\n command one more time so that it generates the correct table\n of contents and index.\n\n> [!NOTE]\n> To view the Table of Contents, switch to the **Table of Contents**\n> view in your PDF viewer.\n\n\n### Previous Versions\n\nInstallation instructions and binaries for previous PyTorch versions may be found\non [our website](https://pytorch.org/get-started/previous-versions).\n\n\n## Getting Started\n\nPointers to get you started:\n- [Tutorials: get you started with understanding and using PyTorch](https://pytorch.org/tutorials/)\n- [Examples: easy to understand PyTorch code across all domains](https://github.com/pytorch/examples)\n- [The API Reference](https://pytorch.org/docs/)\n- [Glossary](https://github.com/pytorch/pytorch/blob/main/GLOSSARY.md)\n\n## Resources\n\n* [PyTorch.org](https://pytorch.org/)\n* [PyTorch Tutorials](https://pytorch.org/tutorials/)\n* [PyTorch Examples](https://github.com/pytorch/examples)\n* [PyTorch Models](https://pytorch.org/hub/)\n* [Intro to Deep Learning with PyTorch from Udacity](https://www.udacity.com/course/deep-learning-pytorch--ud188)\n* [Intro to Machine Learning with PyTorch from Udacity](https://www.udacity.com/course/intro-to-machine-learning-nanodegree--nd229)\n* [Deep Neural Networks with PyTorch from Coursera](https://www.coursera.org/learn/deep-neural-networks-with-pytorch)\n* [PyTorch Twitter](https://twitter.com/PyTorch)\n* [PyTorch Blog](https://pytorch.org/blog/)\n* [PyTorch YouTube](https://www.youtube.com/channel/UCWXI5YeOsh03QvJ59PMaXFw)\n\n## Communication\n* Forums: Discuss implementations, research, etc. https://discuss.pytorch.org\n* GitHub Issues: Bug reports, feature requests, install issues, RFCs, thoughts, etc.\n* Slack: The [PyTorch Slack](https://pytorch.slack.com/) hosts a primary audience of moderate to experienced PyTorch users and developers for general chat, online discussions, collaboration, etc. If you are a beginner looking for help, the primary medium is [PyTorch Forums](https://discuss.pytorch.org). If you need a slack invite, please fill this form: https://goo.gl/forms/PP1AGvNHpSaJP8to1\n* Newsletter: No-noise, a one-way email newsletter with important announcements about PyTorch. You can sign-up here: https://eepurl.com/cbG0rv\n* Facebook Page: Important announcements about PyTorch. https://www.facebook.com/pytorch\n* For brand guidelines, please visit our website at [pytorch.org](https://pytorch.org/)\n\n## Releases and Contributing\n\nTypically, PyTorch has three minor releases a year. Please let us know if you encounter a bug by [filing an issue](https://github.com/pytorch/pytorch/issues).\n\nWe appreciate all contributions. If you are planning to contribute back bug-fixes, please do so without any further discussion.\n\nIf you plan to contribute new features, utility functions, or extensions to the core, please first open an issue and discuss the feature with us.\nSending a PR without discussion might end up resulting in a rejected PR because we might be taking the core in a different direction than you might be aware of.\n\nTo learn more about making a contribution to PyTorch, please see our [Contribution page](CONTRIBUTING.md). For more information about PyTorch releases, see [Release page](RELEASE.md).\n\n## The Team\n\nPyTorch is a community-driven project with several skillful engineers and researchers contributing to it.\n\nPyTorch is currently maintained by [Soumith Chintala](https://soumith.ch), [Gregory Chanan](https://github.com/gchanan), [Dmytro Dzhulgakov](https://github.com/dzhulgakov), [Edward Yang](https://github.com/ezyang), [Alban Desmaison](https://github.com/albanD), [Piotr Bialecki](https://github.com/ptrblck) and [Nikita Shulga](https://github.com/malfet) with major contributions coming from hundreds of talented individuals in various forms and means.\nA non-exhaustive but growing list needs to mention: [Trevor Killeen](https://github.com/killeent), [Sasank Chilamkurthy](https://github.com/chsasank), [Sergey Zagoruyko](https://github.com/szagoruyko), [Adam Lerer](https://github.com/adamlerer), [Francisco Massa](https://github.com/fmassa), [Alykhan Tejani](https://github.com/alykhantejani), [Luca Antiga](https://github.com/lantiga), [Alban Desmaison](https://github.com/albanD), [Andreas Koepf](https://github.com/andreaskoepf), [James Bradbury](https://github.com/jekbradbury), [Zeming Lin](https://github.com/ebetica), [Yuandong Tian](https://github.com/yuandong-tian), [Guillaume Lample](https://github.com/glample), [Marat Dukhan](https://github.com/Maratyszcza), [Natalia Gimelshein](https://github.com/ngimel), [Christian Sarofeen](https://github.com/csarofeen), [Martin Raison](https://github.com/martinraison), [Edward Yang](https://github.com/ezyang), [Zachary Devito](https://github.com/zdevito). \n\nNote: This project is unrelated to [hughperkins/pytorch](https://github.com/hughperkins/pytorch) with the same name. Hugh is a valuable contributor to the Torch community and has helped with many things Torch and PyTorch.\n\n## License\n\nPyTorch has a BSD-style license, as found in the [LICENSE](LICENSE) file.\n", + "description_content_type": "text/markdown", + "keywords": [ + "pytorch", + "machine learning" + ], + "author_email": "PyTorch Team ", + "license_expression": "Apache-2.0 AND Apache-2.0 WITH LLVM-exception AND BSD-2-Clause AND BSD-3-Clause AND BSL-1.0 AND MIT", + "license_file": [ + "LICENSE", + "third_party/aiter/3rdparty/composable_kernel/docs/LICENSE.rst", + "third_party/aiter/3rdparty/composable_kernel/LICENSE", + "third_party/aiter/LICENSE", + "third_party/benchmark/LICENSE", + "third_party/composable_kernel/docs/LICENSE.rst", + "third_party/composable_kernel/LICENSE", + "third_party/cpp-httplib/LICENSE", + "third_party/cpuinfo/deps/clog/LICENSE", + "third_party/cpuinfo/LICENSE", + "third_party/cudnn_frontend/LICENSE.txt", + "third_party/cutlass/LICENSE.txt", + "third_party/cutlass/python/LICENSE.txt", + "third_party/fbgemm/external/composable_kernel/docs/LICENSE.rst", + "third_party/fbgemm/external/composable_kernel/LICENSE", + "third_party/fbgemm/external/cpuinfo/deps/clog/LICENSE", + "third_party/fbgemm/external/cpuinfo/LICENSE", + "third_party/fbgemm/external/cutlass/LICENSE.txt", + "third_party/fbgemm/external/cutlass/python/LICENSE.txt", + "third_party/fbgemm/external/googletest/LICENSE", + "third_party/fbgemm/external/hipify_torch/LICENSE.txt", + "third_party/fbgemm/fbgemm_gpu/docs/src/general/LICENSE.rst", + "third_party/fbgemm/fbgemm_gpu/experimental/hstu/LICENSE", + "third_party/fbgemm/fbgemm_gpu/src/quantize_ops/mx/LICENSE", + "third_party/fbgemm/fbgemm_gpu/test/quantize/mx/LICENSE", + "third_party/fbgemm/LICENSE", + "third_party/flash-attention/csrc/composable_kernel/docs/LICENSE.rst", + "third_party/flash-attention/csrc/composable_kernel/LICENSE", + "third_party/flash-attention/csrc/cutlass/LICENSE.txt", + "third_party/flash-attention/csrc/cutlass/python/LICENSE.txt", + "third_party/flash-attention/flash_attn/cute/LICENSE", + "third_party/flash-attention/LICENSE", + "third_party/flash-attention/third_party/aiter/3rdparty/composable_kernel/docs/LICENSE.rst", + "third_party/flash-attention/third_party/aiter/3rdparty/composable_kernel/LICENSE", + "third_party/flash-attention/third_party/aiter/LICENSE", + "third_party/flatbuffers/dart/LICENSE", + "third_party/flatbuffers/LICENSE", + "third_party/flatbuffers/swift/LICENSE", + "third_party/fmt/LICENSE", + "third_party/FP16/LICENSE", + "third_party/FXdiv/LICENSE", + "third_party/gemmlowp/gemmlowp/LICENSE", + "third_party/gloo/LICENSE", + "third_party/googletest/LICENSE", + "third_party/ideep/LICENSE", + "third_party/ideep/mkl-dnn/LICENSE", + "third_party/ideep/mkl-dnn/third_party/gtest/LICENSE", + "third_party/ideep/mkl-dnn/third_party/opencl/LICENSE", + "third_party/kineto/libkineto/third_party/dynolog_headers/LICENSE", + "third_party/kineto/libkineto/third_party/fmt/LICENSE", + "third_party/kineto/libkineto/third_party/googletest/LICENSE", + "third_party/kineto/LICENSE", + "third_party/llvm-openmp/LICENSE.txt", + "third_party/mimalloc/LICENSE", + "third_party/miniz-3.0.2/LICENSE", + "third_party/mslk/external/composable_kernel/docs/LICENSE.rst", + "third_party/mslk/external/composable_kernel/LICENSE", + "third_party/mslk/external/cutlass/LICENSE.txt", + "third_party/mslk/external/cutlass/python/LICENSE.txt", + "third_party/mslk/external/googletest/LICENSE", + "third_party/mslk/external/hipify_torch/LICENSE.txt", + "third_party/mslk/LICENSE", + "third_party/mslk/mslk/attention/flash_attn/LICENSE", + "third_party/NNPACK/LICENSE", + "third_party/NVTX/docs/LICENSE.txt", + "third_party/NVTX/LICENSE.txt", + "third_party/NVTX/python/LICENSE.txt", + "third_party/NVTX/rust/LICENSE", + "third_party/NVTX/tools/docs/github-markdown-css/LICENSE", + "third_party/onnx/LICENSE", + "third_party/onnx/third_party/pybind11/LICENSE", + "third_party/perfetto/LICENSE", + "third_party/protobuf/LICENSE", + "third_party/protobuf/third_party/benchmark/LICENSE", + "third_party/protobuf/third_party/googletest/googlemock/LICENSE", + "third_party/protobuf/third_party/googletest/googlemock/scripts/generator/LICENSE", + "third_party/protobuf/third_party/googletest/googletest/LICENSE", + "third_party/protobuf/third_party/googletest/LICENSE", + "third_party/protobuf/third_party/utf8_range/LICENSE", + "third_party/psimd/LICENSE", + "third_party/pthreadpool/LICENSE", + "third_party/pybind11/LICENSE", + "third_party/python-peachpy/LICENSE.rst", + "third_party/sleef/LICENSE.txt", + "third_party/tensorpipe/LICENSE.txt", + "third_party/tensorpipe/third_party/googletest/googlemock/LICENSE", + "third_party/tensorpipe/third_party/googletest/googlemock/scripts/generator/LICENSE", + "third_party/tensorpipe/third_party/googletest/googletest/LICENSE", + "third_party/tensorpipe/third_party/googletest/LICENSE", + "third_party/tensorpipe/third_party/libnop/LICENSE", + "third_party/tensorpipe/third_party/libuv/LICENSE", + "third_party/tensorpipe/third_party/pybind11/LICENSE", + "third_party/tensorpipe/third_party/pybind11/tools/clang/LICENSE.txt", + "third_party/VulkanMemoryAllocator/LICENSE.txt", + "third_party/XNNPACK/LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Intended Audience :: Education", + "Intended Audience :: Science/Research", + "Topic :: Scientific/Engineering", + "Topic :: Scientific/Engineering :: Mathematics", + "Topic :: Scientific/Engineering :: Artificial Intelligence", + "Topic :: Software Development", + "Topic :: Software Development :: Libraries", + "Topic :: Software Development :: Libraries :: Python Modules", + "Programming Language :: C++", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15" + ], + "requires_dist": [ + "filelock", + "typing-extensions>=4.10.0", + "setuptools>=77.0.3", + "sympy>=1.13.3", + "networkx>=2.5.1", + "jinja2", + "fsspec>=0.8.5", + "cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.3; platform_system == \"Linux\"", + "cuda-bindings<14,>=13.0.3; platform_system == \"Linux\" and python_version < \"3.15\"", + "nvidia-cudnn-cu13==9.24.0.43; platform_system == \"Linux\"", + "nvidia-cusparselt-cu13==0.8.1; platform_system == \"Linux\"", + "nvidia-nccl-cu13==2.30.7; platform_system == \"Linux\"", + "nvidia-nvshmem-cu13==3.4.5; platform_system == \"Linux\"", + "triton~=3.8.0; platform_system == \"Linux\" and python_version < \"3.15\"", + "optree>=0.13.0; extra == \"optree\"", + "opt-einsum>=3.3; extra == \"opt-einsum\"", + "pyyaml; extra == \"pyyaml\"" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://pytorch.org", + "Repository, https://github.com/pytorch/pytorch", + "Documentation, https://pytorch.org/docs", + "Issue Tracker, https://github.com/pytorch/pytorch/issues", + "Forum, https://discuss.pytorch.org" + ], + "provides_extra": [ + "optree", + "opt-einsum", + "pyyaml" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/cb/03/10388a42375ee7e4ac9b94eb2c5c569c8b5795e377e701c9ac3ad63de890/fastapi-0.141.1-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3" + }, + "hash": "sha256=bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.4", + "name": "fastapi", + "version": "0.141.1", + "summary": "FastAPI framework, high performance, easy to learn, fast to code, ready for production", + "description": "

\n \"FastAPI\"\n

\n

\n FastAPI framework, high performance, easy to learn, fast to code, ready for production\n

\n

\n\n \"Test\"\n\n\n \"Coverage\"\n\n\n \"Package\n\n\n \"Supported\n\n

\n\n---\n\n**Documentation**: [https://fastapi.tiangolo.com](https://fastapi.tiangolo.com)\n\n**Source Code**: [https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi)\n\n---\n\nFastAPI is a modern, fast (high-performance), web framework for building APIs with Python based on standard Python type hints.\n\nThe key features are:\n\n* **Fast**: Very high performance, on par with **NodeJS** and **Go** (thanks to Starlette and Pydantic). [One of the fastest Python frameworks available](#performance).\n* **Fast to code**: Increase the speed to develop features by about 200% to 300%. *\n* **Fewer bugs**: Reduce about 40% of human (developer) induced errors. *\n* **Intuitive**: Great editor support. Completion everywhere. Less time debugging.\n* **Easy**: Designed to be easy to use and learn. Less time reading docs.\n* **Short**: Minimize code duplication. Multiple features from each parameter declaration. Fewer bugs.\n* **Robust**: Get production-ready code. With automatic interactive documentation.\n* **Standards-based**: Based on (and fully compatible with) the open standards for APIs: [OpenAPI](https://github.com/OAI/OpenAPI-Specification) (previously known as Swagger) and [JSON Schema](https://json-schema.org/).\n\n* estimation based on tests conducted by an internal development team, building production applications.\n\n## Sponsors\n\n\n### Keystone Sponsor\n\n\n\n### Gold Sponsors\n\n\n\n\n\n\n\n\n\n\n### Silver Sponsors\n\n\n\n\n\n\n\n\n\n\n[Other sponsors](https://fastapi.tiangolo.com/fastapi-people/#sponsors)\n\n## Opinions\n\n\n\n
\n\n\"_[...] I'm using **FastAPI** a ton these days. [...] I'm actually planning to use it for all of my team's **ML services at Microsoft**. Some of them are getting integrated into the core **Windows** product and some **Office** products._\"\n\n
Kabir Khan - Microsoft (ref)
\n\n---\n\n\"_We adopted the **FastAPI** library to spawn a **REST** server that can be queried to obtain **predictions**. [for Ludwig]_\"\n\n
Piero Molino, Yaroslav Dudin, and Sai Sumanth Miryala - Uber (ref)
\n\n---\n\n\"_**Netflix** is pleased to announce the open-source release of our **crisis management** orchestration framework: **Dispatch**! [built with **FastAPI**]_\"\n\n
Kevin Glisson, Marc Vilanova, Forest Monsen - Netflix (ref)
\n\n---\n\n\"_If anyone is looking to build a production Python API, I would highly recommend **FastAPI**. It is **beautifully designed**, **simple to use** and **highly scalable**, it has become a **key component** in our API first development strategy and is driving many automations and services such as our Virtual TAC Engineer._\"\n\n
Deon Pillsbury - Cisco (ref)
\n\n---\n\n
\n\n## FastAPI Conf\n\n[**FastAPI Conf '26**](https://fastapiconf.com) is happening on **October 28, 2026** in **Amsterdam, NL**. All about FastAPI, right from the source. 🎤\n\n\"FastAPI\n\n## FastAPI mini documentary\n\nThere's a [FastAPI mini documentary](https://www.youtube.com/watch?v=mpR8ngthqiE) released at the end of 2025, you can watch it online:\n\n\"FastAPI\n\n## **Typer**, the FastAPI of CLIs\n\n\n\nIf you are building a CLI app to be used in the terminal instead of a web API, check out [**Typer**](https://typer.tiangolo.com/).\n\n**Typer** is FastAPI's little sibling. And it's intended to be the **FastAPI of CLIs**. ⌨️ 🚀\n\n## Requirements\n\nFastAPI stands on the shoulders of giants:\n\n* [Starlette](https://starlette.dev/) for the web parts.\n* [Pydantic](https://pydantic.dev/docs/) for the data parts.\n\n## Installation\n\nFirst, [install `uv`](https://docs.astral.sh/uv/getting-started/installation/), and then add FastAPI to your project:\n\n
\n\n```console\n$ uv add \"fastapi[standard]\"\n\n---> 100%\n```\n\n
\n\n**Note**: Make sure you put `\"fastapi[standard]\"` in quotes to ensure it works in all terminals.\n\nIf you prefer to use `pip`, install `fastapi[standard]` inside a virtual environment. See the [installation guide](tutorial/#install-fastapi) for the alternative steps.\n\n## Example\n\n### Create it\n\nCreate a file `main.py` with:\n\n```Python\nfrom fastapi import FastAPI\n\napp = FastAPI()\n\n\n@app.get(\"/\")\ndef read_root():\n return {\"Hello\": \"World\"}\n\n\n@app.get(\"/items/{item_id}\")\ndef read_item(item_id: int, q: str | None = None):\n return {\"item_id\": item_id, \"q\": q}\n```\n\n
\nOr use async def...\n\nIf your code uses `async` / `await`, use `async def`:\n\n```Python hl_lines=\"7 12\"\nfrom fastapi import FastAPI\n\napp = FastAPI()\n\n\n@app.get(\"/\")\nasync def read_root():\n return {\"Hello\": \"World\"}\n\n\n@app.get(\"/items/{item_id}\")\nasync def read_item(item_id: int, q: str | None = None):\n return {\"item_id\": item_id, \"q\": q}\n```\n\n**Note**:\n\nIf you don't know, check the _\"In a hurry?\"_ section about [`async` and `await` in the docs](https://fastapi.tiangolo.com/async/#in-a-hurry).\n\n
\n\n### Run it\n\nRun the server with:\n\n
\n\n```console\n$ uv run fastapi dev\n\n ╭────────── FastAPI CLI - Development mode ───────────╮\n │ │\n │ Serving at: http://127.0.0.1:8000 │\n │ │\n │ API docs: http://127.0.0.1:8000/docs │\n │ │\n │ Running in development mode, for production use: │\n │ │\n │ fastapi run │\n │ │\n ╰─────────────────────────────────────────────────────╯\n\nINFO: Will watch for changes in these directories: ['/home/user/code/awesomeapp']\nINFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)\nINFO: Started reloader process [2248755] using WatchFiles\nINFO: Started server process [2248757]\nINFO: Waiting for application startup.\nINFO: Application startup complete.\n```\n\n
\n\n
\nAbout the command fastapi dev...\n\nThe command `fastapi dev` reads your `main.py` file automatically, detects the **FastAPI** app in it, and starts a server using [Uvicorn](https://uvicorn.dev).\n\nBy default, `fastapi dev` will start with auto-reload enabled for local development.\n\nYou can read more about it in the [FastAPI CLI docs](https://fastapi.tiangolo.com/fastapi-cli/).\n\n
\n\n### Check it\n\nOpen your browser at [http://127.0.0.1:8000/items/5?q=somequery](http://127.0.0.1:8000/items/5?q=somequery).\n\nYou will see the JSON response as:\n\n```JSON\n{\"item_id\": 5, \"q\": \"somequery\"}\n```\n\nYou already created an API that:\n\n* Receives HTTP requests in the _paths_ `/` and `/items/{item_id}`.\n* Both _paths_ take `GET` operations (also known as HTTP _methods_).\n* The _path_ `/items/{item_id}` has a _path parameter_ `item_id` that should be an `int`.\n* The _path_ `/items/{item_id}` has an optional `str` _query parameter_ `q`.\n\n### Interactive API docs\n\nNow go to [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs).\n\nYou will see the automatic interactive API documentation (provided by [Swagger UI](https://github.com/swagger-api/swagger-ui)):\n\n![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png)\n\n### Alternative API docs\n\nAnd now, go to [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc).\n\nYou will see the alternative automatic documentation (provided by [ReDoc](https://github.com/Redocly/redoc)):\n\n![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png)\n\n## Example upgrade\n\nNow modify the file `main.py` to receive a body from a `PUT` request.\n\nDeclare the body using standard Python types, thanks to Pydantic.\n\n```Python hl_lines=\"2 7-10 23-25\"\nfrom fastapi import FastAPI\nfrom pydantic import BaseModel\n\napp = FastAPI()\n\n\nclass Item(BaseModel):\n name: str\n price: float\n is_offer: bool | None = None\n\n\n@app.get(\"/\")\ndef read_root():\n return {\"Hello\": \"World\"}\n\n\n@app.get(\"/items/{item_id}\")\ndef read_item(item_id: int, q: str | None = None):\n return {\"item_id\": item_id, \"q\": q}\n\n\n@app.put(\"/items/{item_id}\")\ndef update_item(item_id: int, item: Item):\n return {\"item_name\": item.name, \"item_id\": item_id}\n```\n\nThe `fastapi dev` server should reload automatically.\n\n### Interactive API docs upgrade\n\nNow go to [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs).\n\n* The interactive API documentation will be automatically updated, including the new body:\n\n![Swagger UI](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png)\n\n* Click on the button \"Try it out\", it allows you to fill the parameters and directly interact with the API:\n\n![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-04-swagger-03.png)\n\n* Then click on the \"Execute\" button, the user interface will communicate with your API, send the parameters, get the results and show them on the screen:\n\n![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-05-swagger-04.png)\n\n### Alternative API docs upgrade\n\nAnd now, go to [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc).\n\n* The alternative documentation will also reflect the new query parameter and body:\n\n![ReDoc](https://fastapi.tiangolo.com/img/index/index-06-redoc-02.png)\n\n### Recap\n\nIn summary, you declare **once** the types of parameters, body, etc. as function parameters.\n\nYou do that with standard modern Python types.\n\nYou don't have to learn a new syntax, the methods or classes of a specific library, etc.\n\nJust standard **Python**.\n\nFor example, for an `int`:\n\n```Python\nitem_id: int\n```\n\nor for a more complex `Item` model:\n\n```Python\nitem: Item\n```\n\n...and with that single declaration you get:\n\n* Editor support, including:\n * Completion.\n * Type checks.\n* Validation of data:\n * Automatic and clear errors when the data is invalid.\n * Validation even for deeply nested JSON objects.\n* Conversion of input data: coming from the network to Python data and types. Reading from:\n * JSON.\n * Path parameters.\n * Query parameters.\n * Cookies.\n * Headers.\n * Forms.\n * Files.\n* Conversion of output data: converting from Python data and types to network data (as JSON):\n * Convert Python types (`str`, `int`, `float`, `bool`, `list`, etc).\n * `datetime` objects.\n * `UUID` objects.\n * Database models.\n * ...and many more.\n* Automatic interactive API documentation, including 2 alternative user interfaces:\n * Swagger UI.\n * ReDoc.\n\n---\n\nComing back to the previous code example, **FastAPI** will:\n\n* Validate that there is an `item_id` in the path for `GET` and `PUT` requests.\n* Validate that the `item_id` is of type `int` for `GET` and `PUT` requests.\n * If it is not, the client will see a useful, clear error.\n* Check if there is an optional query parameter named `q` (as in `http://127.0.0.1:8000/items/foo?q=somequery`) for `GET` requests.\n * As the `q` parameter is declared with `= None`, it is optional.\n * Without the `None` it would be required (as is the body in the case with `PUT`).\n* For `PUT` requests to `/items/{item_id}`, read the body as JSON:\n * Check that it has a required attribute `name` that should be a `str`.\n * Check that it has a required attribute `price` that has to be a `float`.\n * Check that it has an optional attribute `is_offer`, that should be a `bool`, if present.\n * All this would also work for deeply nested JSON objects.\n* Convert from and to JSON automatically.\n* Document everything with OpenAPI, that can be used by:\n * Interactive documentation systems.\n * Automatic client code generation systems, for many languages.\n* Provide 2 interactive documentation web interfaces directly.\n\n---\n\nWe just scratched the surface, but you already get the idea of how it all works.\n\nTry changing the line with:\n\n```Python\n return {\"item_name\": item.name, \"item_id\": item_id}\n```\n\n...from:\n\n```Python\n ... \"item_name\": item.name ...\n```\n\n...to:\n\n```Python\n ... \"item_price\": item.price ...\n```\n\n...and see how your editor will auto-complete the attributes and know their types:\n\n![editor support](https://fastapi.tiangolo.com/img/vscode-completion.png)\n\nFor a more complete example including more features, see the Tutorial - User Guide.\n\n**Spoiler alert**: the tutorial - user guide includes:\n\n* Declaration of **parameters** from other different places such as: **headers**, **cookies**, **form fields** and **files**.\n* How to set **validation constraints** such as `maximum_length` or `regex`.\n* A very powerful and easy to use **Dependency Injection** system.\n* Security and authentication, including support for **OAuth2** with **JWT tokens** and **HTTP Basic** auth.\n* More advanced (but equally easy) techniques for declaring **deeply nested JSON models** (thanks to Pydantic).\n* **GraphQL** integration with [Strawberry](https://strawberry.rocks) and other libraries.\n* Many extra features (thanks to Starlette) such as:\n * **WebSockets**\n * extremely easy tests based on HTTPX and `pytest`\n * **CORS**\n * **Cookie Sessions**\n * ...and more.\n\n### Deploy your app (optional)\n\nYou can optionally deploy your FastAPI app to [FastAPI Cloud](https://fastapicloud.com) with a single command. 🚀\n\n
\n\n```console\n$ uv run fastapi deploy\n\nDeploying to FastAPI Cloud...\n\n✅ Deployment successful!\n\n🐔 Ready the chicken! Your app is ready at https://myapp.fastapicloud.dev\n```\n\n
\n\nThe CLI will automatically detect your FastAPI application and deploy it to the cloud. If you are not logged in, your browser will open to complete the authentication process.\n\nThat's it! Now you can access your app at that URL. ✨\n\n#### About FastAPI Cloud\n\n**[FastAPI Cloud](https://fastapicloud.com)** is built by the same author and team behind **FastAPI**.\n\nIt streamlines the process of **building**, **deploying**, and **accessing** an API with minimal effort.\n\nIt brings the same **developer experience** of building apps with FastAPI to **deploying** them to the cloud. 🎉\n\nFastAPI Cloud is the primary sponsor and funding provider for the *FastAPI and friends* open source projects. ✨\n\n#### Deploy to other cloud providers\n\nFastAPI is open source and based on standards. You can deploy FastAPI apps to any cloud provider you choose.\n\nFollow your cloud provider's guides to deploy FastAPI apps with them. 🤓\n\n## Performance\n\nIndependent TechEmpower benchmarks show **FastAPI** applications running under Uvicorn as [one of the fastest Python frameworks available](https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7), only below Starlette and Uvicorn themselves (used internally by FastAPI). (*)\n\nTo understand more about it, see the section [Benchmarks](https://fastapi.tiangolo.com/benchmarks/).\n\n## Dependencies\n\nFastAPI depends on Pydantic and Starlette.\n\n### `standard` Dependencies\n\nWhen you install FastAPI with `uv add \"fastapi[standard]\"` it comes with the `standard` group of optional dependencies:\n\nUsed by Pydantic:\n\n* [`email-validator`](https://github.com/JoshData/python-email-validator) - for email validation.\n\nUsed by Starlette:\n\n* [`httpx`](https://www.python-httpx.org) - Required if you want to use the `TestClient`.\n* [`jinja2`](https://jinja.palletsprojects.com) - Required if you want to use the default template configuration.\n* [`python-multipart`](https://github.com/Kludex/python-multipart) - Required if you want to support form \"parsing\", with `request.form()`.\n\nUsed by FastAPI:\n\n* [`uvicorn`](https://uvicorn.dev) - for the server that loads and serves your application. This includes `uvicorn[standard]`, which includes some dependencies (e.g. `uvloop`) needed for high performance serving.\n* `fastapi-cli[standard]` - to provide the `fastapi` command.\n * This includes `fastapi-cloud-cli`, which allows you to deploy your FastAPI application to [FastAPI Cloud](https://fastapicloud.com).\n\n### Without `standard` Dependencies\n\nIf you don't want to include the `standard` optional dependencies, you can install with `uv add fastapi` instead of `uv add \"fastapi[standard]\"`.\n\n### Without `fastapi-cloud-cli`\n\nIf you want to install FastAPI with the standard dependencies but without the `fastapi-cloud-cli`, you can install with `uv add \"fastapi[standard-no-fastapi-cloud-cli]\"`.\n\n### Additional Optional Dependencies\n\nThere are some additional dependencies you might want to install.\n\nAdditional optional Pydantic dependencies:\n\n* [`pydantic-settings`](https://pydantic.dev/docs/validation/latest/concepts/pydantic_settings/) - for settings management.\n* [`pydantic-extra-types`](https://github.com/pydantic/pydantic-extra-types) - for extra types to be used with Pydantic.\n\nAdditional optional FastAPI dependencies:\n\n* [`orjson`](https://github.com/ijl/orjson) - Required if you want to use `ORJSONResponse`.\n* [`ujson`](https://github.com/ultrajson/ultrajson) - Required if you want to use `UJSONResponse`.\n\n## License\n\nThis project is licensed under the terms of the MIT license.\n", + "description_content_type": "text/markdown", + "author_email": "=?utf-8?q?Sebasti=C3=A1n_Ram=C3=ADrez?= ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Intended Audience :: Information Technology", + "Intended Audience :: System Administrators", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python", + "Topic :: Internet", + "Topic :: Software Development :: Libraries :: Application Frameworks", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Software Development :: Libraries", + "Topic :: Software Development", + "Typing :: Typed", + "Development Status :: 4 - Beta", + "Environment :: Web Environment", + "Framework :: AsyncIO", + "Framework :: FastAPI", + "Framework :: Pydantic", + "Framework :: Pydantic :: 2", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Topic :: Internet :: WWW/HTTP :: HTTP Servers", + "Topic :: Internet :: WWW/HTTP" + ], + "requires_dist": [ + "starlette>=0.46.0", + "pydantic>=2.9.0", + "typing-extensions>=4.8.0", + "typing-inspection>=0.4.2", + "annotated-doc>=0.0.2", + "fastapi-cli[standard]>=0.0.32; extra == \"standard\"", + "fastar>=0.9.0; extra == \"standard\"", + "httpx<1.0.0,>=0.23.0; extra == \"standard\"", + "jinja2>=3.1.5; extra == \"standard\"", + "python-multipart>=0.0.18; extra == \"standard\"", + "email-validator>=2.0.0; extra == \"standard\"", + "uvicorn[standard]>=0.12.0; extra == \"standard\"", + "pydantic-settings>=2.0.0; extra == \"standard\"", + "pydantic-extra-types>=2.0.0; extra == \"standard\"", + "fastapi-cli[standard-no-fastapi-cloud-cli]>=0.0.32; extra == \"standard-no-fastapi-cloud-cli\"", + "httpx<1.0.0,>=0.23.0; extra == \"standard-no-fastapi-cloud-cli\"", + "jinja2>=3.1.5; extra == \"standard-no-fastapi-cloud-cli\"", + "python-multipart>=0.0.18; extra == \"standard-no-fastapi-cloud-cli\"", + "email-validator>=2.0.0; extra == \"standard-no-fastapi-cloud-cli\"", + "uvicorn[standard]>=0.12.0; extra == \"standard-no-fastapi-cloud-cli\"", + "pydantic-settings>=2.0.0; extra == \"standard-no-fastapi-cloud-cli\"", + "pydantic-extra-types>=2.0.0; extra == \"standard-no-fastapi-cloud-cli\"", + "fastapi-cli[standard]>=0.0.32; extra == \"all\"", + "httpx<1.0.0,>=0.23.0; extra == \"all\"", + "jinja2>=3.1.5; extra == \"all\"", + "python-multipart>=0.0.18; extra == \"all\"", + "itsdangerous>=1.1.0; extra == \"all\"", + "pyyaml>=5.3.1; extra == \"all\"", + "email-validator>=2.0.0; extra == \"all\"", + "uvicorn[standard]>=0.12.0; extra == \"all\"", + "pydantic-settings>=2.0.0; extra == \"all\"", + "pydantic-extra-types>=2.0.0; extra == \"all\"" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://github.com/fastapi/fastapi", + "Documentation, https://fastapi.tiangolo.com/", + "Repository, https://github.com/fastapi/fastapi", + "Issues, https://github.com/fastapi/fastapi/issues", + "Changelog, https://fastapi.tiangolo.com/release-notes/" + ], + "provides_extra": [ + "standard", + "standard-no-fastapi-cloud-cli", + "all" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/38/0c/b54a4fdd7f90a3af8b02ebc9ce6712c2c208b7926a2f7bad95c33ebbe943/uvicorn-0.54.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf" + }, + "hash": "sha256=505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.5", + "name": "uvicorn", + "version": "0.54.0", + "summary": "The lightning-fast ASGI server.", + "description": "

\n uvicorn\n

\n\n

\nAn ASGI web server, for Python.\n

\n\n---\n\n[![Build Status](https://github.com/Kludex/uvicorn/workflows/Test%20Suite/badge.svg)](https://github.com/Kludex/uvicorn/actions)\n[![Package version](https://badge.fury.io/py/uvicorn.svg)](https://pypi.python.org/pypi/uvicorn)\n[![Supported Python Version](https://img.shields.io/pypi/pyversions/uvicorn.svg?color=%2334D058)](https://pypi.org/project/uvicorn)\n[![Discord](https://img.shields.io/discord/1051468649518616576?logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2)](https://discord.gg/RxKUF5JuHs)\n\n---\n\n**Documentation**: [https://uvicorn.dev](https://uvicorn.dev)\n\n**Source Code**: [https://www.github.com/Kludex/uvicorn](https://www.github.com/Kludex/uvicorn)\n\n---\n\nUvicorn is an ASGI web server implementation for Python.\n\nUntil recently Python has lacked a minimal low-level server/application interface for\nasync frameworks. The [ASGI specification][asgi] fills this gap, and means we're now able to\nstart building a common set of tooling usable across all async frameworks.\n\nUvicorn currently supports HTTP/1.1, HTTP/2 and WebSockets.\n\n## Quickstart\n\nInstall using `pip`:\n\n```shell\n$ pip install uvicorn\n```\n\nThis will install uvicorn with minimal (pure Python) dependencies.\n\n```shell\n$ pip install 'uvicorn[standard]'\n```\n\nThis will install uvicorn with \"Cython-based\" dependencies (where possible) and other \"optional extras\".\n\nIn this context, \"Cython-based\" means the following:\n\n- the event loop `uvloop` will be installed and used if possible.\n- the http protocol will be handled by `httptools` if possible.\n\nMoreover, \"optional extras\" means that:\n\n- the websocket protocol will be handled by `websockets` (should you want to use `wsproto` you'd need to install it manually) if possible.\n- the `--reload` flag in development mode will use `watchfiles`.\n- `python-dotenv` will be installed should you want to use the `--env-file` option.\n- `PyYAML` will be installed to allow you to provide a `.yaml` file to `--log-config`, if desired.\n\nCreate an application, in `example.py`:\n\n```python\nasync def app(scope, receive, send):\n assert scope['type'] == 'http'\n\n await send({\n 'type': 'http.response.start',\n 'status': 200,\n 'headers': [\n (b'content-type', b'text/plain'),\n ],\n })\n await send({\n 'type': 'http.response.body',\n 'body': b'Hello, world!',\n })\n```\n\nRun the server:\n\n```shell\n$ uvicorn example:app\n```\n\n---\n\n## Why ASGI?\n\nMost well established Python Web frameworks started out as WSGI-based frameworks.\n\nWSGI applications are a single, synchronous callable that takes a request and returns a response.\nThis doesn’t allow for long-lived connections, like you get with long-poll HTTP or WebSocket connections,\nwhich WSGI doesn't support well.\n\nHaving an async concurrency model also allows for options such as lightweight background tasks,\nand can be less of a limiting factor for endpoints that have long periods being blocked on network\nI/O such as dealing with slow HTTP requests.\n\n---\n\n## Alternative ASGI servers\n\nA strength of the ASGI protocol is that it decouples the server implementation\nfrom the application framework. This allows for an ecosystem of interoperating\nwebservers and application frameworks.\n\n### Daphne\n\nThe first ASGI server implementation, originally developed to power Django Channels, is [the Daphne webserver][daphne].\n\nIt is run widely in production, and supports HTTP/1.1, HTTP/2, and WebSockets.\n\nAny of the example applications given here can equally well be run using `daphne` instead.\n\n```\n$ pip install daphne\n$ daphne app:App\n```\n\n### Hypercorn\n\n[Hypercorn][hypercorn] was initially part of the Quart web framework, before\nbeing separated out into a standalone ASGI server.\n\nHypercorn supports HTTP/1.1, HTTP/2, and WebSockets.\n\nIt also supports [the excellent `trio` async framework][trio], as an alternative to `asyncio`.\n\n```\n$ pip install hypercorn\n$ hypercorn app:App\n```\n\n### Mangum\n\n[Mangum][mangum] is an adapter for using ASGI applications with AWS Lambda & API Gateway.\n\n### Granian\n\n[Granian][granian] is an ASGI compatible Rust HTTP server which supports HTTP/2, TLS and WebSockets.\n\n---\n\n

Uvicorn is BSD licensed code.
Designed & crafted with care.

— 🦄 —

\n\n[asgi]: https://asgi.readthedocs.io/en/latest/\n[daphne]: https://github.com/django/daphne\n[hypercorn]: https://github.com/pgjones/hypercorn\n[trio]: https://trio.readthedocs.io\n[mangum]: https://github.com/jordaneremieff/mangum\n[granian]: https://github.com/emmett-framework/granian\n", + "description_content_type": "text/markdown", + "author_email": "Tom Christie ", + "maintainer_email": "Marcelo Trylesinski ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.md" + ], + "classifier": [ + "Development Status :: 4 - Beta", + "Environment :: Web Environment", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Internet :: WWW/HTTP" + ], + "requires_dist": [ + "click>=7.0", + "h11>=0.8", + "typing-extensions>=4.0; python_version < '3.11'", + "httptools>=0.8.0; extra == 'standard'", + "python-dotenv>=0.13; extra == 'standard'", + "pyyaml>=5.1; extra == 'standard'", + "uvloop>=0.15.1; (sys_platform != 'win32' and (sys_platform != 'cygwin' and platform_python_implementation != 'PyPy')) and extra == 'standard'", + "watchfiles>=0.20; extra == 'standard'", + "websockets>=13.0; extra == 'standard'" + ], + "requires_python": ">=3.10", + "project_url": [ + "Changelog, https://uvicorn.dev/release-notes", + "Funding, https://github.com/sponsors/Kludex", + "Homepage, https://uvicorn.dev/", + "Source, https://github.com/Kludex/uvicorn" + ], + "provides_extra": [ + "standard" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl", + "archive_info": { + "hashes": { + "sha256": "eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988" + }, + "hash": "sha256=eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "psutil", + "version": "7.2.2", + "platform": [ + "Platform Independent" + ], + "summary": "Cross-platform lib for process and system monitoring.", + "description": "| |downloads| |stars| |forks| |contributors| |packages|\n| |version| |license| |stackoverflow| |twitter| |tidelift|\n| |github-actions-wheels| |github-actions-bsd|\n\n.. |downloads| image:: https://img.shields.io/pypi/dm/psutil.svg\n :target: https://clickpy.clickhouse.com/dashboard/psutil\n :alt: Downloads\n\n.. |stars| image:: https://img.shields.io/github/stars/giampaolo/psutil.svg\n :target: https://github.com/giampaolo/psutil/stargazers\n :alt: Github stars\n\n.. |forks| image:: https://img.shields.io/github/forks/giampaolo/psutil.svg\n :target: https://github.com/giampaolo/psutil/network/members\n :alt: Github forks\n\n.. |contributors| image:: https://img.shields.io/github/contributors/giampaolo/psutil.svg\n :target: https://github.com/giampaolo/psutil/graphs/contributors\n :alt: Contributors\n\n.. |stackoverflow| image:: https://img.shields.io/badge/stackoverflow-Ask%20questions-blue.svg\n :target: https://stackoverflow.com/questions/tagged/psutil\n :alt: Stackoverflow\n\n.. |github-actions-wheels| image:: https://img.shields.io/github/actions/workflow/status/giampaolo/psutil/.github/workflows/build.yml.svg?label=Linux%2C%20macOS%2C%20Windows\n :target: https://github.com/giampaolo/psutil/actions?query=workflow%3Abuild\n :alt: Linux, macOS, Windows\n\n.. |github-actions-bsd| image:: https://img.shields.io/github/actions/workflow/status/giampaolo/psutil/.github/workflows/bsd.yml.svg?label=FreeBSD,%20NetBSD,%20OpenBSD\n :target: https://github.com/giampaolo/psutil/actions?query=workflow%3Absd-tests\n :alt: FreeBSD, NetBSD, OpenBSD\n\n.. |version| image:: https://img.shields.io/pypi/v/psutil.svg?label=pypi\n :target: https://pypi.org/project/psutil\n :alt: Latest version\n\n.. |packages| image:: https://repology.org/badge/tiny-repos/python:psutil.svg\n :target: https://repology.org/metapackage/python:psutil/versions\n :alt: Binary packages\n\n.. |license| image:: https://img.shields.io/pypi/l/psutil.svg\n :target: https://github.com/giampaolo/psutil/blob/master/LICENSE\n :alt: License\n\n.. |twitter| image:: https://img.shields.io/twitter/follow/grodola?style=flat\n :target: https://twitter.com/grodola\n :alt: Twitter Follow\n\n.. |tidelift| image:: https://tidelift.com/badges/github/giampaolo/psutil?style=flat\n :target: https://tidelift.com/subscription/pkg/pypi-psutil?utm_source=pypi-psutil&utm_medium=referral&utm_campaign=readme\n :alt: Tidelift\n\n-----\n\nQuick links\n===========\n\n- `Home page `_\n- `Install `_\n- `Documentation `_\n- `Download `_\n- `Forum `_\n- `StackOverflow `_\n- `Blog `_\n- `What's new `_\n\n\nSummary\n=======\n\npsutil (process and system utilities) is a cross-platform library for\nretrieving information on **running processes** and **system utilization**\n(CPU, memory, disks, network, sensors) in Python.\nIt is useful mainly for **system monitoring**, **profiling and limiting process\nresources** and **management of running processes**.\nIt implements many functionalities offered by classic UNIX command line tools\nsuch as *ps, top, iotop, lsof, netstat, ifconfig, free* and others.\npsutil currently supports the following platforms:\n\n- **Linux**\n- **Windows**\n- **macOS**\n- **FreeBSD, OpenBSD**, **NetBSD**\n- **Sun Solaris**\n- **AIX**\n\nSupported Python versions are cPython 3.6+ and `PyPy `__.\nLatest psutil version supporting Python 2.7 is\n`psutil 6.1.1 `__.\n\nExample usages\n==============\n\nThis represents pretty much the whole psutil API.\n\nCPU\n---\n\n.. code-block:: python\n\n >>> import psutil\n >>>\n >>> psutil.cpu_times()\n scputimes(user=3961.46, nice=169.729, system=2150.659, idle=16900.540, iowait=629.59, irq=0.0, softirq=19.42, steal=0.0, guest=0, guest_nice=0.0)\n >>>\n >>> for x in range(3):\n ... psutil.cpu_percent(interval=1)\n ...\n 4.0\n 5.9\n 3.8\n >>>\n >>> for x in range(3):\n ... psutil.cpu_percent(interval=1, percpu=True)\n ...\n [4.0, 6.9, 3.7, 9.2]\n [7.0, 8.5, 2.4, 2.1]\n [1.2, 9.0, 9.9, 7.2]\n >>>\n >>> for x in range(3):\n ... psutil.cpu_times_percent(interval=1, percpu=False)\n ...\n scputimes(user=1.5, nice=0.0, system=0.5, idle=96.5, iowait=1.5, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)\n scputimes(user=1.0, nice=0.0, system=0.0, idle=99.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)\n scputimes(user=2.0, nice=0.0, system=0.0, idle=98.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)\n >>>\n >>> psutil.cpu_count()\n 4\n >>> psutil.cpu_count(logical=False)\n 2\n >>>\n >>> psutil.cpu_stats()\n scpustats(ctx_switches=20455687, interrupts=6598984, soft_interrupts=2134212, syscalls=0)\n >>>\n >>> psutil.cpu_freq()\n scpufreq(current=931.42925, min=800.0, max=3500.0)\n >>>\n >>> psutil.getloadavg() # also on Windows (emulated)\n (3.14, 3.89, 4.67)\n\nMemory\n------\n\n.. code-block:: python\n\n >>> psutil.virtual_memory()\n svmem(total=10367352832, available=6472179712, percent=37.6, used=8186245120, free=2181107712, active=4748992512, inactive=2758115328, buffers=790724608, cached=3500347392, shared=787554304)\n >>> psutil.swap_memory()\n sswap(total=2097147904, used=296128512, free=1801019392, percent=14.1, sin=304193536, sout=677842944)\n >>>\n\nDisks\n-----\n\n.. code-block:: python\n\n >>> psutil.disk_partitions()\n [sdiskpart(device='/dev/sda1', mountpoint='/', fstype='ext4', opts='rw,nosuid'),\n sdiskpart(device='/dev/sda2', mountpoint='/home', fstype='ext', opts='rw')]\n >>>\n >>> psutil.disk_usage('/')\n sdiskusage(total=21378641920, used=4809781248, free=15482871808, percent=22.5)\n >>>\n >>> psutil.disk_io_counters(perdisk=False)\n sdiskio(read_count=719566, write_count=1082197, read_bytes=18626220032, write_bytes=24081764352, read_time=5023392, write_time=63199568, read_merged_count=619166, write_merged_count=812396, busy_time=4523412)\n >>>\n\nNetwork\n-------\n\n.. code-block:: python\n\n >>> psutil.net_io_counters(pernic=True)\n {'eth0': netio(bytes_sent=485291293, bytes_recv=6004858642, packets_sent=3251564, packets_recv=4787798, errin=0, errout=0, dropin=0, dropout=0),\n 'lo': netio(bytes_sent=2838627, bytes_recv=2838627, packets_sent=30567, packets_recv=30567, errin=0, errout=0, dropin=0, dropout=0)}\n >>>\n >>> psutil.net_connections(kind='tcp')\n [sconn(fd=115, family=, type=, laddr=addr(ip='10.0.0.1', port=48776), raddr=addr(ip='93.186.135.91', port=80), status='ESTABLISHED', pid=1254),\n sconn(fd=117, family=, type=, laddr=addr(ip='10.0.0.1', port=43761), raddr=addr(ip='72.14.234.100', port=80), status='CLOSING', pid=2987),\n ...]\n >>>\n >>> psutil.net_if_addrs()\n {'lo': [snicaddr(family=, address='127.0.0.1', netmask='255.0.0.0', broadcast='127.0.0.1', ptp=None),\n snicaddr(family=, address='::1', netmask='ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', broadcast=None, ptp=None),\n snicaddr(family=, address='00:00:00:00:00:00', netmask=None, broadcast='00:00:00:00:00:00', ptp=None)],\n 'wlan0': [snicaddr(family=, address='192.168.1.3', netmask='255.255.255.0', broadcast='192.168.1.255', ptp=None),\n snicaddr(family=, address='fe80::c685:8ff:fe45:641%wlan0', netmask='ffff:ffff:ffff:ffff::', broadcast=None, ptp=None),\n snicaddr(family=, address='c4:85:08:45:06:41', netmask=None, broadcast='ff:ff:ff:ff:ff:ff', ptp=None)]}\n >>>\n >>> psutil.net_if_stats()\n {'lo': snicstats(isup=True, duplex=, speed=0, mtu=65536, flags='up,loopback,running'),\n 'wlan0': snicstats(isup=True, duplex=, speed=100, mtu=1500, flags='up,broadcast,running,multicast')}\n >>>\n\nSensors\n-------\n\n.. code-block:: python\n\n >>> import psutil\n >>> psutil.sensors_temperatures()\n {'acpitz': [shwtemp(label='', current=47.0, high=103.0, critical=103.0)],\n 'asus': [shwtemp(label='', current=47.0, high=None, critical=None)],\n 'coretemp': [shwtemp(label='Physical id 0', current=52.0, high=100.0, critical=100.0),\n shwtemp(label='Core 0', current=45.0, high=100.0, critical=100.0)]}\n >>>\n >>> psutil.sensors_fans()\n {'asus': [sfan(label='cpu_fan', current=3200)]}\n >>>\n >>> psutil.sensors_battery()\n sbattery(percent=93, secsleft=16628, power_plugged=False)\n >>>\n\nOther system info\n-----------------\n\n.. code-block:: python\n\n >>> import psutil\n >>> psutil.users()\n [suser(name='giampaolo', terminal='pts/2', host='localhost', started=1340737536.0, pid=1352),\n suser(name='giampaolo', terminal='pts/3', host='localhost', started=1340737792.0, pid=1788)]\n >>>\n >>> psutil.boot_time()\n 1365519115.0\n >>>\n\nProcess management\n------------------\n\n.. code-block:: python\n\n >>> import psutil\n >>> psutil.pids()\n [1, 2, 3, 4, 5, 6, 7, 46, 48, 50, 51, 178, 182, 222, 223, 224, 268, 1215,\n 1216, 1220, 1221, 1243, 1244, 1301, 1601, 2237, 2355, 2637, 2774, 3932,\n 4176, 4177, 4185, 4187, 4189, 4225, 4243, 4245, 4263, 4282, 4306, 4311,\n 4312, 4313, 4314, 4337, 4339, 4357, 4358, 4363, 4383, 4395, 4408, 4433,\n 4443, 4445, 4446, 5167, 5234, 5235, 5252, 5318, 5424, 5644, 6987, 7054,\n 7055, 7071]\n >>>\n >>> p = psutil.Process(7055)\n >>> p\n psutil.Process(pid=7055, name='python3', status='running', started='09:04:44')\n >>> p.pid\n 7055\n >>> p.name()\n 'python3'\n >>> p.exe()\n '/usr/bin/python3'\n >>> p.cwd()\n '/home/giampaolo'\n >>> p.cmdline()\n ['/usr/bin/python3', 'main.py']\n >>>\n >>> p.ppid()\n 7054\n >>> p.parent()\n psutil.Process(pid=4699, name='bash', status='sleeping', started='09:06:44')\n >>> p.parents()\n [psutil.Process(pid=4699, name='bash', started='09:06:44'),\n psutil.Process(pid=4689, name='gnome-terminal-server', status='sleeping', started='0:06:44'),\n psutil.Process(pid=1, name='systemd', status='sleeping', started='05:56:55')]\n >>> p.children(recursive=True)\n [psutil.Process(pid=29835, name='python3', status='sleeping', started='11:45:38'),\n psutil.Process(pid=29836, name='python3', status='waking', started='11:43:39')]\n >>>\n >>> p.status()\n 'running'\n >>> p.create_time()\n 1267551141.5019531\n >>> p.terminal()\n '/dev/pts/0'\n >>>\n >>> p.username()\n 'giampaolo'\n >>> p.uids()\n puids(real=1000, effective=1000, saved=1000)\n >>> p.gids()\n pgids(real=1000, effective=1000, saved=1000)\n >>>\n >>> p.cpu_times()\n pcputimes(user=1.02, system=0.31, children_user=0.32, children_system=0.1, iowait=0.0)\n >>> p.cpu_percent(interval=1.0)\n 12.1\n >>> p.cpu_affinity()\n [0, 1, 2, 3]\n >>> p.cpu_affinity([0, 1]) # set\n >>> p.cpu_num()\n 1\n >>>\n >>> p.memory_info()\n pmem(rss=10915840, vms=67608576, shared=3313664, text=2310144, lib=0, data=7262208, dirty=0)\n >>> p.memory_full_info() # \"real\" USS memory usage (Linux, macOS, Win only)\n pfullmem(rss=10199040, vms=52133888, shared=3887104, text=2867200, lib=0, data=5967872, dirty=0, uss=6545408, pss=6872064, swap=0)\n >>> p.memory_percent()\n 0.7823\n >>> p.memory_maps()\n [pmmap_grouped(path='/lib/x8664-linux-gnu/libutil-2.15.so', rss=32768, size=2125824, pss=32768, shared_clean=0, shared_dirty=0, private_clean=20480, private_dirty=12288, referenced=32768, anonymous=12288, swap=0),\n pmmap_grouped(path='/lib/x8664-linux-gnu/libc-2.15.so', rss=3821568, size=3842048, pss=3821568, shared_clean=0, shared_dirty=0, private_clean=0, private_dirty=3821568, referenced=3575808, anonymous=3821568, swap=0),\n pmmap_grouped(path='[heap]', rss=32768, size=139264, pss=32768, shared_clean=0, shared_dirty=0, private_clean=0, private_dirty=32768, referenced=32768, anonymous=32768, swap=0),\n pmmap_grouped(path='[stack]', rss=2465792, size=2494464, pss=2465792, shared_clean=0, shared_dirty=0, private_clean=0, private_dirty=2465792, referenced=2277376, anonymous=2465792, swap=0),\n ...]\n >>>\n >>> p.io_counters()\n pio(read_count=478001, write_count=59371, read_bytes=700416, write_bytes=69632, read_chars=456232, write_chars=517543)\n >>>\n >>> p.open_files()\n [popenfile(path='/home/giampaolo/monit.py', fd=3, position=0, mode='r', flags=32768),\n popenfile(path='/var/log/monit.log', fd=4, position=235542, mode='a', flags=33793)]\n >>>\n >>> p.net_connections(kind='tcp')\n [pconn(fd=115, family=, type=, laddr=addr(ip='10.0.0.1', port=48776), raddr=addr(ip='93.186.135.91', port=80), status='ESTABLISHED'),\n pconn(fd=117, family=, type=, laddr=addr(ip='10.0.0.1', port=43761), raddr=addr(ip='72.14.234.100', port=80), status='CLOSING')]\n >>>\n >>> p.threads()\n [pthread(id=5234, user_time=22.5, system_time=9.2891),\n pthread(id=5237, user_time=0.0707, system_time=1.1)]\n >>>\n >>> p.num_threads()\n 4\n >>> p.num_fds()\n 8\n >>> p.num_ctx_switches()\n pctxsw(voluntary=78, involuntary=19)\n >>>\n >>> p.nice()\n 0\n >>> p.nice(10) # set\n >>>\n >>> p.ionice(psutil.IOPRIO_CLASS_IDLE) # IO priority (Win and Linux only)\n >>> p.ionice()\n pionice(ioclass=, value=0)\n >>>\n >>> p.rlimit(psutil.RLIMIT_NOFILE, (5, 5)) # set resource limits (Linux only)\n >>> p.rlimit(psutil.RLIMIT_NOFILE)\n (5, 5)\n >>>\n >>> p.environ()\n {'LC_PAPER': 'it_IT.UTF-8', 'SHELL': '/bin/bash', 'GREP_OPTIONS': '--color=auto',\n 'XDG_CONFIG_DIRS': '/etc/xdg/xdg-ubuntu:/usr/share/upstart/xdg:/etc/xdg',\n ...}\n >>>\n >>> p.as_dict()\n {'status': 'running', 'num_ctx_switches': pctxsw(voluntary=63, involuntary=1), 'pid': 5457, ...}\n >>> p.is_running()\n True\n >>> p.suspend()\n >>> p.resume()\n >>>\n >>> p.terminate()\n >>> p.kill()\n >>> p.wait(timeout=3)\n \n >>>\n >>> psutil.test()\n USER PID %CPU %MEM VSZ RSS TTY START TIME COMMAND\n root 1 0.0 0.0 24584 2240 Jun17 00:00 init\n root 2 0.0 0.0 0 0 Jun17 00:00 kthreadd\n ...\n giampaolo 31475 0.0 0.0 20760 3024 /dev/pts/0 Jun19 00:00 python2.4\n giampaolo 31721 0.0 2.2 773060 181896 00:04 10:30 chrome\n root 31763 0.0 0.0 0 0 00:05 00:00 kworker/0:1\n >>>\n\nFurther process APIs\n--------------------\n\n.. code-block:: python\n\n >>> import psutil\n >>> for proc in psutil.process_iter(['pid', 'name']):\n ... print(proc.info)\n ...\n {'pid': 1, 'name': 'systemd'}\n {'pid': 2, 'name': 'kthreadd'}\n {'pid': 3, 'name': 'ksoftirqd/0'}\n ...\n >>>\n >>> psutil.pid_exists(3)\n True\n >>>\n >>> def on_terminate(proc):\n ... print(\"process {} terminated\".format(proc))\n ...\n >>> # waits for multiple processes to terminate\n >>> gone, alive = psutil.wait_procs(procs_list, timeout=3, callback=on_terminate)\n >>>\n\nHeap info\n---------\n\n.. code-block:: python\n\n >>> import psutil\n >>> psutil.heap_info()\n pheap(heap_used=5177792, mmap_used=819200)\n >>> psutil.heap_trim()\n\nSee also `psleak `__\n\nWindows services\n----------------\n\n.. code-block:: python\n\n >>> list(psutil.win_service_iter())\n [,\n ,\n ,\n ,\n ...]\n >>> s = psutil.win_service_get('alg')\n >>> s.as_dict()\n {'binpath': 'C:\\\\Windows\\\\System32\\\\alg.exe',\n 'description': 'Provides support for 3rd party protocol plug-ins for Internet Connection Sharing',\n 'display_name': 'Application Layer Gateway Service',\n 'name': 'alg',\n 'pid': None,\n 'start_type': 'manual',\n 'status': 'stopped',\n 'username': 'NT AUTHORITY\\\\LocalService'}\n\nProjects using psutil\n=====================\n\nHere's some I find particularly interesting:\n\n- https://github.com/giampaolo/psleak\n- https://github.com/google/grr\n- https://github.com/facebook/osquery/\n- https://github.com/nicolargo/glances\n- https://github.com/aristocratos/bpytop\n- https://github.com/Jahaja/psdash\n- https://github.com/ajenti/ajenti\n- https://github.com/home-assistant/home-assistant/\n\nPortings\n========\n\n- Go: https://github.com/shirou/gopsutil\n- C: https://github.com/hamon-in/cpslib\n- Rust: https://github.com/rust-psutil/rust-psutil\n- Nim: https://github.com/johnscillieri/psutil-nim\n\n\n\n", + "description_content_type": "text/x-rst", + "keywords": [ + "ps", + "top", + "kill", + "free", + "lsof", + "netstat", + "nice", + "tty", + "ionice", + "uptime", + "taskmgr", + "process", + "df", + "iotop", + "iostat", + "ifconfig", + "taskset", + "who", + "pidof", + "pmap", + "smem", + "pstree", + "monitoring", + "ulimit", + "prlimit", + "smem", + "performance", + "metrics", + "agent", + "observability" + ], + "home_page": "https://github.com/giampaolo/psutil", + "author": "Giampaolo Rodola", + "author_email": "g.rodola@gmail.com", + "license": "BSD-3-Clause", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Environment :: Console", + "Intended Audience :: Developers", + "Intended Audience :: Information Technology", + "Intended Audience :: System Administrators", + "Operating System :: MacOS :: MacOS X", + "Operating System :: Microsoft :: Windows :: Windows 10", + "Operating System :: Microsoft :: Windows :: Windows 11", + "Operating System :: Microsoft :: Windows :: Windows 7", + "Operating System :: Microsoft :: Windows :: Windows 8", + "Operating System :: Microsoft :: Windows :: Windows 8.1", + "Operating System :: Microsoft :: Windows :: Windows Server 2003", + "Operating System :: Microsoft :: Windows :: Windows Server 2008", + "Operating System :: Microsoft :: Windows :: Windows Vista", + "Operating System :: Microsoft :: Windows", + "Operating System :: Microsoft", + "Operating System :: OS Independent", + "Operating System :: POSIX :: AIX", + "Operating System :: POSIX :: BSD :: FreeBSD", + "Operating System :: POSIX :: BSD :: NetBSD", + "Operating System :: POSIX :: BSD :: OpenBSD", + "Operating System :: POSIX :: BSD", + "Operating System :: POSIX :: Linux", + "Operating System :: POSIX :: SunOS/Solaris", + "Operating System :: POSIX", + "Programming Language :: C", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Programming Language :: Python", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Software Development :: Libraries", + "Topic :: System :: Benchmark", + "Topic :: System :: Hardware", + "Topic :: System :: Monitoring", + "Topic :: System :: Networking :: Monitoring :: Hardware Watchdog", + "Topic :: System :: Networking :: Monitoring", + "Topic :: System :: Networking", + "Topic :: System :: Operating System", + "Topic :: System :: Systems Administration", + "Topic :: Utilities" + ], + "requires_dist": [ + "psleak ; extra == 'dev'", + "pytest ; extra == 'dev'", + "pytest-instafail ; extra == 'dev'", + "pytest-xdist ; extra == 'dev'", + "setuptools ; extra == 'dev'", + "abi3audit ; extra == 'dev'", + "black ; extra == 'dev'", + "check-manifest ; extra == 'dev'", + "coverage ; extra == 'dev'", + "packaging ; extra == 'dev'", + "pylint ; extra == 'dev'", + "pyperf ; extra == 'dev'", + "pypinfo ; extra == 'dev'", + "pytest-cov ; extra == 'dev'", + "requests ; extra == 'dev'", + "rstcheck ; extra == 'dev'", + "ruff ; extra == 'dev'", + "sphinx ; extra == 'dev'", + "sphinx-rtd-theme ; extra == 'dev'", + "toml-sort ; extra == 'dev'", + "twine ; extra == 'dev'", + "validate-pyproject[all] ; extra == 'dev'", + "virtualenv ; extra == 'dev'", + "vulture ; extra == 'dev'", + "wheel ; extra == 'dev'", + "colorama ; (os_name == \"nt\") and extra == 'dev'", + "pyreadline3 ; (os_name == \"nt\") and extra == 'dev'", + "pywin32 ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'dev'", + "wheel ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'dev'", + "wmi ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'dev'", + "psleak ; extra == 'test'", + "pytest ; extra == 'test'", + "pytest-instafail ; extra == 'test'", + "pytest-xdist ; extra == 'test'", + "setuptools ; extra == 'test'", + "pywin32 ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'test'", + "wheel ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'test'", + "wmi ; (os_name == \"nt\" and implementation_name != \"pypy\") and extra == 'test'" + ], + "requires_python": ">=3.6", + "provides_extra": [ + "dev", + "test" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/f1/e0/492879f69d94f91f60fc8cd05ba03650e9520afebb2fb7aa12777d7c7f38/pillow-12.3.0-cp314-cp314-win_amd64.whl", + "archive_info": { + "hashes": { + "sha256": "fdafc9cce40277e0f7a0feabce0ee50dd2fa1800f3b38015e51296b5e814048d" + }, + "hash": "sha256=fdafc9cce40277e0f7a0feabce0ee50dd2fa1800f3b38015e51296b5e814048d" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.4", + "name": "pillow", + "version": "12.3.0", + "dynamic": [ + "license-file" + ], + "summary": "Python Imaging Library (fork)", + "description": "

\n \"Pillow\n

\n\n# Pillow\n\n## Python Imaging Library (Fork)\n\nPillow is the friendly PIL fork by [Jeffrey 'Alex' Clark and\ncontributors](https://github.com/python-pillow/Pillow/graphs/contributors).\nPIL is the Python Imaging Library by Fredrik Lundh and contributors.\nDevelopment is supported by:\n- [Tidelift](https://tidelift.com/subscription/pkg/pypi-pillow?utm_source=pypi-pillow&utm_medium=readme&utm_campaign=enterprise) (since 2018)\n- [Thanks.dev](https://thanks.dev) (since 2023)\n- [GitHub Sponsors](https://github.com/sponsors/python-pillow) (since 2026)\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
docs\n \n
tests\n \n \n \n \n \n \n \n \n
package\n \n \n \n \n \n
social\n \n \n
\n\n## Overview\n\nThe Python Imaging Library adds image processing capabilities to your Python interpreter.\n\nThis library provides extensive file format support, an efficient internal representation, and fairly powerful image processing capabilities.\n\nThe core image library is designed for fast access to data stored in a few basic pixel formats. It should provide a solid foundation for a general image processing tool.\n\n## More information\n\n- [Documentation](https://pillow.readthedocs.io/)\n - [Installation](https://pillow.readthedocs.io/en/latest/installation/basic-installation.html)\n - [Handbook](https://pillow.readthedocs.io/en/latest/handbook/index.html)\n- [Contribute](https://github.com/python-pillow/Pillow/blob/main/.github/CONTRIBUTING.md)\n - [Issues](https://github.com/python-pillow/Pillow/issues)\n - [Pull requests](https://github.com/python-pillow/Pillow/pulls)\n- [Release notes](https://pillow.readthedocs.io/en/stable/releasenotes/index.html)\n- [Changelog](https://github.com/python-pillow/Pillow/releases)\n - [Pre-fork](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst#pre-fork)\n\n## Report a vulnerability\n\nTo report sensitive vulnerability information, report it [privately on GitHub](https://github.com/python-pillow/Pillow/security/advisories/new).\n\nIf you cannot use GitHub, use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure.\n\nDO NOT report sensitive vulnerability information in public.\n", + "description_content_type": "text/markdown", + "keywords": [ + "Imaging" + ], + "author_email": "Jeffrey 'Alex' Clark ", + "license_expression": "MIT-CMU", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 6 - Mature", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Multimedia :: Graphics", + "Topic :: Multimedia :: Graphics :: Capture :: Digital Camera", + "Topic :: Multimedia :: Graphics :: Capture :: Screen Capture", + "Topic :: Multimedia :: Graphics :: Graphics Conversion", + "Topic :: Multimedia :: Graphics :: Viewers", + "Typing :: Typed" + ], + "requires_dist": [ + "furo; extra == \"docs\"", + "olefile; extra == \"docs\"", + "sphinx>=8.2; extra == \"docs\"", + "sphinx-autobuild; extra == \"docs\"", + "sphinx-copybutton; extra == \"docs\"", + "sphinx-inline-tabs; extra == \"docs\"", + "sphinxext-opengraph; extra == \"docs\"", + "olefile; extra == \"fpx\"", + "olefile; extra == \"mic\"", + "arro3-compute; extra == \"test-arrow\"", + "arro3-core; extra == \"test-arrow\"", + "nanoarrow; extra == \"test-arrow\"", + "pyarrow; extra == \"test-arrow\"", + "coverage>=7.4.2; extra == \"tests\"", + "defusedxml; extra == \"tests\"", + "markdown2; extra == \"tests\"", + "olefile; extra == \"tests\"", + "packaging; extra == \"tests\"", + "pytest; extra == \"tests\"", + "pytest-cov; extra == \"tests\"", + "pytest-timeout; extra == \"tests\"", + "pytest-xdist; extra == \"tests\"", + "setuptools; extra == \"tests\"", + "trove-classifiers>=2024.10.12; extra == \"tests\"", + "defusedxml; extra == \"xmp\"" + ], + "requires_python": ">=3.10", + "project_url": [ + "Release notes, https://pillow.readthedocs.io/en/stable/releasenotes/index.html", + "Changelog, https://github.com/python-pillow/Pillow/releases", + "Documentation, https://pillow.readthedocs.io", + "Funding, https://tidelift.com/subscription/pkg/pypi-pillow?utm_source=pypi-pillow&utm_medium=pypi", + "Homepage, https://python-pillow.github.io", + "Mastodon, https://fosstodon.org/@pillow", + "Source, https://github.com/python-pillow/Pillow" + ], + "provides_extra": [ + "docs", + "fpx", + "mic", + "test-arrow", + "tests", + "xmp" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/1b/6d/3fba214c1e5e0f69991677ec3bc17023f0421776975e1de0c682dca475e2/safetensors-0.8.0-cp310-abi3-win_amd64.whl", + "archive_info": { + "hashes": { + "sha256": "096ec1a98435df7beb08853bb5aa9081a84f23d0adc67ed1a0a10550f608373f" + }, + "hash": "sha256=096ec1a98435df7beb08853bb5aa9081a84f23d0adc67ed1a0a10550f608373f" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.4", + "name": "safetensors", + "version": "0.8.0", + "description": "## Installation\n\n```\npip install safetensors\n```\n\n\n## Usage\n\n### Numpy\n\n```python\nfrom safetensors.numpy import save_file, load_file\nimport numpy as np\n\ntensors = {\n \"a\": np.zeros((2, 2)),\n \"b\": np.zeros((2, 3), dtype=np.uint8)\n}\n\nsave_file(tensors, \"./model.safetensors\")\n\n\n# Now loading\nloaded = load_file(\"./model.safetensors\")\n```\n\n### Torch\n\n```python\nfrom safetensors.torch import save_file, load_file\nimport torch\n\ntensors = {\n \"a\": torch.zeros((2, 2)),\n \"b\": torch.zeros((2, 3), dtype=torch.uint8)\n}\n\nsave_file(tensors, \"./model.safetensors\")\n\n\n# Now loading\nloaded = load_file(\"./model.safetensors\")\n```\n\n### Developing\n\n```\n# inside ./safetensors/bindings/python\npip install .[dev]\n```\nShould be enough to install this library locally.\n\n### Testing\n\n```\n# inside ./safetensors/bindings/python\npip install .[dev]\npytest -sv tests/\n```\n\n", + "description_content_type": "text/markdown; charset=UTF-8; variant=GFM", + "author_email": "Nicolas Patry , Luc Georges , Daniël De Kok ", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Intended Audience :: Education", + "Intended Audience :: Science/Research", + "License :: OSI Approved :: Apache Software License", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Topic :: Scientific/Engineering :: Artificial Intelligence", + "Typing :: Typed" + ], + "requires_dist": [ + "safetensors[torch] ; extra == 'all'", + "safetensors[numpy] ; extra == 'all'", + "safetensors[jax] ; extra == 'all'", + "safetensors[paddlepaddle] ; extra == 'all'", + "safetensors[convert] ; extra == 'all'", + "safetensors[quality] ; extra == 'all'", + "safetensors[testing] ; extra == 'all'", + "safetensors[torch] ; extra == 'convert'", + "huggingface-hub>=1.4 ; extra == 'convert'", + "safetensors[all] ; extra == 'dev'", + "safetensors[pinned-tf] ; extra == 'dev'", + "safetensors[numpy] ; extra == 'jax'", + "flax>=0.6.3 ; extra == 'jax'", + "jax>=0.3.25 ; extra == 'jax'", + "jaxlib>=0.3.25 ; extra == 'jax'", + "mlx>=0.0.9 ; extra == 'mlx'", + "numpy>=1.24.6 ; extra == 'numpy'", + "safetensors[numpy] ; extra == 'paddlepaddle'", + "paddlepaddle>=2.4.1 ; extra == 'paddlepaddle'", + "safetensors[numpy] ; extra == 'pinned-tf'", + "tensorflow==2.18.0 ; extra == 'pinned-tf'", + "ruff ; extra == 'quality'", + "safetensors[numpy] ; extra == 'tensorflow'", + "tensorflow>=2.11.0 ; extra == 'tensorflow'", + "safetensors[numpy] ; extra == 'testing'", + "h5py>=3.7.0 ; extra == 'testing'", + "setuptools-rust>=1.12.0 ; extra == 'testing'", + "pytest>=9.0 ; extra == 'testing'", + "pytest-benchmark>=5.2 ; extra == 'testing'", + "hypothesis>=6.70.2 ; extra == 'testing'", + "fsspec>=2024.6.0 ; extra == 'testing'", + "s3fs>=2024.6.0 ; extra == 'testing'", + "safetensors[numpy] ; extra == 'tf-nightly'", + "tf-nightly ; extra == 'tf-nightly'", + "safetensors[numpy] ; extra == 'torch'", + "torch>=2.4 ; extra == 'torch'" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://github.com/huggingface/safetensors", + "Source, https://github.com/huggingface/safetensors" + ], + "provides_extra": [ + "all", + "convert", + "dev", + "jax", + "mlx", + "numpy", + "paddlepaddle", + "pinned-tf", + "quality", + "tensorflow", + "testing", + "tf-nightly", + "torch" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101" + }, + "hash": "sha256=117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "annotated-doc", + "version": "0.0.5", + "summary": "Document parameters, class attributes, return types, and variables inline, with Annotated.", + "description": "# Annotated Doc\n\nDocument parameters, class attributes, return types, and variables inline, with `Annotated`.\n\n\n \"Test\"\n\n\n \"Coverage\"\n\n\n \"Package\n\n\n \"Supported\n\n\n## Installation\n\n```bash\npip install annotated-doc\n```\n\nOr with `uv`:\n\n```Python\nuv add annotated-doc\n```\n\n## Usage\n\nImport `Doc` and pass a single literal string with the documentation for the specific parameter, class attribute, return type, or variable.\n\nFor example, to document a parameter `name` in a function `hi` you could do:\n\n```Python\nfrom typing import Annotated\n\nfrom annotated_doc import Doc\n\ndef hi(name: Annotated[str, Doc(\"Who to say hi to\")]) -> None:\n print(f\"Hi, {name}!\")\n```\n\nYou can also use it to document class attributes:\n\n```Python\nfrom typing import Annotated\n\nfrom annotated_doc import Doc\n\nclass User:\n name: Annotated[str, Doc(\"The user's name\")]\n age: Annotated[int, Doc(\"The user's age\")]\n```\n\nThe same way, you could document return types and variables, or anything that could have a type annotation with `Annotated`.\n\n## Who Uses This\n\n`annotated-doc` was made for:\n\n* [FastAPI](https://fastapi.tiangolo.com/)\n* [Typer](https://typer.tiangolo.com/)\n* [SQLModel](https://sqlmodel.tiangolo.com/)\n* [Asyncer](https://asyncer.tiangolo.com/)\n\n`annotated-doc` is supported by [griffe-typingdoc](https://github.com/mkdocstrings/griffe-typingdoc), which powers reference documentation like the one in the [FastAPI Reference](https://fastapi.tiangolo.com/reference/).\n\n## Reasons not to use `annotated-doc`\n\nYou are already comfortable with one of the existing docstring formats, like:\n\n* Sphinx\n* numpydoc\n* Google\n* Keras\n\nYour team is already comfortable using them.\n\nYou prefer having the documentation about parameters all together in a docstring, separated from the code defining them.\n\nYou care about a specific set of users, using one specific editor, and that editor already has support for the specific docstring format you use.\n\n## Reasons to use `annotated-doc`\n\n* No micro-syntax to learn for newcomers, it’s **just Python** syntax.\n* **Editing** would be already fully supported by default by any editor (current or future) supporting Python syntax, including syntax errors, syntax highlighting, etc.\n* **Rendering** would be relatively straightforward to implement by static tools (tools that don't need runtime execution), as the information can be extracted from the AST they normally already create.\n* **Deduplication of information**: the name of a parameter would be defined in a single place, not duplicated inside of a docstring.\n* **Elimination** of the possibility of having **inconsistencies** when removing a parameter or class variable and **forgetting to remove** its documentation.\n* **Minimization** of the probability of adding a new parameter or class variable and **forgetting to add its documentation**.\n* **Elimination** of the possibility of having **inconsistencies** between the **name** of a parameter in the **signature** and the name in the docstring when it is renamed.\n* **Access** to the documentation string for each symbol at **runtime**, including existing (older) Python versions.\n* A more formalized way to document other symbols, like type aliases, that could use Annotated.\n* **Support** for apps using FastAPI, Typer and others.\n* **AI Accessibility**: AI tools will have an easier way understanding each parameter as the distance from documentation to parameter is much closer.\n\n## History\n\nI ([@tiangolo](https://github.com/tiangolo)) originally wanted for this to be part of the Python standard library (in [PEP 727](https://peps.python.org/pep-0727/)), but the proposal was withdrawn as there was a fair amount of negative feedback and opposition.\n\nThe conclusion was that this was better done as an external effort, in a third-party library.\n\nSo, here it is, with a simpler approach, as a third-party library, in a way that can be used by others, starting with FastAPI and friends.\n\n## License\n\nThis project is licensed under the terms of the MIT license.\n", + "description_content_type": "text/markdown", + "author_email": "=?utf-8?q?Sebasti=C3=A1n_Ram=C3=ADrez?= ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Intended Audience :: Information Technology", + "Intended Audience :: System Administrators", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python", + "Topic :: Internet", + "Topic :: Software Development :: Libraries :: Application Frameworks", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Software Development :: Libraries", + "Topic :: Software Development", + "Typing :: Typed", + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14" + ], + "requires_python": ">=3.9", + "project_url": [ + "Homepage, https://github.com/fastapi/annotated-doc", + "Documentation, https://github.com/fastapi/annotated-doc", + "Repository, https://github.com/fastapi/annotated-doc", + "Issues, https://github.com/fastapi/annotated-doc/issues", + "Changelog, https://github.com/fastapi/annotated-doc/release-notes.md" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360" + }, + "hash": "sha256=255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "click", + "version": "8.5.0", + "summary": "Composable command line interface toolkit", + "description": "
\"\"
\n\n# Click\n\nClick is a Python package for creating beautiful command line interfaces\nin a composable way with as little code as necessary. It's the \"Command\nLine Interface Creation Kit\". It's highly configurable but comes with\nsensible defaults out of the box.\n\nIt aims to make the process of writing command line tools quick and fun\nwhile also preventing any frustration caused by the inability to\nimplement an intended CLI API.\n\nClick in three points:\n\n- Arbitrary nesting of commands\n- Automatic help page generation\n- Supports lazy loading of subcommands at runtime\n\n\n## A Simple Example\n\n```python\nimport click\n\n@click.command()\n@click.option(\"--count\", default=1, help=\"Number of greetings.\")\n@click.option(\"--name\", prompt=\"Your name\", help=\"The person to greet.\")\ndef hello(count, name):\n \"\"\"Simple program that greets NAME for a total of COUNT times.\"\"\"\n for _ in range(count):\n click.echo(f\"Hello, {name}!\")\n\nif __name__ == '__main__':\n hello()\n```\n\n```\n$ python hello.py --count=3\nYour name: Click\nHello, Click!\nHello, Click!\nHello, Click!\n```\n\n\n## Donate\n\nThe Pallets organization develops and supports Click and other popular\npackages. In order to grow the community of contributors and users, and\nallow the maintainers to devote more time to the projects, [please\ndonate today][].\n\n[please donate today]: https://palletsprojects.com/donate\n\n## Contributing\n\nSee our [detailed contributing documentation][contrib] for many ways to\ncontribute, including reporting issues, requesting features, asking or answering\nquestions, and making PRs.\n\n[contrib]: https://palletsprojects.com/contributing/\n\n", + "description_content_type": "text/markdown", + "maintainer_email": "Pallets ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.txt" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Typing :: Typed" + ], + "requires_python": ">=3.10", + "project_url": [ + "Changes, https://click.palletsprojects.com/page/changes/", + "Chat, https://discord.gg/pallets", + "Documentation, https://click.palletsprojects.com/", + "Donate, https://palletsprojects.com/donate", + "Source, https://github.com/pallets/click/" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/6c/c0/a98505f18594f1bce828bb159cec0fcf9860562f1a2c85913409fc8f3d9e/fsspec-2026.9.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f" + }, + "hash": "sha256=8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "fsspec", + "version": "2026.9.0", + "summary": "File-system specification", + "description": "# filesystem_spec\n\n[![PyPI version](https://badge.fury.io/py/fsspec.svg)](https://pypi.python.org/pypi/fsspec/)\n[![Anaconda-Server Badge](https://anaconda.org/conda-forge/fsspec/badges/version.svg)](https://anaconda.org/conda-forge/fsspec)\n![Build](https://github.com/fsspec/filesystem_spec/workflows/CI/badge.svg)\n[![Docs](https://readthedocs.org/projects/filesystem-spec/badge/?version=latest)](https://filesystem-spec.readthedocs.io/en/latest/?badge=latest)\n\nA specification for pythonic filesystems.\n\n## Install\n\n```bash\npip install fsspec\n```\n\nwould install the base fsspec. Various optionally supported features might require specification of custom\nextra require, e.g. `pip install fsspec[ssh]` will install dependencies for `ssh` backends support.\nUse `pip install fsspec[full]` for installation of all known extra dependencies.\n\nUp-to-date package also provided through conda-forge distribution:\n\n```bash\nconda install -c conda-forge fsspec\n```\n\n\n## Purpose\n\nTo produce a template or specification for a file-system interface, that specific implementations should follow,\nso that applications making use of them can rely on a common behaviour and not have to worry about the specific\ninternal implementation decisions with any given backend. Many such implementations are included in this package,\nor in sister projects such as `s3fs` and `gcsfs`.\n\nIn addition, if this is well-designed, then additional functionality, such as a key-value store or FUSE\nmounting of the file-system implementation may be available for all implementations \"for free\".\n\n## Documentation\n\nPlease refer to [RTD](https://filesystem-spec.readthedocs.io/en/latest/?badge=latest)\n\n## Develop\n\nfsspec uses GitHub Actions for CI. Environment files can be found\nin the \"ci/\" directory. Note that the main environment is called \"py38\",\nbut it is expected that the version of python installed be adjustable at\nCI runtime. For local use, pick a version suitable for you.\n\n```bash\n# For a new environment (mamba / conda).\nmamba create -n fsspec -c conda-forge python=3.10 -y\nconda activate fsspec\n\n# Standard dev install with docs and tests.\npip install -e \".[dev,doc,test]\"\n\n# Full tests except for downstream\npip install s3fs\npip uninstall s3fs\npip install -e .[dev,doc,test_full]\npip install s3fs --no-deps\npytest -v\n\n# Downstream tests.\nsh install_s3fs.sh\n# Windows powershell.\ninstall_s3fs.sh\n```\n\n### Testing\n\nTests can be run in the dev environment, if activated, via ``pytest fsspec``.\n\nThe full fsspec suite requires a system-level docker, docker-compose, and fuse\ninstallation. If only making changes to one backend implementation, it is\nnot generally necessary to run all tests locally.\n\nIt is expected that contributors ensure that any change to fsspec does not\ncause issues or regressions for either other fsspec-related packages such\nas gcsfs and s3fs, nor for downstream users of fsspec. The \"downstream\" CI\nrun and corresponding environment file run a set of tests from the dask\ntest suite, and very minimal tests against pandas and zarr from the\ntest_downstream.py module in this repo.\n\n### Code Formatting\n\nfsspec uses [Black](https://black.readthedocs.io/en/stable) to ensure\na consistent code format throughout the project.\nRun ``black fsspec`` from the root of the filesystem_spec repository to\nauto-format your code. Additionally, many editors have plugins that will apply\n``black`` as you edit files. ``black`` is included in the ``tox`` environments.\n\nOptionally, you may wish to setup [pre-commit hooks](https://pre-commit.com) to\nautomatically run ``black`` when you make a git commit.\nRun ``pre-commit install --install-hooks`` from the root of the\nfilesystem_spec repository to setup pre-commit hooks. ``black`` will now be run\nbefore you commit, reformatting any changed files. You can format without\ncommitting via ``pre-commit run`` or skip these checks with ``git commit\n--no-verify``.\n\n## Support\n\nWork on this repository is supported in part by:\n\n\"Anaconda, Inc. - Advancing AI through open source.\"\n\n\"anaconda\n", + "description_content_type": "text/markdown", + "keywords": [ + "file" + ], + "maintainer_email": "Martin Durant ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14" + ], + "requires_dist": [ + "adlfs; extra == 'abfs'", + "adlfs; extra == 'adl'", + "pyarrow>=1; extra == 'arrow'", + "dask; extra == 'dask'", + "distributed; extra == 'dask'", + "pre-commit; extra == 'dev'", + "ruff>=0.5; extra == 'dev'", + "numpydoc; extra == 'doc'", + "sphinx; extra == 'doc'", + "sphinx-design; extra == 'doc'", + "sphinx-rtd-theme; extra == 'doc'", + "yarl; extra == 'doc'", + "dropbox; extra == 'dropbox'", + "dropboxdrivefs; extra == 'dropbox'", + "requests; extra == 'dropbox'", + "adlfs; extra == 'full'", + "aiohttp!=4.0.0a0,!=4.0.0a1; extra == 'full'", + "dask; extra == 'full'", + "distributed; extra == 'full'", + "dropbox; extra == 'full'", + "dropboxdrivefs; extra == 'full'", + "fusepy; extra == 'full'", + "gcsfs>=2026.4.0; extra == 'full'", + "libarchive-c; extra == 'full'", + "ocifs; extra == 'full'", + "panel; extra == 'full'", + "paramiko; extra == 'full'", + "pyarrow>=1; extra == 'full'", + "pygit2; extra == 'full'", + "requests; extra == 'full'", + "s3fs>=2026.6.0; extra == 'full'", + "smbprotocol; extra == 'full'", + "tqdm; extra == 'full'", + "fusepy; extra == 'fuse'", + "gcsfs>=2026.4.0; extra == 'gcs'", + "pygit2; extra == 'git'", + "requests; extra == 'github'", + "gcsfs>=2026.4.0; extra == 'gs'", + "panel; extra == 'gui'", + "pyarrow>=1; extra == 'hdfs'", + "aiohttp!=4.0.0a0,!=4.0.0a1; extra == 'http'", + "libarchive-c; extra == 'libarchive'", + "ocifs; extra == 'oci'", + "s3fs>=2026.6.0; extra == 's3'", + "paramiko; extra == 'sftp'", + "smbprotocol; extra == 'smb'", + "paramiko; extra == 'ssh'", + "aiohttp!=4.0.0a0,!=4.0.0a1; extra == 'test'", + "numpy; extra == 'test'", + "pytest; extra == 'test'", + "pytest-asyncio!=0.22.0; extra == 'test'", + "pytest-benchmark; extra == 'test'", + "pytest-cov; extra == 'test'", + "pytest-mock; extra == 'test'", + "pytest-recording; extra == 'test'", + "pytest-rerunfailures; extra == 'test'", + "requests; extra == 'test'", + "aiobotocore<3.0.0,>=2.5.4; extra == 'test-downstream'", + "dask[dataframe,test]; extra == 'test-downstream'", + "moto[server]<5,>4; extra == 'test-downstream'", + "pytest-timeout; extra == 'test-downstream'", + "xarray; extra == 'test-downstream'", + "zarr; extra == 'test-downstream'", + "adlfs; extra == 'test-full'", + "aiohttp!=4.0.0a0,!=4.0.0a1; extra == 'test-full'", + "backports-zstd; (python_version < '3.14') and extra == 'test-full'", + "cloudpickle; extra == 'test-full'", + "dask; extra == 'test-full'", + "distributed; extra == 'test-full'", + "dropbox; extra == 'test-full'", + "dropboxdrivefs; extra == 'test-full'", + "fastparquet; extra == 'test-full'", + "fusepy; extra == 'test-full'", + "gcsfs>=2026.4.0; extra == 'test-full'", + "jinja2; extra == 'test-full'", + "kerchunk; extra == 'test-full'", + "libarchive-c; extra == 'test-full'", + "lz4; extra == 'test-full'", + "notebook; extra == 'test-full'", + "numpy; extra == 'test-full'", + "ocifs; extra == 'test-full'", + "pandas<3.0.0; extra == 'test-full'", + "panel; extra == 'test-full'", + "paramiko; extra == 'test-full'", + "pyarrow>=1; extra == 'test-full'", + "pyftpdlib; extra == 'test-full'", + "pygit2; extra == 'test-full'", + "pytest; extra == 'test-full'", + "pytest-asyncio!=0.22.0; extra == 'test-full'", + "pytest-benchmark; extra == 'test-full'", + "pytest-cov; extra == 'test-full'", + "pytest-mock; extra == 'test-full'", + "pytest-recording; extra == 'test-full'", + "pytest-rerunfailures; extra == 'test-full'", + "python-snappy; extra == 'test-full'", + "requests; extra == 'test-full'", + "s3fs>=2026.6.0; extra == 'test-full'", + "smbprotocol; extra == 'test-full'", + "tqdm; extra == 'test-full'", + "urllib3; extra == 'test-full'", + "zarr<3.2.0; extra == 'test-full'", + "zstandard; (python_version < '3.14') and extra == 'test-full'", + "tqdm; extra == 'tqdm'" + ], + "requires_python": ">=3.10", + "project_url": [ + "Changelog, https://filesystem-spec.readthedocs.io/en/latest/changelog.html", + "Documentation, https://filesystem-spec.readthedocs.io/en/latest/", + "Homepage, https://github.com/fsspec/filesystem_spec" + ], + "provides_extra": [ + "abfs", + "adl", + "arrow", + "dask", + "dev", + "doc", + "dropbox", + "entrypoints", + "full", + "fuse", + "gcs", + "git", + "github", + "gs", + "gui", + "hdfs", + "http", + "libarchive", + "oci", + "s3", + "sftp", + "smb", + "ssh", + "test", + "test-downstream", + "test-full", + "tqdm" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86" + }, + "hash": "sha256=63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "h11", + "version": "0.16.0", + "dynamic": [ + "author", + "author-email", + "classifier", + "description", + "home-page", + "license", + "license-file", + "requires-python", + "summary" + ], + "summary": "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1", + "description": "h11\n===\n\n.. image:: https://travis-ci.org/python-hyper/h11.svg?branch=master\n :target: https://travis-ci.org/python-hyper/h11\n :alt: Automated test status\n\n.. image:: https://codecov.io/gh/python-hyper/h11/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/python-hyper/h11\n :alt: Test coverage\n\n.. image:: https://readthedocs.org/projects/h11/badge/?version=latest\n :target: http://h11.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation Status\n\nThis is a little HTTP/1.1 library written from scratch in Python,\nheavily inspired by `hyper-h2 `_.\n\nIt's a \"bring-your-own-I/O\" library; h11 contains no IO code\nwhatsoever. This means you can hook h11 up to your favorite network\nAPI, and that could be anything you want: synchronous, threaded,\nasynchronous, or your own implementation of `RFC 6214\n`_ -- h11 won't judge you.\n(Compare this to the current state of the art, where every time a `new\nnetwork API `_ comes along then someone\ngets to start over reimplementing the entire HTTP protocol from\nscratch.) Cory Benfield made an `excellent blog post describing the\nbenefits of this approach\n`_, or if you like video\nthen here's his `PyCon 2016 talk on the same theme\n`_.\n\nThis also means that h11 is not immediately useful out of the box:\nit's a toolkit for building programs that speak HTTP, not something\nthat could directly replace ``requests`` or ``twisted.web`` or\nwhatever. But h11 makes it much easier to implement something like\n``requests`` or ``twisted.web``.\n\nAt a high level, working with h11 goes like this:\n\n1) First, create an ``h11.Connection`` object to track the state of a\n single HTTP/1.1 connection.\n\n2) When you read data off the network, pass it to\n ``conn.receive_data(...)``; you'll get back a list of objects\n representing high-level HTTP \"events\".\n\n3) When you want to send a high-level HTTP event, create the\n corresponding \"event\" object and pass it to ``conn.send(...)``;\n this will give you back some bytes that you can then push out\n through the network.\n\nFor example, a client might instantiate and then send a\n``h11.Request`` object, then zero or more ``h11.Data`` objects for the\nrequest body (e.g., if this is a POST), and then a\n``h11.EndOfMessage`` to indicate the end of the message. Then the\nserver would then send back a ``h11.Response``, some ``h11.Data``, and\nits own ``h11.EndOfMessage``. If either side violates the protocol,\nyou'll get a ``h11.ProtocolError`` exception.\n\nh11 is suitable for implementing both servers and clients, and has a\npleasantly symmetric API: the events you send as a client are exactly\nthe ones that you receive as a server and vice-versa.\n\n`Here's an example of a tiny HTTP client\n`_\n\nIt also has `a fine manual `_.\n\nFAQ\n---\n\n*Whyyyyy?*\n\nI wanted to play with HTTP in `Curio\n`__ and `Trio\n`__, which at the time didn't have any\nHTTP libraries. So I thought, no big deal, Python has, like, a dozen\ndifferent implementations of HTTP, surely I can find one that's\nreusable. I didn't find one, but I did find Cory's call-to-arms\nblog-post. So I figured, well, fine, if I have to implement HTTP from\nscratch, at least I can make sure no-one *else* has to ever again.\n\n*Should I use it?*\n\nMaybe. You should be aware that it's a very young project. But, it's\nfeature complete and has an exhaustive test-suite and complete docs,\nso the next step is for people to try using it and see how it goes\n:-). If you do then please let us know -- if nothing else we'll want\nto talk to you before making any incompatible changes!\n\n*What are the features/limitations?*\n\nRoughly speaking, it's trying to be a robust, complete, and non-hacky\nimplementation of the first \"chapter\" of the HTTP/1.1 spec: `RFC 7230:\nHTTP/1.1 Message Syntax and Routing\n`_. That is, it mostly focuses on\nimplementing HTTP at the level of taking bytes on and off the wire,\nand the headers related to that, and tries to be anal about spec\nconformance. It doesn't know about higher-level concerns like URL\nrouting, conditional GETs, cross-origin cookie policies, or content\nnegotiation. But it does know how to take care of framing,\ncross-version differences in keep-alive handling, and the \"obsolete\nline folding\" rule, so you can focus your energies on the hard /\ninteresting parts for your application, and it tries to support the\nfull specification in the sense that any useful HTTP/1.1 conformant\napplication should be able to use h11.\n\nIt's pure Python, and has no dependencies outside of the standard\nlibrary.\n\nIt has a test suite with 100.0% coverage for both statements and\nbranches.\n\nCurrently it supports Python 3 (testing on 3.8-3.12) and PyPy 3.\nThe last Python 2-compatible version was h11 0.11.x.\n(Originally it had a Cython wrapper for `http-parser\n`_ and a beautiful nested state\nmachine implemented with ``yield from`` to postprocess the output. But\nI had to take these out -- the new *parser* needs fewer lines-of-code\nthan the old *parser wrapper*, is written in pure Python, uses no\nexotic language syntax, and has more features. It's sad, really; that\nold state machine was really slick. I just need a few sentences here\nto mourn that.)\n\nI don't know how fast it is. I haven't benchmarked or profiled it yet,\nso it's probably got a few pointless hot spots, and I've been trying\nto err on the side of simplicity and robustness instead of\nmicro-optimization. But at the architectural level I tried hard to\navoid fundamentally bad decisions, e.g., I believe that all the\nparsing algorithms remain linear-time even in the face of pathological\ninput like slowloris, and there are no byte-by-byte loops. (I also\nbelieve that it maintains bounded memory usage in the face of\narbitrary/pathological input.)\n\nThe whole library is ~800 lines-of-code. You can read and understand\nthe whole thing in less than an hour. Most of the energy invested in\nthis so far has been spent on trying to keep things simple by\nminimizing special-cases and ad hoc state manipulation; even though it\nis now quite small and simple, I'm still annoyed that I haven't\nfigured out how to make it even smaller and simpler. (Unfortunately,\nHTTP does not lend itself to simplicity.)\n\nThe API is ~feature complete and I don't expect the general outlines\nto change much, but you can't judge an API's ergonomics until you\nactually document and use it, so I'd expect some changes in the\ndetails.\n\n*How do I try it?*\n\n.. code-block:: sh\n\n $ pip install h11\n $ git clone git@github.com:python-hyper/h11\n $ cd h11/examples\n $ python basic-client.py\n\nand go from there.\n\n*License?*\n\nMIT\n\n*Code of conduct?*\n\nContributors are requested to follow our `code of conduct\n`_ in\nall project spaces.\n", + "home_page": "https://github.com/python-hyper/h11", + "author": "Nathaniel J. Smith", + "author_email": "njs@pobox.com", + "license": "MIT", + "license_file": [ + "LICENSE.txt" + ], + "classifier": [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Topic :: Internet :: WWW/HTTP", + "Topic :: System :: Networking" + ], + "requires_python": ">=3.8" + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0" + }, + "hash": "sha256=e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "networkx", + "version": "3.7", + "dynamic": [ + "license-file" + ], + "platform": [ + "Linux", + "Mac OSX", + "Windows", + "Unix" + ], + "summary": "Python package for creating and manipulating graphs and networks", + "description": "NetworkX\n========\n\n\n.. image::\n https://github.com/networkx/networkx/actions/workflows/test.yml/badge.svg?branch=main\n :target: https://github.com/networkx/networkx/actions/workflows/test.yml\n\n.. image::\n https://img.shields.io/pypi/v/networkx.svg?\n :target: https://pypi.python.org/pypi/networkx\n\n.. image::\n https://img.shields.io/pypi/l/networkx.svg?\n :target: https://github.com/networkx/networkx/blob/main/LICENSE.txt\n\n.. image::\n https://img.shields.io/pypi/pyversions/networkx.svg?\n :target: https://pypi.python.org/pypi/networkx\n\n.. image::\n https://insights.linuxfoundation.org/api/badge/health-score?project=networkx\n :target: https://insights.linuxfoundation.org/project/networkx\n\n\nNetworkX is a Python package for the creation, manipulation,\nand study of the structure, dynamics, and functions\nof complex networks.\n\n- **Website (including documentation):** https://networkx.org\n- **Mailing list:** https://groups.google.com/forum/#!forum/networkx-discuss\n- **Source:** https://github.com/networkx/networkx\n- **Bug reports:** https://github.com/networkx/networkx/issues\n- **Report a security vulnerability:** https://tidelift.com/security\n- **Tutorial:** https://networkx.org/documentation/latest/tutorial.html\n- **GitHub Discussions:** https://github.com/networkx/networkx/discussions\n- **Discord (Scientific Python) invite link:** https://discord.com/invite/vur45CbwMz\n- **NetworkX meetings calendar (open to all):** https://scientific-python.org/calendars/networkx.ics\n\nSimple example\n--------------\n\nFind the shortest path between two nodes in an undirected graph:\n\n.. code:: pycon\n\n >>> import networkx as nx\n >>> G = nx.Graph()\n >>> G.add_edge(\"A\", \"B\", weight=4)\n >>> G.add_edge(\"B\", \"D\", weight=2)\n >>> G.add_edge(\"A\", \"C\", weight=3)\n >>> G.add_edge(\"C\", \"D\", weight=4)\n >>> nx.shortest_path(G, \"A\", \"D\", weight=\"weight\")\n ['A', 'B', 'D']\n\nInstall\n-------\n\nInstall the latest released version of NetworkX:\n\n.. code:: shell\n\n $ pip install networkx\n\nInstall with all optional dependencies:\n\n.. code:: shell\n\n $ pip install networkx[default]\n\nFor additional details,\nplease see the `installation guide `_.\n\nBugs\n----\n\nPlease report any bugs that you find `here `_.\nOr, even better, fork the repository on `GitHub `_\nand create a pull request (PR). We welcome all changes, big or small, and we\nwill help you make the PR if you are new to `git` (just ask on the issue and/or\nsee the `contributor guide `_).\n\nLicense\n-------\n\nReleased under the `3-clause BSD license `_::\n\n Copyright (c) 2004-2026, NetworkX Developers\n Aric Hagberg \n Dan Schult \n Pieter Swart \n", + "description_content_type": "text/x-rst", + "keywords": [ + "Networks", + "Graph Theory", + "Mathematics", + "network", + "graph", + "discrete mathematics", + "math" + ], + "author_email": "Aric Hagberg ", + "maintainer_email": "NetworkX Developers ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.txt" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Intended Audience :: Science/Research", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Programming Language :: Python :: 3 :: Only", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Scientific/Engineering :: Bio-Informatics", + "Topic :: Scientific/Engineering :: Information Analysis", + "Topic :: Scientific/Engineering :: Mathematics", + "Topic :: Scientific/Engineering :: Physics" + ], + "requires_dist": [ + "asv>=0.6.5; extra == \"benchmarking\"", + "py-rattler<0.22,>=0.21; extra == \"benchmarking\"", + "virtualenv; extra == \"benchmarking\"", + "numpy>=2.2; extra == \"default\"", + "scipy>=1.15; extra == \"default\"", + "matplotlib>=3.10; extra == \"default\"", + "pandas>=2.3; extra == \"default\"", + "pre-commit>=4.1; extra == \"developer\"", + "mypy>=1.15; extra == \"developer\"", + "sphinx>=8.0; extra == \"doc\"", + "pydata-sphinx-theme>=0.16; extra == \"doc\"", + "sphinx-gallery>=0.18; extra == \"doc\"", + "numpydoc>=1.8.0; extra == \"doc\"", + "pillow>=10; extra == \"doc\"", + "texext>=0.6.7; extra == \"doc\"", + "myst-nb>=1.1; extra == \"doc\"", + "intersphinx-registry; extra == \"doc\"", + "osmnx>=2.0.0; extra == \"example\"", + "momepy>=0.7.2; extra == \"example\"", + "contextily>=1.6; extra == \"example\"", + "seaborn>=0.13; extra == \"example\"", + "cairocffi>=1.7; extra == \"example\"", + "igraph>=0.11; extra == \"example\"", + "scikit-learn>=1.6; extra == \"example\"", + "iplotx>=0.9.0; extra == \"example\"", + "hiveplotlib>=0.28; extra == \"example\"", + "lxml>=4.6; extra == \"extra\"", + "pygraphviz>=2.0; extra == \"extra\"", + "pydot>=3.0.1; extra == \"extra\"", + "sympy>=1.10; extra == \"extra\"", + "build>=0.10; extra == \"release\"", + "twine>=4.0; extra == \"release\"", + "wheel>=0.40; extra == \"release\"", + "changelist==0.5; extra == \"release\"", + "pytest>=7.2; extra == \"test\"", + "pytest-cov>=4.0; extra == \"test\"", + "pytest-xdist>=3.0; extra == \"test\"", + "pytest-mpl; extra == \"test-extras\"", + "pytest-randomly; extra == \"test-extras\"" + ], + "requires_python": "!=3.14.1,>=3.12", + "project_url": [ + "Homepage, https://networkx.org/", + "Bug Tracker, https://github.com/networkx/networkx/issues", + "Documentation, https://networkx.org/documentation/stable/", + "Source Code, https://github.com/networkx/networkx" + ], + "provides_extra": [ + "benchmarking", + "default", + "developer", + "doc", + "example", + "extra", + "release", + "test", + "test-extras" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73" + }, + "hash": "sha256=346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "pydantic", + "version": "2.13.5", + "summary": "Data validation using Python type hints", + "description": "# Pydantic Validation\n\n[![CI](https://img.shields.io/github/actions/workflow/status/pydantic/pydantic/ci.yml?branch=main&logo=github&label=CI)](https://github.com/pydantic/pydantic/actions?query=event%3Apush+branch%3Amain+workflow%3ACI)\n[![Coverage](https://coverage-badge.samuelcolvin.workers.dev/pydantic/pydantic.svg)](https://coverage-badge.samuelcolvin.workers.dev/redirect/pydantic/pydantic)\n[![pypi](https://img.shields.io/pypi/v/pydantic.svg)](https://pypi.python.org/pypi/pydantic)\n[![CondaForge](https://img.shields.io/conda/v/conda-forge/pydantic.svg)](https://anaconda.org/conda-forge/pydantic)\n[![downloads](https://static.pepy.tech/badge/pydantic/month)](https://pepy.tech/project/pydantic)\n[![versions](https://img.shields.io/pypi/pyversions/pydantic.svg)](https://github.com/pydantic/pydantic)\n[![license](https://img.shields.io/github/license/pydantic/pydantic.svg)](https://github.com/pydantic/pydantic/blob/main/LICENSE)\n[![Pydantic v2](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/pydantic/pydantic/main/docs/badge/v2.json)](https://docs.pydantic.dev/latest/contributing/#badges)\n[![llms.txt](https://img.shields.io/badge/llms.txt-green)](https://docs.pydantic.dev/latest/llms.txt)\n\nData validation using Python type hints.\n\nFast and extensible, Pydantic plays nicely with your linters/IDE/brain.\nDefine how data should be in pure, canonical Python 3.9+; validate it with Pydantic.\n\n## Pydantic Logfire :fire:\n\nWe've launched Pydantic Logfire to help you monitor your applications.\n[Learn more](https://pydantic.dev/logfire/?utm_source=pydantic_validation)\n\n## Pydantic V1.10 vs. V2\n\nPydantic V2 is a ground-up rewrite that offers many new features, performance improvements, and some breaking changes compared to Pydantic V1.\n\nIf you're using Pydantic V1 you may want to look at the\n[pydantic V1.10 Documentation](https://docs.pydantic.dev/) or,\n[`1.10.X-fixes` git branch](https://github.com/pydantic/pydantic/tree/1.10.X-fixes). Pydantic V2 also ships with the latest version of Pydantic V1 built in so that you can incrementally upgrade your code base and projects: `from pydantic import v1 as pydantic_v1`.\n\n## Help\n\nSee [documentation](https://docs.pydantic.dev/) for more details.\n\n## Installation\n\nInstall using `pip install -U pydantic` or `conda install pydantic -c conda-forge`.\nFor more installation options to make Pydantic even faster,\nsee the [Install](https://docs.pydantic.dev/install/) section in the documentation.\n\n## A Simple Example\n\n```python\nfrom datetime import datetime\nfrom typing import Optional\nfrom pydantic import BaseModel\n\nclass User(BaseModel):\n id: int\n name: str = 'John Doe'\n signup_ts: Optional[datetime] = None\n friends: list[int] = []\n\nexternal_data = {'id': '123', 'signup_ts': '2017-06-01 12:22', 'friends': [1, '2', b'3']}\nuser = User(**external_data)\nprint(user)\n#> User id=123 name='John Doe' signup_ts=datetime.datetime(2017, 6, 1, 12, 22) friends=[1, 2, 3]\nprint(user.id)\n#> 123\n```\n\n## Contributing\n\nFor guidance on setting up a development environment and how to make a\ncontribution to Pydantic, see\n[Contributing to Pydantic](https://docs.pydantic.dev/contributing/).\n\n## Reporting a Security Vulnerability\n\nSee our [security policy](https://github.com/pydantic/pydantic/security/policy).\n\n## Changelog\n\n\n\n\n\n## v2.13.5 (2026-08-28)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.5)\n\n### What's Changed\n\n#### Fixes\n\n* Allow reuse of validators when plugins are set by [@Viicos](https://github.com/Viicos) in [#13535](https://github.com/pydantic/pydantic/pull/13535)\n* Fix missing GC traversal on some `pydantic-core` struct fields by [@Viicos](https://github.com/Viicos) in [#13624](https://github.com/pydantic/pydantic/pull/13624)\n* Fix missing GC traversal in `pydantic-core` for `GeneralFieldsSerializer` by [@Viicos](https://github.com/Viicos) in [#13629](https://github.com/pydantic/pydantic/pull/13629)\n* Count validated model fields once in smart unions by [@tamird](https://github.com/tamird) in [#13731](https://github.com/pydantic/pydantic/pull/13731)\n\n## v2.13.4 (2026-05-06)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.4)\n\n### What's Changed\n\n#### Packaging\n\n* Bump libc from 0.2.155 to 0.2.185 by [@Viicos](https://github.com/Viicos) in [#13109](https://github.com/pydantic/pydantic/pull/13109)\n* Adapt `pydantic-core` linker flags on macOS by [@washingtoneg](https://github.com/washingtoneg) and [@Viicos](https://github.com/Viicos) in [#13147](https://github.com/pydantic/pydantic/pull/13147)\n\n#### Fixes\n\n* Preserve `RootModel` core metadata by [@Viicos](https://github.com/Viicos) in [#13129](https://github.com/pydantic/pydantic/pull/13129)\n\n## v2.13.3 (2026-04-20)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.3)\n\n### What's Changed\n\n#### Fixes\n\n* Handle `AttributeError` subclasses with `from_attributes` by [@Viicos](https://github.com/Viicos) in [#13096](https://github.com/pydantic/pydantic/pull/13096)\n\n## v2.13.2 (2026-04-17)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.2)\n\n### What's Changed\n\n#### Fixes\n\n* Fix `ValidationInfo.field_name` missing with `model_validate_json()` by [@Viicos](https://github.com/Viicos) in [#13084](https://github.com/pydantic/pydantic/pull/13084)\n\n## v2.13.1 (2026-04-15)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.1)\n\n### What's Changed\n\n#### Fixes\n\n* Fix `ValidationInfo.data` missing with `model_validate_json()` by [@davidhewitt](https://github.com/davidhewitt) in [#13079](https://github.com/pydantic/pydantic/pull/13079)\n\n## v2.13.0 (2026-04-13)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.0)\n\nThe highlights of the v2.13 release are available in the [blog post](https://pydantic.dev/articles/pydantic-v2-13-release).\nSeveral minor changes (considered non-breaking changes according to our [versioning policy](https://pydantic.dev/docs/validation/2.13/get-started/version-policy/#pydantic-v2))\nare also included in this release. Make sure to look into them before upgrading.\n\nThis release contains the updated `pydantic.v1` namespace, matching version 1.10.26 which includes support for Python 3.14.\n\n### What's Changed\n\nSee the beta releases for all changes sinces 2.12.\n\n#### New Features\n\n* Allow default factories of private attributes to take validated model data by [@Viicos](https://github.com/Viicos) in [#13013](https://github.com/pydantic/pydantic/pull/13013)\n\n#### Changes\n\n* Warn when serializing fixed length tuples with too few items by [@arvindsaripalli](https://github.com/arvindsaripalli) in [#13016](https://github.com/pydantic/pydantic/pull/13016)\n\n#### Fixes\n\n* Change type of `Any` when synthesizing `_build_sources` for `BaseSettings.__init__()` signature in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#13049](https://github.com/pydantic/pydantic/pull/13049)\n* Fix model equality when using runtime `extra` configuration by [@Viicos](https://github.com/Viicos) in [#13062](https://github.com/pydantic/pydantic/pull/13062)\n\n#### Packaging\n\n* Add zizmor for GitHub Actions workflow linting by [@Viicos](https://github.com/Viicos) in [#13039](https://github.com/pydantic/pydantic/pull/13039)\n* Update jiter to v0.14.0 to fix a segmentation fault on musl Linux by [@Viicos](https://github.com/Viicos) in [#13064](https://github.com/pydantic/pydantic/pull/13064)\n\n### New Contributors\n\n* [@arvindsaripalli](https://github.com/arvindsaripalli) made their first contribution in [#13016](https://github.com/pydantic/pydantic/pull/13016)\n\n## v2.13.0b3 (2026-03-31)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.0b3)\n\n### What's Changed\n\n#### New Features\n\n* Add `ascii_only` option to `StringConstraints` by [@ai-man-codes](https://github.com/ai-man-codes) in [#12907](https://github.com/pydantic/pydantic/pull/12907)\n* Support `exclude_if` in computed fields by [@andresliszt](https://github.com/andresliszt) in [#12748](https://github.com/pydantic/pydantic/pull/12748)\n* Push down constraints in unions involving `MISSING` sentinel by [@Viicos](https://github.com/Viicos) in [#12908](https://github.com/pydantic/pydantic/pull/12908)\n\n#### Changes\n\n* Track extra fields set after init in `model_fields_set` by [@navalprakhar](https://github.com/navalprakhar) in [#12817](https://github.com/pydantic/pydantic/pull/12817)\n* Do not include annotations that are not part of named tuple fields by [@galuszkak](https://github.com/galuszkak) in [#12951](https://github.com/pydantic/pydantic/pull/12951)\n* No longer fall back to trying all union members when the variant selected by discriminator fails to serialize by [@navalprakhar](https://github.com/navalprakhar) in [#12825](https://github.com/pydantic/pydantic/pull/12825)\n\n#### Fixes\n\n* Support discriminator metadata outside union type alias by [@Viicos](https://github.com/Viicos) in [#12785](https://github.com/pydantic/pydantic/pull/12785)\n* Respect `extras_schema` when only `extra_fields_behavior` is set on the config in JSON Schema generation for typed dictionaries by [@Viicos](https://github.com/Viicos) in [#12810](https://github.com/pydantic/pydantic/pull/12810)\n* Ensure `__pydantic_private__` is set in `model_construct()` with user-defined `model_post_init()` by [@nightcityblade](https://github.com/nightcityblade) in [#12816](https://github.com/pydantic/pydantic/pull/12816)\n* Handle all schema generation errors in `InstanceOf` by [@Viicos](https://github.com/Viicos) in [#12705](https://github.com/pydantic/pydantic/pull/12705)\n* Allow dynamic models created with `create_model()` to be used as annotations in the Mypy plugin by [@Br1an67](https://github.com/Br1an67) in [#12879](https://github.com/pydantic/pydantic/pull/12879)\n* Check for `PlaceholderNode` in Mypy plugin by [@Viicos](https://github.com/Viicos) in [#12929](https://github.com/pydantic/pydantic/pull/12929)\n* Try other branches in smart union in case of omit errors by [@mikeedjones](https://github.com/mikeedjones) in [#12758](https://github.com/pydantic/pydantic/pull/12758)\n* Patch unset attributes with `MISSING` during model serialization with `exclude_unset` by [@davidhewitt](https://github.com/davidhewitt) in [#12905](https://github.com/pydantic/pydantic/pull/12905)\n* Ensure custom `__init__()` is called when using `model_validate_strings()` by [@siewcapital](https://github.com/siewcapital) in [#12897](https://github.com/pydantic/pydantic/pull/12897)\n\n#### Packaging\n\n* Add riscv64 build target for manylinux by [@boosterl](https://github.com/boosterl) in [#12723](https://github.com/pydantic/pydantic/pull/12723)\n\n### New Contributors\n\n* [@kelsonbrito50](https://github.com/kelsonbrito50) made their first contribution in [#12860](https://github.com/pydantic/pydantic/pull/12860)\n* [@boosterl](https://github.com/boosterl) made their first contribution in [#12723](https://github.com/pydantic/pydantic/pull/12723)\n* [@adityagiri3600](https://github.com/adityagiri3600) made their first contribution in [#12868](https://github.com/pydantic/pydantic/pull/12868)\n* [@navalprakhar](https://github.com/navalprakhar) made their first contribution in [#12817](https://github.com/pydantic/pydantic/pull/12817)\n* [@Br1an67](https://github.com/Br1an67) made their first contribution in [#12879](https://github.com/pydantic/pydantic/pull/12879)\n* [@rmorshea](https://github.com/rmorshea) made their first contribution in [#12910](https://github.com/pydantic/pydantic/pull/12910)\n* [@N3XT3R1337](https://github.com/N3XT3R1337) made their first contribution in [#12922](https://github.com/pydantic/pydantic/pull/12922)\n* [@ai-man-codes](https://github.com/ai-man-codes) made their first contribution in [#12907](https://github.com/pydantic/pydantic/pull/12907)\n* [@Yume05-dev](https://github.com/Yume05-dev) made their first contribution in [#12953](https://github.com/pydantic/pydantic/pull/12953)\n* [@galuszkak](https://github.com/galuszkak) made their first contribution in [#12951](https://github.com/pydantic/pydantic/pull/12951)\n* [@siewcapital](https://github.com/siewcapital) made their first contribution in [#12897](https://github.com/pydantic/pydantic/pull/12897)\n\n## v2.13.0b2 (2026-02-24)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.0b2)\n\n### What's Changed\n\n#### Fixes\n\n* Fix backported V1 namespace by [@Viicos](https://github.com/Viicos) in [#12855](https://github.com/pydantic/pydantic/pull/12855)\n* Allow any type form to be used in `validate_as()` by [@bledden](https://github.com/bledden) in [#12846](https://github.com/pydantic/pydantic/pull/12846)\n* Fix walrus operator precedence in `UrlConstraints.__get_pydantic_core_schema__()` by [@bysiber](https://github.com/bysiber) in [#12826](https://github.com/pydantic/pydantic/pull/12826)\n\n### New Contributors\n\n* [@bledden](https://github.com/bledden) made their first contribution in [#12846](https://github.com/pydantic/pydantic/pull/12846)\n* [@bysiber](https://github.com/bysiber) made their first contribution in [#12827](https://github.com/pydantic/pydantic/pull/12827)\n\n## v2.13.0b1 (2026-02-23)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.0b1)\n\nThis is the first beta release of the 2.13 version, mainly providing bug fixes and performance improvements\nfor validation and serialization.\n\nNotable changes include:\n\n* Add a new `polymorphic_serialization` option, solving issues with `serialize_as_any` introduced in 2.12.\n* Latest V1.10.26 release under the `pydantic.v1` namespace. This version includes support for Python 3.14.\n* The [`pydantic-core`](https://github.com/pydantic/pydantic-core/) repository was merged inside the main `pydantic` one.\n\n### What's Changed\n\n#### New Features\n\n* Add `polymorphic_serialization` option by [@davidhewitt](https://github.com/davidhewitt) in [#12518](https://github.com/pydantic/pydantic/pull/12518)\n* Support Root models with `Literal` root types as discriminator field types by [@YassinNouh21](https://github.com/YassinNouh21) in [#12680](https://github.com/pydantic/pydantic/pull/12680)\n\n#### Changes\n\n* Migrate `pydantic-core` CI by [@Viicos](https://github.com/Viicos) in [#12752](https://github.com/pydantic/pydantic/pull/12752)\n* Import `pydantic-core` into pydantic by [@davidhewitt](https://github.com/davidhewitt) in [#12481](https://github.com/pydantic/pydantic/pull/12481)\n* Backport V1 changes up to v1.10.26 by [@Viicos](https://github.com/Viicos) in [#12663](https://github.com/pydantic/pydantic/pull/12663)\n* Use the `complex()` constructor unconditionally when validating `complex` Python data by [@tanmaymunjal](https://github.com/tanmaymunjal) in [#12498](https://github.com/pydantic/pydantic/pull/12498)\n* Add support for three-tuple input for `Decimal` by [@tanmaymunjal](https://github.com/tanmaymunjal) in [#12500](https://github.com/pydantic/pydantic/pull/12500)\n* Align `@field_serializer` logic with `@field_validator` by [@Viicos](https://github.com/Viicos) in [#12577](https://github.com/pydantic/pydantic/pull/12577)\n* Make `PydanticUserError` a `RuntimeError` instead of a `TypeError` by [@poliakovva](https://github.com/poliakovva) in [#12579](https://github.com/pydantic/pydantic/pull/12579)\n* Remove redundant serialization attempts in nested unions by [@davidhewitt](https://github.com/davidhewitt) in [#12604](https://github.com/pydantic/pydantic/pull/12604)\n* Copy `root` value when making root model shallow copies by [@YassinNouh21](https://github.com/YassinNouh21) in [#12679](https://github.com/pydantic/pydantic/pull/12679)\n* Ensure deterministic JSON schema defaults by sorting sets by [@drshvik](https://github.com/drshvik) in [#12760](https://github.com/pydantic/pydantic/pull/12760)\n\n#### Performance\n\n* Refactor `DecoratorInfos.build()` implementation by [@Viicos](https://github.com/Viicos) in [#12536](https://github.com/pydantic/pydantic/pull/12536)\n* Cache compiled regex in `pydantic-core` by [@Viicos](https://github.com/Viicos) in [#12549](https://github.com/pydantic/pydantic/pull/12549)\n* Optimize creation of `Literal` validators by [@davidhewitt](https://github.com/davidhewitt) in [#12569](https://github.com/pydantic/pydantic/pull/12569)\n* Optimize implementation of `LookupKey` by [@davidhewitt](https://github.com/davidhewitt) in [#12571](https://github.com/pydantic/pydantic/pull/12571)\n* Use python strings for field names by [@davidhewitt](https://github.com/davidhewitt) in [#12631](https://github.com/pydantic/pydantic/pull/12631)\n* Optimize datetime formatting code by [@davidhewitt](https://github.com/davidhewitt) in [#12626](https://github.com/pydantic/pydantic/pull/12626)\n* Validate JSON model data by iteration by [@davidhewitt](https://github.com/davidhewitt) in [#12550](https://github.com/pydantic/pydantic/pull/12550)\n* Optimize annotations evaluation of Pydantic models by [@Viicos](https://github.com/Viicos) in [#12681](https://github.com/pydantic/pydantic/pull/12681)\n* Optimize `FieldInfo._copy()` by [@Viicos](https://github.com/Viicos) in [#12727](https://github.com/pydantic/pydantic/pull/12727)\n\n#### Fixes\n\n* Fix `FieldInfo` rebuilding when parameterizing generic models with an `Annotated` type by [@Viicos](https://github.com/Viicos) in [#12463](https://github.com/pydantic/pydantic/pull/12463)\n* Fix nested model schema deduplication in JSON schema generation by [@marwan-alloreview](https://github.com/marwan-alloreview) in [#12494](https://github.com/pydantic/pydantic/pull/12494)\n* Fix `InitVar` being ignored when using with the `pydantic.Field()` function by [@Viicos](https://github.com/Viicos) in [#12495](https://github.com/pydantic/pydantic/pull/12495)\n* Fix support for enums with `NamedTuple` as values by [@Viicos](https://github.com/Viicos) in [#12506](https://github.com/pydantic/pydantic/pull/12506)\n* Do not delete mock validator/serializer in `rebuild_dataclass()` by [@Viicos](https://github.com/Viicos) in [#12513](https://github.com/pydantic/pydantic/pull/12513)\n* Require test suite to pass with free threading, switch back to global generic types cache by [@davidhewitt](https://github.com/davidhewitt) in [#12537](https://github.com/pydantic/pydantic/pull/12537)\n* Refactor `__pydantic_extra__` annotation handling by [@Viicos](https://github.com/Viicos) in [#12563](https://github.com/pydantic/pydantic/pull/12563)\n* Do not add claim of UUID \"safety\" provision by [@davidhewitt](https://github.com/davidhewitt) in [#12567](https://github.com/pydantic/pydantic/pull/12567)\n* Use Python hash to perform lookup in tagged union serializer by [@davidhewitt](https://github.com/davidhewitt) in [#12594](https://github.com/pydantic/pydantic/pull/12594)\n* Do not emit serialization warning `MISSING` sentinel is present in a nested model by [@Viicos](https://github.com/Viicos) in [#12635](https://github.com/pydantic/pydantic/pull/12635)\n* Do not eagerly evaluate annotations in signature logic by [@Viicos](https://github.com/Viicos) in [#12660](https://github.com/pydantic/pydantic/pull/12660)\n* Fix serialization of typed dict unions when `exclude_none` is set by [@davidhewitt](https://github.com/davidhewitt) in [#12677](https://github.com/pydantic/pydantic/pull/12677)\n* Do not reuse prebuilt serializers/validators on rebuilds by [@lmmx](https://github.com/lmmx) in [#12689](https://github.com/pydantic/pydantic/pull/12689)\n* Fix type annotation of `field_definitions` in `create_model()` by [@lehmann-hqs](https://github.com/lehmann-hqs) in [#12734](https://github.com/pydantic/pydantic/pull/12734)\n* Fix incorrect dataclass constructor signature when overriding class `kw_only` with `Field()` by [@jfadia](https://github.com/jfadia) in [#12741](https://github.com/pydantic/pydantic/pull/12741)\n* Use `typing.Union` when replacing types under Python 3.14 by [@Viicos](https://github.com/Viicos) in [#12733](https://github.com/pydantic/pydantic/pull/12733)\n* Improve ImportString error when internal imports fail by [@tsembp](https://github.com/tsembp) in [#12740](https://github.com/pydantic/pydantic/pull/12740)\n* Fix serializing complex numbers with negative zero imaginary part by [@lhnwrk](https://github.com/lhnwrk) in [#12770](https://github.com/pydantic/pydantic/pull/12770)\n* Preserve custom docstrings on stdlib dataclasses in JSON schema by [@nightcityblade](https://github.com/nightcityblade) in [#12815](https://github.com/pydantic/pydantic/pull/12815)\n\n#### Packaging\n\n* Bump Rust url dependency from 2.5.4 to 2.5.7 in `pydantic-core` by [@dependabot](https://github.com/dependabot)[bot] in [#12508](https://github.com/pydantic/pydantic/pull/12508)\n* Bump Rust minimum version to 1.88, use edition 2024 by [@davidhewitt](https://github.com/davidhewitt) and [@Viicos](https://github.com/Viicos) in [#12551](https://github.com/pydantic/pydantic/pull/12551) and [#12752](https://github.com/pydantic/pydantic/pull/12752)\n* Bump PyO3 to 0.28, jiter to 0.13 by [@davidhewitt](https://github.com/davidhewitt) in [#12767](https://github.com/pydantic/pydantic/pull/12767)\n\n### New Contributors\n\n* [@marwan-alloreview](https://github.com/marwan-alloreview) made their first contribution in [#12494](https://github.com/pydantic/pydantic/pull/12494)\n* [@tanmaymunjal](https://github.com/tanmaymunjal) made their first contribution in [#12498](https://github.com/pydantic/pydantic/pull/12498)\n* [@poliakovva](https://github.com/poliakovva) made their first contribution in [#12579](https://github.com/pydantic/pydantic/pull/12579)\n* [@lehmann-hqs](https://github.com/lehmann-hqs) made their first contribution in [#12734](https://github.com/pydantic/pydantic/pull/12734)\n* [@jfadia](https://github.com/jfadia) made their first contribution in [#12741](https://github.com/pydantic/pydantic/pull/12741)\n* [@tsembp](https://github.com/tsembp) made their first contribution in [#12740](https://github.com/pydantic/pydantic/pull/12740)\n* [@drshvik](https://github.com/drshvik) made their first contribution in [#12760](https://github.com/pydantic/pydantic/pull/12760)\n* [@lhnwrk](https://github.com/lhnwrk) made their first contribution in [#12770](https://github.com/pydantic/pydantic/pull/12770)\n* [@nightcityblade](https://github.com/nightcityblade) made their first contribution in [#12815](https://github.com/pydantic/pydantic/pull/12811)\n\n## v2.12.5 (2025-11-26)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.5)\n\nThis is the fifth 2.12 patch release, addressing an issue with the `MISSING` sentinel and providing several documentation improvements.\n\nThe next 2.13 minor release will be published in a couple weeks, and will include a new *polymorphic serialization* feature addressing\nthe remaining unexpected changes to the *serialize as any* behavior.\n\n* Fix pickle error when using `model_construct()` on a model with `MISSING` as a default value by [@ornariece](https://github.com/ornariece) in [#12522](https://github.com/pydantic/pydantic/pull/12522).\n* Several updates to the documentation by [@Viicos](https://github.com/Viicos).\n\n## v2.12.4 (2025-11-05)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.4)\n\nThis is the fourth 2.12 patch release, fixing more regressions, and reverting a change in the `build()` method\nof the [`AnyUrl` and Dsn types](https://docs.pydantic.dev/latest/api/networks/).\n\nThis patch release also fixes an issue with the serialization of IP address types, when `serialize_as_any` is used. The next patch release\nwill try to address the remaining issues with *serialize as any* behavior by introducing a new *polymorphic serialization* feature, that\nshould be used in most cases in place of *serialize as any*.\n\n* Fix issue with forward references in parent `TypedDict` classes by [@Viicos](https://github.com/Viicos) in [#12427](https://github.com/pydantic/pydantic/pull/12427).\n\n This issue is only relevant on Python 3.14 and greater.\n\n* Exclude fields with `exclude_if` from JSON Schema required fields by [@Viicos](https://github.com/Viicos) in [#12430](https://github.com/pydantic/pydantic/pull/12430)\n* Revert URL percent-encoding of credentials in the `build()` method\n of the [`AnyUrl` and Dsn types](https://docs.pydantic.dev/latest/api/networks/) by [@davidhewitt](https://github.com/davidhewitt) in\n [pydantic-core#1833](https://github.com/pydantic/pydantic-core/pull/1833).\n\n This was initially considered as a bugfix, but caused regressions and as such was fully reverted. The next release will include\n an opt-in option to percent-encode components of the URL.\n\n* Add type inference for IP address types by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1868](https://github.com/pydantic/pydantic-core/pull/1868).\n\n The 2.12 changes to the `serialize_as_any` behavior made it so that IP address types could not properly serialize to JSON.\n\n* Avoid getting default values from defaultdict by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1853](https://github.com/pydantic/pydantic-core/pull/1853).\n\n This fixes a subtle regression in the validation behavior of the [`collections.defaultdict`](https://docs.python.org/3/library/collections.html#collections.defaultdict)\n type.\n\n* Fix issue with field serializers on nested typed dictionaries by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1879](https://github.com/pydantic/pydantic-core/pull/1879).\n* Add more `pydantic-core` builds for the three-threaded version of Python 3.14 by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1864](https://github.com/pydantic/pydantic-core/pull/1864).\n\n## v2.12.3 (2025-10-17)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.3)\n\n### What's Changed\n\nThis is the third 2.12 patch release, fixing issues related to the `FieldInfo` class, and reverting a change to the supported\n[*after* model validator](https://docs.pydantic.dev/latest/concepts/validators/#model-validators) function signatures.\n\n* Raise a warning when an invalid after model validator function signature is raised by [@Viicos](https://github.com/Viicos) in [#12414](https://github.com/pydantic/pydantic/pull/12414).\n Starting in 2.12.0, using class methods for *after* model validators raised an error, but the error wasn't raised concistently. We decided\n to emit a deprecation warning instead.\n* Add [`FieldInfo.asdict()`](https://docs.pydantic.dev/latest/api/fields/#pydantic.fields.FieldInfo.asdict) method, improve documentation around `FieldInfo` by [@Viicos](https://github.com/Viicos) in [#12411](https://github.com/pydantic/pydantic/pull/12411).\n This also add back support for mutations on `FieldInfo` classes, that are reused as `Annotated` metadata. **However**, note that this is still\n *not* a supported pattern. Instead, please refer to the [added example](https://docs.pydantic.dev/latest/examples/dynamic_models/) in the documentation.\n\nThe [blog post](https://pydantic.dev/articles/pydantic-v2-12-release#changes) section on changes was also updated to document the changes related to `serialize_as_any`.\n\n## v2.12.2 (2025-10-14)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.2)\n\n### What's Changed\n\n#### Fixes\n\n* Release a new `pydantic-core` version, as a corrupted CPython 3.10 `manylinux2014_aarch64` wheel got uploaded ([pydantic-core#1843](https://github.com/pydantic/pydantic-core/pull/1843)).\n* Fix issue with recursive generic models with a parent model class by [@Viicos](https://github.com/Viicos) in [#12398](https://github.com/pydantic/pydantic/pull/12398)\n\n## v2.12.1 (2025-10-13)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.1)\n\n### What's Changed\n\nThis is the first 2.12 patch release, addressing most (but not all yet) regressions from the initial 2.12.0 release.\n\n#### Fixes\n\n* Do not evaluate annotations when inspecting validators and serializers by [@Viicos](https://github.com/Viicos) in [#12355](https://github.com/pydantic/pydantic/pull/12355)\n* Make sure `None` is converted as `NoneType` in Python 3.14 by [@Viicos](https://github.com/Viicos) in [#12370](https://github.com/pydantic/pydantic/pull/12370)\n* Backport V1 runtime warning when using Python 3.14 by [@Viicos](https://github.com/Viicos) in [#12367](https://github.com/pydantic/pydantic/pull/12367)\n* Fix error message for invalid validator signatures by [@Viicos](https://github.com/Viicos) in [#12366](https://github.com/pydantic/pydantic/pull/12366)\n* Populate field name in `ValidationInfo` for validation of default value by [@Viicos](https://github.com/Viicos) in [pydantic-core#1826](https://github.com/pydantic/pydantic-core/pull/1826)\n* Encode credentials in `MultiHostUrl` builder by [@willswire](https://github.com/willswire) in [pydantic-core#1829](https://github.com/pydantic/pydantic-core/pull/1829)\n* Respect field serializers when using `serialize_as_any` serialization flag by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1829](https://github.com/pydantic/pydantic-core/pull/1829)\n* Fix various `RootModel` serialization issues by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1836](https://github.com/pydantic/pydantic-core/pull/1836)\n\n### New Contributors\n\n* [@willswire](https://github.com/willswire) made their first contribution in [pydantic-core#1829](https://github.com/pydantic/pydantic-core/pull/1829)\n\n## v2.12.0 (2025-10-07)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.0)\n\nThis is the final 2.12 release. It features the work of 20 external contributors and provides useful new features, along with initial Python 3.14 support.\nSeveral minor changes (considered non-breaking changes according to our [versioning policy](https://docs.pydantic.dev/2.12/version-policy/#pydantic-v2))\nare also included in this release. Make sure to look into them before upgrading.\n\n**Note that Pydantic V1 is not compatible with Python 3.14 and greater**.\n\n### What's Changed\n\nSee the beta releases for all changes sinces 2.11.\n\n#### New Features\n\n* Add `extra` parameter to the validate functions by [@anvilpete](https://github.com/anvilpete) in [#12233](https://github.com/pydantic/pydantic/pull/12233)\n* Add `exclude_computed_fields` serialization option by [@Viicos](https://github.com/Viicos) in [#12334](https://github.com/pydantic/pydantic/pull/12334)\n* Add `preverse_empty_path` URL options by [@Viicos](https://github.com/Viicos) in [#12336](https://github.com/pydantic/pydantic/pull/12336)\n* Add `union_format` parameter to JSON Schema generation by [@Viicos](https://github.com/Viicos) in [#12147](https://github.com/pydantic/pydantic/pull/12147)\n* Add `__qualname__` parameter for `create_model` by [@Atry](https://github.com/Atry) in [#12001](https://github.com/pydantic/pydantic/pull/12001)\n\n#### Fixes\n\n* Do not try to infer name from lambda definitions in pipelines API by [@Viicos](https://github.com/Viicos) in [#12289](https://github.com/pydantic/pydantic/pull/12289)\n* Use proper namespace for functions in `TypeAdapter` by [@Viicos](https://github.com/Viicos) in [#12324](https://github.com/pydantic/pydantic/pull/12324)\n* Use `Any` for context type annotation in `TypeAdapter` by [@inducer](https://github.com/inducer) in [#12279](https://github.com/pydantic/pydantic/pull/12279)\n* Expose `FieldInfo` in `pydantic.fields.__all__` by [@Viicos](https://github.com/Viicos) in [#12339](https://github.com/pydantic/pydantic/pull/12339)\n* Respect `validation_alias` in `@validate_call` by [@Viicos](https://github.com/Viicos) in [#12340](https://github.com/pydantic/pydantic/pull/12340)\n* Use `Any` as context annotation in plugin API by [@Viicos](https://github.com/Viicos) in [#12341](https://github.com/pydantic/pydantic/pull/12341)\n* Use proper `stacklevel` in warnings when possible by [@Viicos](https://github.com/Viicos) in [#12342](https://github.com/pydantic/pydantic/pull/12342)\n\n#### Packaging\n\n* Update V1 copy to v1.10.24 by [@Viicos](https://github.com/Viicos) in [#12338](https://github.com/pydantic/pydantic/pull/12338)\n\n### New Contributors\n\n* [@anvilpete](https://github.com/anvilpete) made their first contribution in [#12233](https://github.com/pydantic/pydantic/pull/12233)\n* [@JonathanWindell](https://github.com/JonathanWindell) made their first contribution in [#12327](https://github.com/pydantic/pydantic/pull/12327)\n* [@inducer](https://github.com/inducer) made their first contribution in [#12279](https://github.com/pydantic/pydantic/pull/12279)\n* [@Atry](https://github.com/Atry) made their first contribution in [#12001](https://github.com/pydantic/pydantic/pull/12001)\n\n## v2.12.0b1 (2025-10-03)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.0b1)\n\nThis is the first beta release of the upcoming 2.12 release.\n\n### What's Changed\n\n#### New Features\n\n* Add support for `exclude_if` at the field level by [@andresliszt](https://github.com/andresliszt) in [#12141](https://github.com/pydantic/pydantic/pull/12141)\n* Add `ValidateAs` annotation helper by [@Viicos](https://github.com/Viicos) in [#11942](https://github.com/pydantic/pydantic/pull/11942)\n* Add configuration options for validation and JSON serialization of temporal types by [@ollz272](https://github.com/ollz272) in [#12068](https://github.com/pydantic/pydantic/pull/12068)\n* Add support for PEP 728 by [@Viicos](https://github.com/Viicos) in [#12179](https://github.com/pydantic/pydantic/pull/12179)\n* Add field name in serialization error by [@NicolasPllr1](https://github.com/NicolasPllr1) in [pydantic-core#1799](https://github.com/pydantic/pydantic-core/pull/1799)\n* Add option to preserve empty URL paths by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1789](https://github.com/pydantic/pydantic-core/pull/1789)\n\n#### Changes\n\n* Raise error if an incompatible `pydantic-core` version is installed by [@Viicos](https://github.com/Viicos) in [#12196](https://github.com/pydantic/pydantic/pull/12196)\n* Remove runtime warning for experimental features by [@Viicos](https://github.com/Viicos) in [#12265](https://github.com/pydantic/pydantic/pull/12265)\n* Warn if registering virtual subclasses on Pydantic models by [@Viicos](https://github.com/Viicos) in [#11669](https://github.com/pydantic/pydantic/pull/11669)\n\n#### Fixes\n\n* Fix `__getattr__()` behavior on Pydantic models when a property raised an `AttributeError` and extra values are present by [@raspuchin](https://github.com/raspuchin) in [#12106](https://github.com/pydantic/pydantic/pull/12106)\n* Add test to prevent regression with Pydantic models used as annotated metadata by [@Viicos](https://github.com/Viicos) in [#12133](https://github.com/pydantic/pydantic/pull/12133)\n* Allow to use property setters on Pydantic dataclasses with `validate_assignment` set by [@Viicos](https://github.com/Viicos) in [#12173](https://github.com/pydantic/pydantic/pull/12173)\n* Fix mypy v2 plugin for upcoming mypy release by [@cdce8p](https://github.com/cdce8p) in [#12209](https://github.com/pydantic/pydantic/pull/12209)\n* Respect custom title in functions JSON Schema by [@Viicos](https://github.com/Viicos) in [#11892](https://github.com/pydantic/pydantic/pull/11892)\n* Fix `ImportString` JSON serialization for objects with a `name` attribute by [@chr1sj0nes](https://github.com/chr1sj0nes) in [#12219](https://github.com/pydantic/pydantic/pull/12219)\n* Do not error on fields overridden by methods in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#12290](https://github.com/pydantic/pydantic/pull/12290)\n\n#### Packaging\n\n* Bump `pydantic-core` to v2.40.1 by [@Viicos](https://github.com/Viicos) in [#12314](https://github.com/pydantic/pydantic/pull/12314)\n\n### New Contributors\n\n* [@raspuchin](https://github.com/raspuchin) made their first contribution in [#12106](https://github.com/pydantic/pydantic/pull/12106)\n* [@chr1sj0nes](https://github.com/chr1sj0nes) made their first contribution in [#12219](https://github.com/pydantic/pydantic/pull/12219)\n\n## v2.12.0a1 (2025-07-26)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.0a1)\n\nThis is the first alpha release of the upcoming 2.12 release, which adds initial support for Python 3.14.\n\n### What's Changed\n\n#### New Features\n\n* Add `__pydantic_on_complete__()` hook that is called once model is fully ready to be used by [@DouweM](https://github.com/DouweM) in [#11762](https://github.com/pydantic/pydantic/pull/11762)\n* Add initial support for Python 3.14 by [@Viicos](https://github.com/Viicos) in [#11991](https://github.com/pydantic/pydantic/pull/11991)\n* Add regex patterns to JSON schema for `Decimal` type by [@Dima-Bulavenko](https://github.com/Dima-Bulavenko) in [#11987](https://github.com/pydantic/pydantic/pull/11987)\n* Add support for `doc` attribute on dataclass fields by [@Viicos](https://github.com/Viicos) in [#12077](https://github.com/pydantic/pydantic/pull/12077)\n* Add experimental `MISSING` sentinel by [@Viicos](https://github.com/Viicos) in [#11883](https://github.com/pydantic/pydantic/pull/11883)\n\n#### Changes\n\n* Allow config and bases to be specified together in `create_model()` by [@Viicos](https://github.com/Viicos) in [#11714](https://github.com/pydantic/pydantic/pull/11714)\n* Move some field logic out of the `GenerateSchema` class by [@Viicos](https://github.com/Viicos) in [#11733](https://github.com/pydantic/pydantic/pull/11733)\n* Always make use of `inspect.getsourcelines()` for docstring extraction on Python 3.13 and greater by [@Viicos](https://github.com/Viicos) in [#11829](https://github.com/pydantic/pydantic/pull/11829)\n* Only support the latest Mypy version by [@Viicos](https://github.com/Viicos) in [#11832](https://github.com/pydantic/pydantic/pull/11832)\n* Do not implicitly convert after model validators to class methods by [@Viicos](https://github.com/Viicos) in [#11957](https://github.com/pydantic/pydantic/pull/11957)\n* Refactor `FieldInfo` creation implementation by [@Viicos](https://github.com/Viicos) in [#11898](https://github.com/pydantic/pydantic/pull/11898)\n* Make `Secret` covariant by [@bluenote10](https://github.com/bluenote10) in [#12008](https://github.com/pydantic/pydantic/pull/12008)\n* Emit warning when field-specific metadata is used in invalid contexts by [@Viicos](https://github.com/Viicos) in [#12028](https://github.com/pydantic/pydantic/pull/12028)\n\n#### Fixes\n\n* Properly fetch plain serializer function when serializing default value in JSON Schema by [@Viicos](https://github.com/Viicos) in [#11721](https://github.com/pydantic/pydantic/pull/11721)\n* Remove generics cache workaround by [@Viicos](https://github.com/Viicos) in [#11755](https://github.com/pydantic/pydantic/pull/11755)\n* Remove coercion of decimal constraints by [@Viicos](https://github.com/Viicos) in [#11772](https://github.com/pydantic/pydantic/pull/11772)\n* Fix crash when expanding root type in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11735](https://github.com/pydantic/pydantic/pull/11735)\n* Only mark model as complete once all fields are complete by [@DouweM](https://github.com/DouweM) in [#11759](https://github.com/pydantic/pydantic/pull/11759)\n* Do not provide `field_name` in validator core schemas by [@DouweM](https://github.com/DouweM) in [#11761](https://github.com/pydantic/pydantic/pull/11761)\n* Fix issue with recursive generic models by [@Viicos](https://github.com/Viicos) in [#11775](https://github.com/pydantic/pydantic/pull/11775)\n* Fix qualified name comparison of private attributes during namespace inspection by [@karta9821](https://github.com/karta9821) in [#11803](https://github.com/pydantic/pydantic/pull/11803)\n* Make sure Pydantic dataclasses with slots and `validate_assignment` can be unpickled by [@Viicos](https://github.com/Viicos) in [#11769](https://github.com/pydantic/pydantic/pull/11769)\n* Traverse `function-before` schemas during schema gathering by [@Viicos](https://github.com/Viicos) in [#11801](https://github.com/pydantic/pydantic/pull/11801)\n* Fix check for stdlib dataclasses by [@Viicos](https://github.com/Viicos) in [#11822](https://github.com/pydantic/pydantic/pull/11822)\n* Check if `FieldInfo` is complete after applying type variable map by [@Viicos](https://github.com/Viicos) in [#11855](https://github.com/pydantic/pydantic/pull/11855)\n* Do not delete mock validator/serializer in `model_rebuild()` by [@Viicos](https://github.com/Viicos) in [#11890](https://github.com/pydantic/pydantic/pull/11890)\n* Rebuild dataclass fields before schema generation by [@Viicos](https://github.com/Viicos) in [#11949](https://github.com/pydantic/pydantic/pull/11949)\n* Always store the original field assignment on `FieldInfo` by [@Viicos](https://github.com/Viicos) in [#11946](https://github.com/pydantic/pydantic/pull/11946)\n* Do not use deprecated methods as default field values by [@Viicos](https://github.com/Viicos) in [#11914](https://github.com/pydantic/pydantic/pull/11914)\n* Allow callable discriminator to be applied on PEP 695 type aliases by [@Viicos](https://github.com/Viicos) in [#11941](https://github.com/pydantic/pydantic/pull/11941)\n* Suppress core schema generation warning when using `SkipValidation` by [@ygsh0816](https://github.com/ygsh0816) in [#12002](https://github.com/pydantic/pydantic/pull/12002)\n* Do not emit typechecking error for invalid `Field()` default with `validate_default` set to `True` by [@Viicos](https://github.com/Viicos) in [#11988](https://github.com/pydantic/pydantic/pull/11988)\n* Refactor logic to support Pydantic's `Field()` function in dataclasses by [@Viicos](https://github.com/Viicos) in [#12051](https://github.com/pydantic/pydantic/pull/12051)\n\n#### Packaging\n\n* Update project metadata to use PEP 639 by [@Viicos](https://github.com/Viicos) in [#11694](https://github.com/pydantic/pydantic/pull/11694)\n* Bump `mkdocs-llmstxt` to v0.2.0 by [@Viicos](https://github.com/Viicos) in [#11725](https://github.com/pydantic/pydantic/pull/11725)\n* Bump `pydantic-core` to v2.35.1 by [@Viicos](https://github.com/Viicos) in [#11963](https://github.com/pydantic/pydantic/pull/11963)\n* Bump dawidd6/action-download-artifact from 10 to 11 by [@dependabot](https://github.com/dependabot)[bot] in [#12033](https://github.com/pydantic/pydantic/pull/12033)\n* Bump astral-sh/setup-uv from 5 to 6 by [@dependabot](https://github.com/dependabot)[bot] in [#11826](https://github.com/pydantic/pydantic/pull/11826)\n* Update mypy to 1.17.0 by [@Viicos](https://github.com/Viicos) in [#12076](https://github.com/pydantic/pydantic/pull/12076)\n\n### New Contributors\n\n* [@parth-paradkar](https://github.com/parth-paradkar) made their first contribution in [#11695](https://github.com/pydantic/pydantic/pull/11695)\n* [@dqkqd](https://github.com/dqkqd) made their first contribution in [#11739](https://github.com/pydantic/pydantic/pull/11739)\n* [@fhightower](https://github.com/fhightower) made their first contribution in [#11722](https://github.com/pydantic/pydantic/pull/11722)\n* [@gbaian10](https://github.com/gbaian10) made their first contribution in [#11766](https://github.com/pydantic/pydantic/pull/11766)\n* [@DouweM](https://github.com/DouweM) made their first contribution in [#11759](https://github.com/pydantic/pydantic/pull/11759)\n* [@bowenliang123](https://github.com/bowenliang123) made their first contribution in [#11719](https://github.com/pydantic/pydantic/pull/11719)\n* [@rawwar](https://github.com/rawwar) made their first contribution in [#11799](https://github.com/pydantic/pydantic/pull/11799)\n* [@karta9821](https://github.com/karta9821) made their first contribution in [#11803](https://github.com/pydantic/pydantic/pull/11803)\n* [@jinnovation](https://github.com/jinnovation) made their first contribution in [#11834](https://github.com/pydantic/pydantic/pull/11834)\n* [@zmievsa](https://github.com/zmievsa) made their first contribution in [#11861](https://github.com/pydantic/pydantic/pull/11861)\n* [@Otto-AA](https://github.com/Otto-AA) made their first contribution in [#11860](https://github.com/pydantic/pydantic/pull/11860)\n* [@ygsh0816](https://github.com/ygsh0816) made their first contribution in [#12002](https://github.com/pydantic/pydantic/pull/12002)\n* [@lukland](https://github.com/lukland) made their first contribution in [#12015](https://github.com/pydantic/pydantic/pull/12015)\n* [@Dima-Bulavenko](https://github.com/Dima-Bulavenko) made their first contribution in [#11987](https://github.com/pydantic/pydantic/pull/11987)\n* [@GSemikozov](https://github.com/GSemikozov) made their first contribution in [#12050](https://github.com/pydantic/pydantic/pull/12050)\n* [@hannah-heywa](https://github.com/hannah-heywa) made their first contribution in [#12082](https://github.com/pydantic/pydantic/pull/12082)\n\n## v2.11.10 (2025-10-04)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.10)\n\n### What's Changed\n\n#### Fixes\n\n* Backport v1.10.24 changes by [@Viicos](https://github.com/Viicos)\n\n## v2.11.9 (2025-09-13)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.9)\n\n### What's Changed\n\n#### Fixes\n\n* Backport v1.10.23 changes by [@Viicos](https://github.com/Viicos)\n\n## v2.11.8 (2025-09-13)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.8)\n\n### What's Changed\n\n#### Fixes\n\n* Fix mypy plugin for mypy 1.18 by [@cdce8p](https://github.com/cdce8p) in [#12209](https://github.com/pydantic/pydantic/pull/12209)\n\n## v2.11.7 (2025-06-14)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.7)\n\n### What's Changed\n\n#### Fixes\n\n* Copy `FieldInfo` instance if necessary during `FieldInfo` build by [@Viicos](https://github.com/Viicos) in [#11898](https://github.com/pydantic/pydantic/pull/11898)\n\n## v2.11.6 (2025-06-13)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.6)\n\n### What's Changed\n\n#### Fixes\n\n* Rebuild dataclass fields before schema generation by [@Viicos](https://github.com/Viicos) in [#11949](https://github.com/pydantic/pydantic/pull/11949)\n* Always store the original field assignment on `FieldInfo` by [@Viicos](https://github.com/Viicos) in [#11946](https://github.com/pydantic/pydantic/pull/11946)\n\n## v2.11.5 (2025-05-22)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.5)\n\n### What's Changed\n\n#### Fixes\n\n* Check if `FieldInfo` is complete after applying type variable map by [@Viicos](https://github.com/Viicos) in [#11855](https://github.com/pydantic/pydantic/pull/11855)\n* Do not delete mock validator/serializer in `model_rebuild()` by [@Viicos](https://github.com/Viicos) in [#11890](https://github.com/pydantic/pydantic/pull/11890)\n* Do not duplicate metadata on model rebuild by [@Viicos](https://github.com/Viicos) in [#11902](https://github.com/pydantic/pydantic/pull/11902)\n\n## v2.11.4 (2025-04-29)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.4)\n\n### What's Changed\n\n#### Changes\n\n* Allow config and bases to be specified together in `create_model()` by [@Viicos](https://github.com/Viicos) in [#11714](https://github.com/pydantic/pydantic/pull/11714).\n This change was backported as it was previously possible (although not meant to be supported)\n to provide `model_config` as a field, which would make it possible to provide both configuration\n and bases.\n\n#### Fixes\n\n* Remove generics cache workaround by [@Viicos](https://github.com/Viicos) in [#11755](https://github.com/pydantic/pydantic/pull/11755)\n* Remove coercion of decimal constraints by [@Viicos](https://github.com/Viicos) in [#11772](https://github.com/pydantic/pydantic/pull/11772)\n* Fix crash when expanding root type in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11735](https://github.com/pydantic/pydantic/pull/11735)\n* Fix issue with recursive generic models by [@Viicos](https://github.com/Viicos) in [#11775](https://github.com/pydantic/pydantic/pull/11775)\n* Traverse `function-before` schemas during schema gathering by [@Viicos](https://github.com/Viicos) in [#11801](https://github.com/pydantic/pydantic/pull/11801)\n\n#### Packaging\n\n* Bump `mkdocs-llmstxt` to v0.2.0 by [@Viicos](https://github.com/Viicos) in [#11725](https://github.com/pydantic/pydantic/pull/11725)\n\n## v2.11.3 (2025-04-08)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.3)\n\n### What's Changed\n\n#### Fixes\n\n* Preserve field description when rebuilding model fields by [@Viicos](https://github.com/Viicos) in [#11698](https://github.com/pydantic/pydantic/pull/11698)\n\n#### Packaging\n\n* Update V1 copy to v1.10.21 by [@Viicos](https://github.com/Viicos) in [#11706](https://github.com/pydantic/pydantic/pull/11706)\n\n## v2.11.2 (2025-04-03)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.2)\n\n### What's Changed\n\n#### Fixes\n\n* Bump `pydantic-core` to v2.33.1 by [@Viicos](https://github.com/Viicos) in [#11678](https://github.com/pydantic/pydantic/pull/11678)\n* Make sure `__pydantic_private__` exists before setting private attributes by [@Viicos](https://github.com/Viicos) in [#11666](https://github.com/pydantic/pydantic/pull/11666)\n* Do not override `FieldInfo._complete` when using field from parent class by [@Viicos](https://github.com/Viicos) in [#11668](https://github.com/pydantic/pydantic/pull/11668)\n* Provide the available definitions when applying discriminated unions by [@Viicos](https://github.com/Viicos) in [#11670](https://github.com/pydantic/pydantic/pull/11670)\n* Do not expand root type in the mypy plugin for variables by [@Viicos](https://github.com/Viicos) in [#11676](https://github.com/pydantic/pydantic/pull/11676)\n* Mention the attribute name in model fields deprecation message by [@Viicos](https://github.com/Viicos) in [#11674](https://github.com/pydantic/pydantic/pull/11674)\n* Properly validate parameterized mappings by [@Viicos](https://github.com/Viicos) in [#11658](https://github.com/pydantic/pydantic/pull/11658)\n\n## v2.11.1 (2025-03-28)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.1)\n\n### What's Changed\n\n#### Fixes\n\n* Do not override `'definitions-ref'` schemas containing serialization schemas or metadata by [@Viicos](https://github.com/Viicos) in [#11644](https://github.com/pydantic/pydantic/pull/11644)\n\n## v2.11.0 (2025-03-27)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0)\n\n### What's Changed\n\nPydantic v2.11 is a version strongly focused on build time performance of Pydantic models (and core schema generation in general).\nSee the [blog post](https://pydantic.dev/articles/pydantic-v2-11-release) for more details.\n\n#### New Features\n\n* Add `encoded_string()` method to the URL types by [@YassinNouh21](https://github.com/YassinNouh21) in [#11580](https://github.com/pydantic/pydantic/pull/11580)\n* Add support for `defer_build` with `@validate_call` decorator by [@Viicos](https://github.com/Viicos) in [#11584](https://github.com/pydantic/pydantic/pull/11584)\n* Allow `@with_config` decorator to be used with keyword arguments by [@Viicos](https://github.com/Viicos) in [#11608](https://github.com/pydantic/pydantic/pull/11608)\n* Simplify customization of default value inclusion in JSON Schema generation by [@Viicos](https://github.com/Viicos) in [#11634](https://github.com/pydantic/pydantic/pull/11634)\n* Add `generate_arguments_schema()` function by [@Viicos](https://github.com/Viicos) in [#11572](https://github.com/pydantic/pydantic/pull/11572)\n\n#### Fixes\n\n* Allow generic typed dictionaries to be used for unpacked variadic keyword parameters by [@Viicos](https://github.com/Viicos) in [#11571](https://github.com/pydantic/pydantic/pull/11571)\n* Fix runtime error when computing model string representation involving cached properties and self-referenced models by [@Viicos](https://github.com/Viicos) in [#11579](https://github.com/pydantic/pydantic/pull/11579)\n* Preserve other steps when using the ellipsis in the pipeline API by [@Viicos](https://github.com/Viicos) in [#11626](https://github.com/pydantic/pydantic/pull/11626)\n* Fix deferred discriminator application logic by [@Viicos](https://github.com/Viicos) in [#11591](https://github.com/pydantic/pydantic/pull/11591)\n\n#### Packaging\n\n* Bump `pydantic-core` to v2.33.0 by [@Viicos](https://github.com/Viicos) in [#11631](https://github.com/pydantic/pydantic/pull/11631)\n\n### New Contributors\n\n* [@cmenon12](https://github.com/cmenon12) made their first contribution in [#11562](https://github.com/pydantic/pydantic/pull/11562)\n* [@Jeukoh](https://github.com/Jeukoh) made their first contribution in [#11611](https://github.com/pydantic/pydantic/pull/11611)\n\n## v2.11.0b2 (2025-03-17)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0b2)\n\n### What's Changed\n\n#### New Features\n\n* Add experimental support for free threading by [@Viicos](https://github.com/Viicos) in [#11516](https://github.com/pydantic/pydantic/pull/11516)\n\n#### Fixes\n\n* Fix `NotRequired` qualifier not taken into account in stringified annotation by [@Viicos](https://github.com/Viicos) in [#11559](https://github.com/pydantic/pydantic/pull/11559)\n\n#### Packaging\n\n* Bump `pydantic-core` to v2.32.0 by [@Viicos](https://github.com/Viicos) in [#11567](https://github.com/pydantic/pydantic/pull/11567)\n\n### New Contributors\n\n* [@joren485](https://github.com/joren485) made their first contribution in [#11547](https://github.com/pydantic/pydantic/pull/11547)\n\n## v2.11.0b1 (2025-03-06)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0b1)\n\n### What's Changed\n\n#### New Features\n\n* Support unsubstituted type variables with both a default and a bound or constraints by [@FyZzyss](https://github.com/FyZzyss) in https://github.com/pydantic/pydantic/pull/10789\n* Add a `default_factory_takes_validated_data` property to `FieldInfo` by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11034\n* Raise a better error when a generic alias is used inside `type[]` by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11088\n* Properly support PEP 695 generics syntax by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11189\n* Properly support type variable defaults by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11332\n* Add support for validating v6, v7, v8 UUIDs by [@astei](https://github.com/astei) in https://github.com/pydantic/pydantic/pull/11436\n* Improve alias configuration APIs by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11468\n\n#### Changes\n\n* Rework `create_model` field definitions format by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11032\n* Raise a deprecation warning when a field is annotated as final with a default value by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11168\n* Deprecate accessing `model_fields` and `model_computed_fields` on instances by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11169\n* **Breaking Change:** Move core schema generation logic for path types inside the `GenerateSchema` class by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/10846\n* Remove Python 3.8 Support by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11258\n* Optimize calls to `get_type_ref` by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/10863\n* Disable `pydantic-core` core schema validation by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11271\n\n#### Performance\n\n* Only evaluate `FieldInfo` annotations if required during schema building by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/10769\n* Improve `__setattr__` performance of Pydantic models by caching setter functions by [@MarkusSintonen](https://github.com/MarkusSintonen) in https://github.com/pydantic/pydantic/pull/10868\n* Improve annotation application performance by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11186\n* Improve performance of `_typing_extra` module by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11255\n* Refactor and optimize schema cleaning logic by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11244\n* Create a single dictionary when creating a `CoreConfig` instance by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11384\n* Bump `pydantic-core` and thus use `SchemaValidator` and `SchemaSerializer` caching by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11402\n* Reuse cached core schemas for parametrized generic Pydantic models by [@MarkusSintonen](https://github.com/MarkusSintonen) in https://github.com/pydantic/pydantic/pull/11434\n\n#### Fixes\n\n* Improve `TypeAdapter` instance repr by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/10872\n* Use the correct frame when instantiating a parametrized `TypeAdapter` by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/10893\n* Infer final fields with a default value as class variables in the mypy plugin by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11121\n* Recursively unpack `Literal` values if using PEP 695 type aliases by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11114\n* Override `__subclasscheck__` on `ModelMetaclass` to avoid memory leak and performance issues by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11116\n* Remove unused `_extract_get_pydantic_json_schema()` parameter by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11155\n* Improve discriminated union error message for invalid union variants by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11161\n* Unpack PEP 695 type aliases if using the `Annotated` form by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11109\n* Add missing stacklevel in `deprecated_instance_property` warning by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11200\n* Copy `WithJsonSchema` schema to avoid sharing mutated data by [@thejcannon](https://github.com/thejcannon) in https://github.com/pydantic/pydantic/pull/11014\n* Do not cache parametrized models when in the process of parametrizing another model by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/10704\n* Add discriminated union related metadata entries to the `CoreMetadata` definition by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11216\n* Consolidate schema definitions logic in the `_Definitions` class by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11208\n* Support initializing root model fields with values of the `root` type in the mypy plugin by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11212\n* Fix various issues with dataclasses and `use_attribute_docstrings` by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11246\n* Only compute normalized decimal places if necessary in `decimal_places_validator` by [@misrasaurabh1](https://github.com/misrasaurabh1) in https://github.com/pydantic/pydantic/pull/11281\n* Add support for `validation_alias` in the mypy plugin by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11295\n* Fix JSON Schema reference collection with `\"examples\"` keys by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11305\n* Do not transform model serializer functions as class methods in the mypy plugin by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11298\n* Simplify `GenerateJsonSchema.literal_schema()` implementation by [@misrasaurabh1](https://github.com/misrasaurabh1) in https://github.com/pydantic/pydantic/pull/11321\n* Add additional allowed schemes for `ClickHouseDsn` by [@Maze21127](https://github.com/Maze21127) in https://github.com/pydantic/pydantic/pull/11319\n* Coerce decimal constraints to `Decimal` instances by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11350\n* Use the correct JSON Schema mode when handling function schemas by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11367\n* Improve exception message when encountering recursion errors during type evaluation by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11356\n* Always include `additionalProperties: True` for arbitrary dictionary schemas by [@austinyu](https://github.com/austinyu) in https://github.com/pydantic/pydantic/pull/11392\n* Expose `fallback` parameter in serialization methods by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11398\n* Fix path serialization behavior by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11416\n* Do not reuse validators and serializers during model rebuild by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11429\n* Collect model fields when rebuilding a model by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11388\n* Allow cached properties to be altered on frozen models by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11432\n* Fix tuple serialization for `Sequence` types by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11435\n* Fix: do not check for `__get_validators__` on classes where `__get_pydantic_core_schema__` is also defined by [@tlambert03](https://github.com/tlambert03) in https://github.com/pydantic/pydantic/pull/11444\n* Allow callable instances to be used as serializers by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11451\n* Improve error thrown when overriding field with a property by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11459\n* Fix JSON Schema generation with referenceable core schemas holding JSON metadata by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11475\n* Support strict specification on union member types by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11481\n* Implicitly set `validate_by_name` to `True` when `validate_by_alias` is `False` by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11503\n* Change type of `Any` when synthesizing `BaseSettings.__init__` signature in the mypy plugin by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11497\n* Support type variable defaults referencing other type variables by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11520\n* Fix `ValueError` on year zero by [@davidhewitt](https://github.com/davidhewitt) in https://github.com/pydantic/pydantic-core/pull/1583\n* `dataclass` `InitVar` shouldn't be required on serialization by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic-core/pull/1602\n\n#### Packaging\n\n* Add a `check_pydantic_core_version()` function by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11324\n* Remove `greenlet` development dependency by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11351\n* Use the `typing-inspection` library by [@Viicos](https://github.com/Viicos) in https://github.com/pydantic/pydantic/pull/11479\n* Bump `pydantic-core` to `v2.31.1` by [@sydney-runkle](https://github.com/sydney-runkle) in https://github.com/pydantic/pydantic/pull/11526\n\n## New Contributors\n\n* [@FyZzyss](https://github.com/FyZzyss) made their first contribution in https://github.com/pydantic/pydantic/pull/10789\n* [@tamird](https://github.com/tamird) made their first contribution in https://github.com/pydantic/pydantic/pull/10948\n* [@felixxm](https://github.com/felixxm) made their first contribution in https://github.com/pydantic/pydantic/pull/11077\n* [@alexprabhat99](https://github.com/alexprabhat99) made their first contribution in https://github.com/pydantic/pydantic/pull/11082\n* [@Kharianne](https://github.com/Kharianne) made their first contribution in https://github.com/pydantic/pydantic/pull/11111\n* [@mdaffad](https://github.com/mdaffad) made their first contribution in https://github.com/pydantic/pydantic/pull/11177\n* [@thejcannon](https://github.com/thejcannon) made their first contribution in https://github.com/pydantic/pydantic/pull/11014\n* [@thomasfrimannkoren](https://github.com/thomasfrimannkoren) made their first contribution in https://github.com/pydantic/pydantic/pull/11251\n* [@usernameMAI](https://github.com/usernameMAI) made their first contribution in https://github.com/pydantic/pydantic/pull/11275\n* [@ananiavito](https://github.com/ananiavito) made their first contribution in https://github.com/pydantic/pydantic/pull/11302\n* [@pawamoy](https://github.com/pawamoy) made their first contribution in https://github.com/pydantic/pydantic/pull/11311\n* [@Maze21127](https://github.com/Maze21127) made their first contribution in https://github.com/pydantic/pydantic/pull/11319\n* [@kauabh](https://github.com/kauabh) made their first contribution in https://github.com/pydantic/pydantic/pull/11369\n* [@jaceklaskowski](https://github.com/jaceklaskowski) made their first contribution in https://github.com/pydantic/pydantic/pull/11353\n* [@tmpbeing](https://github.com/tmpbeing) made their first contribution in https://github.com/pydantic/pydantic/pull/11375\n* [@petyosi](https://github.com/petyosi) made their first contribution in https://github.com/pydantic/pydantic/pull/11405\n* [@austinyu](https://github.com/austinyu) made their first contribution in https://github.com/pydantic/pydantic/pull/11392\n* [@mikeedjones](https://github.com/mikeedjones) made their first contribution in https://github.com/pydantic/pydantic/pull/11402\n* [@astei](https://github.com/astei) made their first contribution in https://github.com/pydantic/pydantic/pull/11436\n* [@dsayling](https://github.com/dsayling) made their first contribution in https://github.com/pydantic/pydantic/pull/11522\n* [@sobolevn](https://github.com/sobolevn) made their first contribution in https://github.com/pydantic/pydantic-core/pull/1645\n\n## v2.11.0a2 (2025-02-10)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0a2)\n\n### What's Changed\n\nPydantic v2.11 is a version strongly focused on build time performance of Pydantic models (and core schema generation in general).\nThis is another early alpha release, meant to collect early feedback from users having issues with core schema builds.\n\n#### Performance\n\n* Create a single dictionary when creating a `CoreConfig` instance by [@sydney-runkle](https://github.com/sydney-runkle) in [#11384](https://github.com/pydantic/pydantic/pull/11384)\n\n#### Fixes\n\n* Use the correct JSON Schema mode when handling function schemas by [@Viicos](https://github.com/Viicos) in [#11367](https://github.com/pydantic/pydantic/pull/11367)\n* Fix JSON Schema reference logic with `examples` keys by [@Viicos](https://github.com/Viicos) in [#11366](https://github.com/pydantic/pydantic/pull/11366)\n* Improve exception message when encountering recursion errors during type evaluation by [@Viicos](https://github.com/Viicos) in [#11356](https://github.com/pydantic/pydantic/pull/11356)\n* Always include `additionalProperties: True` for arbitrary dictionary schemas by [@austinyu](https://github.com/austinyu) in [#11392](https://github.com/pydantic/pydantic/pull/11392)\n* Expose `fallback` parameter in serialization methods by [@Viicos](https://github.com/Viicos) in [#11398](https://github.com/pydantic/pydantic/pull/11398)\n* Fix path serialization behavior by [@sydney-runkle](https://github.com/sydney-runkle) in [#11416](https://github.com/pydantic/pydantic/pull/11416)\n\n#### Packaging\n\n* Bump `ruff` from 0.9.2 to 0.9.5 by [@Viicos](https://github.com/Viicos) in [#11407](https://github.com/pydantic/pydantic/pull/11407)\n* Bump `pydantic-core` to v2.29.0 by [@mikeedjones](https://github.com/mikeedjones) in [#11402](https://github.com/pydantic/pydantic/pull/11402)\n* Use locally-built rust with symbols & pgo by [@davidhewitt](https://github.com/davidhewitt) in [#11403](https://github.com/pydantic/pydantic/pull/11403)\n\n### New Contributors\n\n* [@kauabh](https://github.com/kauabh) made their first contribution in [#11369](https://github.com/pydantic/pydantic/pull/11369)\n* [@jaceklaskowski](https://github.com/jaceklaskowski) made their first contribution in [#11353](https://github.com/pydantic/pydantic/pull/11353)\n* [@tmpbeing](https://github.com/tmpbeing) made their first contribution in [#11375](https://github.com/pydantic/pydantic/pull/11375)\n* [@petyosi](https://github.com/petyosi) made their first contribution in [#11405](https://github.com/pydantic/pydantic/pull/11405)\n* [@austinyu](https://github.com/austinyu) made their first contribution in [#11392](https://github.com/pydantic/pydantic/pull/11392)\n* [@mikeedjones](https://github.com/mikeedjones) made their first contribution in [#11402](https://github.com/pydantic/pydantic/pull/11402)\n\n## v2.11.0a1 (2025-01-30)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0a1)\n\n### What's Changed\n\nPydantic v2.11 is a version strongly focused on build time performance of Pydantic models (and core schema generation in general).\nThis is an early alpha release, meant to collect early feedback from users having issues with core schema builds.\n\n#### New Features\n\n* Support unsubstituted type variables with both a default and a bound or constraints by [@FyZzyss](https://github.com/FyZzyss) in [#10789](https://github.com/pydantic/pydantic/pull/10789)\n* Add a `default_factory_takes_validated_data` property to `FieldInfo` by [@Viicos](https://github.com/Viicos) in [#11034](https://github.com/pydantic/pydantic/pull/11034)\n* Raise a better error when a generic alias is used inside `type[]` by [@Viicos](https://github.com/Viicos) in [#11088](https://github.com/pydantic/pydantic/pull/11088)\n* Properly support PEP 695 generics syntax by [@Viicos](https://github.com/Viicos) in [#11189](https://github.com/pydantic/pydantic/pull/11189)\n* Properly support type variable defaults by [@Viicos](https://github.com/Viicos) in [#11332](https://github.com/pydantic/pydantic/pull/11332)\n\n#### Changes\n\n* Rework `create_model` field definitions format by [@Viicos](https://github.com/Viicos) in [#11032](https://github.com/pydantic/pydantic/pull/11032)\n* Raise a deprecation warning when a field is annotated as final with a default value by [@Viicos](https://github.com/Viicos) in [#11168](https://github.com/pydantic/pydantic/pull/11168)\n* Deprecate accessing `model_fields` and `model_computed_fields` on instances by [@Viicos](https://github.com/Viicos) in [#11169](https://github.com/pydantic/pydantic/pull/11169)\n* Move core schema generation logic for path types inside the `GenerateSchema` class by [@sydney-runkle](https://github.com/sydney-runkle) in [#10846](https://github.com/pydantic/pydantic/pull/10846)\n* Move `deque` schema gen to `GenerateSchema` class by [@sydney-runkle](https://github.com/sydney-runkle) in [#11239](https://github.com/pydantic/pydantic/pull/11239)\n* Move `Mapping` schema gen to `GenerateSchema` to complete removal of `prepare_annotations_for_known_type` workaround by [@sydney-runkle](https://github.com/sydney-runkle) in [#11247](https://github.com/pydantic/pydantic/pull/11247)\n* Remove Python 3.8 Support by [@sydney-runkle](https://github.com/sydney-runkle) in [#11258](https://github.com/pydantic/pydantic/pull/11258)\n* Disable `pydantic-core` core schema validation by [@sydney-runkle](https://github.com/sydney-runkle) in [#11271](https://github.com/pydantic/pydantic/pull/11271)\n\n#### Performance\n\n* Only evaluate `FieldInfo` annotations if required during schema building by [@Viicos](https://github.com/Viicos) in [#10769](https://github.com/pydantic/pydantic/pull/10769)\n* Optimize calls to `get_type_ref` by [@Viicos](https://github.com/Viicos) in [#10863](https://github.com/pydantic/pydantic/pull/10863)\n* Improve `__setattr__` performance of Pydantic models by caching setter functions by [@MarkusSintonen](https://github.com/MarkusSintonen) in [#10868](https://github.com/pydantic/pydantic/pull/10868)\n* Improve annotation application performance by [@Viicos](https://github.com/Viicos) in [#11186](https://github.com/pydantic/pydantic/pull/11186)\n* Improve performance of `_typing_extra` module by [@Viicos](https://github.com/Viicos) in [#11255](https://github.com/pydantic/pydantic/pull/11255)\n* Refactor and optimize schema cleaning logic by [@Viicos](https://github.com/Viicos) and [@MarkusSintonen](https://github.com/MarkusSintonen) in [#11244](https://github.com/pydantic/pydantic/pull/11244)\n\n#### Fixes\n\n* Add validation tests for `_internal/_validators.py` by [@tkasuz](https://github.com/tkasuz) in [#10763](https://github.com/pydantic/pydantic/pull/10763)\n* Improve `TypeAdapter` instance repr by [@sydney-runkle](https://github.com/sydney-runkle) in [#10872](https://github.com/pydantic/pydantic/pull/10872)\n* Revert \"ci: use locally built pydantic-core with debug symbols by [@sydney-runkle](https://github.com/sydney-runkle) in [#10942](https://github.com/pydantic/pydantic/pull/10942)\n* Re-enable all FastAPI tests by [@tamird](https://github.com/tamird) in [#10948](https://github.com/pydantic/pydantic/pull/10948)\n* Fix typo in HISTORY.md. by [@felixxm](https://github.com/felixxm) in [#11077](https://github.com/pydantic/pydantic/pull/11077)\n* Infer final fields with a default value as class variables in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11121](https://github.com/pydantic/pydantic/pull/11121)\n* Recursively unpack `Literal` values if using PEP 695 type aliases by [@Viicos](https://github.com/Viicos) in [#11114](https://github.com/pydantic/pydantic/pull/11114)\n* Override `__subclasscheck__` on `ModelMetaclass` to avoid memory leak and performance issues by [@Viicos](https://github.com/Viicos) in [#11116](https://github.com/pydantic/pydantic/pull/11116)\n* Remove unused `_extract_get_pydantic_json_schema()` parameter by [@Viicos](https://github.com/Viicos) in [#11155](https://github.com/pydantic/pydantic/pull/11155)\n* Add FastAPI and SQLModel to third-party tests by [@sydney-runkle](https://github.com/sydney-runkle) in [#11044](https://github.com/pydantic/pydantic/pull/11044)\n* Fix conditional expressions syntax for third-party tests by [@Viicos](https://github.com/Viicos) in [#11162](https://github.com/pydantic/pydantic/pull/11162)\n* Move FastAPI tests to third-party workflow by [@Viicos](https://github.com/Viicos) in [#11164](https://github.com/pydantic/pydantic/pull/11164)\n* Improve discriminated union error message for invalid union variants by [@Viicos](https://github.com/Viicos) in [#11161](https://github.com/pydantic/pydantic/pull/11161)\n* Unpack PEP 695 type aliases if using the `Annotated` form by [@Viicos](https://github.com/Viicos) in [#11109](https://github.com/pydantic/pydantic/pull/11109)\n* Include `openapi-python-client` check in issue creation for third-party failures, use `main` branch by [@sydney-runkle](https://github.com/sydney-runkle) in [#11182](https://github.com/pydantic/pydantic/pull/11182)\n* Add pandera third-party tests by [@Viicos](https://github.com/Viicos) in [#11193](https://github.com/pydantic/pydantic/pull/11193)\n* Add ODMantic third-party tests by [@sydney-runkle](https://github.com/sydney-runkle) in [#11197](https://github.com/pydantic/pydantic/pull/11197)\n* Add missing stacklevel in `deprecated_instance_property` warning by [@Viicos](https://github.com/Viicos) in [#11200](https://github.com/pydantic/pydantic/pull/11200)\n* Copy `WithJsonSchema` schema to avoid sharing mutated data by [@thejcannon](https://github.com/thejcannon) in [#11014](https://github.com/pydantic/pydantic/pull/11014)\n* Do not cache parametrized models when in the process of parametrizing another model by [@Viicos](https://github.com/Viicos) in [#10704](https://github.com/pydantic/pydantic/pull/10704)\n* Re-enable Beanie third-party tests by [@Viicos](https://github.com/Viicos) in [#11214](https://github.com/pydantic/pydantic/pull/11214)\n* Add discriminated union related metadata entries to the `CoreMetadata` definition by [@Viicos](https://github.com/Viicos) in [#11216](https://github.com/pydantic/pydantic/pull/11216)\n* Consolidate schema definitions logic in the `_Definitions` class by [@Viicos](https://github.com/Viicos) in [#11208](https://github.com/pydantic/pydantic/pull/11208)\n* Support initializing root model fields with values of the `root` type in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11212](https://github.com/pydantic/pydantic/pull/11212)\n* Fix various issues with dataclasses and `use_attribute_docstrings` by [@Viicos](https://github.com/Viicos) in [#11246](https://github.com/pydantic/pydantic/pull/11246)\n* Only compute normalized decimal places if necessary in `decimal_places_validator` by [@misrasaurabh1](https://github.com/misrasaurabh1) in [#11281](https://github.com/pydantic/pydantic/pull/11281)\n* Fix two misplaced sentences in validation errors documentation by [@ananiavito](https://github.com/ananiavito) in [#11302](https://github.com/pydantic/pydantic/pull/11302)\n* Fix mkdocstrings inventory example in documentation by [@pawamoy](https://github.com/pawamoy) in [#11311](https://github.com/pydantic/pydantic/pull/11311)\n* Add support for `validation_alias` in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11295](https://github.com/pydantic/pydantic/pull/11295)\n* Do not transform model serializer functions as class methods in the mypy plugin by [@Viicos](https://github.com/Viicos) in [#11298](https://github.com/pydantic/pydantic/pull/11298)\n* Simplify `GenerateJsonSchema.literal_schema()` implementation by [@misrasaurabh1](https://github.com/misrasaurabh1) in [#11321](https://github.com/pydantic/pydantic/pull/11321)\n* Add additional allowed schemes for `ClickHouseDsn` by [@Maze21127](https://github.com/Maze21127) in [#11319](https://github.com/pydantic/pydantic/pull/11319)\n* Coerce decimal constraints to `Decimal` instances by [@Viicos](https://github.com/Viicos) in [#11350](https://github.com/pydantic/pydantic/pull/11350)\n* Fix `ValueError` on year zero by [@davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1583](https://github.com/pydantic/pydantic-core/pull/1583)\n\n#### Packaging\n\n* Bump dawidd6/action-download-artifact from 6 to 7 by [@dependabot](https://github.com/dependabot) in [#11018](https://github.com/pydantic/pydantic/pull/11018)\n* Re-enable memray related tests on Python 3.12+ by [@Viicos](https://github.com/Viicos) in [#11191](https://github.com/pydantic/pydantic/pull/11191)\n* Bump astral-sh/setup-uv to 5 by [@dependabot](https://github.com/dependabot) in [#11205](https://github.com/pydantic/pydantic/pull/11205)\n* Bump `ruff` to v0.9.0 by [@sydney-runkle](https://github.com/sydney-runkle) in [#11254](https://github.com/pydantic/pydantic/pull/11254)\n* Regular `uv.lock` deps update by [@sydney-runkle](https://github.com/sydney-runkle) in [#11333](https://github.com/pydantic/pydantic/pull/11333)\n* Add a `check_pydantic_core_version()` function by [@Viicos](https://github.com/Viicos) in [#11324](https://github.com/pydantic/pydantic/pull/11324)\n* Remove `greenlet` development dependency by [@Viicos](https://github.com/Viicos) in [#11351](https://github.com/pydantic/pydantic/pull/11351)\n* Bump `pydantic-core` to v2.28.0 by [@Viicos](https://github.com/Viicos) in [#11364](https://github.com/pydantic/pydantic/pull/11364)\n\n### New Contributors\n\n* [@FyZzyss](https://github.com/FyZzyss) made their first contribution in [#10789](https://github.com/pydantic/pydantic/pull/10789)\n* [@tamird](https://github.com/tamird) made their first contribution in [#10948](https://github.com/pydantic/pydantic/pull/10948)\n* [@felixxm](https://github.com/felixxm) made their first contribution in [#11077](https://github.com/pydantic/pydantic/pull/11077)\n* [@alexprabhat99](https://github.com/alexprabhat99) made their first contribution in [#11082](https://github.com/pydantic/pydantic/pull/11082)\n* [@Kharianne](https://github.com/Kharianne) made their first contribution in [#11111](https://github.com/pydantic/pydantic/pull/11111)\n* [@mdaffad](https://github.com/mdaffad) made their first contribution in [#11177](https://github.com/pydantic/pydantic/pull/11177)\n* [@thejcannon](https://github.com/thejcannon) made their first contribution in [#11014](https://github.com/pydantic/pydantic/pull/11014)\n* [@thomasfrimannkoren](https://github.com/thomasfrimannkoren) made their first contribution in [#11251](https://github.com/pydantic/pydantic/pull/11251)\n* [@usernameMAI](https://github.com/usernameMAI) made their first contribution in [#11275](https://github.com/pydantic/pydantic/pull/11275)\n* [@ananiavito](https://github.com/ananiavito) made their first contribution in [#11302](https://github.com/pydantic/pydantic/pull/11302)\n* [@pawamoy](https://github.com/pawamoy) made their first contribution in [#11311](https://github.com/pydantic/pydantic/pull/11311)\n* [@Maze21127](https://github.com/Maze21127) made their first contribution in [#11319](https://github.com/pydantic/pydantic/pull/11319)\n\n## v2.10.6 (2025-01-23)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.6)\n\n### What's Changed\n\n#### Fixes\n\n* Fix JSON Schema reference collection with `'examples'` keys by [@Viicos](https://github.com/Viicos) in [#11325](https://github.com/pydantic/pydantic/pull/11325)\n* Fix url python serialization by [@sydney-runkle](https://github.com/sydney-runkle) in [#11331](https://github.com/pydantic/pydantic/pull/11331)\n\n## v2.10.5 (2025-01-08)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.5)\n\n### What's Changed\n\n#### Fixes\n\n* Remove custom MRO implementation of Pydantic models by [@Viicos](https://github.com/Viicos) in [#11184](https://github.com/pydantic/pydantic/pull/11184)\n* Fix URL serialization for unions by [@sydney-runkle](https://github.com/sydney-runkle) in [#11233](https://github.com/pydantic/pydantic/pull/11233)\n\n## v2.10.4 (2024-12-18)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.4)\n\n### What's Changed\n\n#### Fixes\n\n* Fix for comparison of `AnyUrl` objects by [@alexprabhat99](https://github.com/alexprabhat99) in [#11082](https://github.com/pydantic/pydantic/pull/11082)\n* Properly fetch PEP 695 type params for functions, do not fetch annotations from signature by [@Viicos](https://github.com/Viicos) in [#11093](https://github.com/pydantic/pydantic/pull/11093)\n* Include JSON Schema input core schema in function schemas by [@Viicos](https://github.com/Viicos) in [#11085](https://github.com/pydantic/pydantic/pull/11085)\n* Add `len` to `_BaseUrl` to avoid TypeError by [@Kharianne](https://github.com/Kharianne) in [#11111](https://github.com/pydantic/pydantic/pull/11111)\n* Make sure the type reference is removed from the seen references by [@Viicos](https://github.com/Viicos) in [#11143](https://github.com/pydantic/pydantic/pull/11143)\n\n### New Contributors\n\n* [@FyZzyss](https://github.com/FyZzyss) made their first contribution in [#10789](https://github.com/pydantic/pydantic/pull/10789)\n* [@tamird](https://github.com/tamird) made their first contribution in [#10948](https://github.com/pydantic/pydantic/pull/10948)\n* [@felixxm](https://github.com/felixxm) made their first contribution in [#11077](https://github.com/pydantic/pydantic/pull/11077)\n* [@alexprabhat99](https://github.com/alexprabhat99) made their first contribution in [#11082](https://github.com/pydantic/pydantic/pull/11082)\n* [@Kharianne](https://github.com/Kharianne) made their first contribution in [#11111](https://github.com/pydantic/pydantic/pull/11111)\n\n#### Packaging\n\n* Bump `pydantic-core` to v2.27.2 by [@davidhewitt](https://github.com/davidhewitt) in [#11138](https://github.com/pydantic/pydantic/pull/11138)\n\n## v2.10.3 (2024-12-03)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.3)\n\n### What's Changed\n\n#### Fixes\n\n* Set fields when `defer_build` is set on Pydantic dataclasses by [@Viicos](https://github.com/Viicos) in [#10984](https://github.com/pydantic/pydantic/pull/10984)\n* Do not resolve the JSON Schema reference for `dict` core schema keys by [@Viicos](https://github.com/Viicos) in [#10989](https://github.com/pydantic/pydantic/pull/10989)\n* Use the globals of the function when evaluating the return type for `PlainSerializer` and `WrapSerializer` functions by [@Viicos](https://github.com/Viicos) in [#11008](https://github.com/pydantic/pydantic/pull/11008)\n* Fix host required enforcement for urls to be compatible with v2.9 behavior by [@sydney-runkle](https://github.com/sydney-runkle) in [#11027](https://github.com/pydantic/pydantic/pull/11027)\n* Add a `default_factory_takes_validated_data` property to `FieldInfo` by [@Viicos](https://github.com/Viicos) in [#11034](https://github.com/pydantic/pydantic/pull/11034)\n* Fix url json schema in `serialization` mode by [@sydney-runkle](https://github.com/sydney-runkle) in [#11035](https://github.com/pydantic/pydantic/pull/11035)\n\n## v2.10.2 (2024-11-25)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.2)\n\n### What's Changed\n\n#### Fixes\n\n* Only evaluate FieldInfo annotations if required during schema building by [@Viicos](https://github.com/Viicos) in [#10769](https://github.com/pydantic/pydantic/pull/10769)\n* Do not evaluate annotations for private fields by [@Viicos](https://github.com/Viicos) in [#10962](https://github.com/pydantic/pydantic/pull/10962)\n* Support serialization as any for `Secret` types and `Url` types by [@sydney-runkle](https://github.com/sydney-runkle) in [#10947](https://github.com/pydantic/pydantic/pull/10947)\n* Fix type hint of `Field.default` to be compatible with Python 3.8 and 3.9 by [@Viicos](https://github.com/Viicos) in [#10972](https://github.com/pydantic/pydantic/pull/10972)\n* Add hashing support for URL types by [@sydney-runkle](https://github.com/sydney-runkle) in [#10975](https://github.com/pydantic/pydantic/pull/10975)\n* Hide `BaseModel.__replace__` definition from type checkers by [@Viicos](https://github.com/Viicos) in [#10979](https://github.com/pydantic/pydantic/pull/10979)\n\n## v2.10.1 (2024-11-21)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.1)\n\n### What's Changed\n\n#### Fixes\n\n* Use the correct frame when instantiating a parametrized `TypeAdapter` by [@Viicos](https://github.com/Viicos) in [#10893](https://github.com/pydantic/pydantic/pull/10893)\n* Relax check for validated data in `default_factory` utils by [@sydney-runkle](https://github.com/sydney-runkle) in [#10909](https://github.com/pydantic/pydantic/pull/10909)\n* Fix type checking issue with `model_fields` and `model_computed_fields` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10911](https://github.com/pydantic/pydantic/pull/10911)\n* Use the parent configuration during schema generation for stdlib `dataclass`es by [@sydney-runkle](https://github.com/sydney-runkle) in [#10928](https://github.com/pydantic/pydantic/pull/10928)\n* Use the `globals` of the function when evaluating the return type of serializers and `computed_field`s by [@Viicos](https://github.com/Viicos) in [#10929](https://github.com/pydantic/pydantic/pull/10929)\n* Fix URL constraint application by [@sydney-runkle](https://github.com/sydney-runkle) in [#10922](https://github.com/pydantic/pydantic/pull/10922)\n* Fix URL equality with different validation methods by [@sydney-runkle](https://github.com/sydney-runkle) in [#10934](https://github.com/pydantic/pydantic/pull/10934)\n* Fix JSON schema title when specified as `''` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10936](https://github.com/pydantic/pydantic/pull/10936)\n* Fix `python` mode serialization for `complex` inference by [@sydney-runkle](https://github.com/sydney-runkle) in [pydantic-core#1549](https://github.com/pydantic/pydantic-core/pull/1549)\n\n#### Packaging\n\n* Bump `pydantic-core` version to `v2.27.1` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10938](https://github.com/pydantic/pydantic/pull/10938)\n\n### New Contributors\n\n## v2.10.0 (2024-11-20)\n\nThe code released in v2.10.0 is practically identical to that of v2.10.0b2.\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.0)\n\nSee the [v2.10 release blog post](https://pydantic.dev/articles/pydantic-v2-10-release) for the highlights!\n\n### What's Changed\n\n#### New Features\n\n* Support `fractions.Fraction` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10318](https://github.com/pydantic/pydantic/pull/10318)\n* Support `Hashable` for json validation by [@sydney-runkle](https://github.com/sydney-runkle) in [#10324](https://github.com/pydantic/pydantic/pull/10324)\n* Add a `SocketPath` type for `linux` systems by [@theunkn0wn1](https://github.com/theunkn0wn1) in [#10378](https://github.com/pydantic/pydantic/pull/10378)\n* Allow arbitrary refs in JSON schema `examples` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10417](https://github.com/pydantic/pydantic/pull/10417)\n* Support `defer_build` for Pydantic dataclasses by [@Viicos](https://github.com/Viicos) in [#10313](https://github.com/pydantic/pydantic/pull/10313)\n* Adding v1 / v2 incompatibility warning for nested v1 model by [@sydney-runkle](https://github.com/sydney-runkle) in [#10431](https://github.com/pydantic/pydantic/pull/10431)\n* Add support for unpacked `TypedDict` to type hint variadic keyword arguments with `@validate_call` by [@Viicos](https://github.com/Viicos) in [#10416](https://github.com/pydantic/pydantic/pull/10416)\n* Support compiled patterns in `protected_namespaces` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10522](https://github.com/pydantic/pydantic/pull/10522)\n* Add support for `propertyNames` in JSON schema by [@FlorianSW](https://github.com/FlorianSW) in [#10478](https://github.com/pydantic/pydantic/pull/10478)\n* Adding `__replace__` protocol for Python 3.13+ support by [@sydney-runkle](https://github.com/sydney-runkle) in [#10596](https://github.com/pydantic/pydantic/pull/10596)\n* Expose public `sort` method for JSON schema generation by [@sydney-runkle](https://github.com/sydney-runkle) in [#10595](https://github.com/pydantic/pydantic/pull/10595)\n* Add runtime validation of `@validate_call` callable argument by [@kc0506](https://github.com/kc0506) in [#10627](https://github.com/pydantic/pydantic/pull/10627)\n* Add `experimental_allow_partial` support by [@samuelcolvin](https://github.com/samuelcolvin) in [#10748](https://github.com/pydantic/pydantic/pull/10748)\n* Support default factories taking validated data as an argument by [@Viicos](https://github.com/Viicos) in [#10678](https://github.com/pydantic/pydantic/pull/10678)\n* Allow subclassing `ValidationError` and `PydanticCustomError` by [@Youssefares](https://github.com/Youssefares) in [pydantic/pydantic-core#1413](https://github.com/pydantic/pydantic-core/pull/1413)\n* Add `trailing-strings` support to `experimental_allow_partial` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10825](https://github.com/pydantic/pydantic/pull/10825)\n* Add `rebuild()` method for `TypeAdapter` and simplify `defer_build` patterns by [@sydney-runkle](https://github.com/sydney-runkle) in [#10537](https://github.com/pydantic/pydantic/pull/10537)\n* Improve `TypeAdapter` instance repr by [@sydney-runkle](https://github.com/sydney-runkle) in [#10872](https://github.com/pydantic/pydantic/pull/10872)\n\n#### Changes\n\n* Don't allow customization of `SchemaGenerator` until interface is more stable by [@sydney-runkle](https://github.com/sydney-runkle) in [#10303](https://github.com/pydantic/pydantic/pull/10303)\n* Cleanly `defer_build` on `TypeAdapters`, removing experimental flag by [@sydney-runkle](https://github.com/sydney-runkle) in [#10329](https://github.com/pydantic/pydantic/pull/10329)\n* Fix `mro` of generic subclass by [@kc0506](https://github.com/kc0506) in [#10100](https://github.com/pydantic/pydantic/pull/10100)\n* Strip whitespaces on JSON Schema title generation by [@sydney-runkle](https://github.com/sydney-runkle) in [#10404](https://github.com/pydantic/pydantic/pull/10404)\n* Use `b64decode` and `b64encode` for `Base64Bytes` type by [@sydney-runkle](https://github.com/sydney-runkle) in [#10486](https://github.com/pydantic/pydantic/pull/10486)\n* Relax protected namespace config default by [@sydney-runkle](https://github.com/sydney-runkle) in [#10441](https://github.com/pydantic/pydantic/pull/10441)\n* Revalidate parametrized generics if instance's origin is subclass of OG class by [@sydney-runkle](https://github.com/sydney-runkle) in [#10666](https://github.com/pydantic/pydantic/pull/10666)\n* Warn if configuration is specified on the `@dataclass` decorator and with the `__pydantic_config__` attribute by [@sydney-runkle](https://github.com/sydney-runkle) in [#10406](https://github.com/pydantic/pydantic/pull/10406)\n* Recommend against using `Ellipsis` (...) with `Field` by [@Viicos](https://github.com/Viicos) in [#10661](https://github.com/pydantic/pydantic/pull/10661)\n* Migrate to subclassing instead of annotated approach for pydantic url types by [@sydney-runkle](https://github.com/sydney-runkle) in [#10662](https://github.com/pydantic/pydantic/pull/10662)\n* Change JSON schema generation of `Literal`s and `Enums` by [@Viicos](https://github.com/Viicos) in [#10692](https://github.com/pydantic/pydantic/pull/10692)\n* Simplify unions involving `Any` or `Never` when replacing type variables by [@Viicos](https://github.com/Viicos) in [#10338](https://github.com/pydantic/pydantic/pull/10338)\n* Do not require padding when decoding `base64` bytes by [@bschoenmaeckers](https://github.com/bschoenmaeckers) in [pydantic/pydantic-core#1448](https://github.com/pydantic/pydantic-core/pull/1448)\n* Support dates all the way to 1BC by [@changhc](https://github.com/changhc) in [pydantic/speedate#77](https://github.com/pydantic/speedate/pull/77)\n\n#### Performance\n\n* Schema cleaning: skip unnecessary copies during schema walking by [@Viicos](https://github.com/Viicos) in [#10286](https://github.com/pydantic/pydantic/pull/10286)\n* Refactor namespace logic for annotations evaluation by [@Viicos](https://github.com/Viicos) in [#10530](https://github.com/pydantic/pydantic/pull/10530)\n* Improve email regexp on edge cases by [@AlekseyLobanov](https://github.com/AlekseyLobanov) in [#10601](https://github.com/pydantic/pydantic/pull/10601)\n* `CoreMetadata` refactor with an emphasis on documentation, schema build time performance, and reducing complexity by [@sydney-runkle](https://github.com/sydney-runkle) in [#10675](https://github.com/pydantic/pydantic/pull/10675)\n\n#### Packaging\n\n* Bump `pydantic-core` to `v2.27.0` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10825](https://github.com/pydantic/pydantic/pull/10825)\n* Replaced pdm with uv by [@frfahim](https://github.com/frfahim) in [#10727](https://github.com/pydantic/pydantic/pull/10727)\n\n#### Fixes\n\n* Remove guarding check on `computed_field` with `field_serializer` by [@nix010](https://github.com/nix010) in [#10390](https://github.com/pydantic/pydantic/pull/10390)\n* Fix `Predicate` issue in `v2.9.0` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10321](https://github.com/pydantic/pydantic/pull/10321)\n* Fixing `annotated-types` bound by [@sydney-runkle](https://github.com/sydney-runkle) in [#10327](https://github.com/pydantic/pydantic/pull/10327)\n* Turn `tzdata` install requirement into optional `timezone` dependency by [@jakob-keller](https://github.com/jakob-keller) in [#10331](https://github.com/pydantic/pydantic/pull/10331)\n* Use correct types namespace when building `namedtuple` core schemas by [@Viicos](https://github.com/Viicos) in [#10337](https://github.com/pydantic/pydantic/pull/10337)\n* Fix evaluation of stringified annotations during namespace inspection by [@Viicos](https://github.com/Viicos) in [#10347](https://github.com/pydantic/pydantic/pull/10347)\n* Fix `IncEx` type alias definition by [@Viicos](https://github.com/Viicos) in [#10339](https://github.com/pydantic/pydantic/pull/10339)\n* Do not error when trying to evaluate annotations of private attributes by [@Viicos](https://github.com/Viicos) in [#10358](https://github.com/pydantic/pydantic/pull/10358)\n* Fix nested type statement by [@kc0506](https://github.com/kc0506) in [#10369](https://github.com/pydantic/pydantic/pull/10369)\n* Improve typing of `ModelMetaclass.mro` by [@Viicos](https://github.com/Viicos) in [#10372](https://github.com/pydantic/pydantic/pull/10372)\n* Fix class access of deprecated `computed_field`s by [@Viicos](https://github.com/Viicos) in [#10391](https://github.com/pydantic/pydantic/pull/10391)\n* Make sure `inspect.iscoroutinefunction` works on coroutines decorated with `@validate_call` by [@MovisLi](https://github.com/MovisLi) in [#10374](https://github.com/pydantic/pydantic/pull/10374)\n* Fix `NameError` when using `validate_call` with PEP 695 on a class by [@kc0506](https://github.com/kc0506) in [#10380](https://github.com/pydantic/pydantic/pull/10380)\n* Fix `ZoneInfo` with various invalid types by [@sydney-runkle](https://github.com/sydney-runkle) in [#10408](https://github.com/pydantic/pydantic/pull/10408)\n* Fix `PydanticUserError` on empty `model_config` with annotations by [@cdwilson](https://github.com/cdwilson) in [#10412](https://github.com/pydantic/pydantic/pull/10412)\n* Fix variance issue in `_IncEx` type alias, only allow `True` by [@Viicos](https://github.com/Viicos) in [#10414](https://github.com/pydantic/pydantic/pull/10414)\n* Fix serialization schema generation when using `PlainValidator` by [@Viicos](https://github.com/Viicos) in [#10427](https://github.com/pydantic/pydantic/pull/10427)\n* Fix schema generation error when serialization schema holds references by [@Viicos](https://github.com/Viicos) in [#10444](https://github.com/pydantic/pydantic/pull/10444)\n* Inline references if possible when generating schema for `json_schema_input_type` by [@Viicos](https://github.com/Viicos) in [#10439](https://github.com/pydantic/pydantic/pull/10439)\n* Fix recursive arguments in `Representation` by [@Viicos](https://github.com/Viicos) in [#10480](https://github.com/pydantic/pydantic/pull/10480)\n* Fix representation for builtin function types by [@kschwab](https://github.com/kschwab) in [#10479](https://github.com/pydantic/pydantic/pull/10479)\n* Add python validators for decimal constraints (`max_digits` and `decimal_places`) by [@sydney-runkle](https://github.com/sydney-runkle) in [#10506](https://github.com/pydantic/pydantic/pull/10506)\n* Only fetch `__pydantic_core_schema__` from the current class during schema generation by [@Viicos](https://github.com/Viicos) in [#10518](https://github.com/pydantic/pydantic/pull/10518)\n* Fix `stacklevel` on deprecation warnings for `BaseModel` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10520](https://github.com/pydantic/pydantic/pull/10520)\n* Fix warning `stacklevel` in `BaseModel.__init__` by [@Viicos](https://github.com/Viicos) in [#10526](https://github.com/pydantic/pydantic/pull/10526)\n* Improve error handling for in-evaluable refs for discriminator application by [@sydney-runkle](https://github.com/sydney-runkle) in [#10440](https://github.com/pydantic/pydantic/pull/10440)\n* Change the signature of `ConfigWrapper.core_config` to take the title directly by [@Viicos](https://github.com/Viicos) in [#10562](https://github.com/pydantic/pydantic/pull/10562)\n* Do not use the previous config from the stack for dataclasses without config by [@Viicos](https://github.com/Viicos) in [#10576](https://github.com/pydantic/pydantic/pull/10576)\n* Fix serialization for IP types with `mode='python'` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10594](https://github.com/pydantic/pydantic/pull/10594)\n* Support constraint application for `Base64Etc` types by [@sydney-runkle](https://github.com/sydney-runkle) in [#10584](https://github.com/pydantic/pydantic/pull/10584)\n* Fix `validate_call` ignoring `Field` in `Annotated` by [@kc0506](https://github.com/kc0506) in [#10610](https://github.com/pydantic/pydantic/pull/10610)\n* Raise an error when `Self` is invalid by [@kc0506](https://github.com/kc0506) in [#10609](https://github.com/pydantic/pydantic/pull/10609)\n* Using `core_schema.InvalidSchema` instead of metadata injection + checks by [@sydney-runkle](https://github.com/sydney-runkle) in [#10523](https://github.com/pydantic/pydantic/pull/10523)\n* Tweak type alias logic by [@kc0506](https://github.com/kc0506) in [#10643](https://github.com/pydantic/pydantic/pull/10643)\n* Support usage of `type` with `typing.Self` and type aliases by [@kc0506](https://github.com/kc0506) in [#10621](https://github.com/pydantic/pydantic/pull/10621)\n* Use overloads for `Field` and `PrivateAttr` functions by [@Viicos](https://github.com/Viicos) in [#10651](https://github.com/pydantic/pydantic/pull/10651)\n* Clean up the `mypy` plugin implementation by [@Viicos](https://github.com/Viicos) in [#10669](https://github.com/pydantic/pydantic/pull/10669)\n* Properly check for `typing_extensions` variant of `TypeAliasType` by [@Daraan](https://github.com/Daraan) in [#10713](https://github.com/pydantic/pydantic/pull/10713)\n* Allow any mapping in `BaseModel.model_copy()` by [@Viicos](https://github.com/Viicos) in [#10751](https://github.com/pydantic/pydantic/pull/10751)\n* Fix `isinstance` behavior for urls by [@sydney-runkle](https://github.com/sydney-runkle) in [#10766](https://github.com/pydantic/pydantic/pull/10766)\n* Ensure `cached_property` can be set on Pydantic models by [@Viicos](https://github.com/Viicos) in [#10774](https://github.com/pydantic/pydantic/pull/10774)\n* Fix equality checks for primitives in literals by [@sydney-runkle](https://github.com/sydney-runkle) in [pydantic/pydantic-core#1459](https://github.com/pydantic/pydantic-core/pull/1459)\n* Properly enforce `host_required` for URLs by [@Viicos](https://github.com/Viicos) in [pydantic/pydantic-core#1488](https://github.com/pydantic/pydantic-core/pull/1488)\n* Fix when `coerce_numbers_to_str` enabled and string has invalid Unicode character by [@andrey-berenda](https://github.com/andrey-berenda) in [pydantic/pydantic-core#1515](https://github.com/pydantic/pydantic-core/pull/1515)\n* Fix serializing `complex` values in `Enum`s by [@changhc](https://github.com/changhc) in [pydantic/pydantic-core#1524](https://github.com/pydantic/pydantic-core/pull/1524)\n* Refactor `_typing_extra` module by [@Viicos](https://github.com/Viicos) in [#10725](https://github.com/pydantic/pydantic/pull/10725)\n* Support intuitive equality for urls by [@sydney-runkle](https://github.com/sydney-runkle) in [#10798](https://github.com/pydantic/pydantic/pull/10798)\n* Add `bytearray` to `TypeAdapter.validate_json` signature by [@samuelcolvin](https://github.com/samuelcolvin) in [#10802](https://github.com/pydantic/pydantic/pull/10802)\n* Ensure class access of method descriptors is performed when used as a default with `Field` by [@Viicos](https://github.com/Viicos) in [#10816](https://github.com/pydantic/pydantic/pull/10816)\n* Fix circular import with `validate_call` by [@sydney-runkle](https://github.com/sydney-runkle) in [#10807](https://github.com/pydantic/pydantic/pull/10807)\n* Fix error when using type aliases referencing other type aliases by [@Viicos](https://github.com/Viicos) in [#10809](https://github.com/pydantic/pydantic/pull/10809)\n* Fix `IncEx` type alias to be compatible with mypy by [@Viicos](https://github.com/Viicos) in [#10813](https://github.com/pydantic/pydantic/pull/10813)\n* Make `__signature__` a lazy property, do not deepcopy defaults by [@Viicos](https://github.com/Viicos) in [#10818](https://github.com/pydantic/pydantic/pull/10818)\n* Make `__signature__` lazy for dataclasses, too by [@sydney-runkle](https://github.com/sydney-runkle) in [#10832](https://github.com/pydantic/pydantic/pull/10832)\n* Subclass all single host url classes from `AnyUrl` to preserve behavior from v2.9 by [@sydney-runkle](https://github.com/sydney-runkle) in [#10856](https://github.com/pydantic/pydantic/pull/10856)\n\n### New Contributors\n\n* [@jakob-keller](https://github.com/jakob-keller) made their first contribution in [#10331](https://github.com/pydantic/pydantic/pull/10331)\n* [@MovisLi](https://github.com/MovisLi) made their first contribution in [#10374](https://github.com/pydantic/pydantic/pull/10374)\n* [@joaopalmeiro](https://github.com/joaopalmeiro) made their first contribution in [#10405](https://github.com/pydantic/pydantic/pull/10405)\n* [@theunkn0wn1](https://github.com/theunkn0wn1) made their first contribution in [#10378](https://github.com/pydantic/pydantic/pull/10378)\n* [@cdwilson](https://github.com/cdwilson) made their first contribution in [#10412](https://github.com/pydantic/pydantic/pull/10412)\n* [@dlax](https://github.com/dlax) made their first contribution in [#10421](https://github.com/pydantic/pydantic/pull/10421)\n* [@kschwab](https://github.com/kschwab) made their first contribution in [#10479](https://github.com/pydantic/pydantic/pull/10479)\n* [@santibreo](https://github.com/santibreo) made their first contribution in [#10453](https://github.com/pydantic/pydantic/pull/10453)\n* [@FlorianSW](https://github.com/FlorianSW) made their first contribution in [#10478](https://github.com/pydantic/pydantic/pull/10478)\n* [@tkasuz](https://github.com/tkasuz) made their first contribution in [#10555](https://github.com/pydantic/pydantic/pull/10555)\n* [@AlekseyLobanov](https://github.com/AlekseyLobanov) made their first contribution in [#10601](https://github.com/pydantic/pydantic/pull/10601)\n* [@NiclasvanEyk](https://github.com/NiclasvanEyk) made their first contribution in [#10667](https://github.com/pydantic/pydantic/pull/10667)\n* [@mschoettle](https://github.com/mschoettle) made their first contribution in [#10677](https://github.com/pydantic/pydantic/pull/10677)\n* [@Daraan](https://github.com/Daraan) made their first contribution in [#10713](https://github.com/pydantic/pydantic/pull/10713)\n* [@k4nar](https://github.com/k4nar) made their first contribution in [#10736](https://github.com/pydantic/pydantic/pull/10736)\n* [@UriyaHarpeness](https://github.com/UriyaHarpeness) made their first contribution in [#10740](https://github.com/pydantic/pydantic/pull/10740)\n* [@frfahim](https://github.com/frfahim) made their first contribution in [#10727](https://github.com/pydantic/pydantic/pull/10727)\n\n## v2.10.0b2 (2024-11-13)\n\nPre-release, see [the GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.0b2) for details.\n\n## v2.10.0b1 (2024-11-06)\n\nPre-release, see [the GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.0b1) for details.\n\n\n... see [here](https://docs.pydantic.dev/changelog/#v0322-2019-08-17) for earlier changes.\n", + "description_content_type": "text/markdown", + "author_email": "Samuel Colvin , Eric Jolibois , Hasan Ramezani , Adrian Garcia Badaracco <1755071+adriangb@users.noreply.github.com>, Terrence Dorsey , David Montague , Serge Matveenko , Marcelo Trylesinski , Sydney Runkle , David Hewitt , Alex Hall , Victorien Plot ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Framework :: Hypothesis", + "Framework :: Pydantic", + "Intended Audience :: Developers", + "Intended Audience :: Information Technology", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Internet", + "Topic :: Software Development :: Libraries :: Python Modules" + ], + "requires_dist": [ + "annotated-types>=0.6.0", + "pydantic-core==2.46.5", + "typing-extensions>=4.14.1", + "typing-inspection>=0.4.2", + "email-validator>=2.0.0; extra == 'email'", + "tzdata; (python_version >= '3.9' and platform_system == 'Windows') and extra == 'timezone'" + ], + "requires_python": ">=3.9", + "project_url": [ + "Homepage, https://github.com/pydantic/pydantic", + "Documentation, https://docs.pydantic.dev", + "Funding, https://github.com/sponsors/samuelcolvin", + "Source, https://github.com/pydantic/pydantic", + "Changelog, https://docs.pydantic.dev/latest/changelog/" + ], + "provides_extra": [ + "email", + "timezone" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/f7/3c/60674207246bc0a4009d2391b7c7251c7159f279c8d2ab8aae8ef46f3dee/pydantic_core-2.46.5-cp314-cp314-win_amd64.whl", + "archive_info": { + "hashes": { + "sha256": "fa10ef4112775900e7a0661068635eb67b2ab824fbde764de6e0e21982a93db0" + }, + "hash": "sha256=fa10ef4112775900e7a0661068635eb67b2ab824fbde764de6e0e21982a93db0" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "pydantic_core", + "version": "2.46.5", + "summary": "Core functionality for Pydantic validation and serialization", + "description": "# pydantic-core\n\n[![CI](https://github.com/pydantic/pydantic-core/workflows/ci/badge.svg?event=push)](https://github.com/pydantic/pydantic-core/actions?query=event%3Apush+branch%3Amain+workflow%3Aci)\n[![Coverage](https://codecov.io/gh/pydantic/pydantic-core/branch/main/graph/badge.svg)](https://codecov.io/gh/pydantic/pydantic-core)\n[![pypi](https://img.shields.io/pypi/v/pydantic-core.svg)](https://pypi.python.org/pypi/pydantic-core)\n[![versions](https://img.shields.io/pypi/pyversions/pydantic-core.svg)](https://github.com/pydantic/pydantic-core)\n[![license](https://img.shields.io/github/license/pydantic/pydantic-core.svg)](https://github.com/pydantic/pydantic-core/blob/main/LICENSE)\n\nThis package provides the core functionality for [pydantic](https://docs.pydantic.dev) validation and serialization.\n\nPydantic-core is currently around 17x faster than pydantic V1.\nSee [`tests/benchmarks/`](./tests/benchmarks/) for details.\n\n## Example of direct usage\n\n*NOTE: You should not need to use pydantic-core directly; instead, use pydantic, which in turn uses pydantic-core.*\n\n```py\nfrom pydantic_core import SchemaValidator, ValidationError\n\n\nv = SchemaValidator(\n {\n 'type': 'typed-dict',\n 'fields': {\n 'name': {\n 'type': 'typed-dict-field',\n 'schema': {\n 'type': 'str',\n },\n },\n 'age': {\n 'type': 'typed-dict-field',\n 'schema': {\n 'type': 'int',\n 'ge': 18,\n },\n },\n 'is_developer': {\n 'type': 'typed-dict-field',\n 'schema': {\n 'type': 'default',\n 'schema': {'type': 'bool'},\n 'default': True,\n },\n },\n },\n }\n)\n\nr1 = v.validate_python({'name': 'Samuel', 'age': 35})\nassert r1 == {'name': 'Samuel', 'age': 35, 'is_developer': True}\n\n# pydantic-core can also validate JSON directly\nr2 = v.validate_json('{\"name\": \"Samuel\", \"age\": 35}')\nassert r1 == r2\n\ntry:\n v.validate_python({'name': 'Samuel', 'age': 11})\nexcept ValidationError as e:\n print(e)\n \"\"\"\n 1 validation error for model\n age\n Input should be greater than or equal to 18\n [type=greater_than_equal, context={ge: 18}, input_value=11, input_type=int]\n \"\"\"\n```\n\n## Getting Started\n\n### Prerequisites\n\nYou'll need:\n\n1. **[Rust](https://rustup.rs/)** - Rust stable (or nightly for coverage)\n2. **[uv](https://docs.astral.sh/uv/getting-started/installation/)** - Fast Python package manager (will install Python 3.9+ automatically)\n3. **[git](https://git-scm.com/)** - For version control\n4. **[make](https://www.gnu.org/software/make/)** - For running development commands (or use `nmake` on Windows)\n\n### Quick Start\n\n```bash\n# Clone the repository (or from your fork)\ngit clone git@github.com:pydantic/pydantic-core.git\ncd pydantic-core\n\n# Install all dependencies using uv, setup pre-commit hooks, and build the development version\nmake install\n```\n\nVerify your installation by running:\n\n```bash\nmake\n```\n\nThis runs a full development cycle: formatting, building, linting, and testing\n\n### Development Commands\n\nRun `make help` to see all available commands, or use these common ones:\n\n```bash\nmake build-dev # to build the package during development\nmake build-prod # to perform an optimised build for benchmarking\nmake test # to run the tests\nmake testcov # to run the tests and generate a coverage report\nmake lint # to run the linter\nmake format # to format python and rust code\nmake all # to run to run build-dev + format + lint + test\n```\n\n### Useful Resources\n\n* [`python/pydantic_core/_pydantic_core.pyi`](./python/pydantic_core/_pydantic_core.pyi) - Python API types\n* [`python/pydantic_core/core_schema.py`](./python/pydantic_core/core_schema.py) - Core schema definitions\n* [`tests/`](./tests) - Comprehensive usage examples\n\n## Profiling\n\nIt's possible to profile the code using the [`flamegraph` utility from `flamegraph-rs`](https://github.com/flamegraph-rs/flamegraph). (Tested on Linux.) You can install this with `cargo install flamegraph`.\n\nRun `make build-profiling` to install a release build with debugging symbols included (needed for profiling).\n\nOnce that is built, you can profile pytest benchmarks with (e.g.):\n\n```bash\nflamegraph -- pytest tests/benchmarks/test_micro_benchmarks.py -k test_list_of_ints_core_py --benchmark-enable\n```\n\nThe `flamegraph` command will produce an interactive SVG at `flamegraph.svg`.\n\n## Releasing\n\nTBC (needs to be integrated into `pydantic` repository release process).\n\n", + "description_content_type": "text/markdown; charset=UTF-8; variant=GFM", + "home_page": "https://github.com/pydantic/pydantic", + "author_email": "Samuel Colvin , Adrian Garcia Badaracco <1755071+adriangb@users.noreply.github.com>, David Montague , David Hewitt , Sydney Runkle , Victorien Plot ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 3 - Alpha", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Programming Language :: Python :: Implementation :: GraalPy", + "Programming Language :: Rust", + "Framework :: Pydantic", + "Intended Audience :: Developers", + "Intended Audience :: Information Technology", + "Operating System :: POSIX :: Linux", + "Operating System :: Microsoft :: Windows", + "Operating System :: MacOS", + "Typing :: Typed" + ], + "requires_dist": [ + "typing-extensions>=4.14.1" + ], + "requires_python": ">=3.9", + "project_url": [ + "Funding, https://github.com/sponsors/samuelcolvin", + "Homepage, https://github.com/pydantic", + "Source, https://github.com/pydantic/pydantic/tree/main/pydantic-core" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0" + }, + "hash": "sha256=f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "annotated-types", + "version": "0.8.0", + "summary": "Reusable constraint types to use with typing.Annotated", + "description": "# annotated-types\n\n[![CI](https://github.com/annotated-types/annotated-types/workflows/CI/badge.svg?event=push)](https://github.com/annotated-types/annotated-types/actions?query=event%3Apush+branch%3Amain+workflow%3ACI)\n[![pypi](https://img.shields.io/pypi/v/annotated-types.svg)](https://pypi.python.org/pypi/annotated-types)\n[![versions](https://img.shields.io/pypi/pyversions/annotated-types.svg)](https://github.com/annotated-types/annotated-types)\n[![license](https://img.shields.io/github/license/annotated-types/annotated-types.svg)](https://github.com/annotated-types/annotated-types/blob/main/LICENSE)\n\n[PEP-593](https://peps.python.org/pep-0593/) added `typing.Annotated` as a way of\nadding context-specific metadata to existing types, and specifies that\n`Annotated[T, x]` _should_ be treated as `T` by any tool or library without special\nlogic for `x`.\n\nThis package provides metadata objects which can be used to represent common\nconstraints such as upper and lower bounds on scalar values and collection sizes,\na `Predicate` marker for runtime checks, and\ndescriptions of how we intend these metadata to be interpreted. In some cases,\nwe also note alternative representations which do not require this package.\n\n## Install\n\n```bash\npip install annotated-types\n```\n\n## Examples\n\n```python\nfrom typing import Annotated\nfrom annotated_types import Gt, Len, Predicate\n\nclass MyClass:\n age: Annotated[int, Gt(18)] # Valid: 19, 20, ...\n # Invalid: 17, 18, \"19\", 19.0, ...\n factors: list[Annotated[int, Predicate(is_prime)]] # Valid: 2, 3, 5, 7, 11, ...\n # Invalid: 4, 8, -2, 5.0, \"prime\", ...\n\n my_list: Annotated[list[int], Len(0, 10)] # Valid: [], [10, 20, 30, 40, 50]\n # Invalid: (1, 2), [\"abc\"], [0] * 20\n```\n\n## Documentation\n\n_While `annotated-types` avoids runtime checks for performance, users should not\nconstruct invalid combinations such as `MultipleOf(\"non-numeric\")` or `Annotated[int, Len(3)]`.\nDownstream implementors may choose to raise an error, emit a warning, silently ignore\na metadata item, etc., if the metadata objects described below are used with an\nincompatible type - or for any other reason!_\n\n### Gt, Ge, Lt, Le\n\nExpress inclusive and/or exclusive bounds on orderable values - which may be numbers,\ndates, times, strings, sets, etc. Note that the boundary value need not be of the\nsame type that was annotated, so long as they can be compared: `Annotated[int, Gt(1.5)]`\nis fine, for example, and implies that the value is an integer x such that `x > 1.5`.\n\nWe suggest that implementors may also interpret `functools.partial(operator.le, 1.5)`\nas being equivalent to `Gt(1.5)`, for users who wish to avoid a runtime dependency on\nthe `annotated-types` package.\n\nTo be explicit, these types have the following meanings:\n\n* `Gt(x)` - value must be \"Greater Than\" `x` - equivalent to exclusive minimum\n* `Ge(x)` - value must be \"Greater than or Equal\" to `x` - equivalent to inclusive minimum\n* `Lt(x)` - value must be \"Less Than\" `x` - equivalent to exclusive maximum\n* `Le(x)` - value must be \"Less than or Equal\" to `x` - equivalent to inclusive maximum\n\n### Interval\n\n`Interval(gt, ge, lt, le)` allows you to specify an upper and lower bound with a single\nmetadata object. `None` attributes should be ignored, and non-`None` attributes\ntreated as per the single bounds above.\n\n### MultipleOf\n\n`MultipleOf(multiple_of=x)` might be interpreted in two ways:\n\n1. Python semantics, implying `value % multiple_of == 0`, or\n2. [JSONschema semantics](https://json-schema.org/draft/2020-12/json-schema-validation.html#rfc.section.6.2.1),\n where `int(value / multiple_of) == value / multiple_of`.\n\nWe encourage users to be aware of these two common interpretations and their\ndistinct behaviours, especially since very large or non-integer numbers make\nit easy to cause silent data corruption due to floating-point imprecision.\n\nWe encourage libraries to carefully document which interpretation they implement.\n\n### MinLen, MaxLen, Len\n\n`Len()` implies that `min_length <= len(value) <= max_length` - lower and upper bounds are inclusive.\n\nAs well as `Len()` which can optionally include upper and lower bounds, we also\nprovide `MinLen(x)` and `MaxLen(y)` which are equivalent to `Len(min_length=x)`\nand `Len(max_length=y)` respectively.\n\n`Len`, `MinLen`, and `MaxLen` may be used with any type which supports `len(value)`.\n\nExamples of usage:\n\n* `Annotated[list, MaxLen(10)]` (or `Annotated[list, Len(max_length=10)]`) - list must have a length of 10 or less\n* `Annotated[str, MaxLen(10)]` - string must have a length of 10 or less\n* `Annotated[list, MinLen(3)]` (or `Annotated[list, Len(min_length=3)]`) - list must have a length of 3 or more\n* `Annotated[list, Len(4, 6)]` - list must have a length of 4, 5, or 6\n* `Annotated[list, Len(8, 8)]` - list must have a length of exactly 8\n\n#### Changed in v0.4.0\n\n* `min_inclusive` has been renamed to `min_length`, no change in meaning\n* `max_exclusive` has been renamed to `max_length`, upper bound is now **inclusive** instead of **exclusive**\n* The recommendation that slices are interpreted as `Len` has been removed due to ambiguity and different semantic\n meaning of the upper bound in slices vs. `Len`\n\nSee [issue #23](https://github.com/annotated-types/annotated-types/issues/23) for discussion.\n\n### Timezone\n\n`Timezone` can be used with a `datetime` or a `time` to express which timezones\nare allowed. `Annotated[datetime, Timezone(None)]` must be a naive datetime.\n`Timezone[...]` ([literal ellipsis](https://docs.python.org/3/library/constants.html#Ellipsis))\nexpresses that any timezone-aware datetime is allowed. You may also pass a specific\ntimezone string or [`tzinfo`](https://docs.python.org/3/library/datetime.html#tzinfo-objects)\nobject such as `Timezone(timezone.utc)` or `Timezone(\"Africa/Abidjan\")` to express that you only\nallow a specific timezone, though we note that this is often a symptom of fragile design.\n\n#### Changed in v0.x.x\n\n* `Timezone` accepts [`tzinfo`](https://docs.python.org/3/library/datetime.html#tzinfo-objects) objects instead of\n `timezone`, extending compatibility to [`zoneinfo`](https://docs.python.org/3/library/zoneinfo.html) and third party libraries.\n\n### Unit\n\n`Unit(unit: str)` expresses that the annotated numeric value is the magnitude of\na quantity with the specified unit. For example, `Annotated[float, Unit(\"m/s\")]`\nwould be a float representing a velocity in meters per second.\n\nPlease note that `annotated_types` itself makes no attempt to parse or validate\nthe unit string in any way. That is left entirely to downstream libraries,\nsuch as [`pint`](https://pint.readthedocs.io) or\n[`astropy.units`](https://docs.astropy.org/en/stable/units/).\n\nAn example of how a library might use this metadata:\n\n```python\nfrom annotated_types import Unit\nfrom typing import Annotated, TypeVar, Callable, Any, get_origin, get_args\n\n# given a type annotated with a unit:\nMeters = Annotated[float, Unit(\"m\")]\n\n\n# you can cast the annotation to a specific unit type with any\n# callable that accepts a string and returns the desired type\nT = TypeVar(\"T\")\ndef cast_unit(tp: Any, unit_cls: Callable[[str], T]) -> T | None:\n if get_origin(tp) is Annotated:\n for arg in get_args(tp):\n if isinstance(arg, Unit):\n return unit_cls(arg.unit)\n return None\n\n\n# using `pint`\nimport pint\npint_unit = cast_unit(Meters, pint.Unit)\n\n\n# using `astropy.units`\nimport astropy.units as u\nastropy_unit = cast_unit(Meters, u.Unit)\n```\n\n### Predicate\n\n`Predicate(func: Callable)` expresses that `func(value)` is truthy for valid values.\nUsers should prefer the statically inspectable metadata above, but if you need\nthe full power and flexibility of arbitrary runtime predicates... here it is.\n\nFor some common constraints, we provide generic types:\n\n* `LowerCase = Annotated[T, Predicate(str.islower)]`\n* `UpperCase = Annotated[T, Predicate(str.isupper)]`\n* `IsDigit = Annotated[T, Predicate(str.isdigit)]`\n* `IsFinite = Annotated[T, Predicate(math.isfinite)]`\n* `IsNotFinite = Annotated[T, Predicate(Not(math.isfinite))]`\n* `IsNan = Annotated[T, Predicate(math.isnan)]`\n* `IsNotNan = Annotated[T, Predicate(Not(math.isnan))]`\n* `IsInfinite = Annotated[T, Predicate(math.isinf)]`\n* `IsNotInfinite = Annotated[T, Predicate(Not(math.isinf))]`\n\nso that you can write e.g. `x: IsFinite[float] = 2.0` instead of the longer\n(but exactly equivalent) `x: Annotated[float, Predicate(math.isfinite)] = 2.0`.\n\nSome libraries might have special logic to handle known or understandable predicates,\nfor example by checking for `str.isdigit` and using its presence to both call custom\nlogic to enforce digit-only strings, and customise some generated external schema.\nUsers are therefore encouraged to avoid indirection like `lambda s: s.lower()`, in\nfavor of introspectable methods such as `str.lower` or `re.compile(\"pattern\").search`.\n\nTo enable basic negation of commonly used predicates like `math.isnan` without introducing introspection that makes it impossible for implementers to introspect the predicate we provide a `Not` wrapper that simply negates the predicate in an introspectable manner. Several of the predicates listed above are created in this manner.\n\nWe do not specify what behaviour should be expected for predicates that raise\nan exception. For example `Annotated[int, Predicate(str.isdigit)]` might silently\nskip invalid constraints, or statically raise an error; or it might try calling it\nand then propagate or discard the resulting\n`TypeError: descriptor 'isdigit' for 'str' objects doesn't apply to a 'int' object`\nexception. We encourage libraries to document the behaviour they choose.\n\n### Doc\n\n`doc()` can be used to add documentation information in `Annotated`, for function and method parameters, variables, class attributes, return types, and any place where `Annotated` can be used.\n\nIt expects a value that can be statically analyzed, as the main use case is for static analysis, editors, documentation generators, and similar tools.\n\nIt returns a `DocInfo` class with a single attribute `documentation` containing the value passed to `doc()`.\n\nThis is the early adopter's alternative form of the [`typing-doc` proposal](https://github.com/tiangolo/fastapi/blob/typing-doc/typing_doc.md).\n\n### Integrating downstream types with `GroupedMetadata`\n\nImplementers may choose to provide a convenience wrapper that groups multiple pieces of metadata.\nThis can help reduce verbosity and cognitive overhead for users.\nFor example, an implementer like Pydantic might provide a `Field` or `Meta` type that accepts keyword arguments and transforms these into low-level metadata:\n\n```python\nfrom dataclasses import dataclass\nfrom typing import Iterator\nfrom annotated_types import GroupedMetadata, Ge\n\n@dataclass\nclass Field(GroupedMetadata):\n ge: int | None = None\n description: str | None = None\n\n def __iter__(self) -> Iterator[object]:\n # Iterating over a GroupedMetadata object should yield annotated-types\n # constraint metadata objects which describe it as fully as possible,\n # and may include other unknown objects too.\n if self.ge is not None:\n yield Ge(self.ge)\n if self.description is not None:\n yield Description(self.description)\n```\n\nLibraries consuming annotated-types constraints should check for `GroupedMetadata` and unpack it by iterating over the object and treating the results as if they had been \"unpacked\" in the `Annotated` type. The same logic should be applied to the [PEP 646 `Unpack` type](https://peps.python.org/pep-0646/), so that `Annotated[T, Field(...)]`, `Annotated[T, Unpack[Field(...)]]` and `Annotated[T, *Field(...)]` are all treated consistently.\n\nLibraries consuming annotated-types should also ignore any metadata they do not recongize that came from unpacking a `GroupedMetadata`, just like they ignore unrecognized metadata in `Annotated` itself.\n\nOur own `annotated_types.Interval` class is a `GroupedMetadata` which unpacks itself into `Gt`, `Lt`, etc., so this is not an abstract concern. Similarly, `annotated_types.Len` is a `GroupedMetadata` which unpacks itself into `MinLen` (optionally) and `MaxLen`.\n\n### Consuming metadata\n\nWe intend to not be prescriptive as to _how_ the metadata and constraints are used, but as an example of how one might parse constraints from types annotations see our [implementation in `test_main.py`](https://github.com/annotated-types/annotated-types/blob/f59cf6d1b5255a0fe359b93896759a180bec30ae/tests/test_main.py#L94-L103).\n\nIt is up to the implementer to determine how this metadata is used.\nYou could use the metadata for runtime type checking, for generating schemas or to generate example data, amongst other use cases.\n\n## Design & History\n\nThis package was designed at the PyCon 2022 sprints by the maintainers of Pydantic\nand Hypothesis, with the goal of making it as easy as possible for end-users to\nprovide more informative annotations for use by runtime libraries.\n\nIt is deliberately minimal, and following PEP-593 allows considerable downstream\ndiscretion in what (if anything!) they choose to support. Nonetheless, we expect\nthat staying simple and covering _only_ the most common use-cases will give users\nand maintainers the best experience we can. If you'd like more constraints for your\ntypes - follow our lead, by defining them and documenting them downstream!\n", + "description_content_type": "text/markdown", + "author_email": "Adrian Garcia Badaracco <1755071+adriangb@users.noreply.github.com>, Samuel Colvin , Zac Hatfield-Dodds ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 4 - Beta", + "Environment :: Console", + "Environment :: MacOS X", + "Intended Audience :: Developers", + "Intended Audience :: Information Technology", + "License :: OSI Approved :: MIT License", + "Operating System :: POSIX :: Linux", + "Operating System :: Unix", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Topic :: Software Development :: Libraries :: Python Modules", + "Typing :: Typed" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://github.com/annotated-types/annotated-types", + "Source, https://github.com/annotated-types/annotated-types", + "Changelog, https://github.com/annotated-types/annotated-types/releases" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/95/9c/c510029fc6ef33a6275cd2c5d3cecd6613dfd6aa401d57c54f1c18852ccf/setuptools-84.0.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670" + }, + "hash": "sha256=51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "setuptools", + "version": "84.0.0", + "dynamic": [ + "license-file" + ], + "summary": "Most extensible Python build backend with support for C/C++ extension modules", + "description": ".. |pypi-version| image:: https://img.shields.io/pypi/v/setuptools.svg\n :target: https://pypi.org/project/setuptools\n\n.. |py-version| image:: https://img.shields.io/pypi/pyversions/setuptools.svg\n\n.. |test-badge| image:: https://github.com/pypa/setuptools/actions/workflows/main.yml/badge.svg\n :target: https://github.com/pypa/setuptools/actions?query=workflow%3A%22tests%22\n :alt: tests\n\n.. |ruff-badge| image:: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v2.json\n :target: https://github.com/astral-sh/ruff\n :alt: Ruff\n\n.. |docs-badge| image:: https://img.shields.io/readthedocs/setuptools/latest.svg\n :target: https://setuptools.pypa.io\n\n.. |skeleton-badge| image:: https://img.shields.io/badge/skeleton-2026-informational\n :target: https://blog.jaraco.com/skeleton\n\n.. |codecov-badge| image:: https://img.shields.io/codecov/c/github/pypa/setuptools/master.svg?logo=codecov&logoColor=white\n :target: https://codecov.io/gh/pypa/setuptools\n\n.. |tidelift-badge| image:: https://tidelift.com/badges/github/pypa/setuptools?style=flat\n :target: https://tidelift.com/subscription/pkg/pypi-setuptools?utm_source=pypi-setuptools&utm_medium=readme\n\n.. |discord-badge| image:: https://img.shields.io/discord/803025117553754132\n :target: https://discord.com/channels/803025117553754132/815945031150993468\n :alt: Discord\n\n|pypi-version| |py-version| |test-badge| |ruff-badge| |docs-badge| |skeleton-badge| |codecov-badge| |discord-badge|\n\nSee the `Quickstart `_\nand the `User's Guide `_ for\ninstructions on how to use Setuptools.\n\nQuestions and comments should be directed to `GitHub Discussions\n`_.\nBug reports and especially tested patches may be\nsubmitted directly to the `bug tracker\n`_.\n\n\nCode of Conduct\n===============\n\nEveryone interacting in the setuptools project's codebases, issue trackers,\nchat rooms, and fora is expected to follow the\n`PSF Code of Conduct `_.\n\n\nFor Enterprise\n==============\n\nAvailable as part of the Tidelift Subscription.\n\nSetuptools and the maintainers of thousands of other packages are working with Tidelift to deliver one enterprise subscription that covers all of the open source you use.\n\n`Learn more `_.\n", + "description_content_type": "text/x-rst", + "keywords": [ + "CPAN", + "PyPI", + "distutils", + "eggs", + "package", + "management" + ], + "author_email": "Python Packaging Authority ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: System :: Archiving :: Packaging", + "Topic :: System :: Systems Administration", + "Topic :: Utilities" + ], + "requires_dist": [ + "pytest!=8.1.*,>=6; extra == \"test\"", + "virtualenv>=13.0.0; extra == \"test\"", + "wheel>=0.44.0; extra == \"test\"", + "pip>=19.1; extra == \"test\"", + "packaging>=24.2; extra == \"test\"", + "jaraco.envs>=2.2; extra == \"test\"", + "pytest-xdist>=3; extra == \"test\"", + "jaraco.path>=3.7.2; extra == \"test\"", + "build[virtualenv]>=1.0.3; extra == \"test\"", + "filelock>=3.4.0; extra == \"test\"", + "ini2toml[lite]>=0.14; extra == \"test\"", + "tomli-w>=1.0.0; extra == \"test\"", + "pytest-timeout; extra == \"test\"", + "pytest-perf; sys_platform != \"cygwin\" and extra == \"test\"", + "jaraco.develop>=7.21; (python_version >= \"3.9\" and sys_platform != \"cygwin\") and extra == \"test\"", + "pytest-home>=0.5; extra == \"test\"", + "pytest-subprocess; extra == \"test\"", + "pyproject-hooks!=1.1; extra == \"test\"", + "jaraco.test>=5.5; extra == \"test\"", + "sphinx>=3.5; extra == \"doc\"", + "jaraco.packaging>=9.3; extra == \"doc\"", + "rst.linker>=1.9; extra == \"doc\"", + "furo; extra == \"doc\"", + "sphinx-lint; extra == \"doc\"", + "jaraco.tidelift>=1.4; extra == \"doc\"", + "pygments-github-lexers==0.0.5; extra == \"doc\"", + "sphinx-favicon; extra == \"doc\"", + "sphinx-inline-tabs; extra == \"doc\"", + "sphinx-reredirects; extra == \"doc\"", + "sphinxcontrib-towncrier; extra == \"doc\"", + "sphinx-notfound-page<2,>=1; extra == \"doc\"", + "pyproject-hooks!=1.1; extra == \"doc\"", + "towncrier<24.7; extra == \"doc\"", + "packaging>=24.2; extra == \"core\"", + "more_itertools>=8.8; extra == \"core\"", + "jaraco.text>=3.7; extra == \"core\"", + "importlib_metadata>=6; python_version < \"3.10\" and extra == \"core\"", + "tomli>=2.0.1; python_version < \"3.11\" and extra == \"core\"", + "wheel>=0.43.0; extra == \"core\"", + "jaraco.functools>=4; extra == \"core\"", + "more_itertools; extra == \"core\"", + "pytest-checkdocs>=2.14; extra == \"check\"", + "pytest-ruff>=0.2.1; sys_platform != \"cygwin\" and extra == \"check\"", + "ruff>=0.13.0; sys_platform != \"cygwin\" and extra == \"check\"", + "pytest-cov; extra == \"cover\"", + "pytest-enabler>=3.4; extra == \"enabler\"", + "pytest-mypy>=1.0.1; platform_python_implementation != \"PyPy\" and extra == \"type\"", + "mypy==1.18.*; extra == \"type\"", + "importlib_metadata>=7.0.2; python_version < \"3.10\" and extra == \"type\"", + "jaraco.develop>=7.21; sys_platform != \"cygwin\" and extra == \"type\"" + ], + "requires_python": ">=3.10", + "project_url": [ + "Source, https://github.com/pypa/setuptools", + "Documentation, https://setuptools.pypa.io/", + "Changelog, https://setuptools.pypa.io/en/stable/history.html" + ], + "provides_extra": [ + "test", + "doc", + "ssl", + "certs", + "core", + "check", + "cover", + "enabler", + "type" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/4e/d6/1ec1b290f9e0fb067899b61e1d37a30c923068bad260b216dbe37a7d2967/starlette-1.7.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e" + }, + "hash": "sha256=67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "starlette", + "version": "1.7.0", + "summary": "The little ASGI library that shines.", + "description": "

\n \n \n \n \"starlette-logo\"\n \n

\n\n

\n ✨ The little ASGI framework that shines. ✨\n

\n\n---\n\n[![Build Status](https://github.com/Kludex/starlette/workflows/Test%20Suite/badge.svg)](https://github.com/Kludex/starlette/actions)\n[![Package version](https://badge.fury.io/py/starlette.svg)](https://pypi.python.org/pypi/starlette)\n[![Supported Python Version](https://img.shields.io/pypi/pyversions/starlette.svg?color=%2334D058)](https://pypi.org/project/starlette)\n[![Discord](https://img.shields.io/discord/1051468649518616576?logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2)](https://discord.gg/RxKUF5JuHs)\n\n---\n\n**Documentation**: https://starlette.dev\n\n**Source Code**: https://github.com/Kludex/starlette\n\n---\n\n# Starlette\n\nStarlette is a lightweight [ASGI][asgi] framework/toolkit,\nwhich is ideal for building async web services in Python.\n\nIt is production-ready, and gives you the following:\n\n* A lightweight, low-complexity HTTP web framework.\n* WebSocket support.\n* In-process background tasks.\n* Startup and shutdown events.\n* Test client built on `httpx2`.\n* CORS, GZip, Static Files, Streaming responses.\n* Session and Cookie support.\n* 100% test coverage.\n* 100% type annotated codebase.\n* Few hard dependencies.\n* Compatible with `asyncio` and `trio` backends.\n* Great overall performance [against independent benchmarks][techempower].\n\n## Installation\n\n```shell\n$ pip install starlette\n```\n\nYou'll also want to install an ASGI server, such as [uvicorn](https://uvicorn.dev) or any of the [other ASGI server implementations](https://asgi.readthedocs.io/en/latest/implementations.html#servers).\n\n```shell\n$ pip install uvicorn\n```\n\n## Example\n\n```python title=\"main.py\"\nfrom starlette.applications import Starlette\nfrom starlette.responses import JSONResponse\nfrom starlette.routing import Route\n\n\nasync def homepage(request):\n return JSONResponse({'hello': 'world'})\n\nroutes = [\n Route(\"/\", endpoint=homepage)\n]\n\napp = Starlette(debug=True, routes=routes)\n```\n\nThen run the application using Uvicorn:\n\n```shell\n$ uvicorn main:app\n```\n\n## Dependencies\n\nStarlette only requires `anyio`, and the following are optional:\n\n* [`httpx2`][httpx2] - Required if you want to use the `TestClient`.\n* [`jinja2`][jinja2] - Required if you want to use `Jinja2Templates`.\n* [`opentelemetry-api`][opentelemetry-api] - Required for `OpenTelemetryMiddleware`.\n* [`python-multipart`][python-multipart] - Required if you want to support form parsing, with `request.form()`.\n* [`itsdangerous`][itsdangerous] - Required for `SessionMiddleware` support.\n* [`pyyaml`][pyyaml] - Required for `SchemaGenerator` support.\n\nYou can install all of these with `pip install starlette[full]`.\n\n## Framework or Toolkit\n\nStarlette is designed to be used either as a complete framework, or as\nan ASGI toolkit. You can use any of its components independently.\n\n```python\nfrom starlette.responses import PlainTextResponse\n\n\nasync def app(scope, receive, send):\n assert scope['type'] == 'http'\n response = PlainTextResponse('Hello, world!')\n await response(scope, receive, send)\n```\n\nRun the `app` application in `example.py`:\n\n```shell\n$ uvicorn example:app\nINFO: Started server process [11509]\nINFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)\n```\n\nRun uvicorn with `--reload` to enable auto-reloading on code changes.\n\n## Modularity\n\nThe modularity that Starlette is designed on promotes building reusable\ncomponents that can be shared between any ASGI framework. This should enable\nan ecosystem of shared middleware and mountable applications.\n\nThe clean API separation also means it's easier to understand each component\nin isolation.\n\n---\n\n

Starlette is BSD licensed code.
Designed & crafted with care.

— ⭐️ —

\n\n[asgi]: https://asgi.readthedocs.io/en/latest/\n[httpx2]: https://pypi.org/project/httpx2/\n[jinja2]: https://jinja.palletsprojects.com/\n[opentelemetry-api]: https://opentelemetry.io/docs/languages/python/api/\n[python-multipart]: https://multipart.fastapiexpert.com/\n[itsdangerous]: https://itsdangerous.palletsprojects.com/\n[sqlalchemy]: https://www.sqlalchemy.org\n[pyyaml]: https://pyyaml.org/wiki/PyYAMLDocumentation\n[techempower]: https://github.com/TechEmpower/FrameworkBenchmarks\n", + "description_content_type": "text/markdown", + "author_email": "Tom Christie ", + "maintainer_email": "Marcelo Trylesinski ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.md" + ], + "classifier": [ + "Development Status :: 3 - Alpha", + "Environment :: Web Environment", + "Framework :: AnyIO", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Topic :: Internet :: WWW/HTTP" + ], + "requires_dist": [ + "anyio<5,>=4.0.0", + "typing-extensions>=4.10.0; python_version < '3.13'", + "httpx2>=2.0.0; extra == 'full'", + "httpx<0.29.0,>=0.27.0; extra == 'full'", + "itsdangerous; extra == 'full'", + "jinja2; extra == 'full'", + "opentelemetry-api; extra == 'full'", + "python-multipart>=0.0.18; extra == 'full'", + "pyyaml; extra == 'full'" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://github.com/Kludex/starlette", + "Documentation, https://starlette.dev/", + "Changelog, https://starlette.dev/release-notes/", + "Funding, https://github.com/sponsors/Kludex", + "Source, https://github.com/Kludex/starlette" + ], + "provides_extra": [ + "full" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/12/b8/4bd346e22b28902df4d651910f5242c28d84e4a5c2435ca5c3f797ed7e2e/anyio-4.15.1-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101" + }, + "hash": "sha256=6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "anyio", + "version": "4.15.1", + "dynamic": [ + "license-file" + ], + "summary": "High-level concurrency and networking framework on top of asyncio or Trio", + "description": ".. image:: https://github.com/agronholm/anyio/actions/workflows/test.yml/badge.svg\n :target: https://github.com/agronholm/anyio/actions/workflows/test.yml\n :alt: Build Status\n.. image:: https://coveralls.io/repos/github/agronholm/anyio/badge.svg?branch=master\n :target: https://coveralls.io/github/agronholm/anyio?branch=master\n :alt: Code Coverage\n.. image:: https://readthedocs.org/projects/anyio/badge/?version=latest\n :target: https://anyio.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation\n.. image:: https://badges.gitter.im/gitterHQ/gitter.svg\n :target: https://gitter.im/python-trio/AnyIO\n :alt: Gitter chat\n.. image:: https://tidelift.com/badges/package/pypi/anyio\n :target: https://tidelift.com/subscription/pkg/pypi-anyio\n :alt: Tidelift\n\nAnyIO is an asynchronous networking and concurrency library that works on top of either asyncio_ or\nTrio_. It implements Trio-like `structured concurrency`_ (SC) on top of asyncio and works in harmony\nwith the native SC of Trio itself.\n\nApplications and libraries written against AnyIO's API will run unmodified on either asyncio_ or\nTrio_. AnyIO can also be adopted into a library or application incrementally – bit by bit, no full\nrefactoring necessary. It will blend in with the native libraries of your chosen backend.\n\nTo find out why you might want to use AnyIO's APIs instead of asyncio's, you can read about it\n`here `_.\n\nDocumentation\n-------------\n\nView full documentation at: https://anyio.readthedocs.io/\n\nFeatures\n--------\n\nAnyIO offers the following functionality:\n\n* Task groups (nurseries_ in trio terminology)\n* High-level networking (TCP, UDP and UNIX sockets)\n\n * `Happy eyeballs`_ algorithm for TCP connections (more robust than that of asyncio on Python\n 3.8)\n * async/await style UDP sockets (unlike asyncio where you still have to use Transports and\n Protocols)\n\n* A versatile API for byte streams and object streams\n* Inter-task synchronization and communication (locks, conditions, events, semaphores, object\n streams and futures)\n* Worker threads\n* Subprocesses\n* Subinterpreter support for code parallelization (on Python 3.13 and later)\n* Asynchronous file I/O (using worker threads)\n* Signal handling\n* Asynchronous versions of the functools_ and itertools_ modules\n\nAnyIO also comes with its own pytest_ plugin which also supports asynchronous fixtures.\nIt even works with the popular Hypothesis_ library.\n\n.. _asyncio: https://docs.python.org/3/library/asyncio.html\n.. _Trio: https://github.com/python-trio/trio\n.. _structured concurrency: https://en.wikipedia.org/wiki/Structured_concurrency\n.. _nurseries: https://trio.readthedocs.io/en/stable/reference-core.html#nurseries-and-spawning\n.. _Happy eyeballs: https://en.wikipedia.org/wiki/Happy_Eyeballs\n.. _pytest: https://docs.pytest.org/en/latest/\n.. _functools: https://docs.python.org/3/library/functools.html\n.. _itertools: https://docs.python.org/3/library/itertools.html\n.. _Hypothesis: https://hypothesis.works/\n\nSecurity contact information\n----------------------------\n\nTo report a security vulnerability, please use the `Tidelift security contact`_.\nTidelift will coordinate the fix and disclosure.\n\n.. _Tidelift security contact: https://tidelift.com/security\n", + "description_content_type": "text/x-rst", + "author_email": "Alex Grönholm ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Framework :: AnyIO", + "Typing :: Typed", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Programming Language :: Python :: Free Threading :: 2 - Beta" + ], + "requires_dist": [ + "exceptiongroup>=1.0.2; python_version < \"3.11\"", + "idna>=2.8", + "typing_extensions>=4.16.0; python_version < \"3.15\"", + "trio>=0.32.0; extra == \"trio\"" + ], + "requires_python": ">=3.10", + "project_url": [ + "Documentation, https://anyio.readthedocs.io/en/latest/", + "Changelog, https://anyio.readthedocs.io/en/stable/versionhistory.html", + "Source code, https://github.com/agronholm/anyio", + "Issue tracker, https://github.com/agronholm/anyio/issues" + ], + "provides_extra": [ + "trio" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c" + }, + "hash": "sha256=ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "idna", + "version": "3.20", + "summary": "Internationalized Domain Names in Applications (IDNA)", + "description": "# Internationalized Domain Names in Applications (IDNA)\n\nSupport for [Internationalized Domain Names in Applications\n(IDNA)](https://tools.ietf.org/html/rfc5891) and [Unicode IDNA\nCompatibility Processing](https://unicode.org/reports/tr46/). It\nsupersedes the standard library's `encodings.idna`, which only\nimplements the 2003 specification, offering broader script coverage and\nlimiting domains with known security vulnerabilities.\n\n## Usage\n\nPackage may be installed from [PyPI](https://pypi.org/project/idna/) via\nthe typical methods (e.g. `python3 -m pip install idna`)\n\nFor typical usage, the `encode` and `decode` functions will take a\ndomain name argument and perform a conversion to ASCII-compatible encoding\n(known as A-labels), or to Unicode strings (known as U-labels)\nrespectively.\n\n```pycon\n>>> import idna\n>>> idna.encode('ドメイン.テスト')\nb'xn--eckwd4c7c.xn--zckzah'\n>>> print(idna.decode('xn--eckwd4c7c.xn--zckzah'))\nドメイン.テスト\n```\n\nConversions can be applied at a per-label basis using the `ulabel` or\n`alabel` functions for specialized use cases.\n\n\n### Compatibility Mapping (UTS #46)\n\nThis library provides support for [Unicode IDNA Compatibility\nProcessing](https://unicode.org/reports/tr46/) which normalizes input from\ndifferent potential ways a user may input a domain prior to performing the IDNA\nconversion operations. This functionality, known as a\n[mapping](https://tools.ietf.org/html/rfc5895), is considered by the\nspecification to be a local user-interface issue distinct from IDNA\nconversion functionality.\n\nFor example, \"Königsgäßchen\" is not a permissible label as capital letters\nare not allowed. UTS #46 will convert this into lower case prior to applying\nthe IDNA conversion.\n\n```pycon\n>>> import idna\n>>> idna.encode('Königsgäßchen')\n...\nidna.core.InvalidCodepoint: Codepoint U+004B at position 1 of 'Königsgäßchen' not allowed\n>>> idna.encode('Königsgäßchen', uts46=True)\nb'xn--knigsgchen-b4a3dun'\n>>> idna.decode('xn--knigsgchen-b4a3dun')\n'königsgäßchen'\n```\n\nWhen performing a decode operation for display purposes, `decode()`\naccepts a `display=True` argument that leaves any `xn--` label that\nfails to decode unchanged. This is useful for user interface display\nwhere a domain is in use, the A-label form can be presented when it\nis not a valid IDN.\n\n\n## Exceptions\n\nAll errors raised during conversion derive from the `idna.IDNAError`\nbase class. The more specific exceptions are:\n\n* `idna.IDNABidiError` — raised when a label contains an illegal\n combination of left-to-right and right-to-left characters.\n* `idna.InvalidCodepoint` — raised when a label contains a codepoint\n that is INVALID for IDNA.\n* `idna.InvalidCodepointContext` — raised when a CONTEXTO or CONTEXTJ\n codepoint appears in a position whose contextual requirements are\n not satisfied.\n\nExceptions carry machine-readable attributes so that applications do\nnot need to parse the message: `code` is a short, stable identifier\nfor the rule that failed (such as `disallowed_codepoint` or\n`label_too_long`); and, when the failure can be attributed to a\nparticular character, `text` (the label or domain being validated),\n`codepoint` (the offending codepoint as an integer) and `position`\nare set. \n\n\n## Command-line tool\n\nThe package supports command-line usage to convert domain names\nbetween their Unicode and ASCII-compatible forms. It can be run either\nas a module (`python3 -m idna`) or, once installed (such as with `uv\ntool` or `pipx`), via the `idna` script:\n\n```bash\n$ uv tool install idna\n$ idna xn--e1afmkfd.xn--p1ai\nпример.рф\n$ idna пример.рф\nxn--e1afmkfd.xn--p1ai\n```\n\nMode can be specified with `-e`/`--encode` or `-d`/`--decode`, otherwise\nit will be chosen automatically based on the first input. Multiple\ndomains can be supplied either as arguments or through standard input.\nUTS #46 mapping is applied by default, which lets the tool accept\ninputs that aren't strictly valid IDNA 2008 by normalising them first,\npass `--strict` to disable UTS #46.\n\nConversion failures are reported on stderr together with the\noffending input; processing continues with the remaining domains and\nthe tool exits with a non-zero status if any conversion failed.\n\n\n## Additional Notes\n\n* **Python version support**. This library supports Python 3.9 and higher.\n As this library serves as a low-level toolkit for a variety of\n applications, we strive to support all versions of Python that are\n not beyond end-of-life. Free-threaded Python is also supported,\n as the library holds no mutable global state the functions can be\n called concurrently from multiple threads.\n\n* **Unicode version**. The IDNA and UTS #46 lookup tables are generated\n from a specific Unicode release. Some Unicode data depends on the\n running Python's `unicodedata` module, so on an older Python a\n character new to Unicode may be rejected as unknown even if this\n library knows about it.\n\n* **Emoji**. It is an occasional request to support emoji domains in\n this library. Encoding of symbols like emoji is expressly prohibited by\n the IDNA technical standard, and emoji domains are broadly phased\n out across the domain industry due to associated security risks.\n\n* **Regenerating lookup tables**. The IDNA and UTS #46 functionality\n relies upon pre-calculated lookup tables, generated using the\n `idna-data` script in [`tools/`](tools/README.md).\n\n", + "description_content_type": "text/markdown", + "author_email": "Kim Davies ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.md" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Intended Audience :: System Administrators", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Internet :: Name Service (DNS)", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Utilities" + ], + "requires_dist": [ + "ruff >= 0.16.0 ; extra == \"all\"", + "mypy >= 1.11.2 ; extra == \"all\"", + "ty >= 0.0.37 ; extra == \"all\"", + "pytest >= 8.3.2 ; extra == \"all\"", + "hypothesis >= 6.141.1 ; extra == \"all\"", + "coverage >= 7.10.0 ; extra == \"all\"" + ], + "requires_python": ">=3.9", + "project_url": [ + "Changelog, https://github.com/kjd/idna/blob/master/HISTORY.md", + "Issue tracker, https://github.com/kjd/idna/issues", + "Source, https://github.com/kjd/idna" + ], + "provides_extra": [ + "all" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5" + }, + "hash": "sha256=e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "sympy", + "version": "1.14.0", + "dynamic": [ + "author", + "author-email", + "classifier", + "description", + "description-content-type", + "home-page", + "keywords", + "license", + "license-file", + "project-url", + "provides-extra", + "requires-dist", + "requires-python", + "summary" + ], + "summary": "Computer algebra system (CAS) in Python", + "description": "# SymPy\n\n[![pypi version](https://img.shields.io/pypi/v/sympy.svg)](https://pypi.python.org/pypi/sympy)\n[![Join the chat at https://gitter.im/sympy/sympy](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/sympy/sympy?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)\n[![Zenodo Badge](https://zenodo.org/badge/18918/sympy/sympy.svg)](https://zenodo.org/badge/latestdoi/18918/sympy/sympy)\n[![Downloads](https://pepy.tech/badge/sympy/month)](https://pepy.tech/project/sympy)\n[![GitHub Issues](https://img.shields.io/badge/issue_tracking-github-blue.svg)](https://github.com/sympy/sympy/issues)\n[![Git Tutorial](https://img.shields.io/badge/PR-Welcome-%23FF8300.svg?)](https://git-scm.com/book/en/v2/GitHub-Contributing-to-a-Project)\n[![Powered by NumFocus](https://img.shields.io/badge/powered%20by-NumFOCUS-orange.svg?style=flat&colorA=E1523D&colorB=007D8A)](https://numfocus.org)\n[![Commits since last release](https://img.shields.io/github/commits-since/sympy/sympy/latest.svg?longCache=true&style=flat-square&logo=git&logoColor=fff)](https://github.com/sympy/sympy/releases)\n\n[![SymPy Banner](https://github.com/sympy/sympy/raw/master/banner.svg)](https://sympy.org/)\n\n\nSee the [AUTHORS](AUTHORS) file for the list of authors.\n\nAnd many more people helped on the SymPy mailing list, reported bugs,\nhelped organize SymPy's participation in the Google Summer of Code, the\nGoogle Highly Open Participation Contest, Google Code-In, wrote and\nblogged about SymPy...\n\nLicense: New BSD License (see the [LICENSE](LICENSE) file for details) covers all\nfiles in the sympy repository unless stated otherwise.\n\nOur mailing list is at\n.\n\nWe have a community chat at [Gitter](https://gitter.im/sympy/sympy). Feel\nfree to ask us anything there. We have a very welcoming and helpful\ncommunity.\n\n## Download\n\nThe recommended installation method is through Anaconda,\n\n\nYou can also get the latest version of SymPy from\n\n\nTo get the git version do\n\n $ git clone https://github.com/sympy/sympy.git\n\nFor other options (tarballs, debs, etc.), see\n.\n\n## Documentation and Usage\n\nFor in-depth instructions on installation and building the\ndocumentation, see the [SymPy Documentation Style Guide](https://docs.sympy.org/dev/documentation-style-guide.html).\n\nEverything is at:\n\n\n\nYou can generate everything at the above site in your local copy of\nSymPy by:\n\n $ cd doc\n $ make html\n\nThen the docs will be in \\_build/html. If\nyou don't want to read that, here is a short usage:\n\nFrom this directory, start Python and:\n\n``` python\n>>> from sympy import Symbol, cos\n>>> x = Symbol('x')\n>>> e = 1/cos(x)\n>>> print(e.series(x, 0, 10))\n1 + x**2/2 + 5*x**4/24 + 61*x**6/720 + 277*x**8/8064 + O(x**10)\n```\n\nSymPy also comes with a console that is a simple wrapper around the\nclassic python console (or IPython when available) that loads the SymPy\nnamespace and executes some common commands for you.\n\nTo start it, issue:\n\n $ bin/isympy\n\nfrom this directory, if SymPy is not installed or simply:\n\n $ isympy\n\nif SymPy is installed.\n\n## Installation\n\nTo install SymPy using PyPI, run the following command:\n\n $ pip install sympy\n\nTo install SymPy using Anaconda, run the following command:\n\n $ conda install -c anaconda sympy\n\nTo install SymPy from GitHub source, first clone SymPy using `git`:\n\n $ git clone https://github.com/sympy/sympy.git\n\nThen, in the `sympy` repository that you cloned, simply run:\n\n $ pip install .\n\nSee for more information.\n\n## Contributing\n\nWe welcome contributions from anyone, even if you are new to open\nsource. Please read our [Introduction to Contributing](https://docs.sympy.org/dev/contributing/introduction-to-contributing.html)\npage and the [SymPy Documentation Style Guide](https://docs.sympy.org/dev/documentation-style-guide.html). If you\nare new and looking for some way to contribute, a good place to start is\nto look at the issues tagged [Easy to Fix](https://github.com/sympy/sympy/issues?q=is%3Aopen+is%3Aissue+label%3A%22Easy+to+Fix%22).\n\nPlease note that all participants in this project are expected to follow\nour Code of Conduct. By participating in this project you agree to abide\nby its terms. See [CODE\\_OF\\_CONDUCT.md](CODE_OF_CONDUCT.md).\n\n## Tests\n\nTo execute all tests, run:\n\n $./setup.py test\n\nin the current directory.\n\nFor the more fine-grained running of tests or doctests, use `bin/test`\nor respectively `bin/doctest`. The master branch is automatically tested\nby GitHub Actions.\n\nTo test pull requests, use\n[sympy-bot](https://github.com/sympy/sympy-bot).\n\n## Regenerate Experimental LaTeX Parser/Lexer\n\nThe parser and lexer were generated with the [ANTLR4](http://antlr4.org)\ntoolchain in `sympy/parsing/latex/_antlr` and checked into the repo.\nPresently, most users should not need to regenerate these files, but\nif you plan to work on this feature, you will need the `antlr4`\ncommand-line tool (and you must ensure that it is in your `PATH`).\nOne way to get it is:\n\n $ conda install -c conda-forge antlr=4.11.1\n\nAlternatively, follow the instructions on the ANTLR website and download\nthe `antlr-4.11.1-complete.jar`. Then export the `CLASSPATH` as instructed\nand instead of creating `antlr4` as an alias, make it an executable file\nwith the following contents:\n``` bash\n#!/bin/bash\njava -jar /usr/local/lib/antlr-4.11.1-complete.jar \"$@\"\n```\n\nAfter making changes to `sympy/parsing/latex/LaTeX.g4`, run:\n\n $ ./setup.py antlr\n\n## Clean\n\nTo clean everything (thus getting the same tree as in the repository):\n\n $ git clean -Xdf\n\nwhich will clear everything ignored by `.gitignore`, and:\n\n $ git clean -df\n\nto clear all untracked files. You can revert the most recent changes in\ngit with:\n\n $ git reset --hard\n\nWARNING: The above commands will all clear changes you may have made,\nand you will lose them forever. Be sure to check things with `git\nstatus`, `git diff`, `git clean -Xn`, and `git clean -n` before doing any\nof those.\n\n## Bugs\n\nOur issue tracker is at . Please\nreport any bugs that you find. Or, even better, fork the repository on\nGitHub and create a pull request. We welcome all changes, big or small,\nand we will help you make the pull request if you are new to git (just\nask on our mailing list or Gitter Channel). If you further have any queries, you can find answers\non Stack Overflow using the [sympy](https://stackoverflow.com/questions/tagged/sympy) tag.\n\n## Brief History\n\nSymPy was started by Ondřej Čertík in 2005, he wrote some code during\nthe summer, then he wrote some more code during summer 2006. In February\n2007, Fabian Pedregosa joined the project and helped fix many things,\ncontributed documentation, and made it alive again. 5 students (Mateusz\nPaprocki, Brian Jorgensen, Jason Gedge, Robert Schwarz, and Chris Wu)\nimproved SymPy incredibly during summer 2007 as part of the Google\nSummer of Code. Pearu Peterson joined the development during the summer\n2007 and he has made SymPy much more competitive by rewriting the core\nfrom scratch, which has made it from 10x to 100x faster. Jurjen N.E. Bos\nhas contributed pretty-printing and other patches. Fredrik Johansson has\nwritten mpmath and contributed a lot of patches.\n\nSymPy has participated in every Google Summer of Code since 2007. You\ncan see for\nfull details. Each year has improved SymPy by bounds. Most of SymPy's\ndevelopment has come from Google Summer of Code students.\n\nIn 2011, Ondřej Čertík stepped down as lead developer, with Aaron\nMeurer, who also started as a Google Summer of Code student, taking his\nplace. Ondřej Čertík is still active in the community but is too busy\nwith work and family to play a lead development role.\n\nSince then, a lot more people have joined the development and some\npeople have also left. You can see the full list in doc/src/aboutus.rst,\nor online at:\n\n\n\nThe git history goes back to 2007 when development moved from svn to hg.\nTo see the history before that point, look at\n.\n\nYou can use git to see the biggest developers. The command:\n\n $ git shortlog -ns\n\nwill show each developer, sorted by commits to the project. The command:\n\n $ git shortlog -ns --since=\"1 year\"\n\nwill show the top developers from the last year.\n\n## Citation\n\nTo cite SymPy in publications use\n\n> Meurer A, Smith CP, Paprocki M, Čertík O, Kirpichev SB, Rocklin M,\n> Kumar A, Ivanov S, Moore JK, Singh S, Rathnayake T, Vig S, Granger BE,\n> Muller RP, Bonazzi F, Gupta H, Vats S, Johansson F, Pedregosa F, Curry\n> MJ, Terrel AR, Roučka Š, Saboo A, Fernando I, Kulal S, Cimrman R,\n> Scopatz A. (2017) SymPy: symbolic computing in Python. *PeerJ Computer\n> Science* 3:e103 \n\nA BibTeX entry for LaTeX users is\n\n``` bibtex\n@article{10.7717/peerj-cs.103,\n title = {SymPy: symbolic computing in Python},\n author = {Meurer, Aaron and Smith, Christopher P. and Paprocki, Mateusz and \\v{C}ert\\'{i}k, Ond\\v{r}ej and Kirpichev, Sergey B. and Rocklin, Matthew and Kumar, Amit and Ivanov, Sergiu and Moore, Jason K. and Singh, Sartaj and Rathnayake, Thilina and Vig, Sean and Granger, Brian E. and Muller, Richard P. and Bonazzi, Francesco and Gupta, Harsh and Vats, Shivam and Johansson, Fredrik and Pedregosa, Fabian and Curry, Matthew J. and Terrel, Andy R. and Rou\\v{c}ka, \\v{S}t\\v{e}p\\'{a}n and Saboo, Ashutosh and Fernando, Isuru and Kulal, Sumith and Cimrman, Robert and Scopatz, Anthony},\n year = 2017,\n month = Jan,\n keywords = {Python, Computer algebra system, Symbolics},\n abstract = {\n SymPy is an open-source computer algebra system written in pure Python. It is built with a focus on extensibility and ease of use, through both interactive and programmatic applications. These characteristics have led SymPy to become a popular symbolic library for the scientific Python ecosystem. This paper presents the architecture of SymPy, a description of its features, and a discussion of select submodules. The supplementary material provides additional examples and further outlines details of the architecture and features of SymPy.\n },\n volume = 3,\n pages = {e103},\n journal = {PeerJ Computer Science},\n issn = {2376-5992},\n url = {https://doi.org/10.7717/peerj-cs.103},\n doi = {10.7717/peerj-cs.103}\n}\n```\n\nSymPy is BSD licensed, so you are free to use it whatever you like, be\nit academic, commercial, creating forks or derivatives, as long as you\ncopy the BSD statement if you redistribute it (see the LICENSE file for\ndetails). That said, although not required by the SymPy license, if it\nis convenient for you, please cite SymPy when using it in your work and\nalso consider contributing all your changes back, so that we can\nincorporate it and all of us will benefit in the end.\n", + "description_content_type": "text/markdown", + "keywords": [ + "Math", + "CAS" + ], + "home_page": "https://sympy.org", + "author": "SymPy development team", + "author_email": "sympy@googlegroups.com", + "license": "BSD", + "license_file": [ + "LICENSE", + "AUTHORS" + ], + "classifier": [ + "License :: OSI Approved :: BSD License", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Topic :: Scientific/Engineering", + "Topic :: Scientific/Engineering :: Mathematics", + "Topic :: Scientific/Engineering :: Physics", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy" + ], + "requires_dist": [ + "mpmath<1.4,>=1.1.0", + "pytest>=7.1.0; extra == \"dev\"", + "hypothesis>=6.70.0; extra == \"dev\"" + ], + "requires_python": ">=3.9", + "project_url": [ + "Source, https://github.com/sympy/sympy" + ], + "provides_extra": [ + "dev" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c" + }, + "hash": "sha256=a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.1", + "name": "mpmath", + "version": "1.3.0", + "summary": "Python library for arbitrary-precision floating-point arithmetic", + "description": "mpmath\n======\n\n|pypi version| |Build status| |Code coverage status| |Zenodo Badge|\n\n.. |pypi version| image:: https://img.shields.io/pypi/v/mpmath.svg\n :target: https://pypi.python.org/pypi/mpmath\n.. |Build status| image:: https://github.com/fredrik-johansson/mpmath/workflows/test/badge.svg\n :target: https://github.com/fredrik-johansson/mpmath/actions?workflow=test\n.. |Code coverage status| image:: https://codecov.io/gh/fredrik-johansson/mpmath/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/fredrik-johansson/mpmath\n.. |Zenodo Badge| image:: https://zenodo.org/badge/2934512.svg\n :target: https://zenodo.org/badge/latestdoi/2934512\n\nA Python library for arbitrary-precision floating-point arithmetic.\n\nWebsite: http://mpmath.org/\nMain author: Fredrik Johansson \n\nMpmath is free software released under the New BSD License (see the\nLICENSE file for details)\n\n0. History and credits\n----------------------\n\nThe following people (among others) have contributed major patches\nor new features to mpmath:\n\n* Pearu Peterson \n* Mario Pernici \n* Ondrej Certik \n* Vinzent Steinberg \n* Nimish Telang \n* Mike Taschuk \n* Case Van Horsen \n* Jorn Baayen \n* Chris Smith \n* Juan Arias de Reyna \n* Ioannis Tziakos \n* Aaron Meurer \n* Stefan Krastanov \n* Ken Allen \n* Timo Hartmann \n* Sergey B Kirpichev \n* Kris Kuhlman \n* Paul Masson \n* Michael Kagalenko \n* Jonathan Warner \n* Max Gaukler \n* Guillermo Navas-Palencia \n* Nike Dattani \n\nNumerous other people have contributed by reporting bugs,\nrequesting new features, or suggesting improvements to the\ndocumentation.\n\nFor a detailed changelog, including individual contributions,\nsee the CHANGES file.\n\nFredrik's work on mpmath during summer 2008 was sponsored by Google\nas part of the Google Summer of Code program.\n\nFredrik's work on mpmath during summer 2009 was sponsored by the\nAmerican Institute of Mathematics under the support of the National Science\nFoundation Grant No. 0757627 (FRG: L-functions and Modular Forms).\n\nAny opinions, findings, and conclusions or recommendations expressed in this\nmaterial are those of the author(s) and do not necessarily reflect the\nviews of the sponsors.\n\nCredit also goes to:\n\n* The authors of the GMP library and the Python wrapper\n gmpy, enabling mpmath to become much faster at\n high precision\n* The authors of MPFR, pari/gp, MPFUN, and other arbitrary-\n precision libraries, whose documentation has been helpful\n for implementing many of the algorithms in mpmath\n* Wikipedia contributors; Abramowitz & Stegun; Gradshteyn & Ryzhik;\n Wolfram Research for MathWorld and the Wolfram Functions site.\n These are the main references used for special functions\n implementations.\n* George Brandl for developing the Sphinx documentation tool\n used to build mpmath's documentation\n\nRelease history:\n\n* Version 1.3.0 released on March 7, 2023\n* Version 1.2.0 released on February 1, 2021\n* Version 1.1.0 released on December 11, 2018\n* Version 1.0.0 released on September 27, 2017\n* Version 0.19 released on June 10, 2014\n* Version 0.18 released on December 31, 2013\n* Version 0.17 released on February 1, 2011\n* Version 0.16 released on September 24, 2010\n* Version 0.15 released on June 6, 2010\n* Version 0.14 released on February 5, 2010\n* Version 0.13 released on August 13, 2009\n* Version 0.12 released on June 9, 2009\n* Version 0.11 released on January 26, 2009\n* Version 0.10 released on October 15, 2008\n* Version 0.9 released on August 23, 2008\n* Version 0.8 released on April 20, 2008\n* Version 0.7 released on March 12, 2008\n* Version 0.6 released on January 13, 2008\n* Version 0.5 released on November 24, 2007\n* Version 0.4 released on November 3, 2007\n* Version 0.3 released on October 5, 2007\n* Version 0.2 released on October 2, 2007\n* Version 0.1 released on September 27, 2007\n\n1. Download & installation\n--------------------------\n\nMpmath requires Python 2.7 or 3.5 (or later versions). It has been tested\nwith CPython 2.7, 3.5 through 3.7 and for PyPy.\n\nThe latest release of mpmath can be downloaded from the mpmath\nwebsite and from https://github.com/fredrik-johansson/mpmath/releases\n\nIt should also be available in the Python Package Index at\nhttps://pypi.python.org/pypi/mpmath\n\nTo install latest release of Mpmath with pip, simply run\n\n``pip install mpmath``\n\nOr unpack the mpmath archive and run\n\n``python setup.py install``\n\nMpmath can also be installed using\n\n``python -m easy_install mpmath``\n\nThe latest development code is available from\nhttps://github.com/fredrik-johansson/mpmath\n\nSee the main documentation for more detailed instructions.\n\n2. Running tests\n----------------\n\nThe unit tests in mpmath/tests/ can be run via the script\nruntests.py, but it is recommended to run them with py.test\n(https://pytest.org/), especially\nto generate more useful reports in case there are failures.\n\nYou may also want to check out the demo scripts in the demo\ndirectory.\n\nThe master branch is automatically tested by Travis CI.\n\n3. Documentation\n----------------\n\nDocumentation in reStructuredText format is available in the\ndoc directory included with the source package. These files\nare human-readable, but can be compiled to prettier HTML using\nthe build.py script (requires Sphinx, http://sphinx.pocoo.org/).\n\nSee setup.txt in the documentation for more information.\n\nThe most recent documentation is also available in HTML format:\n\nhttp://mpmath.org/doc/current/\n\n4. Known problems\n-----------------\n\nMpmath is a work in progress. Major issues include:\n\n* Some functions may return incorrect values when given extremely\n large arguments or arguments very close to singularities.\n\n* Directed rounding works for arithmetic operations. It is implemented\n heuristically for other operations, and their results may be off by one\n or two units in the last place (even if otherwise accurate).\n\n* Some IEEE 754 features are not available. Inifinities and NaN are\n partially supported; denormal rounding is currently not available\n at all.\n\n* The interface for switching precision and rounding is not finalized.\n The current method is not threadsafe.\n\n5. Help and bug reports\n-----------------------\n\nGeneral questions and comments can be sent to the mpmath mailinglist,\nmpmath@googlegroups.com\n\nYou can also report bugs and send patches to the mpmath issue tracker,\nhttps://github.com/fredrik-johansson/mpmath/issues\n", + "home_page": "http://mpmath.org/", + "author": "Fredrik Johansson", + "author_email": "fredrik.johansson@gmail.com", + "license": "BSD", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "License :: OSI Approved :: BSD License", + "Topic :: Scientific/Engineering :: Mathematics", + "Topic :: Software Development :: Libraries :: Python Modules", + "Programming Language :: Python", + "Programming Language :: Python :: 2", + "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.5", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy" + ], + "requires_dist": [ + "pytest (>=4.6) ; extra == 'develop'", + "pycodestyle ; extra == 'develop'", + "pytest-cov ; extra == 'develop'", + "codecov ; extra == 'develop'", + "wheel ; extra == 'develop'", + "sphinx ; extra == 'docs'", + "gmpy2 (>=2.1.0a4) ; (platform_python_implementation != \"PyPy\") and extra == 'gmpy'", + "pytest (>=4.6) ; extra == 'tests'" + ], + "project_url": [ + "Source, https://github.com/fredrik-johansson/mpmath", + "Tracker, https://github.com/fredrik-johansson/mpmath/issues", + "Documentation, http://mpmath.org/doc/current/" + ], + "provides_extra": [ + "develop", + "docs", + "gmpy", + "tests" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8" + }, + "hash": "sha256=481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "typing_extensions", + "version": "4.16.0", + "summary": "Backported and Experimental Type Hints for Python 3.9+", + "description": "# Typing Extensions\n\n[![Chat at https://gitter.im/python/typing](https://badges.gitter.im/python/typing.svg)](https://gitter.im/python/typing)\n\n[Documentation](https://typing-extensions.readthedocs.io/en/latest/#) –\n[PyPI](https://pypi.org/project/typing-extensions/)\n\n## Overview\n\nThe `typing_extensions` module serves two related purposes:\n\n- Enable use of new type system features on older Python versions. For example,\n `typing.TypeGuard` is new in Python 3.10, but `typing_extensions` allows\n users on previous Python versions to use it too.\n- Enable experimentation with new type system PEPs before they are accepted and\n added to the `typing` module.\n\n`typing_extensions` is treated specially by static type checkers such as\nmypy and pyright. Objects defined in `typing_extensions` are treated the same\nway as equivalent forms in `typing`.\n\n`typing_extensions` uses\n[Semantic Versioning](https://semver.org/). The\nmajor version will be incremented only for backwards-incompatible changes.\nTherefore, it's safe to depend\non `typing_extensions` like this: `typing_extensions ~=x.y`,\nwhere `x.y` is the first version that includes all features you need.\n[This](https://packaging.python.org/en/latest/specifications/version-specifiers/#compatible-release)\nis equivalent to `typing_extensions >=x.y, <(x+1)`. Do not depend on `~= x.y.z`\nunless you really know what you're doing; that defeats the purpose of\nsemantic versioning.\n\n## Included items\n\nSee [the documentation](https://typing-extensions.readthedocs.io/en/latest/#) for a\ncomplete listing of module contents.\n\n## Contributing\n\nSee [CONTRIBUTING.md](https://github.com/python/typing_extensions/blob/main/CONTRIBUTING.md)\nfor how to contribute to `typing_extensions`.\n\n", + "description_content_type": "text/markdown", + "keywords": [ + "annotations", + "backport", + "checker", + "checking", + "function", + "hinting", + "hints", + "type", + "typechecking", + "typehinting", + "typehints", + "typing" + ], + "author_email": "\"Guido van Rossum, Jukka Lehtosalo, Łukasz Langa, Michael Lee\" ", + "license_expression": "PSF-2.0", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Environment :: Console", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Topic :: Software Development" + ], + "requires_python": ">=3.9", + "project_url": [ + "Bug Tracker, https://github.com/python/typing_extensions/issues", + "Changes, https://github.com/python/typing_extensions/blob/main/CHANGELOG.md", + "Documentation, https://typing-extensions.readthedocs.io/", + "Home, https://github.com/python/typing_extensions", + "Q & A, https://github.com/python/typing/discussions", + "Repository, https://github.com/python/typing_extensions" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147" + }, + "hash": "sha256=65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "typing-inspection", + "version": "0.4.4", + "summary": "Runtime typing introspection tools", + "description": "# typing-inspection\n\n[![CI](https://img.shields.io/github/actions/workflow/status/pydantic/typing-inspection/ci.yml?branch=main&logo=github&label=CI)](https://github.com/pydantic/typing-inspection/actions?query=event%3Apush+branch%3Amain+workflow%3ACI)\n[![Coverage](https://coverage-badge.samuelcolvin.workers.dev/pydantic/typing-inspection.svg)](https://coverage-badge.samuelcolvin.workers.dev/redirect/pydantic/typing-inspection)\n[![PyPI](https://img.shields.io/pypi/v/typing-inspection.svg)](https://pypi.org/project/typing-inspection/)\n[![Versions](https://img.shields.io/pypi/pyversions/typing-inspection.svg)](https://github.com/pydantic/typing-inspection)\n[![License](https://img.shields.io/github/license/pydantic/typing-inspection.svg)](https://github.com/pydantic/typing-inspection/blob/main/LICENSE)\n[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)\n\n`typing-inspection` provides tools to inspect type annotations at runtime.\n\n## Installation\n\nFrom [PyPI](https://pypi.org/project/typing-inspection/):\n\n```bash\npip install typing-inspection\n```\n\nThe library can be imported from the `typing_inspection` module.\n", + "description_content_type": "text/markdown", + "author_email": "Victorien Plot ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Programming Language :: Python :: Implementation :: CPython", + "Topic :: Software Development :: Libraries :: Python Modules", + "Typing :: Typed" + ], + "requires_dist": [ + "typing-extensions>=4.15.0" + ], + "requires_python": ">=3.10", + "project_url": [ + "Homepage, https://github.com/pydantic/typing-inspection", + "Documentation, https://pydantic.github.io/typing-inspection/dev/", + "Source, https://github.com/pydantic/typing-inspection", + "Changelog, https://github.com/pydantic/typing-inspection/blob/main/HISTORY.md" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/7a/6d/db8b86e168fef0cf904737e275bccb683558088ef971e92d3b41ce980699/filelock-4.0.3-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "30cd166e2aee2c7534ce2c33c6367c4cd051b8368e20e2c4eb0c34f699bacfab" + }, + "hash": "sha256=30cd166e2aee2c7534ce2c33c6367c4cd051b8368e20e2c4eb0c34f699bacfab" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.5", + "name": "filelock", + "version": "4.0.3", + "summary": "A platform independent file lock.", + "description": "# filelock\n\n[![PyPI](https://img.shields.io/pypi/v/filelock)](https://pypi.org/project/filelock/)\n[![Supported Python versions](https://img.shields.io/pypi/pyversions/filelock.svg)](https://pypi.org/project/filelock/)\n[![Documentation status](https://readthedocs.org/projects/py-filelock/badge/?version=latest)](https://py-filelock.readthedocs.io/en/latest/?badge=latest)\n[![Downloads](https://static.pepy.tech/badge/filelock/month)](https://pepy.tech/project/filelock)\n[![check](https://github.com/tox-dev/py-filelock/actions/workflows/check.yaml/badge.svg)](https://github.com/tox-dev/py-filelock/actions/workflows/check.yaml)\n\nFor more information checkout the [official documentation](https://py-filelock.readthedocs.io/en/latest/index.html).\n", + "description_content_type": "text/markdown", + "keywords": [ + "application", + "cache", + "directory", + "log", + "user" + ], + "maintainer_email": "Bernát Gábor ", + "license_expression": "MIT", + "license_file": [ + "LICENSE" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", + "Topic :: Internet", + "Topic :: Software Development :: Libraries", + "Topic :: System" + ], + "requires_python": ">=3.10", + "project_url": [ + "Documentation, https://py-filelock.readthedocs.io", + "Homepage, https://github.com/tox-dev/py-filelock", + "Source, https://github.com/tox-dev/py-filelock", + "Tracker, https://github.com/tox-dev/py-filelock/issues" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", + "archive_info": { + "hashes": { + "sha256": "85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67" + }, + "hash": "sha256=85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "Jinja2", + "version": "3.1.6", + "summary": "A very fast and expressive template engine.", + "description": "# Jinja\n\nJinja is a fast, expressive, extensible templating engine. Special\nplaceholders in the template allow writing code similar to Python\nsyntax. Then the template is passed data to render the final document.\n\nIt includes:\n\n- Template inheritance and inclusion.\n- Define and import macros within templates.\n- HTML templates can use autoescaping to prevent XSS from untrusted\n user input.\n- A sandboxed environment can safely render untrusted templates.\n- AsyncIO support for generating templates and calling async\n functions.\n- I18N support with Babel.\n- Templates are compiled to optimized Python code just-in-time and\n cached, or can be compiled ahead-of-time.\n- Exceptions point to the correct line in templates to make debugging\n easier.\n- Extensible filters, tests, functions, and even syntax.\n\nJinja's philosophy is that while application logic belongs in Python if\npossible, it shouldn't make the template designer's job difficult by\nrestricting functionality too much.\n\n\n## In A Nutshell\n\n```jinja\n{% extends \"base.html\" %}\n{% block title %}Members{% endblock %}\n{% block content %}\n \n{% endblock %}\n```\n\n## Donate\n\nThe Pallets organization develops and supports Jinja and other popular\npackages. In order to grow the community of contributors and users, and\nallow the maintainers to devote more time to the projects, [please\ndonate today][].\n\n[please donate today]: https://palletsprojects.com/donate\n\n## Contributing\n\nSee our [detailed contributing documentation][contrib] for many ways to\ncontribute, including reporting issues, requesting features, asking or answering\nquestions, and making PRs.\n\n[contrib]: https://palletsprojects.com/contributing/\n\n", + "description_content_type": "text/markdown", + "maintainer_email": "Pallets ", + "license_file": [ + "LICENSE.txt" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Environment :: Web Environment", + "Intended Audience :: Developers", + "License :: OSI Approved :: BSD License", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Topic :: Internet :: WWW/HTTP :: Dynamic Content", + "Topic :: Text Processing :: Markup :: HTML", + "Typing :: Typed" + ], + "requires_dist": [ + "MarkupSafe>=2.0", + "Babel>=2.7 ; extra == \"i18n\"" + ], + "requires_python": ">=3.7", + "project_url": [ + "Changes, https://jinja.palletsprojects.com/changes/", + "Chat, https://discord.gg/pallets", + "Documentation, https://jinja.palletsprojects.com/", + "Donate, https://palletsprojects.com/donate", + "Source, https://github.com/pallets/jinja/" + ], + "provides_extra": [ + "i18n" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", + "archive_info": { + "hashes": { + "sha256": "bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581" + }, + "hash": "sha256=bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581" + } + }, + "is_direct": false, + "is_yanked": false, + "requested": false, + "metadata": { + "metadata_version": "2.4", + "name": "MarkupSafe", + "version": "3.0.3", + "dynamic": [ + "license-file" + ], + "summary": "Safely add untrusted strings to HTML/XML markup.", + "description": "
\"\"
\n\n# MarkupSafe\n\nMarkupSafe implements a text object that escapes characters so it is\nsafe to use in HTML and XML. Characters that have special meanings are\nreplaced so that they display as the actual characters. This mitigates\ninjection attacks, meaning untrusted user input can safely be displayed\non a page.\n\n\n## Examples\n\n```pycon\n>>> from markupsafe import Markup, escape\n\n>>> # escape replaces special characters and wraps in Markup\n>>> escape(\"\")\nMarkup('<script>alert(document.cookie);</script>')\n\n>>> # wrap in Markup to mark text \"safe\" and prevent escaping\n>>> Markup(\"Hello\")\nMarkup('hello')\n\n>>> escape(Markup(\"Hello\"))\nMarkup('hello')\n\n>>> # Markup is a str subclass\n>>> # methods and operators escape their arguments\n>>> template = Markup(\"Hello {name}\")\n>>> template.format(name='\"World\"')\nMarkup('Hello "World"')\n```\n\n## Donate\n\nThe Pallets organization develops and supports MarkupSafe and other\npopular packages. In order to grow the community of contributors and\nusers, and allow the maintainers to devote more time to the projects,\n[please donate today][].\n\n[please donate today]: https://palletsprojects.com/donate\n\n## Contributing\n\nSee our [detailed contributing documentation][contrib] for many ways to\ncontribute, including reporting issues, requesting features, asking or answering\nquestions, and making PRs.\n\n[contrib]: https://palletsprojects.com/contributing/\n", + "description_content_type": "text/markdown", + "maintainer_email": "Pallets ", + "license_expression": "BSD-3-Clause", + "license_file": [ + "LICENSE.txt" + ], + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Environment :: Web Environment", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Topic :: Internet :: WWW/HTTP :: Dynamic Content", + "Topic :: Text Processing :: Markup :: HTML", + "Typing :: Typed" + ], + "requires_python": ">=3.9", + "project_url": [ + "Donate, https://palletsprojects.com/donate", + "Documentation, https://markupsafe.palletsprojects.com/", + "Changes, https://markupsafe.palletsprojects.com/page/changes/", + "Source, https://github.com/pallets/markupsafe/", + "Chat, https://discord.gg/pallets" + ] + } + } + ], + "environment": { + "implementation_name": "cpython", + "implementation_version": "3.14.7", + "os_name": "nt", + "platform_machine": "AMD64", + "platform_release": "2025Server", + "platform_system": "Windows", + "platform_version": "10.0.26100", + "python_full_version": "3.14.7", + "platform_python_implementation": "CPython", + "python_version": "3.14", + "sys_platform": "win32" + } +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-current-source-cpu-rpc-restart-acceptance/probe-results.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-current-source-cpu-rpc-restart-acceptance/probe-results.json new file mode 100644 index 000000000..a96bf3baa --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-current-source-cpu-rpc-restart-acceptance/probe-results.json @@ -0,0 +1,304 @@ +{ + "recorded_at": "2026-09-26T08:29:06.097048+00:00", + "status": "passed", + "core_status": "passed", + "adapter_status": "not selected", + "environment": { + "release": "2.14.0", + "torch": "2.14.0+cpu", + "build": "cpu", + "adapter": "none", + "python": "3.14", + "interpreter": "\\\\?\\C:\\Users\\runneradmin\\AppData\\Local\\Temp\\pumas-torch-native-cpu-g2wvex9d\\launcher-data\\managed-python\\python\\5dc2484c3bc035e81d37fb9af266e3546b42d2553d222081cd129940f1bbf9b7\\cpython-3.14.7-windows-x86_64-none\\python.exe", + "implementation": "cpython", + "platform": "Windows-2025Server-10.0.26100-SP0", + "machine": "AMD64", + "artifacts": [ + { + "name": "torch", + "version": "2.14.0+cpu", + "url": "https://download-r2.pytorch.org/whl/cpu/torch-2.14.0%2Bcpu-cp314-cp314-win_amd64.whl", + "sha256": "ca9b3c2c652587f7b26c86d30be3648f553bd07fb3cf9b3edb645e7eafe295a3" + }, + { + "name": "fastapi", + "version": "0.141.1", + "url": "https://files.pythonhosted.org/packages/cb/03/10388a42375ee7e4ac9b94eb2c5c569c8b5795e377e701c9ac3ad63de890/fastapi-0.141.1-py3-none-any.whl", + "sha256": "bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3" + }, + { + "name": "uvicorn", + "version": "0.54.0", + "url": "https://files.pythonhosted.org/packages/38/0c/b54a4fdd7f90a3af8b02ebc9ce6712c2c208b7926a2f7bad95c33ebbe943/uvicorn-0.54.0-py3-none-any.whl", + "sha256": "505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf" + }, + { + "name": "psutil", + "version": "7.2.2", + "url": "https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl", + "sha256": "eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988" + }, + { + "name": "pillow", + "version": "12.3.0", + "url": "https://files.pythonhosted.org/packages/f1/e0/492879f69d94f91f60fc8cd05ba03650e9520afebb2fb7aa12777d7c7f38/pillow-12.3.0-cp314-cp314-win_amd64.whl", + "sha256": "fdafc9cce40277e0f7a0feabce0ee50dd2fa1800f3b38015e51296b5e814048d" + }, + { + "name": "safetensors", + "version": "0.8.0", + "url": "https://files.pythonhosted.org/packages/1b/6d/3fba214c1e5e0f69991677ec3bc17023f0421776975e1de0c682dca475e2/safetensors-0.8.0-cp310-abi3-win_amd64.whl", + "sha256": "096ec1a98435df7beb08853bb5aa9081a84f23d0adc67ed1a0a10550f608373f" + }, + { + "name": "annotated-doc", + "version": "0.0.5", + "url": "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", + "sha256": "117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101" + }, + { + "name": "click", + "version": "8.5.0", + "url": "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", + "sha256": "255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360" + }, + { + "name": "fsspec", + "version": "2026.9.0", + "url": "https://files.pythonhosted.org/packages/6c/c0/a98505f18594f1bce828bb159cec0fcf9860562f1a2c85913409fc8f3d9e/fsspec-2026.9.0-py3-none-any.whl", + "sha256": "8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f" + }, + { + "name": "h11", + "version": "0.16.0", + "url": "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", + "sha256": "63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86" + }, + { + "name": "networkx", + "version": "3.7", + "url": "https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl", + "sha256": "e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0" + }, + { + "name": "pydantic", + "version": "2.13.5", + "url": "https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl", + "sha256": "346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73" + }, + { + "name": "pydantic-core", + "version": "2.46.5", + "url": "https://files.pythonhosted.org/packages/f7/3c/60674207246bc0a4009d2391b7c7251c7159f279c8d2ab8aae8ef46f3dee/pydantic_core-2.46.5-cp314-cp314-win_amd64.whl", + "sha256": "fa10ef4112775900e7a0661068635eb67b2ab824fbde764de6e0e21982a93db0" + }, + { + "name": "annotated-types", + "version": "0.8.0", + "url": "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", + "sha256": "f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0" + }, + { + "name": "setuptools", + "version": "84.0.0", + "url": "https://files.pythonhosted.org/packages/95/9c/c510029fc6ef33a6275cd2c5d3cecd6613dfd6aa401d57c54f1c18852ccf/setuptools-84.0.0-py3-none-any.whl", + "sha256": "51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670" + }, + { + "name": "starlette", + "version": "1.7.0", + "url": "https://files.pythonhosted.org/packages/4e/d6/1ec1b290f9e0fb067899b61e1d37a30c923068bad260b216dbe37a7d2967/starlette-1.7.0-py3-none-any.whl", + "sha256": "67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e" + }, + { + "name": "anyio", + "version": "4.15.1", + "url": "https://files.pythonhosted.org/packages/12/b8/4bd346e22b28902df4d651910f5242c28d84e4a5c2435ca5c3f797ed7e2e/anyio-4.15.1-py3-none-any.whl", + "sha256": "6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101" + }, + { + "name": "idna", + "version": "3.20", + "url": "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl", + "sha256": "ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c" + }, + { + "name": "sympy", + "version": "1.14.0", + "url": "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", + "sha256": "e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5" + }, + { + "name": "mpmath", + "version": "1.3.0", + "url": "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", + "sha256": "a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c" + }, + { + "name": "typing-extensions", + "version": "4.16.0", + "url": "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", + "sha256": "481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8" + }, + { + "name": "typing-inspection", + "version": "0.4.4", + "url": "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", + "sha256": "65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147" + }, + { + "name": "filelock", + "version": "4.0.3", + "url": "https://files.pythonhosted.org/packages/7a/6d/db8b86e168fef0cf904737e275bccb683558088ef971e92d3b41ce980699/filelock-4.0.3-py3-none-any.whl", + "sha256": "30cd166e2aee2c7534ce2c33c6367c4cd051b8368e20e2c4eb0c34f699bacfab" + }, + { + "name": "jinja2", + "version": "3.1.6", + "url": "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", + "sha256": "85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67" + }, + { + "name": "markupsafe", + "version": "3.0.3", + "url": "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", + "sha256": "bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581" + } + ] + }, + "context": { + "python": "3.14.7 (main, Sep 1 2026, 14:17:30) [MSC v.1944 64 bit (AMD64)]", + "executable": "C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\pumas-torch-native-cpu-g2wvex9d\\torch-versions\\.torch-install-PgKJIl\\runtime\\venv\\Scripts\\python.exe", + "platform": "Windows-2025Server-10.0.26100-SP0", + "hardware": { + "cuda": null, + "hip": null, + "devices": [] + }, + "hardware_fingerprint": "494fb1d79639aecf4bb2b6043473616914037c874c14d9805f8e3f9d38b2c602", + "driver_version": null, + "runtime_files_sha256": { + "control_api.py": "ee5160f121a749d8d11cd929abfb9d98a1a109235dac3690c9e2118f9cca54d0", + "device_manager.py": "9ab6d63eb943989bc19f1fed89098aca27b168536fa2529734d1ee4f37585379", + "diffusion.py": "c4dadfc949c17a460f8fc8a446b03139da0c574b45b3f561403fdf83e495b6d3", + "flux2.py": "39f864e1e15ffb2b697bb95418d474cb98a760feca9acd48a74b5cf05642fea2", + "image_api.py": "bb39ac05aee7ea4d4357360accfa27ee261f58d1cd9cc35af28470012673a7ec", + "loaders/__init__.py": "80cec9242f95b73881b038b890a5d9465a14be86a631b2a0e1bf9efacac543fe", + "loaders/dllm_loader.py": "2c5656bce01a6d133925d02ca72606f8ae951d66186ac07d3fcb7fd5580b1a13", + "loaders/safetensors_loader.py": "661a000b791396067d253a27a26cb5905ae40ce8d50817ba54bc1afce803396f", + "loaders/sherry_loader.py": "360ac3f66c4438e3ffe3d9dc99ef2a27ae69efdd26f8d3564f638ae7802e5b3f", + "model_manager.py": "cfc049050f9003f87d622fe57da5c4ab4efb5105523fcbab926d8770d82be3f8", + "nunchaku_compat.py": "27b42f9cae80e474c0b2162e6bf572f822d525134bf2fc3bddd551c031bb5d70", + "openai_api.py": "a3c712e6307fe3b60d1b7acdcbeb9413b011eb370ad656f862ef9399f3342f8c", + "probe_runtime.py": "9b9e1d81087aefffdb383038724b471daeb0456814e5f2fa17e0b4da46255e25", + "resolve_runtime.py": "e0476a77398ac18059160ca55c8bb74dfc32bbcf9938bab7a5ab329c70b027f1", + "serve.py": "88bf72ea3eac013dc7678bebe0e3b3053c141e8ec1222a210bd18b2a47601af4", + "validation.py": "f53cca26ddbddbc3c924ff07d32aaf9ced6061a7f1628379b4c0db2c9da7feb1" + }, + "interpreter_sha256": "80da2dbc9aca9420877223d6bf9ec0f5d9fd066a79ed65a3e3870037ff4e03e8", + "installed_distributions": { + "torch": "2.14.0+cpu", + "fastapi": "0.141.1", + "uvicorn": "0.54.0", + "psutil": "7.2.2", + "pillow": "12.3.0", + "safetensors": "0.8.0", + "annotated-doc": "0.0.5", + "click": "8.5.0", + "fsspec": "2026.9.0", + "h11": "0.16.0", + "networkx": "3.7", + "pydantic": "2.13.5", + "pydantic-core": "2.46.5", + "annotated-types": "0.8.0", + "setuptools": "84.0.0", + "starlette": "1.7.0", + "anyio": "4.15.1", + "idna": "3.20", + "sympy": "1.14.0", + "mpmath": "1.3.0", + "typing-extensions": "4.16.0", + "typing-inspection": "0.4.4", + "filelock": "4.0.3", + "jinja2": "3.1.6", + "markupsafe": "3.0.3" + }, + "all_installed_distributions": { + "annotated-doc": "0.0.5", + "annotated-types": "0.8.0", + "anyio": "4.15.1", + "click": "8.5.0", + "fastapi": "0.141.1", + "filelock": "4.0.3", + "fsspec": "2026.9.0", + "h11": "0.16.0", + "idna": "3.20", + "jinja2": "3.1.6", + "markupsafe": "3.0.3", + "mpmath": "1.3.0", + "networkx": "3.7", + "pillow": "12.3.0", + "pip": "26.2.1", + "psutil": "7.2.2", + "pydantic": "2.13.5", + "pydantic-core": "2.46.5", + "safetensors": "0.8.0", + "setuptools": "84.0.0", + "starlette": "1.7.0", + "sympy": "1.14.0", + "torch": "2.14.0+cpu", + "typing-extensions": "4.16.0", + "typing-inspection": "0.4.4", + "uvicorn": "0.54.0" + }, + "distributions_sha256": "fb628c6fb5305166cad9332e5cf97765df173d14d44b7a0296950ad749e0254e", + "resolution_sha256": "94a8494fc9a55f3bd72d4835100080d9bf4d345334169c776b87e93507ccd51e", + "sidecar_sha256": "88bf72ea3eac013dc7678bebe0e3b3053c141e8ec1222a210bd18b2a47601af4" + }, + "capabilities": { + "torch_import": { + "status": "passed", + "version": "2.14.0+cpu" + }, + "cpu_tensor": { + "status": "passed" + }, + "cuda_tensor": { + "status": "unavailable", + "scope": "CUDA tensor operation", + "reason": "CUDA is not available" + }, + "sidecar_app": { + "status": "passed", + "health": { + "status": "ok", + "protocol": 3, + "capabilities": [ + "image_generation" + ] + }, + "scope": "in-process app construction and health endpoint" + }, + "flux2_klein": { + "status": "not selected", + "scope": "optional adapter" + }, + "nunchaku_z_image": { + "status": "not selected", + "scope": "optional adapter" + }, + "image_device": { + "status": "unavailable", + "scope": "adapter device requirement", + "reason": "No NVIDIA sm_120 CUDA device detected" + }, + "sidecar_startup": { + "status": "not tested", + "scope": "socket startup requires an explicit trial" + }, + "image_generation": { + "status": "not tested", + "scope": "no model loaded or inference performed" + } + } +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-current-source-cpu-rpc-restart-acceptance/resolution.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-current-source-cpu-rpc-restart-acceptance/resolution.json new file mode 100644 index 000000000..1f8ab4bf0 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-current-source-cpu-rpc-restart-acceptance/resolution.json @@ -0,0 +1,163 @@ +{ + "release": "2.14.0", + "torch": "2.14.0+cpu", + "build": "cpu", + "adapter": "none", + "python": "3.14", + "interpreter": "\\\\?\\C:\\Users\\runneradmin\\AppData\\Local\\Temp\\pumas-torch-native-cpu-g2wvex9d\\launcher-data\\managed-python\\python\\5dc2484c3bc035e81d37fb9af266e3546b42d2553d222081cd129940f1bbf9b7\\cpython-3.14.7-windows-x86_64-none\\python.exe", + "implementation": "cpython", + "platform": "Windows-2025Server-10.0.26100-SP0", + "machine": "AMD64", + "artifacts": [ + { + "name": "torch", + "version": "2.14.0+cpu", + "url": "https://download-r2.pytorch.org/whl/cpu/torch-2.14.0%2Bcpu-cp314-cp314-win_amd64.whl", + "sha256": "ca9b3c2c652587f7b26c86d30be3648f553bd07fb3cf9b3edb645e7eafe295a3" + }, + { + "name": "fastapi", + "version": "0.141.1", + "url": "https://files.pythonhosted.org/packages/cb/03/10388a42375ee7e4ac9b94eb2c5c569c8b5795e377e701c9ac3ad63de890/fastapi-0.141.1-py3-none-any.whl", + "sha256": "bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3" + }, + { + "name": "uvicorn", + "version": "0.54.0", + "url": "https://files.pythonhosted.org/packages/38/0c/b54a4fdd7f90a3af8b02ebc9ce6712c2c208b7926a2f7bad95c33ebbe943/uvicorn-0.54.0-py3-none-any.whl", + "sha256": "505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf" + }, + { + "name": "psutil", + "version": "7.2.2", + "url": "https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl", + "sha256": "eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988" + }, + { + "name": "pillow", + "version": "12.3.0", + "url": "https://files.pythonhosted.org/packages/f1/e0/492879f69d94f91f60fc8cd05ba03650e9520afebb2fb7aa12777d7c7f38/pillow-12.3.0-cp314-cp314-win_amd64.whl", + "sha256": "fdafc9cce40277e0f7a0feabce0ee50dd2fa1800f3b38015e51296b5e814048d" + }, + { + "name": "safetensors", + "version": "0.8.0", + "url": "https://files.pythonhosted.org/packages/1b/6d/3fba214c1e5e0f69991677ec3bc17023f0421776975e1de0c682dca475e2/safetensors-0.8.0-cp310-abi3-win_amd64.whl", + "sha256": "096ec1a98435df7beb08853bb5aa9081a84f23d0adc67ed1a0a10550f608373f" + }, + { + "name": "annotated-doc", + "version": "0.0.5", + "url": "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", + "sha256": "117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101" + }, + { + "name": "click", + "version": "8.5.0", + "url": "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", + "sha256": "255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360" + }, + { + "name": "fsspec", + "version": "2026.9.0", + "url": "https://files.pythonhosted.org/packages/6c/c0/a98505f18594f1bce828bb159cec0fcf9860562f1a2c85913409fc8f3d9e/fsspec-2026.9.0-py3-none-any.whl", + "sha256": "8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f" + }, + { + "name": "h11", + "version": "0.16.0", + "url": "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", + "sha256": "63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86" + }, + { + "name": "networkx", + "version": "3.7", + "url": "https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl", + "sha256": "e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0" + }, + { + "name": "pydantic", + "version": "2.13.5", + "url": "https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl", + "sha256": "346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73" + }, + { + "name": "pydantic-core", + "version": "2.46.5", + "url": "https://files.pythonhosted.org/packages/f7/3c/60674207246bc0a4009d2391b7c7251c7159f279c8d2ab8aae8ef46f3dee/pydantic_core-2.46.5-cp314-cp314-win_amd64.whl", + "sha256": "fa10ef4112775900e7a0661068635eb67b2ab824fbde764de6e0e21982a93db0" + }, + { + "name": "annotated-types", + "version": "0.8.0", + "url": "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", + "sha256": "f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0" + }, + { + "name": "setuptools", + "version": "84.0.0", + "url": "https://files.pythonhosted.org/packages/95/9c/c510029fc6ef33a6275cd2c5d3cecd6613dfd6aa401d57c54f1c18852ccf/setuptools-84.0.0-py3-none-any.whl", + "sha256": "51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670" + }, + { + "name": "starlette", + "version": "1.7.0", + "url": "https://files.pythonhosted.org/packages/4e/d6/1ec1b290f9e0fb067899b61e1d37a30c923068bad260b216dbe37a7d2967/starlette-1.7.0-py3-none-any.whl", + "sha256": "67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e" + }, + { + "name": "anyio", + "version": "4.15.1", + "url": "https://files.pythonhosted.org/packages/12/b8/4bd346e22b28902df4d651910f5242c28d84e4a5c2435ca5c3f797ed7e2e/anyio-4.15.1-py3-none-any.whl", + "sha256": "6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101" + }, + { + "name": "idna", + "version": "3.20", + "url": "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl", + "sha256": "ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c" + }, + { + "name": "sympy", + "version": "1.14.0", + "url": "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", + "sha256": "e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5" + }, + { + "name": "mpmath", + "version": "1.3.0", + "url": "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", + "sha256": "a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c" + }, + { + "name": "typing-extensions", + "version": "4.16.0", + "url": "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", + "sha256": "481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8" + }, + { + "name": "typing-inspection", + "version": "0.4.4", + "url": "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", + "sha256": "65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147" + }, + { + "name": "filelock", + "version": "4.0.3", + "url": "https://files.pythonhosted.org/packages/7a/6d/db8b86e168fef0cf904737e275bccb683558088ef971e92d3b41ce980699/filelock-4.0.3-py3-none-any.whl", + "sha256": "30cd166e2aee2c7534ce2c33c6367c4cd051b8368e20e2c4eb0c34f699bacfab" + }, + { + "name": "jinja2", + "version": "3.1.6", + "url": "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", + "sha256": "85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67" + }, + { + "name": "markupsafe", + "version": "3.0.3", + "url": "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", + "sha256": "bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581" + } + ] +} diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-current-source-cpu-rpc-restart-acceptance/restart-backend-session.txt b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-current-source-cpu-rpc-restart-acceptance/restart-backend-session.txt new file mode 100644 index 000000000..3d8f87dea --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-current-source-cpu-rpc-restart-acceptance/restart-backend-session.txt @@ -0,0 +1,21 @@ +2026-09-26T08:29:16.441459Z  INFO Starting Pumas RPC Server +2026-09-26T08:29:16.441812Z  INFO Launcher root configured +2026-09-26T08:29:16.747270Z  INFO Rebuilding model index +2026-09-26T08:29:16.747717Z  INFO Rebuilt index with 0 models +2026-09-26T08:29:16.782267Z  INFO IPC server listening on 127.0.0.1:52111 +2026-09-26T08:29:16.782979Z  INFO IPC server started on port 52111 +2026-09-26T08:29:16.783806Z  INFO Started watching model library at "\\\\?\\C:\\Users\\runneradmin\\AppData\\Local\\Temp\\pumas-torch-native-cpu-g2wvex9d\\shared-resources\\models" +2026-09-26T08:29:16.788772Z  INFO Validation complete: 0 valid, 0 removed, 0 orphaned +2026-09-26T08:29:16.788845Z  INFO ollama version manager initialized successfully +2026-09-26T08:29:16.794869Z  INFO Validation complete: 1 valid, 0 removed, 0 orphaned +2026-09-26T08:29:16.797582Z  INFO torch version manager initialized successfully +2026-09-26T08:29:16.798681Z  INFO Validation complete: 0 valid, 0 removed, 0 orphaned +2026-09-26T08:29:16.798723Z  INFO llama-cpp version manager initialized successfully +2026-09-26T08:29:16.798742Z  INFO Initialized 3 version manager(s) +2026-09-26T08:29:16.798913Z  INFO Size calculator initialized +2026-09-26T08:29:16.799157Z  INFO Plugin loader initialized (0 plugins) +2026-09-26T08:29:16.800360Z  INFO Server listening on 127.0.0.1:52112 with max 64 in-flight requests and 33554432 byte request bodies +RPC_PORT=52112 +2026-09-26T08:29:16.800450Z  INFO RPC server running on 127.0.0.1:52112 +2026-09-26T08:29:24.576846Z  INFO Shutdown signal received, exiting +2026-09-26T08:29:24.577995Z  WARN File watcher channel disconnected diff --git a/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-current-source-cpu-rpc-restart-acceptance/runtime.json b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-current-source-cpu-rpc-restart-acceptance/runtime.json new file mode 100644 index 000000000..2ff254bc5 --- /dev/null +++ b/docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-current-source-cpu-rpc-restart-acceptance/runtime.json @@ -0,0 +1,181 @@ +{ + "adapter": "none", + "artifacts": [ + { + "name": "torch", + "sha256": "ca9b3c2c652587f7b26c86d30be3648f553bd07fb3cf9b3edb645e7eafe295a3", + "url": "https://download-r2.pytorch.org/whl/cpu/torch-2.14.0%2Bcpu-cp314-cp314-win_amd64.whl", + "version": "2.14.0+cpu" + }, + { + "name": "fastapi", + "sha256": "bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3", + "url": "https://files.pythonhosted.org/packages/cb/03/10388a42375ee7e4ac9b94eb2c5c569c8b5795e377e701c9ac3ad63de890/fastapi-0.141.1-py3-none-any.whl", + "version": "0.141.1" + }, + { + "name": "uvicorn", + "sha256": "505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf", + "url": "https://files.pythonhosted.org/packages/38/0c/b54a4fdd7f90a3af8b02ebc9ce6712c2c208b7926a2f7bad95c33ebbe943/uvicorn-0.54.0-py3-none-any.whl", + "version": "0.54.0" + }, + { + "name": "psutil", + "sha256": "eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988", + "url": "https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl", + "version": "7.2.2" + }, + { + "name": "pillow", + "sha256": "fdafc9cce40277e0f7a0feabce0ee50dd2fa1800f3b38015e51296b5e814048d", + "url": "https://files.pythonhosted.org/packages/f1/e0/492879f69d94f91f60fc8cd05ba03650e9520afebb2fb7aa12777d7c7f38/pillow-12.3.0-cp314-cp314-win_amd64.whl", + "version": "12.3.0" + }, + { + "name": "safetensors", + "sha256": "096ec1a98435df7beb08853bb5aa9081a84f23d0adc67ed1a0a10550f608373f", + "url": "https://files.pythonhosted.org/packages/1b/6d/3fba214c1e5e0f69991677ec3bc17023f0421776975e1de0c682dca475e2/safetensors-0.8.0-cp310-abi3-win_amd64.whl", + "version": "0.8.0" + }, + { + "name": "annotated-doc", + "sha256": "117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101", + "url": "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", + "version": "0.0.5" + }, + { + "name": "click", + "sha256": "255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360", + "url": "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", + "version": "8.5.0" + }, + { + "name": "fsspec", + "sha256": "8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f", + "url": "https://files.pythonhosted.org/packages/6c/c0/a98505f18594f1bce828bb159cec0fcf9860562f1a2c85913409fc8f3d9e/fsspec-2026.9.0-py3-none-any.whl", + "version": "2026.9.0" + }, + { + "name": "h11", + "sha256": "63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", + "url": "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", + "version": "0.16.0" + }, + { + "name": "networkx", + "sha256": "e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0", + "url": "https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl", + "version": "3.7" + }, + { + "name": "pydantic", + "sha256": "346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73", + "url": "https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl", + "version": "2.13.5" + }, + { + "name": "pydantic-core", + "sha256": "fa10ef4112775900e7a0661068635eb67b2ab824fbde764de6e0e21982a93db0", + "url": "https://files.pythonhosted.org/packages/f7/3c/60674207246bc0a4009d2391b7c7251c7159f279c8d2ab8aae8ef46f3dee/pydantic_core-2.46.5-cp314-cp314-win_amd64.whl", + "version": "2.46.5" + }, + { + "name": "annotated-types", + "sha256": "f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0", + "url": "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", + "version": "0.8.0" + }, + { + "name": "setuptools", + "sha256": "51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670", + "url": "https://files.pythonhosted.org/packages/95/9c/c510029fc6ef33a6275cd2c5d3cecd6613dfd6aa401d57c54f1c18852ccf/setuptools-84.0.0-py3-none-any.whl", + "version": "84.0.0" + }, + { + "name": "starlette", + "sha256": "67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e", + "url": "https://files.pythonhosted.org/packages/4e/d6/1ec1b290f9e0fb067899b61e1d37a30c923068bad260b216dbe37a7d2967/starlette-1.7.0-py3-none-any.whl", + "version": "1.7.0" + }, + { + "name": "anyio", + "sha256": "6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101", + "url": "https://files.pythonhosted.org/packages/12/b8/4bd346e22b28902df4d651910f5242c28d84e4a5c2435ca5c3f797ed7e2e/anyio-4.15.1-py3-none-any.whl", + "version": "4.15.1" + }, + { + "name": "idna", + "sha256": "ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c", + "url": "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl", + "version": "3.20" + }, + { + "name": "sympy", + "sha256": "e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", + "url": "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", + "version": "1.14.0" + }, + { + "name": "mpmath", + "sha256": "a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", + "url": "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", + "version": "1.3.0" + }, + { + "name": "typing-extensions", + "sha256": "481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", + "url": "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", + "version": "4.16.0" + }, + { + "name": "typing-inspection", + "sha256": "65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147", + "url": "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", + "version": "0.4.4" + }, + { + "name": "filelock", + "sha256": "30cd166e2aee2c7534ce2c33c6367c4cd051b8368e20e2c4eb0c34f699bacfab", + "url": "https://files.pythonhosted.org/packages/7a/6d/db8b86e168fef0cf904737e275bccb683558088ef971e92d3b41ce980699/filelock-4.0.3-py3-none-any.whl", + "version": "4.0.3" + }, + { + "name": "jinja2", + "sha256": "85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", + "url": "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", + "version": "3.1.6" + }, + { + "name": "markupsafe", + "sha256": "bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", + "url": "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", + "version": "3.0.3" + } + ], + "build": "cpu", + "capabilities": [ + "image_generation" + ], + "managed_python": { + "distribution": { + "catalogKey": "cpython-3.14.7-windows-x86_64-none", + "implementation": "CPython", + "sourceUrl": "https://releases.astral.sh/github/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-x86_64-pc-windows-msvc-install_only_stripped.tar.gz", + "targetTriple": "x86_64-pc-windows-msvc", + "version": "3.14.7" + }, + "executable": { + "path": "\\\\?\\C:\\Users\\runneradmin\\AppData\\Local\\Temp\\pumas-torch-native-cpu-g2wvex9d\\launcher-data\\managed-python\\python\\5dc2484c3bc035e81d37fb9af266e3546b42d2553d222081cd129940f1bbf9b7\\cpython-3.14.7-windows-x86_64-none\\python.exe", + "sha256": "716fbcb56cb6753dd9ea9f7acb3f988e9c4ba65ab492cb32b9bcd0ab81938737" + }, + "provider": { + "archiveSha256": "cae6a3bc25239f83dffb467a4b180508d9da23986c04639ebfa44e43e6a84bff", + "name": "uv", + "version": "0.12.18" + } + }, + "protocol": 3, + "python": "python3.14", + "qualification": "not verified by Pumas", + "recipe_id": "upstream-preview-v2.14.0-cpu-python3.14-none" +} diff --git a/docs/plans/torch-diffusion-serving/reports/upstream-version-manager-progress.md b/docs/plans/torch-diffusion-serving/reports/upstream-version-manager-progress.md index 106988a49..a21e688eb 100644 --- a/docs/plans/torch-diffusion-serving/reports/upstream-version-manager-progress.md +++ b/docs/plans/torch-diffusion-serving/reports/upstream-version-manager-progress.md @@ -1,6 +1,6 @@ # Upstream Torch version manager progress -Date: 2026-09-24 (America/Vancouver). This is an implementation and evidence +Date: 2026-09-26 (America/Vancouver). This is an implementation and evidence inventory, not a completed Pumas desktop acceptance. The prior [A1 packaged acceptance](a1-packaged-acceptance.md) applies only to its original `v2.9.1` / CPython 3.12 / CUDA 13.0 / Linux x86_64 combination. The Tuldok image @@ -15,18 +15,180 @@ independently of Pumas qualification when GitHub pagination completes within the 20-page / 120-second request budget. A page failure or exhausted budget returns an error without a partial list presented as complete. Installation is offered for an exact official CPU, CUDA, or ROCm binary wheel plus fully resolved dependencies -on Linux x86_64 with an already installed CPython 3.10–3.13. Pumas does not -provision Python or compile Torch from source; XPU and other operating systems -remain outside this provider contract. A release with no compatible wheel for a -supported interpreter is discoverable but correctly rejected for that tuple. +on Linux x86_64 with an already installed CPython 3.10–3.13. This records the +original Linux-only scope and is superseded for the in-progress install flow by +the 2026-09-25 managed-CPython authorization below. The current implementation +provisions stable native CPython 3.10+ from a pinned provider and chooses the +newest candidate whose exact official wheel and complete dependencies resolve. +The current-source Torch 2.14.0 CPU/Core RPC install/restart and native QA pass +on Linux x86_64, Windows x86_64, and macOS arm64 in manual run +[36229508586](https://github.com/MrScripty/Pumas-Library/actions/runs/36229508586) +on runtime commit `21041697`; each target provisioned Pumas-managed CPython +3.14.7 and installed 25 hashed official artifacts. The broader support claim +remains bounded by Electron UI-driven and packaged Windows/macOS installation, +provider cancellation/tamper, and non-CPU runtime gates. CPython notices are +generated for all three desktop targets, with fail-closed provider-pin, +archive-mapping, and exact legal-file checks. Pumas does not compile Torch from +source; XPU remains outside this +provider contract. A release with no compatible wheel is discoverable but +correctly rejected for that tuple. The fixed qualified `v2.9.1` / CUDA 13.0 / Python 3.12 bundled preset remains a -separate recipe. Other exact combinations, including alternate `v2.9.1` +separate recipe. The current manager path provisions its Python 3.12 base +interpreter from the managed depot; the previous host-interpreter condition is +historical. Other exact combinations, including alternate `v2.9.1` combinations, use dynamic retained previews and do not inherit the preset's qualification. The serialized follow-up and acceptance contract live in the [Torch upstream version management plan](../../torch-upstream-version-management/plan.md); the current-standards coordination entry is [PRG-I17](../../current-standards-remediation-2026-09-03/issues.md). +## Cross-platform runtime expansion authorized 2026-09-24 + +Windows x86_64 (`x86_64-pc-windows-msvc`) and macOS arm64 +(`aarch64-apple-darwin`) Torch release-manager paths are implemented in the +current candidate branch under the separate +[cross-platform runtime plan](../../torch-cross-platform-runtime-management/plan.md). +The current runtime source passed v2.14.0 CPU/Core RPC install/restart, exact +wheel, managed identity, and lifecycle checks on all three targets in manual run +[36229508586](https://github.com/MrScripty/Pumas-Library/actions/runs/36229508586) +at `21041697`, including the current metadata-lock follow-up. Per-target logs +and JSON evidence are retained in the linked plan. A preceding run +[36223106097](https://github.com/MrScripty/Pumas-Library/actions/runs/36223106097) +at `07f7e9f6` also verified the 913-second macOS `Retry-After` case but predates +the lock follow-up. Broader support remains gated on packaged desktop and other +incomplete plan requirements. An earlier run at `032045ad` passed Linux but +stopped at Windows/macOS release-list preflight because of a harness retry cap; +the corrected harness completed the latest run. A Windows GNU test-target +compile also passed, but remains compile-only evidence. No macOS compile was +available in this Linux session. The existing +Pumas artifact targets show these target architectures are shipped; they do not +establish Torch runtime behavior. + +The official Torch 2.14.0 CPU index lists Windows x64 local-version wheels +(`2.14.0+cpu`) and native macOS arm64 plain-version wheels (`2.14.0`, +`macosx_14_0_arm64`). The manager must retain upstream distribution version +separately from release and build identity. The official CUDA 13.2 index +contains Windows x64 wheel candidates; that alone does not establish driver +compatibility or CUDA image inference. macOS MPS is a runtime capability, not a +separate wheel channel. These observations are recorded in the linked plan's +[target research](../../torch-cross-platform-runtime-management/reports/target-wheel-research.md). + +No new FLUX.2, Nunchaku, or Tuldok image-generation support is implied. The +current image result stays limited to its recorded Linux tuple until a separate +target/model acceptance proves otherwise. + +## 2026-09-25 — Managed Python and desktop discovery repair + +The install flow no longer requires host-installed Python or a Python choice. +PyTorch wheels do not declare one Python version for an entire release: each +official wheel declares its compatible CPython ABI and platform tags. Pumas +uses its pinned provider catalog to provision stable native CPython candidates +from newest to oldest, then retains the first interpreter whose exact selected +Torch wheel and complete dependency profile resolve. CPython 3.10 is the +minimum; no upper minor cap is configured. A newer candidate is skipped only +after a definite wheel or dependency incompatibility. Provider, network, and +incomplete-scan failures remain inconclusive. See the +[managed Python provider report](../../torch-cross-platform-runtime-management/reports/managed-python-provider.md). + +The manager now defaults every target to Core Torch (`none`). Linux exposes +Pumas' FLUX.2 dependencies only as an explicit advanced profile, and the +qualified v2.9.1 bundled recipe is also opt-in. Windows and macOS expose Core +only until a platform-specific adapter is accepted. UI copy states that Pumas +installs a private Python runtime and does not require Python on the host. + +The reported `Unknown API method: get_torch_release_options` is emitted by the +Electron `api:call` allowlist before a request reaches Rust. The registration +fix is in commit `6a726eac`, with a regression test covering allowlist admission +and payload validation. The local Linux 0.7.0 candidate contains the registration +in its Electron bundle. Its AppImage and deb pass the artifact checker and +bundled RPC health smoke. A package built before that commit still shows the +reported error; the toolbar-linked package has not been replaced or published +by this local build. + +Current host verification: `pumas-app-manager` passed 179 tests and Clippy; +`pumas-rpc` passed 256 unit tests, 17 integration tests, and 2 intent tests +(10 ignored). The RPC suite needs loopback permission; it passed when rerun +outside the sandbox's socket restriction. Electron passed 12 test files +including the RPC registration regression; the Torch preview passed 14 tests +with frontend typecheck/lint; the full 98-test Python suite and Ruff passed. +Rust formatting and `git diff --check` passed. A fresh release build from +`ce9170d4` passed headless startup smoke and artifact validation; both the +AppImage and deb passed bundled RPC health smoke. The packaged Electron bundle +contains `get_torch_release_options`, and the packaged backend contains the +uv 0.12.18 provider pin. + +The v2.14.0 live scan and full Core dependency preview pass through Pumas RPC in +an isolated Linux launcher root. Pinned uv 0.12.18 downloaded with its +published Linux SHA-256 and provisioned managed CPython 3.14.7. The recommended +`cu132` / `python3.14` / `none` preview resolved 44 artifacts. A CPU Core +preview resolved 25 artifacts; its retained resolution installed Torch 2.14.0, +passed installed-identity and CPU-operation checks, and was explicitly selected. +The latter run removed Python, pip, and PyPy from the backend's child `PATH` and +deleted its temporary launcher root afterward. At the time of this Linux-only +run, CUDA/device execution, sidecar lifecycle, and native Windows/macOS runtime +acceptance remained pending; later Linux lifecycle and three-platform native +acceptance are recorded below. + +The live report exposed two stale compatibility assumptions. uv's actual +python-build-standalone catalog URLs use +`releases.astral.sh/github/python-build-standalone/...`, and current official +PyTorch indexes return wheel files directly under `/whl/{channel}/`; the Rust +validators now accept those exact official forms while retaining host, channel, +filename, tag, and nesting checks. The uv pin now uses published 0.12.18 and +version/hash-scoped cache paths, preventing a previous bootstrap from being +mistaken for the new pin. The missing Electron RPC allowlist registration was +already fixed in `6a726eac`; toolbar-linked release publication remains +separate from these local builds. + +## 2026-09-25 — Managed Torch 2.14.0 CPU/Core lifecycle acceptance + +This run supersedes the earlier statement that v2.14.0 sidecar lifecycle was +unverified. Through Pumas RPC in an isolated Linux x86_64 root, uv 0.12.18 +provisioned CPython 3.14.7 and the retained CPU/Core preview resolved 25 exact +artifacts. With an empty backend child `PATH`, the installer verified Torch +2.14.0 identity and CPU operation; the installed sidecar dependencies passed; +the runtime was selected; a managed CPU profile passed startup, health, and +protocol 3; and its owned generation was stopped before graceful backend +shutdown. The acceptance verified the venv's actual base interpreter, private +depot containment, executable hash, and provider archive digest. + +The retained [acceptance evidence](../../torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-acceptance/) +contains the exact runtime record, wheel resolution, pip report, installed probe, +acceptance summary, and RPC log. At the time of this Linux-only acceptance, +Windows/macOS were covered by an opt-in native CI matrix but had not run; the +later three-platform manual acceptance is recorded below. This does not +establish CUDA/device execution, packaged desktop installation, an image +adapter, or Tuldok behavior for v2.14.0. + +## 2026-09-25 — Native test coverage and desktop RPC diagnosis + +The production automatic Python preview now has a platform-neutral regression +test for newest-first candidate selection, fallback only after definite wheel +or dependency incompatibility, and stopping on inconclusive resolver or +interpreter-provisioning failure. Windows and macOS provider tests cover +cancellation, timeout, descendant draining, and closed admission. The native +quality workflow runs those provider tests on all three OSes and has a guarded +Windows/macOS run for the fallback test. At the time of this entry, Linux +app-manager verification passed all 180 library tests; Windows GNU test-target +checking was compile-only, and Windows MSVC/macOS tests still needed native +runners. Later native run results are recorded below. + +The reported `Unknown API method: get_torch_release_options` identifies an +older Electron bundle: the current source and local Linux candidate register +the method, but the toolbar-linked package has not been replaced. The managed +runtime path already provisions private CPython automatically; users do not +select a Python version or need Python on the host. Keep the toolbar-linked +release update, native Windows/macOS install and lifecycle acceptance, provider +license attribution, and packaged desktop Torch installation open. Do not +extend the Windows/macOS runtime support claim until their native gates pass. + +The public [`v0.7.0` prerelease](https://github.com/MrScripty/Pumas-Library/releases/tag/v0.7.0) +was published on 2026-09-17, and its installer assets date from that build. The +local Linux 0.7.0 candidate was rebuilt on 2026-09-25 with the RPC allowlist +repair. The reported error is raised by Electron IPC validation before the Rust +Torch manager runs, so no Python/build selection can correct that installed +bundle. The public toolbar-linked release remains unchanged. + ## Current branch behavior - Stable upstream `vMAJOR.MINOR.PATCH` releases are discovered independently of @@ -36,21 +198,51 @@ the current-standards coordination entry is [PRG-I17](../../current-standards-re listing restores the target base's one-page / 100-item budget. A new cache records completeness; an old unmarked Torch cache containing exactly 100 or 1,000 entries is refreshed because these counts match earlier one-page and - ten-page caps. Prereleases, nightlies, source builds, and managed installation - on platforms other than - Linux x86_64 remain outside this scope. Installed local releases remain visible + ten-page caps. Prereleases, nightlies, and source builds remain outside this + scope. The v2.14.0 CPU/Core RPC install, managed-provider, restart, and + sidecar acceptance passed on Linux x86_64, Windows x64, and macOS arm64 in + manual run [36229508586](https://github.com/MrScripty/Pumas-Library/actions/runs/36229508586) + on `21041697`, including the metadata-lock follow-up. This is historical + evidence for that source, not qualification of later stacked PR candidates. + This does not close packaged-desktop, non-CPU, image-adapter, or Tuldok gates; + see the linked cross-platform plan. Installed local releases remain visible when upstream discovery fails. - The qualified 2.9.1 recipe remains a fixed CUDA 13.0 / CPython 3.12 bundled - preset. Other stable releases can use an installed CPython 3.10–3.13 - interpreter and an official CPU/CUDA/ROCm wheel index. Pumas does not provision - interpreters. One installed build/interpreter/adapter combination is supported - per upstream tag; the UI must disclose the installed combination before a - different combination is attempted. + preset. The updated manager provisions its CPython 3.12 base from the pinned + provider catalog. Other stable releases try stable native CPython candidates + from newest to oldest (3.10 minimum, no upper minor cap) against exact official + CPU/CUDA/ROCm wheels and complete dependencies. The UI has no Python selector + and shows the Pumas-provisioned interpreter after preview. Provider/network failures remain + inconclusive and cannot trigger a downgrade. Clean-host managed CPython + provisioning and CPU/Core installation pass without host Python on Linux, + Windows, and macOS. One installed build/interpreter/adapter combination is + supported per upstream tag; a different combination requires a fresh preview. +- For the accepted v2.14.0 CPU/Core runs, dynamic install choices come from a + bounded scan of the official PyTorch + wheel directory and exact per-channel indexes for the selected release and + managed CPython candidate tags. A release/build/Python pair is offered only when that + exact Torch wheel exists for the target host and interpreter tags. Partial + scans remain inconclusive; + they do not turn an unobserved wheel into a confirmed absence. The desktop uses + the manager recommendation without requiring build, Python, or image-profile + selections, and advanced settings contain only returned exact pairs. On a + NVIDIA+Intel host, CUDA and CPU may be shown while ROCm is filtered out. + Automatic CUDA selection requires a complete scan and an installed NVIDIA + driver meeting the documented Linux minor-compatibility floor for the channel; + unknown/newer channel families remain advanced. Minor compatibility can limit + features and PTX, so device and model checks still run after installation. + ROCm remains an advanced choice because PCI detection and an `amdgpu` binding + alone do not establish that a particular GPU supports a particular ROCm wheel. + An incomplete scan recommends an exact CPU wheel provisionally when present. - The desktop asks the manager for available choices and a retained preview before installation. Dynamic previews show every resolved wheel URL, version, - and SHA-256, with `none` or FLUX.2 adapter dependencies selected separately. - The manager retains the exact pip resolution and a fingerprint of the chosen - interpreter; installation consumes that retained lock without resolving again. + and SHA-256. Core runtime (`none`) is the default dependency profile. Linux + may offer Pumas' FLUX.2 image dependencies as an explicit advanced profile; + they are not an upstream Torch component. Neither profile implies + qualification for image generation on every release. + The manager retains the exact pip resolution, Python distribution source and + version, uv pin, target, and interpreter fingerprint; installation consumes + that retained identity without resolving again. Previews expire after 30 minutes and the in-memory store retains at most 32; expired reports are discarded when read. Resolver results use a typed outcome across the RPC and desktop boundary: @@ -59,8 +251,8 @@ the current-standards coordination entry is [PRG-I17](../../current-standards-re is validated across the generated contract. The install request contract accepts both `app_id`/`appId` and optional `preview_id`/`previewId` forms. After a definite unsupported preview, the desktop can search a bounded set of - official Torch indexes for - wheel matches for installed interpreters. + official Torch indexes for wheel matches across the pinned managed CPython + catalog. These discovery results are independent of host-installed Python. These leads are explicitly incomplete: dependencies and adapters are unchecked, and choosing one starts a fresh exact preview. Nunchaku's known wheel is confined to the fixed 2.9.1 preset. @@ -94,6 +286,32 @@ the current-standards coordination entry is [PRG-I17](../../current-standards-re stops only its admitted process generation. The desktop exposes a generation-conditional Stop action after a successful trial. +## 2026-09-24 release-specific choices follow-up + +The reported `v2.14.0` rejection was caused by applying a global `cu134` build +choice to every release. Official wheel discovery confirmed that `v2.14.0` has +exact CPU and CUDA `cu126`, `cu130`, and `cu132` wheel candidates and no +`cu134` candidate; Python changes cannot make the absent build/release pair +exist. The manager's release-options RPC now scans official channels and +returns exact installed-interpreter matches. It filters choices by detected PCI +display vendor, ranks Python 3.12 then 3.13, 3.11, 3.10 when several exact +matches are available, and uses conservative driver policy for automatic CUDA +recommendation. NVIDIA's published minor-compatibility floors are used for +CUDA 13.x, 12.x, and 11.x; unrecognized families and ROCm are not automatically +recommended. The current execution sandbox detects GPU vendors but cannot +communicate with the NVIDIA driver, so its automatic choice is CPU where an exact +CPU wheel exists. This is not a claim about the driver's availability to the +unsandboxed desktop process. + +At that time the flow selected Pumas' FLUX.2 image dependency profile by +default. The current flow defaults to core Torch (`none`) and makes FLUX.2 an +explicit advanced profile on Linux. Exact package resolution still determines +whether FLUX.2 can be installed for a given Torch release, and a passing +package preview does not prove device use, image generation, or Tuldok +compatibility. The existing real Tuldok evidence remains limited to Torch +2.10 / CUDA 13.0 / Python 3.12 / FLUX.2; no v2.14.0 image result or all-release +inference claim is added by this implementation. + ## Earlier evidence retained from the previous report The counts and direct-resolver experiments in this subsection predate the @@ -177,8 +395,11 @@ desktop control test, matching the user's approved “desktop or API” scope. T actual desktop-driven FLUX.2/Tuldok repeat below remains a separate desktop product claim; it is not required to prove the RPC installation path. -U1–U4 are accepted for the scope in the plan. On Linux x86_64, the current Pumas -RPC flow discovered 63 stable tags, previewed `v2.9.0` / CPU / CPython 3.12 as +U1–U4 were accepted for the earlier Linux x86_64 flow using a host-installed +CPython interpreter. Managed-Python provisioning supersedes that setup, so this +record is historical evidence and does not satisfy the current clean-host +acceptance gate. On Linux x86_64, the Pumas RPC flow discovered 63 stable tags, +previewed `v2.9.0` / CPU / CPython 3.12 as 25 exact wheel artifacts with URLs and SHA-256 hashes, installed it from the retained resolution, inspected a passing core probe, and explicitly selected it. A managed Torch profile then passed startup, health, and protocol 3 checks as @@ -189,14 +410,18 @@ wheel was `2.9.0+cpu` with SHA-256 The adapter was `none`; no image generation was attempted. The probe result was passed, non-stale, with core status passed and adapter status not selected. -The accepted RPC lifecycle summary and complete 25-artifact manifest are now +The historical RPC lifecycle summary and complete 25-artifact manifest are retained in the [acceptance evidence JSON](../../torch-upstream-version-management/reports/v2.9.0-cpu-rpc-acceptance.json). The original isolated launcher root and temporary acceptance file were under `/tmp/pumas-torch-upstream-e2e-20260924-accepted`. This closes PRG-I17's runtime -management acceptance for the authorized Linux/Python scope. It does not claim a -real interactive Pumas desktop run. +management acceptance for the earlier Linux/Python scope. It does not claim +clean-host managed-Python provisioning or a real interactive Pumas desktop run. + +## Historical pre-U6 branch gates -## 2026-09-24 current-tree gates +These counts describe the earlier PR branch before the release-specific U6 +changes below. They remain useful as the prior baseline, not as the current-tree +verification result. - Python resolver: 18 tests passed, including Rust/Python ordered build-vocabulary parity; Ruff passed. The `pumas-app-manager` library suite passed 136 tests, @@ -235,6 +460,42 @@ real interactive Pumas desktop run. completed successfully on 2026-09-24; all five executed jobs passed, including the default-feature Rust quality and no-inference headless gates. +## 2026-09-24 U6 release-specific gates + +- The live official-index command + `python3.12 -I torch-server/resolve_runtime.py --release-options --version 2.14.0 --interpreter python3.10 --interpreter python3.11 --interpreter python3.12` + completed with + `completeScan=true` for installed CPython 3.10, 3.11, and 3.12. Exact + candidates were CPU, `cu126`, `cu130`, `cu132`, `rocm7.2`, and `rocm7.14` + for each interpreter; there was no `cu134` candidate. The manager filters + those raw upstream results against detected display vendors, so an + NVIDIA-plus-Intel host retains CPU/CUDA and does not offer ROCm. CUDA + auto-recommendation also requires a complete scan and a recognized NVIDIA + driver floor. This sandbox cannot query the NVIDIA driver, so it does not + establish which CUDA channel the unsandboxed desktop will recommend. +- Full Python suite: 84 tests passed; `ruff check torch-server` and + `ruff format --check torch-server` passed. `pumas-app-manager`: all 149 tests + passed, including the 14 release-options, driver-floor, incomplete-scan, and + legacy-alternatives filtering tests. `pumas-rpc`: 256 unit tests, 17 + integration tests, and 2 intent integration tests passed; 10 integration and + 2 live-network intent tests were ignored. Rust formatting and manager Clippy + with warnings denied passed. +- Frontend: all 126 test files and 708 tests passed; typecheck and lint passed. + The focused preview tests cover automatic recommendation, exact-release + advanced choices, a null recommendation, Pumas-owned FLUX.2 labeling, and + rejection of CPU-host CUDA/ROCm or mismatched alternatives. Electron's + generated desktop contract check passed. The independent Sol xhigh review + found no issue in the repaired host/release filtering or retained-preview + boundary; the Astra high final review found no remaining implementation + finding and requested this historical/current inventory split. +- The live scan confirms wheel availability only. A direct full resolver attempt + for `v2.14.0` / `cu132` / FLUX.2 ran for several minutes without returning a + result and was interrupted; this establishes neither success nor a dependency + incompatibility. A completed retained dependency preview, install, managed + startup, and Tuldok image generation have not been established here. The + existing actual image result remains limited to Torch 2.10 / CUDA 13.0 / + Python 3.12 / FLUX.2. + ## Separate desktop and image-serving claim 1. The real FLUX.2 GPU/Tuldok result is exercised through RPC and remains scoped @@ -250,3 +511,155 @@ real interactive Pumas desktop run. The first serving scope is the existing Nunchaku Z-Image and FLUX.2 Klein image models. A general user-defined PyTorch model plugin contract is a separate decision. Merge or source presence alone does not establish Tuldok inference. + +## Managed CPython provider follow-up — 2026-09-25 + +Torch 2.14.0 CPU/Core passed the native Linux RPC install and managed sidecar +lifecycle using Pumas-provisioned CPython 3.14.7. A fresh RPC process reopened +the same data root and reverified the exact Python identity and active profile, +a fresh CPU tensor operation through the persisted managed venv, the retained +RPC probe report, the sidecar trial/stop, and graceful shutdown; see the +[restart acceptance evidence](../../torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-restart-acceptance/README.md). +The acceptance script's cold-start release-options wait now covers managed +CPython provisioning as well as the subsequent wheel scan. +This does not expand the +existing Tuldok/image qualification beyond its recorded Torch 2.10 tuple. +The uv 0.12.18 MIT/Apache notices are included in release attribution. The +Linux, Windows, and macOS CPython 3.14.7 full-archive license collections are +retained in the +[cross-platform runtime plan](../../torch-cross-platform-runtime-management/reports/managed-python-license-collection/README.md). +The Windows archive has native selection evidence from +[run 36214227835](https://github.com/MrScripty/Pumas-Library/actions/runs/36214227835) +on commit `a0658131`: that install selected CPython 3.14.7, and its full-archive +SHA-256 matches the retained Windows full-archive manifest. The current +Windows and macOS installs also selected CPython 3.14.7; their install-artifact +identities and separate full-archive license manifests are retained in their +acceptance reports below. Windows/macOS selected-provider notices still need +release-attribution integration. Native RPC installation now passes on all +three targets; packaged desktop Torch installation remains unproven. Local v0.7.0 +Linux AppImage and deb packages were rebuilt +with the updated uv notices and passed extracted-resource and bundled RPC +`/health` smoke checks; this did not update the public toolbar-linked release. + +## 2026-09-25 — Exact Torch wheel and cross-platform preflight follow-up + +Manual native run +[36223106097](https://github.com/MrScripty/Pumas-Library/actions/runs/36223106097) +on `07f7e9f6` passed v2.14.0 CPU/Core resolution, install, fresh CPU operation, +retained-probe revalidation, second-session identity check, and sidecar +trial/stop on Linux x86_64, Windows x64, and macOS arm64. Each platform retained +25 hashed artifacts and passed graceful shutdown using managed CPython 3.14.7. +The [Linux](../../torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-restart-acceptance/README.md), +[Windows](../../torch-cross-platform-runtime-management/reports/v2.14.0-windows-cpu-rpc-restart-acceptance/README.md), +and [macOS](../../torch-cross-platform-runtime-management/reports/v2.14.0-macos-cpu-rpc-restart-acceptance/README.md) +reports retain the exact wheel/dependency artifacts and managed runtime identity. +The macOS release preflight honored a 913-second Retry-After and found the +requested tag on its second attempt within the 1800-second total budget. + +PR run +[36223095054](https://github.com/MrScripty/Pumas-Library/actions/runs/36223095054) +passed all required PR checks, including native QA; RPC E2E is skipped on PR +events. Provider notice integration, packaged desktop Torch installation, +CUDA/MPS execution, and v2.14.0 Tuldok/image generation remain open. The +separate v2.10 image qualification is unchanged. + +## 2026-09-25 — Torch metadata and lifecycle review repairs + +The current PR branch now serializes Torch metadata reads and writes across +independent manager processes with a permanent `.torch-versions.lock`. The +guard covers install/removal, explicit and default selection, validation, and +startup cleanup/normalization. A snapshot uses one metadata generation; when a +writer owns the lock, readers return the last coherent cached generation, and +startup avoids reading a transitional active-version marker. Blocking workers +retain their lock lease until writes finish even if their async caller is +canceled. Read-only Astra high and Sol xhigh reviews found no remaining +blocking issue in these concurrency, cache, startup, or Windows lock-error +paths. A failed metadata write followed by a failed active-marker rollback is +still a best-effort error case. + +Local verification on this branch passed 200 `pumas-app-manager` tests and the +Rust default-member suite, all-target/all-feature Clippy with warnings denied, +Rust formatting, Windows GNU app-manager test compilation, 713 frontend tests, +48 desktop-contract tests, 179 Electron tests (one platform-dependent skip), +53 managed-Python acceptance fixtures, Ruff, Python compilation, and +release-attribution validation. PR run +[36223095054](https://github.com/MrScripty/Pumas-Library/actions/runs/36223095054) +passed all required PR checks; RPC E2E is skipped on PR events. Manual run +[36223106097](https://github.com/MrScripty/Pumas-Library/actions/runs/36223106097) +passed current-revision CPU/Core RPC install/restart on all three targets. +Packaged desktop Torch installation, provider-license integration, CUDA/MPS +execution, and v2.14.0 Tuldok/image generation remain unverified. X1–X7 retain +their partial/pending states until their full evidence gates pass, and the local +Linux packages have not updated the public toolbar-linked release. + +## 2026-09-26 — Torch metadata lock contention follow-up + +A PR review identified a user-visible race: status snapshots briefly hold the +exclusive `.torch-versions.lock`, so a selection, removal, or installation +could fail immediately with `WouldBlock` during normal UI polling. Mutations +that acquire this shared lock now retry only `WouldBlock`, asynchronously, every +20 ms for at most 500 ms. A longer-lived owner still causes a bounded failure; +other I/O errors return immediately. The change covers install, active/default +selection, and removal. Read snapshots remain nonblocking, and startup +normalization defers only expected lock contention. Existing stage and detached +worker lock leases are unchanged. + +Regression coverage exercises short lock handoff, the 500 ms bound, propagation +of non-contention errors, startup error classification, and manager mutation +call sites. The current local `pumas-app-manager` library suite passes 205 tests; +workspace check and Clippy, Rust formatting, 44 Torch resolver tests, Ruff, and +`git diff --check` pass. The full local workspace test could not complete cleanly +in this environment: 1432 `pumas-library` unit tests pass with four test threads, +but the `intent_api_tests` fail while creating their local API TempDirs with +`PermissionDenied`/temporary-storage errors. Astra high and Sol xhigh read-only +reviews found no lock-lifecycle blockers. The initial three-platform native RPC evidence +above predates this lock follow-up. Subsequent native run +[36229508586](https://github.com/MrScripty/Pumas-Library/actions/runs/36229508586) +passed all three native legs on `21041697`, as recorded in the platform +`v2.14.0-*-current-source-cpu-rpc-restart-acceptance` reports. Those report names +refer to the source tested then, not later PR candidates. PR run 36225003150 +passed on `66ccbfe7` before the follow-up; each resulting PR candidate needs +its own applicable checks. + +The Torch QA job now disables checkout credential persistence. Security review +confirmed the job has `contents: read` and that PR caches use the PR merge-ref +scope; no cache-mode change was needed ([GitHub cache scope](https://docs.github.com/en/actions/reference/workflows-and-actions/dependency-caching)). + +## 2026-09-26 — CPython release attribution and desktop RPC diagnosis + +The release attribution generator now includes target-scoped CPython full- +archive license supersets for Linux x86_64 GNU, Windows x86_64 MSVC, and macOS +arm64. It derives the target set from `artifact-plan.json`, links each native +restart runtime report to its separate Python Build Standalone full-archive +manifest, preserves the selected install-only URL and uv identity separately, +and records the raw 19-file license set and `PYTHON.json` for each platform. +The generated inventory contains 371 package entries and 78 hashed inputs; +all 57 legal files are covered by the source manifests. Windows CRLF text is +preserved in the generated UTF-8 notice. Generation and packaging checks bind +each target to its exact Rust uv enum arm, pinned archive hash, and reviewed +Python Build Standalone release/flavor; they reject incomplete or duplicate +legal-file lists and malformed archive hashes. Attribution integrity, release +tests, Ruff, the Electron packaging hook, and the focused Electron RPC allowlist +regression pass. The broad local Electron suite hits `EPERM` when one test +binds its loopback HTTP server inside this sandbox; the same failure does not +affect the focused RPC or packaging tests. + +The reported `Unknown API method: get_torch_release_options` is confirmed to +come from Electron's `api:call` allowlist before Rust dispatch. The public +`v0.7.0` tag lacks that method in `electron/src/rpc-method-registry.ts`; the +current branch contains it and the regression test passes. The toolbar-linked +public release is still v0.7.0, so it has not received the branch's updated +bridge. Current-branch local Linux AppImage/deb candidates include the updated +bridge and generated CPython notices, pass extracted-resource hash checks, and +start their packaged backends through `/health`. Their SHA-256 values are +`1398ef0a9da1c0aab90681d3c91674ef88c6229a84984047938e7bd6eb350acd` (AppImage) +and `468b6f7c2af00ff8785f80e5486cd5133979e875dd351b4b9f5284ddfd195043` (deb). +The packaged Linux RPC backend then passed Torch 2.14.0 CPU/Core install and +restart using managed CPython 3.14.7, the 25-hash official artifact resolution, +CPU operation, probe, protocol 3 sidecar start/stop, and graceful cleanup; see +the [packaged acceptance report](../../torch-cross-platform-runtime-management/reports/v2.14.0-linux-packaged-cpu-acceptance/README.md). +This is backend acceptance rather than GUI-driven installation. These are local +candidates and have not been uploaded to the toolbar-linked release. Packaged +Electron UI interaction, Windows/macOS packaged installation, provider +cancellation/tamper/retry, CUDA/MPS execution, and v2.14.0 Tuldok image +generation remain open. diff --git a/docs/plans/torch-upstream-version-management/plan.md b/docs/plans/torch-upstream-version-management/plan.md index 3771ebb87..be4fca5ed 100644 --- a/docs/plans/torch-upstream-version-management/plan.md +++ b/docs/plans/torch-upstream-version-management/plan.md @@ -1,26 +1,49 @@ # Plan: Upstream Torch Version Management -**Plan status:** `Completed` +**Plan status:** `Active` **Owner:** Pumas runtime integration **Authorization:** The repository owner selected this scope on 2026-09-24 after -reviewing the active Torch deployment inventory. +reviewing the active Torch deployment inventory. On 2026-09-25, the owner +authorized Pumas-managed stable CPython provisioning with no host-Python or +user-Python-selection requirement. ## Execution state -**Current phase:** U1–U4 are accepted for the approved Linux x86_64 / installed -CPython scope. Focused tests, production builds, generated-contract checks, and -read-only cross-layer reviews passed; the real v2.9.0 CPU install and managed RPC -lifecycle passed on 2026-09-24. U5 retains the exact Torch 2.10 CUDA 13.0 / FLUX.2 -Tuldok evidence. A real interactive Pumas desktop image run and image generation -across other Torch tuples are not claimed by this plan. - -**Blocker:** None within the authorized scope. - -**Next slice:** No acceptance work remains in this plan. A real desktop-driven -Tuldok repeat or broader user-defined image-model plugin contract would need a -separately scoped follow-up. +**Current phase:** The managed-CPython provider, automatic-choice UI, resolver +candidate scan, retained interpreter provenance, and Core-default profile have +passed code review and targeted Linux checks. Local Linux 0.7.0 AppImage and deb +packages were rebuilt from `ce9170d4`; artifact validation, standalone startup, +and packaged RPC health smoke pass, and the packed Electron bundle contains the +`get_torch_release_options` registration. In an isolated Linux RPC run, the +current source used managed CPython 3.14.7 to scan Torch 2.14.0 and resolve a +44-artifact CUDA 13.2 Core runtime preview (`python3.14`, adapter `none`). A +separate CPU Core preview resolved 25 artifacts and installed Torch 2.14.0 +through its retained preview with managed CPython 3.14.7. The installer checked +Torch identity and CPU operation; the installed version was explicitly +selected. The install ran with `python`, `pip`, and `pypy` absent from the +backend's child `PATH`, then its isolated temporary root was removed. The +managed sidecar also passed startup, health, protocol 3, and generation-owned +stop before graceful backend shutdown. The toolbar-linked package has not been +replaced or published. Image evidence remains limited to its exact previously +recorded tuples. The exact managed-Python and sidecar run is retained in the +[v2.14.0 acceptance evidence](../torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-acceptance/acceptance.json). + +**Blockers:** Native CPU/Core install, restart, and sidecar acceptance passed +on Linux x86_64, Windows x64, and macOS arm64 for historical source `21041697` +in [run 36229508586](https://github.com/MrScripty/Pumas-Library/actions/runs/36229508586). +The three provider-license collections are integrated into release attribution, +but [missing declared upstream license references](../torch-cross-platform-runtime-management/reports/managed-python-license-collection/missing-declared-license-references.md) +remain a release acceptance blocker. Packaged desktop installation through the +Electron UI, CUDA/MPS device use, and v2.14.0 image/Tuldok behavior remain +unqualified. Historical native success does not certify the intermediate PR trees. + +**Next slice:** Qualify and independently review the managed runtime foundation +PR, including its repairs and the missing upstream license evidence. Obtain +fresh checks for the actual candidate and later complete packaged desktop and +device acceptance. Keep this Torch install path separate from FLUX.2, image +generation, and Tuldok claims, which require their own exact runtime evidence. ## Product contract @@ -28,19 +51,24 @@ Every stable upstream PyTorch release tag (`vMAJOR.MINOR.PATCH`) is discoverable without a Pumas qualification allowlist when the complete GitHub listing fits the 20-page / 120-second request budget. If a page fails or the budget is exceeded, discovery returns an error and never presents a partial listing as -complete. A release is installable when the user can select an official CPU, -CUDA, or ROCm binary wheel that matches Linux x86_64 and an already installed -CPython 3.10–3.13 interpreter, and the full sidecar dependency set resolves to -binary artifacts. For dynamic choices, the retained preview records the exact -version, build, interpreter, adapter, wheel URLs, and hashes consumed by -installation. +complete. A release is installable when an official CPU, CUDA, or ROCm binary +wheel matches the native host and a stable standard CPython provisioned by Pumas, +and the full sidecar dependency set resolves to binary artifacts. CPython 3.10 +is the sidecar runtime minimum, with no configured upper minor cap. Candidate +Python versions come from wheel compatibility tags and the pinned managed +provider catalog; the manager selects the newest stable candidate whose complete +resolution succeeds. For dynamic choices, the retained preview records the exact +version, build, interpreter and provider identity, adapter, wheel URLs, and +hashes consumed by installation. "Any release" describes discovery and exact-tuple resolution, not a promise that every old tag has a wheel for every interpreter or build. Unsupported -combinations and network-inconclusive checks remain distinct. Pumas does not -provision Python or compile Torch from source in this plan. XPU and operating -systems other than Linux x86_64 remain outside the supported provider/runtime -contract. The fixed `v2.9.1` CUDA 13.0 / CPython 3.12 preset remains available as +combinations and network-inconclusive checks remain distinct. Pumas provisions +its own Python runtime and does not compile Torch from source in this plan. XPU +remains outside this plan's accepted provider/runtime contract. Windows and +macOS native CPU/Core support has historical acceptance on `21041697` under the +[cross-platform Torch runtime plan](../torch-cross-platform-runtime-management/plan.md). +The fixed `v2.9.1` CUDA 13.0 / CPython 3.12 preset remains available as a separately qualified, previously accepted exception backed by the embedded hash-pinned requirements lock. Its preview exposes the three direct wheel URLs; transitive wheel URLs are chosen from that lock during install, so this preset @@ -48,6 +76,18 @@ does not claim the dynamic path's full per-wheel URL preview. Every other tuple for `v2.9.1` uses the normal retained preview path and does not inherit the preset's qualification. +Normal installation does not require the user to pick a Python interpreter. +The manager provisions its pinned Python provider, discovers exact official +wheels for the selected release and provider-catalog candidates, filters +GPU channels by detected display-device vendor, and returns a recommendation +when its bounded scan and host checks support one. The manager selects Python +automatically; advanced controls can select only a returned build/profile +combination. Every install still requires the +existing full dependency preview and retained hash lock. Core Torch runtime is +the default. On Linux, Pumas-owned FLUX.2 dependencies remain an explicit +advanced profile; they are not part of an upstream Torch release. Windows and +macOS offer only the core profile until a platform-specific adapter is accepted. + Installing a release does not activate it or make it the default. Selection, default selection, sidecar startup, and stopping remain explicit version/profile operations. A successful import or health check qualifies only its exact @@ -71,9 +111,10 @@ updated PRG-I17 disposition. | --- | --- | --- | | U1 | All stable upstream release tags are listed independently of Pumas recipes when the listing completes within the 20-page / 120-second budget; prereleases/nightlies are excluded; installed releases remain inspectable when upstream discovery is unavailable. Page failures and budget exhaustion are explicit errors, never silently truncated success. | Release fixtures including more than ten pages, end-of-list, page failure/no partial success, page-budget/deadline limits, cache completeness, filters, and offline installed-version query; live 63-tag discovery including v2.9.0. | | U2 | Every dynamic build/interpreter selection runs an exact preview. Official origins, binary wheel compatibility, complete dependencies, hashes, and retained preview identity are validated before installation. The fixed qualified preset follows its separately documented hash-lock exception. | Python resolver and Rust preview tests; typed rejection values distinguish unsupported, invalid report, network-inconclusive, and generic-inconclusive outcomes without parsing diagnostic text; generated Electron/preload/React contract checks. | -| U3 | A non-preset release installs into staging from the retained lock, passes identity/core probes, and publishes only after validation. Failure/cancellation preserves installed, active, and default state. | Managed installation tests and an isolated real v2.9.0+cpu / CPython 3.12 installation on Linux x86_64; see the [RPC acceptance summary and artifact manifest](reports/v2.9.0-cpu-rpc-acceptance.json). | -| U4 | The installed runtime can be inspected, explicitly selected, started by a managed Torch profile, health/protocol checked, and stopped by its owned generation through Pumas RPC or the desktop. | Composed desktop test plus a real older-release RPC lifecycle on Linux x86_64; see the [RPC acceptance summary](reports/v2.9.0-cpu-rpc-acceptance.json). | +| U3 | A non-preset release installs into staging from the retained lock, passes identity/core probes, and publishes only after validation. Failure/cancellation preserves installed, active, and default state. | Managed installation tests plus isolated real Linux installs for v2.9.0 CPU/CPython 3.12 and v2.14.0 CPU/Core with Pumas-managed CPython 3.14.7; see the [v2.9.0 evidence](reports/v2.9.0-cpu-rpc-acceptance.json) and [v2.14.0 evidence](../torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-acceptance/acceptance.json). | +| U4 | The installed runtime can be inspected, explicitly selected, started by a managed Torch profile, health/protocol checked, and stopped by its owned generation through Pumas RPC or the desktop. | Composed desktop test plus real v2.9.0 and v2.14.0 RPC lifecycle acceptance on Linux x86_64; the v2.14.0 evidence records startup, health/protocol 3, generation-owned stop, and graceful backend shutdown. | | U5 | The current real Tuldok image result remains accurately scoped to its exact Torch 2.10 CUDA 13.0 / FLUX.2 tuple; no general model/plugin or all-release image-generation support is inferred. | Reuse [2.10 GPU and Tuldok evidence](../torch-diffusion-serving/reports/upstream-v210-cu130-flux2-e2e.md); update the runtime inventory in [the progress report](../torch-diffusion-serving/reports/upstream-version-manager-progress.md). | +| U6 | For each selected stable release, the manager discovers that release's exact official CPU/CUDA/ROCm wheel matches for Pumas-managed CPython candidates, filters GPU families against detected display devices, and supplies a host-aware default when compatibility is established. Build and Pumas dependency profile remain optional advanced settings; Python selection is automatic. Partial discovery stays inconclusive; a wheel match still requires the full retained dependency preview. | Dynamic official-index scan fixtures and live `v2.14.0` scan; managed-provider candidate/fallback tests; NVIDIA driver-floor/unknown/partial-scan manager tests; typed RPC and generated-contract checks; desktop preview tests for automatic defaults, release-bounded overrides, null recommendations, and Pumas profile labeling. No all-release image qualification is inferred. | ## Ownership and verification @@ -109,4 +150,8 @@ The authorized implementation uses disjoint write sets: The CPU/CUDA/ROCm channel vocabulary is shared between the Rust manager and Python resolver. Changes to wire fields, generated contracts, the plugin -manifest, or other platform support require a new exact handoff. +manifest, or other platform support require a new exact handoff. The separate +Windows/macOS handoff is +[Cross-Platform Torch Runtime Management](../torch-cross-platform-runtime-management/plan.md); +its remaining packaged-desktop and device acceptance does not change this +plan's recorded Linux evidence. diff --git a/docs/release-attribution/0.7.0/README.md b/docs/release-attribution/0.7.0/README.md index 44988eca2..49cd6f4ac 100644 --- a/docs/release-attribution/0.7.0/README.md +++ b/docs/release-attribution/0.7.0/README.md @@ -3,11 +3,36 @@ `THIRD-PARTY-NOTICES.txt` is generated from exact resolved package license and notice files by `python3 scripts/release/generate-notices.py`. It is embedded as `resources/THIRD-PARTY-NOTICES.txt` and copied to the release directory as -`THIRD-PARTY-NOTICES-0.7.0.txt`. `inventory.json` records input and source-text -hashes. `check-attribution.cjs` runs in CI and before Electron packaging; stale -inputs, altered texts, and missing notices refuse packaging. Cargo manifests are -hashed alongside lockfiles so changes to feature selection also invalidate the -inventory. The minimized release inventory contains 367 package entries. +`THIRD-PARTY-NOTICES-0.7.0.txt`. `inventory.json` records the source inputs, +selected-provider evidence, and legal-text hashes. `check-attribution.cjs` runs +in CI and before Electron packaging; stale inputs, altered texts, and missing +notices refuse packaging. Cargo manifests are hashed alongside lockfiles so +changes to feature selection also invalidate the inventory. + +## Managed CPython provider + +The selected uv provider can download private CPython runtimes after installation, +so the release notice includes the archive license set for each shipped desktop +target: Linux x86_64 GNU, Windows x86_64 MSVC, and macOS arm64. The checked-in +`scripts/release/licenses/managed-python-sources.json` maps each target to its +accepted runtime report and a separate, hash-verified Python Build Standalone +full-archive license manifest. Generation requires a one-to-one match with +`scripts/release/artifact-plan.json`, validates the selected CPython version, +target, install-only source URL, provider identity, `PYTHON.json`, manifest, and +every raw license-text hash, then emits target-specific notice records. +It binds the current Rust uv version and target-specific enum-arm pins, as well +as the selected install-only URL to the reviewed full-archive release, asset +name, flavor, and `PYTHON.json` build options. The packaging checker repeats +these checks and requires each manifest legal text exactly once, so updating +only the generated inventory cannot hide provider or archive drift. + +The selected install-only runtime URL and target identity remain distinct from +the full archive used to collect legal text. The full-archive hash is provenance +for that license collection; its notices are a conservative superset and do not +claim that every listed component is present in the stripped install-only +runtime. The inventory hashes the catalog, artifact plan, accepted runtime +reports, full-archive manifests, `PYTHON.json` files, and all captured license +texts. Legal text bytes, including Windows line endings, are preserved verbatim. The inventory includes the normal/build Rust dependency closure for the three desktop targets and the JavaScript production dependency closure. It is a diff --git a/docs/release-attribution/0.7.0/THIRD-PARTY-NOTICES.txt b/docs/release-attribution/0.7.0/THIRD-PARTY-NOTICES.txt index a4e981810..9bcf43f89 100644 --- a/docs/release-attribution/0.7.0/THIRD-PARTY-NOTICES.txt +++ b/docs/release-attribution/0.7.0/THIRD-PARTY-NOTICES.txt @@ -7,6 +7,9 @@ Electron also supplies LICENSE.electron.txt and LICENSES.chromium.html beside th application executable. Those files are part of this attribution and must be retained. ONNX upstream notices are included in full; downstream native closure verification is recorded in the release attribution report, not inferred from this list. +The uv notice covers a runtime executable downloaded by Pumas, not a bundled binary. +Managed CPython full-archive notices are target-scoped supersets for separately +selected install-only distributions; each archive identity is recorded below. adler2 2.0.1 (Rust normal/build dependency, all desktop targets; conservative superset) Source: https://crates.io/api/v1/crates/adler2/2.0.1/download @@ -74273,6 +74276,7960 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND limitations under the License. +============================================================================== + +CPython full archive 3.14.7 (Managed Python full-archive notice superset for aarch64-apple-darwin; selected install-only runtime tracked separately) +Source: https://github.com/astral-sh/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-aarch64-apple-darwin-pgo%2Blto-full.tar.zst +Declared license: Python-2.0, CNRI-Python +--- licenses/LICENSE.bdb.txt --- +The following is the license that applies to this copy of the Berkeley DB +software. For a license to use the Berkeley DB software under conditions +other than those described here, or to purchase support for this software, +please contact Oracle at berkeleydb-info_us@oracle.com. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +/* + * Copyright (c) 1990, 2013 Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Redistributions in any form must be accompanied by information on + * how to obtain complete source code for the DB software and any + * accompanying software that uses the DB software. The source code + * must either be included in the distribution or be available for no + * more than the cost of distribution plus a nominal fee, and must be + * freely redistributable under reasonable conditions. For an + * executable file, complete source code means the source code for all + * modules it contains. It does not include source code for modules or + * files that typically accompany the major components of the operating + * system on which the executable file runs. + * + * THIS SOFTWARE IS PROVIDED BY ORACLE ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR + * NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL ORACLE BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +/* + * Copyright (c) 1990, 1993, 1994, 1995 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +/* + * Copyright (c) 1995, 1996 + * The President and Fellows of Harvard University. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY HARVARD AND ITS CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL HARVARD OR ITS CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +/*** + * ASM: a very small and fast Java bytecode manipulation framework + * Copyright (c) 2000-2005 INRIA, France Telecom + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holders nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ + +--- licenses/LICENSE.bzip2.txt --- +This program, "bzip2", the associated library "libbzip2", and all +documentation, are copyright (C) 1996-2010 Julian R Seward. All +rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. The origin of this software must not be misrepresented; you must + not claim that you wrote the original software. If you use this + software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + +3. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + +4. The name of the author may not be used to endorse or promote + products derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Julian Seward, jseward@bzip.org +bzip2/libbzip2 version 1.0.6 of 6 September 2010 + +--- licenses/LICENSE.cpython.txt --- +A. HISTORY OF THE SOFTWARE +========================== + +Python was created in the early 1990s by Guido van Rossum at Stichting +Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands +as a successor of a language called ABC. Guido remains Python's +principal author, although it includes many contributions from others. + +In 1995, Guido continued his work on Python at the Corporation for +National Research Initiatives (CNRI, see http://www.cnri.reston.va.us) +in Reston, Virginia where he released several versions of the +software. + +In May 2000, Guido and the Python core development team moved to +BeOpen.com to form the BeOpen PythonLabs team. In October of the same +year, the PythonLabs team moved to Digital Creations, which became +Zope Corporation. In 2001, the Python Software Foundation (PSF, see +https://www.python.org/psf/) was formed, a non-profit organization +created specifically to own Python-related Intellectual Property. +Zope Corporation was a sponsoring member of the PSF. + +All Python releases are Open Source (see http://www.opensource.org for +the Open Source Definition). Historically, most, but not all, Python +releases have also been GPL-compatible; the table below summarizes +the various releases. + + Release Derived Year Owner GPL- + from compatible? (1) + + 0.9.0 thru 1.2 1991-1995 CWI yes + 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes + 1.6 1.5.2 2000 CNRI no + 2.0 1.6 2000 BeOpen.com no + 1.6.1 1.6 2001 CNRI yes (2) + 2.1 2.0+1.6.1 2001 PSF no + 2.0.1 2.0+1.6.1 2001 PSF yes + 2.1.1 2.1+2.0.1 2001 PSF yes + 2.1.2 2.1.1 2002 PSF yes + 2.1.3 2.1.2 2002 PSF yes + 2.2 and above 2.1.1 2001-now PSF yes + +Footnotes: + +(1) GPL-compatible doesn't mean that we're distributing Python under + the GPL. All Python licenses, unlike the GPL, let you distribute + a modified version without making your changes open source. The + GPL-compatible licenses make it possible to combine Python with + other software that is released under the GPL; the others don't. + +(2) According to Richard Stallman, 1.6.1 is not GPL-compatible, + because its license has a choice of law clause. According to + CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1 + is "not incompatible" with the GPL. + +Thanks to the many outside volunteers who have worked under Guido's +direction to make these releases possible. + + +B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON +=============================================================== + +Python software and documentation are licensed under the +Python Software Foundation License Version 2. + +Starting with Python 3.8.6, examples, recipes, and other code in +the documentation are dual licensed under the PSF License Version 2 +and the Zero-Clause BSD license. + +Some software incorporated into Python is under different licenses. +The licenses are listed with code falling under that license. + + +PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 +-------------------------------------------- + +1. This LICENSE AGREEMENT is between the Python Software Foundation +("PSF"), and the Individual or Organization ("Licensee") accessing and +otherwise using this software ("Python") in source or binary form and +its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, PSF hereby +grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, +analyze, test, perform and/or display publicly, prepare derivative works, +distribute, and otherwise use Python alone or in any derivative version, +provided, however, that PSF's License Agreement and PSF's notice of copyright, +i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Python Software Foundation; +All Rights Reserved" are retained in Python alone or in any derivative version +prepared by Licensee. + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python. + +4. PSF is making Python available to Licensee on an "AS IS" +basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. Nothing in this License Agreement shall be deemed to create any +relationship of agency, partnership, or joint venture between PSF and +Licensee. This License Agreement does not grant permission to use PSF +trademarks or trade name in a trademark sense to endorse or promote +products or services of Licensee, or any third party. + +8. By copying, installing or otherwise using Python, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 +------------------------------------------- + +BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 + +1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an +office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the +Individual or Organization ("Licensee") accessing and otherwise using +this software in source or binary form and its associated +documentation ("the Software"). + +2. Subject to the terms and conditions of this BeOpen Python License +Agreement, BeOpen hereby grants Licensee a non-exclusive, +royalty-free, world-wide license to reproduce, analyze, test, perform +and/or display publicly, prepare derivative works, distribute, and +otherwise use the Software alone or in any derivative version, +provided, however, that the BeOpen Python License is retained in the +Software, alone or in any derivative version prepared by Licensee. + +3. BeOpen is making the Software available to Licensee on an "AS IS" +basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE +SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS +AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY +DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +5. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +6. This License Agreement shall be governed by and interpreted in all +respects by the law of the State of California, excluding conflict of +law provisions. Nothing in this License Agreement shall be deemed to +create any relationship of agency, partnership, or joint venture +between BeOpen and Licensee. This License Agreement does not grant +permission to use BeOpen trademarks or trade names in a trademark +sense to endorse or promote products or services of Licensee, or any +third party. As an exception, the "BeOpen Python" logos available at +http://www.pythonlabs.com/logos.html may be used according to the +permissions granted on that web page. + +7. By copying, installing or otherwise using the software, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 +--------------------------------------- + +1. This LICENSE AGREEMENT is between the Corporation for National +Research Initiatives, having an office at 1895 Preston White Drive, +Reston, VA 20191 ("CNRI"), and the Individual or Organization +("Licensee") accessing and otherwise using Python 1.6.1 software in +source or binary form and its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, CNRI +hereby grants Licensee a nonexclusive, royalty-free, world-wide +license to reproduce, analyze, test, perform and/or display publicly, +prepare derivative works, distribute, and otherwise use Python 1.6.1 +alone or in any derivative version, provided, however, that CNRI's +License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) +1995-2001 Corporation for National Research Initiatives; All Rights +Reserved" are retained in Python 1.6.1 alone or in any derivative +version prepared by Licensee. Alternately, in lieu of CNRI's License +Agreement, Licensee may substitute the following text (omitting the +quotes): "Python 1.6.1 is made available subject to the terms and +conditions in CNRI's License Agreement. This Agreement together with +Python 1.6.1 may be located on the internet using the following +unique, persistent identifier (known as a handle): 1895.22/1013. This +Agreement may also be obtained from a proxy server on the internet +using the following URL: http://hdl.handle.net/1895.22/1013". + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python 1.6.1 or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python 1.6.1. + +4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" +basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. This License Agreement shall be governed by the federal +intellectual property law of the United States, including without +limitation the federal copyright law, and, to the extent such +U.S. federal law does not apply, by the law of the Commonwealth of +Virginia, excluding Virginia's conflict of law provisions. +Notwithstanding the foregoing, with regard to derivative works based +on Python 1.6.1 that incorporate non-separable material that was +previously distributed under the GNU General Public License (GPL), the +law of the Commonwealth of Virginia shall govern this License +Agreement only as to issues arising under or with respect to +Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this +License Agreement shall be deemed to create any relationship of +agency, partnership, or joint venture between CNRI and Licensee. This +License Agreement does not grant permission to use CNRI trademarks or +trade name in a trademark sense to endorse or promote products or +services of Licensee, or any third party. + +8. By clicking on the "ACCEPT" button where indicated, or by copying, +installing or otherwise using Python 1.6.1, Licensee agrees to be +bound by the terms and conditions of this License Agreement. + + ACCEPT + + +CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 +-------------------------------------------------- + +Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, +The Netherlands. All rights reserved. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Stichting Mathematisch +Centrum or CWI not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +ZERO-CLAUSE BSD LICENSE FOR CODE IN THE PYTHON DOCUMENTATION +---------------------------------------------------------------------- + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + +Licenses and Acknowledgements for Incorporated Software +======================================================= + +This section is an incomplete, but growing list of licenses and acknowledgements +for third-party software incorporated in the Python distribution. + +Mersenne Twister +---------------- + +The :mod:`_random` module includes code based on a download from +http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/emt19937ar.html. The following are +the verbatim comments from the original code:: + + A C-program for MT19937, with initialization improved 2002/1/26. + Coded by Takuji Nishimura and Makoto Matsumoto. + + Before using, initialize the state by using init_genrand(seed) + or init_by_array(init_key, key_length). + + Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura, + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. The names of its contributors may not be used to endorse or promote + products derived from this software without specific prior written + permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + Any feedback is very welcome. + http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html + email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space) + + +Sockets +------- + +The :mod:`socket` module uses the functions, :func:`getaddrinfo`, and +:func:`getnameinfo`, which are coded in separate source files from the WIDE +Project, http://www.wide.ad.jp/. :: + + Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the project nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + + +Asynchronous socket services +---------------------------- + +The :mod:`asynchat` and :mod:`asyncore` modules contain the following notice:: + + Copyright 1996 by Sam Rushing + + All Rights Reserved + + Permission to use, copy, modify, and distribute this software and + its documentation for any purpose and without fee is hereby + granted, provided that the above copyright notice appear in all + copies and that both that copyright notice and this permission + notice appear in supporting documentation, and that the name of Sam + Rushing not be used in advertising or publicity pertaining to + distribution of the software without specific, written prior + permission. + + SAM RUSHING DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN + NO EVENT SHALL SAM RUSHING BE LIABLE FOR ANY SPECIAL, INDIRECT OR + CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS + OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +Cookie management +----------------- + +The :mod:`http.cookies` module contains the following notice:: + + Copyright 2000 by Timothy O'Malley + + All Rights Reserved + + Permission to use, copy, modify, and distribute this software + and its documentation for any purpose and without fee is hereby + granted, provided that the above copyright notice appear in all + copies and that both that copyright notice and this permission + notice appear in supporting documentation, and that the name of + Timothy O'Malley not be used in advertising or publicity + pertaining to distribution of the software without specific, written + prior permission. + + Timothy O'Malley DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS + SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS, IN NO EVENT SHALL Timothy O'Malley BE LIABLE FOR + ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + + +Execution tracing +----------------- + +The :mod:`trace` module contains the following notice:: + + portions copyright 2001, Autonomous Zones Industries, Inc., all rights... + err... reserved and offered to the public under the terms of the + Python 2.2 license. + Author: Zooko O'Whielacronx + http://zooko.com/ + mailto:zooko@zooko.com + + Copyright 2000, Mojam Media, Inc., all rights reserved. + Author: Skip Montanaro + + Copyright 1999, Bioreason, Inc., all rights reserved. + Author: Andrew Dalke + + Copyright 1995-1997, Automatrix, Inc., all rights reserved. + Author: Skip Montanaro + + Copyright 1991-1995, Stichting Mathematisch Centrum, all rights reserved. + + + Permission to use, copy, modify, and distribute this Python software and + its associated documentation for any purpose without fee is hereby + granted, provided that the above copyright notice appears in all copies, + and that both that copyright notice and this permission notice appear in + supporting documentation, and that the name of neither Automatrix, + Bioreason or Mojam Media be used in advertising or publicity pertaining to + distribution of the software without specific, written prior permission. + + +UUencode and UUdecode functions +------------------------------- + +The :mod:`uu` module contains the following notice:: + + Copyright 1994 by Lance Ellinghouse + Cathedral City, California Republic, United States of America. + All Rights Reserved + Permission to use, copy, modify, and distribute this software and its + documentation for any purpose and without fee is hereby granted, + provided that the above copyright notice appear in all copies and that + both that copyright notice and this permission notice appear in + supporting documentation, and that the name of Lance Ellinghouse + not be used in advertising or publicity pertaining to distribution + of the software without specific, written prior permission. + LANCE ELLINGHOUSE DISCLAIMS ALL WARRANTIES WITH REGARD TO + THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS, IN NO EVENT SHALL LANCE ELLINGHOUSE CENTRUM BE LIABLE + FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT + OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + Modified by Jack Jansen, CWI, July 1995: + - Use binascii module to do the actual line-by-line conversion + between ascii and binary. This results in a 1000-fold speedup. The C + version is still 5 times faster, though. + - Arguments more compliant with Python standard + + +XML Remote Procedure Calls +-------------------------- + +The :mod:`xmlrpc.client` module contains the following notice:: + + The XML-RPC client interface is + + Copyright (c) 1999-2002 by Secret Labs AB + Copyright (c) 1999-2002 by Fredrik Lundh + + By obtaining, using, and/or copying this software and/or its + associated documentation, you agree that you have read, understood, + and will comply with the following terms and conditions: + + Permission to use, copy, modify, and distribute this software and + its associated documentation for any purpose and without fee is + hereby granted, provided that the above copyright notice appears in + all copies, and that both that copyright notice and this permission + notice appear in supporting documentation, and that the name of + Secret Labs AB or the author not be used in advertising or publicity + pertaining to distribution of the software without specific, written + prior permission. + + SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANT- + ABILITY AND FITNESS. IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR + BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY + DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + OF THIS SOFTWARE. + + +test_epoll +---------- + +The :mod:`test_epoll` module contains the following notice:: + + Copyright (c) 2001-2006 Twisted Matrix Laboratories. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Select kqueue +------------- + +The :mod:`select` module contains the following notice for the kqueue +interface:: + + Copyright (c) 2000 Doug White, 2006 James Knight, 2007 Christian Heimes + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + + +SipHash24 +--------- + +The file :file:`Python/pyhash.c` contains Marek Majkowski' implementation of +Dan Bernstein's SipHash24 algorithm. It contains the following note:: + + + Copyright (c) 2013 Marek Majkowski + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + + Original location: + https://github.com/majek/csiphash/ + + Solution inspired by code from: + Samuel Neves (supercop/crypto_auth/siphash24/little) + djb (supercop/crypto_auth/siphash24/little2) + Jean-Philippe Aumasson (https://131002.net/siphash/siphash24.c) + + +strtod and dtoa +--------------- + +The file :file:`Python/dtoa.c`, which supplies C functions dtoa and +strtod for conversion of C doubles to and from strings, is derived +from the file of the same name by David M. Gay, currently available +from http://www.netlib.org/fp/. The original file, as retrieved on +March 16, 2009, contains the following copyright and licensing +notice:: + + /**************************************************************** + * + * The author of this software is David M. Gay. + * + * Copyright (c) 1991, 2000, 2001 by Lucent Technologies. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose without fee is hereby granted, provided that this entire notice + * is included in all copies of any software which is or includes a copy + * or modification of this software and in all copies of the supporting + * documentation for such software. + * + * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED + * WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR LUCENT MAKES ANY + * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY + * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. + * + ***************************************************************/ + +expat +----- + +The :mod:`pyexpat` extension is built using an included copy of the expat +sources unless the build is configured ``--with-system-expat``:: + + Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd + and Clark Cooper + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +cfuhash +------- + +The implementation of the hash table used by the :mod:`tracemalloc` is based +on the cfuhash project:: + + Copyright (c) 2005 Don Owens + All rights reserved. + + This code is released under the BSD license: + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + * Neither the name of the author nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + OF THE POSSIBILITY OF SUCH DAMAGE. + + +libmpdec +-------- + +The :mod:`_decimal` module is built using an included copy of the libmpdec +library unless the build is configured ``--with-system-libmpdec``:: + + Copyright (c) 2008-2020 Stefan Krah. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + +W3C C14N test suite +------------------- + +The C14N 2.0 test suite in the :mod:`test` package +(``Lib/test/xmltestdata/c14n-20/``) was retrieved from the W3C website at +https://www.w3.org/TR/xml-c14n2-testcases/ and is distributed under the +3-clause BSD license:: + + Copyright (c) 2013 W3C(R) (MIT, ERCIM, Keio, Beihang), + All Rights Reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + * Redistributions of works must retain the original copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the original copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the W3C nor the names of its contributors may be + used to endorse or promote products derived from this work without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +--- licenses/LICENSE.expat.txt --- +Copyright (c) 1998-2000 Thai Open Source Software Center Ltd and Clark Cooper +Copyright (c) 2001-2022 Expat maintainers + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--- licenses/LICENSE.libX11.txt --- +The following is the 'standard copyright' agreed upon by most contributors, +and is currently the canonical license preferred by the X.Org Foundation. +This is a slight variant of the common MIT license form published by the +Open Source Initiative at http://www.opensource.org/licenses/mit-license.php + +Copyright holders of new code should use this license statement where +possible, and insert their name to this list. Please sort by surname +for people, and by the full name for other entities (e.g. Juliusz +Chroboczek sorts before Intel Corporation sorts before Daniel Stone). + +See each individual source file or directory for the license that applies +to that file. + +Copyright (C) 2003-2006,2008 Jamey Sharp, Josh Triplett +Copyright © 2009 Red Hat, Inc. +Copyright 1990-1992,1999,2000,2004,2009,2010 Oracle and/or its affiliates. +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next +paragraph) shall be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + + ---------------------------------------------------------------------- + +The following licenses are 'legacy' - usually MIT/X11 licenses with the name +of the copyright holder(s) in the license statement: + +Copyright 1984-1994, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from The Open Group. + +X Window System is a trademark of The Open Group. + + ---------------------------------------- + +Copyright 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium +Copyright 2000 The XFree86 Project, Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the X Consortium shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization +from the X Consortium. + +Copyright 1985, 1986, 1987, 1988, 1989, 1990, 1991 by +Digital Equipment Corporation + +Portions Copyright 1990, 1991 by Tektronix, Inc. + +Permission to use, copy, modify and distribute this documentation for +any purpose and without fee is hereby granted, provided that the above +copyright notice appears in all copies and that both that copyright notice +and this permission notice appear in all copies, and that the names of +Digital and Tektronix not be used in in advertising or publicity pertaining +to this documentation without specific, written prior permission. +Digital and Tektronix makes no representations about the suitability +of this documentation for any purpose. +It is provided ``as is'' without express or implied warranty. + + ---------------------------------------- + +Copyright (c) 1999-2000 Free Software Foundation, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +FREE SOFTWARE FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the Free Software Foundation +shall not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization from the +Free Software Foundation. + + ---------------------------------------- + +Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. + All Rights Reserved + +This file is a component of an X Window System-specific implementation +of Xcms based on the TekColor Color Management System. TekColor is a +trademark of Tektronix, Inc. The term "TekHVC" designates a particular +color space that is the subject of U.S. Patent No. 4,985,853 (equivalent +foreign patents pending). Permission is hereby granted to use, copy, +modify, sell, and otherwise distribute this software and its +documentation for any purpose and without fee, provided that: + +1. This copyright, permission, and disclaimer notice is reproduced in + all copies of this software and any modification thereof and in + supporting documentation; +2. Any color-handling application which displays TekHVC color + cooordinates identifies these as TekHVC color coordinates in any + interface that displays these coordinates and in any associated + documentation; +3. The term "TekHVC" is always used, and is only used, in association + with the mathematical derivations of the TekHVC Color Space, + including those provided in this file and any equivalent pathways and + mathematical derivations, regardless of digital (e.g., floating point + or integer) representation. + +Tektronix makes no representation about the suitability of this software +for any purpose. It is provided "as is" and with all faults. + +TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, +INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF +CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +(c) Copyright 1995 FUJITSU LIMITED +This is source code modified by FUJITSU LIMITED under the Joint +Development Agreement for the CDE/Motif PST. + + ---------------------------------------- + +Copyright 1992 by Oki Technosystems Laboratory, Inc. +Copyright 1992 by Fuji Xerox Co., Ltd. + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of Oki Technosystems +Laboratory and Fuji Xerox not be used in advertising or publicity +pertaining to distribution of the software without specific, written +prior permission. +Oki Technosystems Laboratory and Fuji Xerox make no representations +about the suitability of this software for any purpose. It is provided +"as is" without express or implied warranty. + +OKI TECHNOSYSTEMS LABORATORY AND FUJI XEROX DISCLAIM ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL OKI TECHNOSYSTEMS +LABORATORY AND FUJI XEROX BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE +OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1990, 1991, 1992, 1993, 1994 by FUJITSU LIMITED + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of FUJITSU LIMITED +not be used in advertising or publicity pertaining to distribution +of the software without specific, written prior permission. +FUJITSU LIMITED makes no representations about the suitability of +this software for any purpose. +It is provided "as is" without express or implied warranty. + +FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + + +Copyright (c) 1995 David E. Wexelblat. All rights reserved + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL DAVID E. WEXELBLAT BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of David E. Wexelblat shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization +from David E. Wexelblat. + + ---------------------------------------- + +Copyright 1990, 1991 by OMRON Corporation + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name OMRON not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. OMRON makes no representations +about the suitability of this software for any purpose. It is provided +"as is" without express or implied warranty. + +OMRON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL OMRON BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTUOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1985, 1986, 1987, 1988, 1989, 1990, 1991 by +Digital Equipment Corporation + +Portions Copyright 1990, 1991 by Tektronix, Inc + +Rewritten for X.org by Chris Lee + +Permission to use, copy, modify, distribute, and sell this documentation +for any purpose and without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. +Chris Lee makes no representations about the suitability for any purpose +of the information in this document. It is provided \`\`as-is'' without +express or implied warranty. + + ---------------------------------------- + +Copyright 1993 by Digital Equipment Corporation, Maynard, Massachusetts, +Copyright 1994 by FUJITSU LIMITED +Copyright 1994 by Sony Corporation + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the names of Digital, FUJITSU +LIMITED and Sony Corporation not be used in advertising or publicity +pertaining to distribution of the software without specific, written +prior permission. + +DIGITAL, FUJITSU LIMITED AND SONY CORPORATION DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL, FUJITSU LIMITED +AND SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + + +Copyright 1991 by the Open Software Foundation + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of Open Software Foundation +not be used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. Open Software +Foundation makes no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +OPEN SOFTWARE FOUNDATION DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL OPEN SOFTWARE FOUNDATIONN BE +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1990, 1991, 1992,1993, 1994 by FUJITSU LIMITED +Copyright 1993, 1994 by Sony Corporation + +Permission to use, copy, modify, distribute, and sell this software and +its documentation for any purpose is hereby granted without fee, provided +that the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of FUJITSU LIMITED and Sony Corporation +not be used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. FUJITSU LIMITED and +Sony Corporation makes no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +FUJITSU LIMITED AND SONY CORPORATION DISCLAIMS ALL WARRANTIES WITH REGARD +TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL FUJITSU LIMITED OR SONY CORPORATION BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE +USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright (c) 1993, 1995 by Silicon Graphics Computer Systems, Inc. + +Permission to use, copy, modify, and distribute this +software and its documentation for any purpose and without +fee is hereby granted, provided that the above copyright +notice appear in all copies and that both that copyright +notice and this permission notice appear in supporting +documentation, and that the name of Silicon Graphics not be +used in advertising or publicity pertaining to distribution +of the software without specific prior written permission. +Silicon Graphics makes no representation about the suitability +of this software for any purpose. It is provided "as is" +without any express or implied warranty. + +SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS +SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON +GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH +THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1991, 1992, 1993, 1994 by FUJITSU LIMITED +Copyright 1993 by Digital Equipment Corporation + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of FUJITSU LIMITED and +Digital Equipment Corporation not be used in advertising or publicity +pertaining to distribution of the software without specific, written +prior permission. FUJITSU LIMITED and Digital Equipment Corporation +makes no representations about the suitability of this software for +any purpose. It is provided "as is" without express or implied +warranty. + +FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION DISCLAIM ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION BE LIABLE FOR +ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1992, 1993 by FUJITSU LIMITED +Copyright 1993 by Fujitsu Open Systems Solutions, Inc. +Copyright 1994 by Sony Corporation + +Permission to use, copy, modify, distribute and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of FUJITSU LIMITED, +Fujitsu Open Systems Solutions, Inc. and Sony Corporation not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. +FUJITSU LIMITED, Fujitsu Open Systems Solutions, Inc. and +Sony Corporation make no representations about the suitability of +this software for any purpose. It is provided "as is" without +express or implied warranty. + +FUJITSU LIMITED, FUJITSU OPEN SYSTEMS SOLUTIONS, INC. AND SONY +CORPORATION DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, +IN NO EVENT SHALL FUJITSU OPEN SYSTEMS SOLUTIONS, INC., FUJITSU LIMITED +AND SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE +OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1987, 1988, 1990, 1993 by Digital Equipment Corporation, +Maynard, Massachusetts, + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Digital not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + + ---------------------------------------- + +Copyright 1993 by SunSoft, Inc. +Copyright 1999-2000 by Bruno Haible + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the names of SunSoft, Inc. and +Bruno Haible not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. SunSoft, Inc. and Bruno Haible make no representations +about the suitability of this software for any purpose. It is +provided "as is" without express or implied warranty. + +SunSoft Inc. AND Bruno Haible DISCLAIM ALL WARRANTIES WITH REGARD +TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS, IN NO EVENT SHALL SunSoft, Inc. OR Bruno Haible BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1991 by the Open Software Foundation +Copyright 1993 by the TOSHIBA Corp. + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the names of Open Software Foundation and TOSHIBA +not be used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. Open Software +Foundation and TOSHIBA make no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +OPEN SOFTWARE FOUNDATION AND TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL OPEN SOFTWARE FOUNDATIONN OR TOSHIBA BE +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1988 by Wyse Technology, Inc., San Jose, Ca., + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name Wyse not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +WYSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + + ---------------------------------------- + + +Copyright 1991 by the Open Software Foundation +Copyright 1993, 1994 by the Sony Corporation + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the names of Open Software Foundation and +Sony Corporation not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior permission. +Open Software Foundation and Sony Corporation make no +representations about the suitability of this software for any purpose. +It is provided "as is" without express or implied warranty. + +OPEN SOFTWARE FOUNDATION AND SONY CORPORATION DISCLAIM ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL OPEN +SOFTWARE FOUNDATIONN OR SONY CORPORATION BE LIABLE FOR ANY SPECIAL, +INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1992, 1993 by FUJITSU LIMITED +Copyright 1993 by Fujitsu Open Systems Solutions, Inc. + +Permission to use, copy, modify, distribute and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of FUJITSU LIMITED and +Fujitsu Open Systems Solutions, Inc. not be used in advertising or +publicity pertaining to distribution of the software without specific, +written prior permission. +FUJITSU LIMITED and Fujitsu Open Systems Solutions, Inc. makes no +representations about the suitability of this software for any purpose. +It is provided "as is" without express or implied warranty. + +FUJITSU LIMITED AND FUJITSU OPEN SYSTEMS SOLUTIONS, INC. DISCLAIMS ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU OPEN SYSTEMS +SOLUTIONS, INC. AND FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT +OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE +OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1993, 1994 by Sony Corporation + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of Sony Corporation +not be used in advertising or publicity pertaining to distribution +of the software without specific, written prior permission. +Sony Corporation makes no representations about the suitability of +this software for any purpose. It is provided "as is" without +express or implied warranty. + +SONY CORPORATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1986, 1998 The Open Group +Copyright (c) 2000 The XFree86 Project, Inc. + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +X CONSORTIUM OR THE XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +Except as contained in this notice, the name of the X Consortium or of the +XFree86 Project shall not be used in advertising or otherwise to promote the +sale, use or other dealings in this Software without prior written +authorization from the X Consortium and the XFree86 Project. + + ---------------------------------------- + +Copyright 1990, 1991 by OMRON Corporation, NTT Software Corporation, + and Nippon Telegraph and Telephone Corporation +Copyright 1991 by the Open Software Foundation +Copyright 1993 by the FUJITSU LIMITED + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the names of OMRON, NTT Software, NTT, and +Open Software Foundation not be used in advertising or publicity +pertaining to distribution of the software without specific, +written prior permission. OMRON, NTT Software, NTT, and Open Software +Foundation make no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +OMRON, NTT SOFTWARE, NTT, AND OPEN SOFTWARE FOUNDATION +DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT +SHALL OMRON, NTT SOFTWARE, NTT, OR OPEN SOFTWARE FOUNDATION BE +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1988 by Wyse Technology, Inc., San Jose, Ca, +Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts, + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name Digital not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL AND WYSE DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL DIGITAL OR WYSE BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + + +Copyright 1991, 1992 by Fuji Xerox Co., Ltd. +Copyright 1992, 1993, 1994 by FUJITSU LIMITED + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of Fuji Xerox, +FUJITSU LIMITED not be used in advertising or publicity pertaining +to distribution of the software without specific, written prior +permission. Fuji Xerox, FUJITSU LIMITED make no representations +about the suitability of this software for any purpose. +It is provided "as is" without express or implied warranty. + +FUJI XEROX, FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJI XEROX, +FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA +OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 2006 Josh Triplett + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + + ---------------------------------------- + +(c) Copyright 1996 by Sebastien Marineau and Holger Veit + + + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +HOLGER VEIT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +Except as contained in this notice, the name of Sebastien Marineau or Holger Veit +shall not be used in advertising or otherwise to promote the sale, use or other +dealings in this Software without prior written authorization from Holger Veit or +Sebastien Marineau. + + ---------------------------------------- + +Copyright 1990, 1991 by OMRON Corporation, NTT Software Corporation, + and Nippon Telegraph and Telephone Corporation +Copyright 1991 by the Open Software Foundation +Copyright 1993 by the TOSHIBA Corp. +Copyright 1993, 1994 by Sony Corporation +Copyright 1993, 1994 by the FUJITSU LIMITED + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the names of OMRON, NTT Software, NTT, Open +Software Foundation, and Sony Corporation not be used in advertising +or publicity pertaining to distribution of the software without specific, +written prior permission. OMRON, NTT Software, NTT, Open Software +Foundation, and Sony Corporation make no representations about the +suitability of this software for any purpose. It is provided "as is" +without express or implied warranty. + +OMRON, NTT SOFTWARE, NTT, OPEN SOFTWARE FOUNDATION, AND SONY +CORPORATION DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT +SHALL OMRON, NTT SOFTWARE, NTT, OPEN SOFTWARE FOUNDATION, OR SONY +CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 2000 by Bruno Haible + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of Bruno Haible not +be used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. Bruno Haible +makes no representations about the suitability of this software for +any purpose. It is provided "as is" without express or implied +warranty. + +Bruno Haible DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN +NO EVENT SHALL Bruno Haible BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE +OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright © 2003 Keith Packard + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of Keith Packard not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. Keith Packard makes no +representations about the suitability of this software for any purpose. It +is provided "as is" without express or implied warranty. + +KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright (c) 2007-2009, Troy D. Hanson +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + ---------------------------------------- + +Copyright 1992, 1993 by TOSHIBA Corp. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, provided +that the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of TOSHIBA not be used in advertising +or publicity pertaining to distribution of the software without specific, +written prior permission. TOSHIBA make no representations about the +suitability of this software for any purpose. It is provided "as is" +without express or implied warranty. + +TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + + + ---------------------------------------- + +Copyright IBM Corporation 1993 + +All Rights Reserved + +License to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of IBM not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS, AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS, IN NO EVENT SHALL +IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + + ---------------------------------------- + +Copyright 1990, 1991 by OMRON Corporation, NTT Software Corporation, + and Nippon Telegraph and Telephone Corporation + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the names of OMRON, NTT Software, and NTT +not be used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. OMRON, NTT Software, +and NTT make no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +OMRON, NTT SOFTWARE, AND NTT, DISCLAIM ALL WARRANTIES WITH REGARD +TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS, IN NO EVENT SHALL OMRON, NTT SOFTWARE, OR NTT, BE +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +--- licenses/LICENSE.libXau.txt --- +Copyright 1988, 1993, 1994, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from The Open Group. + +--- licenses/LICENSE.libedit.txt --- +Copyright (c) 1992, 1993 + The Regents of the University of California. All rights reserved. + +This code is derived from software contributed to Berkeley by +Christos Zoulas of Cornell University. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +--- licenses/LICENSE.libffi.txt --- +libffi - Copyright (c) 1996-2019 Anthony Green, Red Hat, Inc and others. +See source files for details. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +``Software''), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--- licenses/LICENSE.liblzma.txt --- +Copyright (C) The XZ Utils authors and contributors + +Permission to use, copy, modify, and/or distribute this +software for any purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL +THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +--- licenses/LICENSE.libuuid.txt --- +Copyright (C) 1996, 1997 Theodore Ts'o. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, and the entire permission notice in its entirety, + including the disclaimer of warranties. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote + products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF +WHICH ARE HEREBY DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +--- licenses/LICENSE.libxcb.txt --- +Copyright (C) 2001-2006 Bart Massey, Jamey Sharp, and Josh Triplett. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, +sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall +be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the names of the authors +or their institutions shall not be used in advertising or +otherwise to promote the sale, use or other dealings in this +Software without prior written authorization from the +authors. + +--- licenses/LICENSE.mpdecimal.txt --- +Copyright (c) 2008-2020 Stefan Krah. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +--- licenses/LICENSE.ncurses.txt --- +Copyright 2018-2020,2021 Thomas E. Dickey +Copyright 1998-2017,2018 Free Software Foundation, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, distribute with modifications, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR +THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name(s) of the above copyright +holders shall not be used in advertising or otherwise to promote the +sale, use or other dealings in this Software without prior written +authorization. + +-- vile:txtmode fc=72 +-- $Id: COPYING,v 1.10 2021/01/01 09:54:30 tom Exp $ + +--- licenses/LICENSE.openssl-1.1.txt --- + + LICENSE ISSUES + ============== + + The OpenSSL toolkit stays under a double license, i.e. both the conditions of + the OpenSSL License and the original SSLeay license apply to the toolkit. + See below for the actual license texts. + + OpenSSL License + --------------- + +/* ==================================================================== + * Copyright (c) 1998-2019 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + + Original SSLeay License + ----------------------- + +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +--- licenses/LICENSE.openssl-3.txt --- + + Apache License + Version 2.0, January 2004 + https://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + +--- licenses/LICENSE.sqlite.txt --- +All of the code and documentation in SQLite has been dedicated to the public +domain by the authors. All code authors, and representatives of the companies +they work for, have signed affidavits dedicating their contributions to the +public domain and originals of those signed affidavits are stored in a firesafe +at the main offices of Hwaci. Anyone is free to copy, modify, publish, use, +compile, sell, or distribute the original SQLite code, either in source code form +or as a compiled binary, for any purpose, commercial or non-commercial, and by +any means. + +The previous paragraph applies to the deliverable code and documentation in +SQLite - those parts of the SQLite library that you actually bundle and ship +with a larger application. Some scripts used as part of the build process (for +example the "configure" scripts generated by autoconf) might fall under other +open-source licenses. Nothing from these build scripts ever reaches the final +deliverable SQLite library, however, and so the licenses associated with those +scripts should not be a factor in assessing your rights to copy and use the +SQLite library. + +All of the deliverable code in SQLite has been written from scratch. No code has +been taken from other projects or from the open internet. Every line of code can +be traced back to its original author, and all of those authors have public +domain dedications on file. So the SQLite code base is clean and is +uncontaminated with licensed code from other projects. + +--- licenses/LICENSE.tcl.txt --- +This software is copyrighted by the Regents of the University of +California, Sun Microsystems, Inc., Scriptics Corporation, ActiveState +Corporation and other parties. The following terms apply to all files +associated with the software unless explicitly disclaimed in +individual files. + +The authors hereby grant permission to use, copy, modify, distribute, +and license this software and its documentation for any purpose, provided +that existing copyright notices are retained in all copies and that this +notice is included verbatim in any distributions. No written agreement, +license, or royalty fee is required for any of the authorized uses. +Modifications to this software may be copyrighted by their authors +and need not follow the licensing terms described here, provided that +the new terms are clearly indicated on the first page of each file where +they apply. + +IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +MODIFICATIONS. + +GOVERNMENT USE: If you are acquiring this software on behalf of the +U.S. government, the Government shall have only "Restricted Rights" +in the software and related documentation as defined in the Federal +Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you +are acquiring the software on behalf of the Department of Defense, the +software shall be classified as "Commercial Computer Software" and the +Government shall have only "Restricted Rights" as defined in Clause +252.227-7014 (b) (3) of DFARs. Notwithstanding the foregoing, the +authors grant the U.S. Government and others acting in its behalf +permission to use and distribute the software in accordance with the +terms specified in this license. + +--- licenses/LICENSE.tix.txt --- +Copyright (c) 1993-1999 Ioi Kim Lam. +Copyright (c) 2000-2001 Tix Project Group. +Copyright (c) 2004 ActiveState + +This software is copyrighted by the above entities +and other parties. The following terms apply to all files associated +with the software unless explicitly disclaimed in individual files. + +The authors hereby grant permission to use, copy, modify, distribute, +and license this software and its documentation for any purpose, provided +that existing copyright notices are retained in all copies and that this +notice is included verbatim in any distributions. No written agreement, +license, or royalty fee is required for any of the authorized uses. +Modifications to this software may be copyrighted by their authors +and need not follow the licensing terms described here, provided that +the new terms are clearly indicated on the first page of each file where +they apply. + +IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +MODIFICATIONS. + +GOVERNMENT USE: If you are acquiring this software on behalf of the +U.S. government, the Government shall have only "Restricted Rights" +in the software and related documentation as defined in the Federal +Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you +are acquiring the software on behalf of the Department of Defense, the +software shall be classified as "Commercial Computer Software" and the +Government shall have only "Restricted Rights" as defined in Clause +252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the +authors grant the U.S. Government and others acting in its behalf +permission to use and distribute the software in accordance with the +terms specified in this license. + +---------------------------------------------------------------------- + +Parts of this software are based on the Tcl/Tk software copyrighted by +the Regents of the University of California, Sun Microsystems, Inc., +and other parties. The original license terms of the Tcl/Tk software +distribution is included in the file docs/license.tcltk. + +Parts of this software are based on the HTML Library software +copyrighted by Sun Microsystems, Inc. The original license terms of +the HTML Library software distribution is included in the file +docs/license.html_lib. + +--- licenses/LICENSE.zlib.txt --- + + Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + + +============================================================================== + +CPython full archive 3.14.7 (Managed Python full-archive notice superset for x86_64-pc-windows-msvc; selected install-only runtime tracked separately) +Source: https://github.com/astral-sh/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-x86_64-pc-windows-msvc-pgo-full.tar.zst +Declared license: Python-2.0, CNRI-Python +--- licenses/LICENSE.bdb.txt --- +The following is the license that applies to this copy of the Berkeley DB +software. For a license to use the Berkeley DB software under conditions +other than those described here, or to purchase support for this software, +please contact Oracle at berkeleydb-info_us@oracle.com. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +/* + * Copyright (c) 1990, 2013 Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Redistributions in any form must be accompanied by information on + * how to obtain complete source code for the DB software and any + * accompanying software that uses the DB software. The source code + * must either be included in the distribution or be available for no + * more than the cost of distribution plus a nominal fee, and must be + * freely redistributable under reasonable conditions. For an + * executable file, complete source code means the source code for all + * modules it contains. It does not include source code for modules or + * files that typically accompany the major components of the operating + * system on which the executable file runs. + * + * THIS SOFTWARE IS PROVIDED BY ORACLE ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR + * NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL ORACLE BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +/* + * Copyright (c) 1990, 1993, 1994, 1995 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +/* + * Copyright (c) 1995, 1996 + * The President and Fellows of Harvard University. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY HARVARD AND ITS CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL HARVARD OR ITS CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +/*** + * ASM: a very small and fast Java bytecode manipulation framework + * Copyright (c) 2000-2005 INRIA, France Telecom + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holders nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ + +--- licenses/LICENSE.bzip2.txt --- +This program, "bzip2", the associated library "libbzip2", and all +documentation, are copyright (C) 1996-2010 Julian R Seward. All +rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. The origin of this software must not be misrepresented; you must + not claim that you wrote the original software. If you use this + software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + +3. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + +4. The name of the author may not be used to endorse or promote + products derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Julian Seward, jseward@bzip.org +bzip2/libbzip2 version 1.0.6 of 6 September 2010 + +--- licenses/LICENSE.cpython.txt --- +A. HISTORY OF THE SOFTWARE +========================== + +Python was created in the early 1990s by Guido van Rossum at Stichting +Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands +as a successor of a language called ABC. Guido remains Python's +principal author, although it includes many contributions from others. + +In 1995, Guido continued his work on Python at the Corporation for +National Research Initiatives (CNRI, see http://www.cnri.reston.va.us) +in Reston, Virginia where he released several versions of the +software. + +In May 2000, Guido and the Python core development team moved to +BeOpen.com to form the BeOpen PythonLabs team. In October of the same +year, the PythonLabs team moved to Digital Creations, which became +Zope Corporation. In 2001, the Python Software Foundation (PSF, see +https://www.python.org/psf/) was formed, a non-profit organization +created specifically to own Python-related Intellectual Property. +Zope Corporation was a sponsoring member of the PSF. + +All Python releases are Open Source (see http://www.opensource.org for +the Open Source Definition). Historically, most, but not all, Python +releases have also been GPL-compatible; the table below summarizes +the various releases. + + Release Derived Year Owner GPL- + from compatible? (1) + + 0.9.0 thru 1.2 1991-1995 CWI yes + 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes + 1.6 1.5.2 2000 CNRI no + 2.0 1.6 2000 BeOpen.com no + 1.6.1 1.6 2001 CNRI yes (2) + 2.1 2.0+1.6.1 2001 PSF no + 2.0.1 2.0+1.6.1 2001 PSF yes + 2.1.1 2.1+2.0.1 2001 PSF yes + 2.1.2 2.1.1 2002 PSF yes + 2.1.3 2.1.2 2002 PSF yes + 2.2 and above 2.1.1 2001-now PSF yes + +Footnotes: + +(1) GPL-compatible doesn't mean that we're distributing Python under + the GPL. All Python licenses, unlike the GPL, let you distribute + a modified version without making your changes open source. The + GPL-compatible licenses make it possible to combine Python with + other software that is released under the GPL; the others don't. + +(2) According to Richard Stallman, 1.6.1 is not GPL-compatible, + because its license has a choice of law clause. According to + CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1 + is "not incompatible" with the GPL. + +Thanks to the many outside volunteers who have worked under Guido's +direction to make these releases possible. + + +B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON +=============================================================== + +Python software and documentation are licensed under the +Python Software Foundation License Version 2. + +Starting with Python 3.8.6, examples, recipes, and other code in +the documentation are dual licensed under the PSF License Version 2 +and the Zero-Clause BSD license. + +Some software incorporated into Python is under different licenses. +The licenses are listed with code falling under that license. + + +PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 +-------------------------------------------- + +1. This LICENSE AGREEMENT is between the Python Software Foundation +("PSF"), and the Individual or Organization ("Licensee") accessing and +otherwise using this software ("Python") in source or binary form and +its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, PSF hereby +grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, +analyze, test, perform and/or display publicly, prepare derivative works, +distribute, and otherwise use Python alone or in any derivative version, +provided, however, that PSF's License Agreement and PSF's notice of copyright, +i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Python Software Foundation; +All Rights Reserved" are retained in Python alone or in any derivative version +prepared by Licensee. + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python. + +4. PSF is making Python available to Licensee on an "AS IS" +basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. Nothing in this License Agreement shall be deemed to create any +relationship of agency, partnership, or joint venture between PSF and +Licensee. This License Agreement does not grant permission to use PSF +trademarks or trade name in a trademark sense to endorse or promote +products or services of Licensee, or any third party. + +8. By copying, installing or otherwise using Python, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 +------------------------------------------- + +BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 + +1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an +office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the +Individual or Organization ("Licensee") accessing and otherwise using +this software in source or binary form and its associated +documentation ("the Software"). + +2. Subject to the terms and conditions of this BeOpen Python License +Agreement, BeOpen hereby grants Licensee a non-exclusive, +royalty-free, world-wide license to reproduce, analyze, test, perform +and/or display publicly, prepare derivative works, distribute, and +otherwise use the Software alone or in any derivative version, +provided, however, that the BeOpen Python License is retained in the +Software, alone or in any derivative version prepared by Licensee. + +3. BeOpen is making the Software available to Licensee on an "AS IS" +basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE +SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS +AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY +DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +5. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +6. This License Agreement shall be governed by and interpreted in all +respects by the law of the State of California, excluding conflict of +law provisions. Nothing in this License Agreement shall be deemed to +create any relationship of agency, partnership, or joint venture +between BeOpen and Licensee. This License Agreement does not grant +permission to use BeOpen trademarks or trade names in a trademark +sense to endorse or promote products or services of Licensee, or any +third party. As an exception, the "BeOpen Python" logos available at +http://www.pythonlabs.com/logos.html may be used according to the +permissions granted on that web page. + +7. By copying, installing or otherwise using the software, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 +--------------------------------------- + +1. This LICENSE AGREEMENT is between the Corporation for National +Research Initiatives, having an office at 1895 Preston White Drive, +Reston, VA 20191 ("CNRI"), and the Individual or Organization +("Licensee") accessing and otherwise using Python 1.6.1 software in +source or binary form and its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, CNRI +hereby grants Licensee a nonexclusive, royalty-free, world-wide +license to reproduce, analyze, test, perform and/or display publicly, +prepare derivative works, distribute, and otherwise use Python 1.6.1 +alone or in any derivative version, provided, however, that CNRI's +License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) +1995-2001 Corporation for National Research Initiatives; All Rights +Reserved" are retained in Python 1.6.1 alone or in any derivative +version prepared by Licensee. Alternately, in lieu of CNRI's License +Agreement, Licensee may substitute the following text (omitting the +quotes): "Python 1.6.1 is made available subject to the terms and +conditions in CNRI's License Agreement. This Agreement together with +Python 1.6.1 may be located on the internet using the following +unique, persistent identifier (known as a handle): 1895.22/1013. This +Agreement may also be obtained from a proxy server on the internet +using the following URL: http://hdl.handle.net/1895.22/1013". + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python 1.6.1 or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python 1.6.1. + +4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" +basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. This License Agreement shall be governed by the federal +intellectual property law of the United States, including without +limitation the federal copyright law, and, to the extent such +U.S. federal law does not apply, by the law of the Commonwealth of +Virginia, excluding Virginia's conflict of law provisions. +Notwithstanding the foregoing, with regard to derivative works based +on Python 1.6.1 that incorporate non-separable material that was +previously distributed under the GNU General Public License (GPL), the +law of the Commonwealth of Virginia shall govern this License +Agreement only as to issues arising under or with respect to +Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this +License Agreement shall be deemed to create any relationship of +agency, partnership, or joint venture between CNRI and Licensee. This +License Agreement does not grant permission to use CNRI trademarks or +trade name in a trademark sense to endorse or promote products or +services of Licensee, or any third party. + +8. By clicking on the "ACCEPT" button where indicated, or by copying, +installing or otherwise using Python 1.6.1, Licensee agrees to be +bound by the terms and conditions of this License Agreement. + + ACCEPT + + +CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 +-------------------------------------------------- + +Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, +The Netherlands. All rights reserved. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Stichting Mathematisch +Centrum or CWI not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +ZERO-CLAUSE BSD LICENSE FOR CODE IN THE PYTHON DOCUMENTATION +---------------------------------------------------------------------- + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + +Licenses and Acknowledgements for Incorporated Software +======================================================= + +This section is an incomplete, but growing list of licenses and acknowledgements +for third-party software incorporated in the Python distribution. + +Mersenne Twister +---------------- + +The :mod:`_random` module includes code based on a download from +http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/emt19937ar.html. The following are +the verbatim comments from the original code:: + + A C-program for MT19937, with initialization improved 2002/1/26. + Coded by Takuji Nishimura and Makoto Matsumoto. + + Before using, initialize the state by using init_genrand(seed) + or init_by_array(init_key, key_length). + + Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura, + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. The names of its contributors may not be used to endorse or promote + products derived from this software without specific prior written + permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + Any feedback is very welcome. + http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html + email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space) + + +Sockets +------- + +The :mod:`socket` module uses the functions, :func:`getaddrinfo`, and +:func:`getnameinfo`, which are coded in separate source files from the WIDE +Project, http://www.wide.ad.jp/. :: + + Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the project nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + + +Asynchronous socket services +---------------------------- + +The :mod:`asynchat` and :mod:`asyncore` modules contain the following notice:: + + Copyright 1996 by Sam Rushing + + All Rights Reserved + + Permission to use, copy, modify, and distribute this software and + its documentation for any purpose and without fee is hereby + granted, provided that the above copyright notice appear in all + copies and that both that copyright notice and this permission + notice appear in supporting documentation, and that the name of Sam + Rushing not be used in advertising or publicity pertaining to + distribution of the software without specific, written prior + permission. + + SAM RUSHING DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN + NO EVENT SHALL SAM RUSHING BE LIABLE FOR ANY SPECIAL, INDIRECT OR + CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS + OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +Cookie management +----------------- + +The :mod:`http.cookies` module contains the following notice:: + + Copyright 2000 by Timothy O'Malley + + All Rights Reserved + + Permission to use, copy, modify, and distribute this software + and its documentation for any purpose and without fee is hereby + granted, provided that the above copyright notice appear in all + copies and that both that copyright notice and this permission + notice appear in supporting documentation, and that the name of + Timothy O'Malley not be used in advertising or publicity + pertaining to distribution of the software without specific, written + prior permission. + + Timothy O'Malley DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS + SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS, IN NO EVENT SHALL Timothy O'Malley BE LIABLE FOR + ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + + +Execution tracing +----------------- + +The :mod:`trace` module contains the following notice:: + + portions copyright 2001, Autonomous Zones Industries, Inc., all rights... + err... reserved and offered to the public under the terms of the + Python 2.2 license. + Author: Zooko O'Whielacronx + http://zooko.com/ + mailto:zooko@zooko.com + + Copyright 2000, Mojam Media, Inc., all rights reserved. + Author: Skip Montanaro + + Copyright 1999, Bioreason, Inc., all rights reserved. + Author: Andrew Dalke + + Copyright 1995-1997, Automatrix, Inc., all rights reserved. + Author: Skip Montanaro + + Copyright 1991-1995, Stichting Mathematisch Centrum, all rights reserved. + + + Permission to use, copy, modify, and distribute this Python software and + its associated documentation for any purpose without fee is hereby + granted, provided that the above copyright notice appears in all copies, + and that both that copyright notice and this permission notice appear in + supporting documentation, and that the name of neither Automatrix, + Bioreason or Mojam Media be used in advertising or publicity pertaining to + distribution of the software without specific, written prior permission. + + +UUencode and UUdecode functions +------------------------------- + +The :mod:`uu` module contains the following notice:: + + Copyright 1994 by Lance Ellinghouse + Cathedral City, California Republic, United States of America. + All Rights Reserved + Permission to use, copy, modify, and distribute this software and its + documentation for any purpose and without fee is hereby granted, + provided that the above copyright notice appear in all copies and that + both that copyright notice and this permission notice appear in + supporting documentation, and that the name of Lance Ellinghouse + not be used in advertising or publicity pertaining to distribution + of the software without specific, written prior permission. + LANCE ELLINGHOUSE DISCLAIMS ALL WARRANTIES WITH REGARD TO + THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS, IN NO EVENT SHALL LANCE ELLINGHOUSE CENTRUM BE LIABLE + FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT + OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + Modified by Jack Jansen, CWI, July 1995: + - Use binascii module to do the actual line-by-line conversion + between ascii and binary. This results in a 1000-fold speedup. The C + version is still 5 times faster, though. + - Arguments more compliant with Python standard + + +XML Remote Procedure Calls +-------------------------- + +The :mod:`xmlrpc.client` module contains the following notice:: + + The XML-RPC client interface is + + Copyright (c) 1999-2002 by Secret Labs AB + Copyright (c) 1999-2002 by Fredrik Lundh + + By obtaining, using, and/or copying this software and/or its + associated documentation, you agree that you have read, understood, + and will comply with the following terms and conditions: + + Permission to use, copy, modify, and distribute this software and + its associated documentation for any purpose and without fee is + hereby granted, provided that the above copyright notice appears in + all copies, and that both that copyright notice and this permission + notice appear in supporting documentation, and that the name of + Secret Labs AB or the author not be used in advertising or publicity + pertaining to distribution of the software without specific, written + prior permission. + + SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANT- + ABILITY AND FITNESS. IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR + BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY + DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + OF THIS SOFTWARE. + + +test_epoll +---------- + +The :mod:`test_epoll` module contains the following notice:: + + Copyright (c) 2001-2006 Twisted Matrix Laboratories. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Select kqueue +------------- + +The :mod:`select` module contains the following notice for the kqueue +interface:: + + Copyright (c) 2000 Doug White, 2006 James Knight, 2007 Christian Heimes + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + + +SipHash24 +--------- + +The file :file:`Python/pyhash.c` contains Marek Majkowski' implementation of +Dan Bernstein's SipHash24 algorithm. It contains the following note:: + + + Copyright (c) 2013 Marek Majkowski + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + + Original location: + https://github.com/majek/csiphash/ + + Solution inspired by code from: + Samuel Neves (supercop/crypto_auth/siphash24/little) + djb (supercop/crypto_auth/siphash24/little2) + Jean-Philippe Aumasson (https://131002.net/siphash/siphash24.c) + + +strtod and dtoa +--------------- + +The file :file:`Python/dtoa.c`, which supplies C functions dtoa and +strtod for conversion of C doubles to and from strings, is derived +from the file of the same name by David M. Gay, currently available +from http://www.netlib.org/fp/. The original file, as retrieved on +March 16, 2009, contains the following copyright and licensing +notice:: + + /**************************************************************** + * + * The author of this software is David M. Gay. + * + * Copyright (c) 1991, 2000, 2001 by Lucent Technologies. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose without fee is hereby granted, provided that this entire notice + * is included in all copies of any software which is or includes a copy + * or modification of this software and in all copies of the supporting + * documentation for such software. + * + * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED + * WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR LUCENT MAKES ANY + * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY + * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. + * + ***************************************************************/ + +expat +----- + +The :mod:`pyexpat` extension is built using an included copy of the expat +sources unless the build is configured ``--with-system-expat``:: + + Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd + and Clark Cooper + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +cfuhash +------- + +The implementation of the hash table used by the :mod:`tracemalloc` is based +on the cfuhash project:: + + Copyright (c) 2005 Don Owens + All rights reserved. + + This code is released under the BSD license: + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + * Neither the name of the author nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + OF THE POSSIBILITY OF SUCH DAMAGE. + + +libmpdec +-------- + +The :mod:`_decimal` module is built using an included copy of the libmpdec +library unless the build is configured ``--with-system-libmpdec``:: + + Copyright (c) 2008-2020 Stefan Krah. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + +W3C C14N test suite +------------------- + +The C14N 2.0 test suite in the :mod:`test` package +(``Lib/test/xmltestdata/c14n-20/``) was retrieved from the W3C website at +https://www.w3.org/TR/xml-c14n2-testcases/ and is distributed under the +3-clause BSD license:: + + Copyright (c) 2013 W3C(R) (MIT, ERCIM, Keio, Beihang), + All Rights Reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + * Redistributions of works must retain the original copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the original copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the W3C nor the names of its contributors may be + used to endorse or promote products derived from this work without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +--- licenses/LICENSE.expat.txt --- +Copyright (c) 1998-2000 Thai Open Source Software Center Ltd and Clark Cooper +Copyright (c) 2001-2022 Expat maintainers + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--- licenses/LICENSE.libX11.txt --- +The following is the 'standard copyright' agreed upon by most contributors, +and is currently the canonical license preferred by the X.Org Foundation. +This is a slight variant of the common MIT license form published by the +Open Source Initiative at http://www.opensource.org/licenses/mit-license.php + +Copyright holders of new code should use this license statement where +possible, and insert their name to this list. Please sort by surname +for people, and by the full name for other entities (e.g. Juliusz +Chroboczek sorts before Intel Corporation sorts before Daniel Stone). + +See each individual source file or directory for the license that applies +to that file. + +Copyright (C) 2003-2006,2008 Jamey Sharp, Josh Triplett +Copyright © 2009 Red Hat, Inc. +Copyright 1990-1992,1999,2000,2004,2009,2010 Oracle and/or its affiliates. +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next +paragraph) shall be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + + ---------------------------------------------------------------------- + +The following licenses are 'legacy' - usually MIT/X11 licenses with the name +of the copyright holder(s) in the license statement: + +Copyright 1984-1994, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from The Open Group. + +X Window System is a trademark of The Open Group. + + ---------------------------------------- + +Copyright 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium +Copyright 2000 The XFree86 Project, Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the X Consortium shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization +from the X Consortium. + +Copyright 1985, 1986, 1987, 1988, 1989, 1990, 1991 by +Digital Equipment Corporation + +Portions Copyright 1990, 1991 by Tektronix, Inc. + +Permission to use, copy, modify and distribute this documentation for +any purpose and without fee is hereby granted, provided that the above +copyright notice appears in all copies and that both that copyright notice +and this permission notice appear in all copies, and that the names of +Digital and Tektronix not be used in in advertising or publicity pertaining +to this documentation without specific, written prior permission. +Digital and Tektronix makes no representations about the suitability +of this documentation for any purpose. +It is provided ``as is'' without express or implied warranty. + + ---------------------------------------- + +Copyright (c) 1999-2000 Free Software Foundation, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +FREE SOFTWARE FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the Free Software Foundation +shall not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization from the +Free Software Foundation. + + ---------------------------------------- + +Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. + All Rights Reserved + +This file is a component of an X Window System-specific implementation +of Xcms based on the TekColor Color Management System. TekColor is a +trademark of Tektronix, Inc. The term "TekHVC" designates a particular +color space that is the subject of U.S. Patent No. 4,985,853 (equivalent +foreign patents pending). Permission is hereby granted to use, copy, +modify, sell, and otherwise distribute this software and its +documentation for any purpose and without fee, provided that: + +1. This copyright, permission, and disclaimer notice is reproduced in + all copies of this software and any modification thereof and in + supporting documentation; +2. Any color-handling application which displays TekHVC color + cooordinates identifies these as TekHVC color coordinates in any + interface that displays these coordinates and in any associated + documentation; +3. The term "TekHVC" is always used, and is only used, in association + with the mathematical derivations of the TekHVC Color Space, + including those provided in this file and any equivalent pathways and + mathematical derivations, regardless of digital (e.g., floating point + or integer) representation. + +Tektronix makes no representation about the suitability of this software +for any purpose. It is provided "as is" and with all faults. + +TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, +INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF +CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +(c) Copyright 1995 FUJITSU LIMITED +This is source code modified by FUJITSU LIMITED under the Joint +Development Agreement for the CDE/Motif PST. + + ---------------------------------------- + +Copyright 1992 by Oki Technosystems Laboratory, Inc. +Copyright 1992 by Fuji Xerox Co., Ltd. + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of Oki Technosystems +Laboratory and Fuji Xerox not be used in advertising or publicity +pertaining to distribution of the software without specific, written +prior permission. +Oki Technosystems Laboratory and Fuji Xerox make no representations +about the suitability of this software for any purpose. It is provided +"as is" without express or implied warranty. + +OKI TECHNOSYSTEMS LABORATORY AND FUJI XEROX DISCLAIM ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL OKI TECHNOSYSTEMS +LABORATORY AND FUJI XEROX BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE +OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1990, 1991, 1992, 1993, 1994 by FUJITSU LIMITED + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of FUJITSU LIMITED +not be used in advertising or publicity pertaining to distribution +of the software without specific, written prior permission. +FUJITSU LIMITED makes no representations about the suitability of +this software for any purpose. +It is provided "as is" without express or implied warranty. + +FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + + +Copyright (c) 1995 David E. Wexelblat. All rights reserved + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL DAVID E. WEXELBLAT BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of David E. Wexelblat shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization +from David E. Wexelblat. + + ---------------------------------------- + +Copyright 1990, 1991 by OMRON Corporation + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name OMRON not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. OMRON makes no representations +about the suitability of this software for any purpose. It is provided +"as is" without express or implied warranty. + +OMRON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL OMRON BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTUOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1985, 1986, 1987, 1988, 1989, 1990, 1991 by +Digital Equipment Corporation + +Portions Copyright 1990, 1991 by Tektronix, Inc + +Rewritten for X.org by Chris Lee + +Permission to use, copy, modify, distribute, and sell this documentation +for any purpose and without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. +Chris Lee makes no representations about the suitability for any purpose +of the information in this document. It is provided \`\`as-is'' without +express or implied warranty. + + ---------------------------------------- + +Copyright 1993 by Digital Equipment Corporation, Maynard, Massachusetts, +Copyright 1994 by FUJITSU LIMITED +Copyright 1994 by Sony Corporation + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the names of Digital, FUJITSU +LIMITED and Sony Corporation not be used in advertising or publicity +pertaining to distribution of the software without specific, written +prior permission. + +DIGITAL, FUJITSU LIMITED AND SONY CORPORATION DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL, FUJITSU LIMITED +AND SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + + +Copyright 1991 by the Open Software Foundation + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of Open Software Foundation +not be used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. Open Software +Foundation makes no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +OPEN SOFTWARE FOUNDATION DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL OPEN SOFTWARE FOUNDATIONN BE +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1990, 1991, 1992,1993, 1994 by FUJITSU LIMITED +Copyright 1993, 1994 by Sony Corporation + +Permission to use, copy, modify, distribute, and sell this software and +its documentation for any purpose is hereby granted without fee, provided +that the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of FUJITSU LIMITED and Sony Corporation +not be used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. FUJITSU LIMITED and +Sony Corporation makes no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +FUJITSU LIMITED AND SONY CORPORATION DISCLAIMS ALL WARRANTIES WITH REGARD +TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL FUJITSU LIMITED OR SONY CORPORATION BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE +USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright (c) 1993, 1995 by Silicon Graphics Computer Systems, Inc. + +Permission to use, copy, modify, and distribute this +software and its documentation for any purpose and without +fee is hereby granted, provided that the above copyright +notice appear in all copies and that both that copyright +notice and this permission notice appear in supporting +documentation, and that the name of Silicon Graphics not be +used in advertising or publicity pertaining to distribution +of the software without specific prior written permission. +Silicon Graphics makes no representation about the suitability +of this software for any purpose. It is provided "as is" +without any express or implied warranty. + +SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS +SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON +GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH +THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1991, 1992, 1993, 1994 by FUJITSU LIMITED +Copyright 1993 by Digital Equipment Corporation + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of FUJITSU LIMITED and +Digital Equipment Corporation not be used in advertising or publicity +pertaining to distribution of the software without specific, written +prior permission. FUJITSU LIMITED and Digital Equipment Corporation +makes no representations about the suitability of this software for +any purpose. It is provided "as is" without express or implied +warranty. + +FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION DISCLAIM ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION BE LIABLE FOR +ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1992, 1993 by FUJITSU LIMITED +Copyright 1993 by Fujitsu Open Systems Solutions, Inc. +Copyright 1994 by Sony Corporation + +Permission to use, copy, modify, distribute and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of FUJITSU LIMITED, +Fujitsu Open Systems Solutions, Inc. and Sony Corporation not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. +FUJITSU LIMITED, Fujitsu Open Systems Solutions, Inc. and +Sony Corporation make no representations about the suitability of +this software for any purpose. It is provided "as is" without +express or implied warranty. + +FUJITSU LIMITED, FUJITSU OPEN SYSTEMS SOLUTIONS, INC. AND SONY +CORPORATION DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, +IN NO EVENT SHALL FUJITSU OPEN SYSTEMS SOLUTIONS, INC., FUJITSU LIMITED +AND SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE +OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1987, 1988, 1990, 1993 by Digital Equipment Corporation, +Maynard, Massachusetts, + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Digital not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + + ---------------------------------------- + +Copyright 1993 by SunSoft, Inc. +Copyright 1999-2000 by Bruno Haible + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the names of SunSoft, Inc. and +Bruno Haible not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. SunSoft, Inc. and Bruno Haible make no representations +about the suitability of this software for any purpose. It is +provided "as is" without express or implied warranty. + +SunSoft Inc. AND Bruno Haible DISCLAIM ALL WARRANTIES WITH REGARD +TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS, IN NO EVENT SHALL SunSoft, Inc. OR Bruno Haible BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1991 by the Open Software Foundation +Copyright 1993 by the TOSHIBA Corp. + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the names of Open Software Foundation and TOSHIBA +not be used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. Open Software +Foundation and TOSHIBA make no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +OPEN SOFTWARE FOUNDATION AND TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL OPEN SOFTWARE FOUNDATIONN OR TOSHIBA BE +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1988 by Wyse Technology, Inc., San Jose, Ca., + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name Wyse not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +WYSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + + ---------------------------------------- + + +Copyright 1991 by the Open Software Foundation +Copyright 1993, 1994 by the Sony Corporation + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the names of Open Software Foundation and +Sony Corporation not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior permission. +Open Software Foundation and Sony Corporation make no +representations about the suitability of this software for any purpose. +It is provided "as is" without express or implied warranty. + +OPEN SOFTWARE FOUNDATION AND SONY CORPORATION DISCLAIM ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL OPEN +SOFTWARE FOUNDATIONN OR SONY CORPORATION BE LIABLE FOR ANY SPECIAL, +INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1992, 1993 by FUJITSU LIMITED +Copyright 1993 by Fujitsu Open Systems Solutions, Inc. + +Permission to use, copy, modify, distribute and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of FUJITSU LIMITED and +Fujitsu Open Systems Solutions, Inc. not be used in advertising or +publicity pertaining to distribution of the software without specific, +written prior permission. +FUJITSU LIMITED and Fujitsu Open Systems Solutions, Inc. makes no +representations about the suitability of this software for any purpose. +It is provided "as is" without express or implied warranty. + +FUJITSU LIMITED AND FUJITSU OPEN SYSTEMS SOLUTIONS, INC. DISCLAIMS ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU OPEN SYSTEMS +SOLUTIONS, INC. AND FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT +OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE +OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1993, 1994 by Sony Corporation + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of Sony Corporation +not be used in advertising or publicity pertaining to distribution +of the software without specific, written prior permission. +Sony Corporation makes no representations about the suitability of +this software for any purpose. It is provided "as is" without +express or implied warranty. + +SONY CORPORATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1986, 1998 The Open Group +Copyright (c) 2000 The XFree86 Project, Inc. + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +X CONSORTIUM OR THE XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +Except as contained in this notice, the name of the X Consortium or of the +XFree86 Project shall not be used in advertising or otherwise to promote the +sale, use or other dealings in this Software without prior written +authorization from the X Consortium and the XFree86 Project. + + ---------------------------------------- + +Copyright 1990, 1991 by OMRON Corporation, NTT Software Corporation, + and Nippon Telegraph and Telephone Corporation +Copyright 1991 by the Open Software Foundation +Copyright 1993 by the FUJITSU LIMITED + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the names of OMRON, NTT Software, NTT, and +Open Software Foundation not be used in advertising or publicity +pertaining to distribution of the software without specific, +written prior permission. OMRON, NTT Software, NTT, and Open Software +Foundation make no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +OMRON, NTT SOFTWARE, NTT, AND OPEN SOFTWARE FOUNDATION +DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT +SHALL OMRON, NTT SOFTWARE, NTT, OR OPEN SOFTWARE FOUNDATION BE +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1988 by Wyse Technology, Inc., San Jose, Ca, +Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts, + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name Digital not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL AND WYSE DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL DIGITAL OR WYSE BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + + +Copyright 1991, 1992 by Fuji Xerox Co., Ltd. +Copyright 1992, 1993, 1994 by FUJITSU LIMITED + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of Fuji Xerox, +FUJITSU LIMITED not be used in advertising or publicity pertaining +to distribution of the software without specific, written prior +permission. Fuji Xerox, FUJITSU LIMITED make no representations +about the suitability of this software for any purpose. +It is provided "as is" without express or implied warranty. + +FUJI XEROX, FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJI XEROX, +FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA +OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 2006 Josh Triplett + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + + ---------------------------------------- + +(c) Copyright 1996 by Sebastien Marineau and Holger Veit + + + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +HOLGER VEIT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +Except as contained in this notice, the name of Sebastien Marineau or Holger Veit +shall not be used in advertising or otherwise to promote the sale, use or other +dealings in this Software without prior written authorization from Holger Veit or +Sebastien Marineau. + + ---------------------------------------- + +Copyright 1990, 1991 by OMRON Corporation, NTT Software Corporation, + and Nippon Telegraph and Telephone Corporation +Copyright 1991 by the Open Software Foundation +Copyright 1993 by the TOSHIBA Corp. +Copyright 1993, 1994 by Sony Corporation +Copyright 1993, 1994 by the FUJITSU LIMITED + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the names of OMRON, NTT Software, NTT, Open +Software Foundation, and Sony Corporation not be used in advertising +or publicity pertaining to distribution of the software without specific, +written prior permission. OMRON, NTT Software, NTT, Open Software +Foundation, and Sony Corporation make no representations about the +suitability of this software for any purpose. It is provided "as is" +without express or implied warranty. + +OMRON, NTT SOFTWARE, NTT, OPEN SOFTWARE FOUNDATION, AND SONY +CORPORATION DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT +SHALL OMRON, NTT SOFTWARE, NTT, OPEN SOFTWARE FOUNDATION, OR SONY +CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 2000 by Bruno Haible + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of Bruno Haible not +be used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. Bruno Haible +makes no representations about the suitability of this software for +any purpose. It is provided "as is" without express or implied +warranty. + +Bruno Haible DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN +NO EVENT SHALL Bruno Haible BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE +OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright © 2003 Keith Packard + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of Keith Packard not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. Keith Packard makes no +representations about the suitability of this software for any purpose. It +is provided "as is" without express or implied warranty. + +KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright (c) 2007-2009, Troy D. Hanson +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + ---------------------------------------- + +Copyright 1992, 1993 by TOSHIBA Corp. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, provided +that the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of TOSHIBA not be used in advertising +or publicity pertaining to distribution of the software without specific, +written prior permission. TOSHIBA make no representations about the +suitability of this software for any purpose. It is provided "as is" +without express or implied warranty. + +TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + + + ---------------------------------------- + +Copyright IBM Corporation 1993 + +All Rights Reserved + +License to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of IBM not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS, AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS, IN NO EVENT SHALL +IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + + ---------------------------------------- + +Copyright 1990, 1991 by OMRON Corporation, NTT Software Corporation, + and Nippon Telegraph and Telephone Corporation + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the names of OMRON, NTT Software, and NTT +not be used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. OMRON, NTT Software, +and NTT make no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +OMRON, NTT SOFTWARE, AND NTT, DISCLAIM ALL WARRANTIES WITH REGARD +TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS, IN NO EVENT SHALL OMRON, NTT SOFTWARE, OR NTT, BE +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +--- licenses/LICENSE.libXau.txt --- +Copyright 1988, 1993, 1994, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from The Open Group. + +--- licenses/LICENSE.libedit.txt --- +Copyright (c) 1992, 1993 + The Regents of the University of California. All rights reserved. + +This code is derived from software contributed to Berkeley by +Christos Zoulas of Cornell University. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +--- licenses/LICENSE.libffi.txt --- +libffi - Copyright (c) 1996-2019 Anthony Green, Red Hat, Inc and others. +See source files for details. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +``Software''), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--- licenses/LICENSE.liblzma.txt --- +Copyright (C) The XZ Utils authors and contributors + +Permission to use, copy, modify, and/or distribute this +software for any purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL +THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +--- licenses/LICENSE.libuuid.txt --- +Copyright (C) 1996, 1997 Theodore Ts'o. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, and the entire permission notice in its entirety, + including the disclaimer of warranties. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote + products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF +WHICH ARE HEREBY DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +--- licenses/LICENSE.libxcb.txt --- +Copyright (C) 2001-2006 Bart Massey, Jamey Sharp, and Josh Triplett. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, +sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall +be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the names of the authors +or their institutions shall not be used in advertising or +otherwise to promote the sale, use or other dealings in this +Software without prior written authorization from the +authors. + +--- licenses/LICENSE.mpdecimal.txt --- +Copyright (c) 2008-2020 Stefan Krah. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +--- licenses/LICENSE.ncurses.txt --- +Copyright 2018-2020,2021 Thomas E. Dickey +Copyright 1998-2017,2018 Free Software Foundation, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, distribute with modifications, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR +THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name(s) of the above copyright +holders shall not be used in advertising or otherwise to promote the +sale, use or other dealings in this Software without prior written +authorization. + +-- vile:txtmode fc=72 +-- $Id: COPYING,v 1.10 2021/01/01 09:54:30 tom Exp $ + +--- licenses/LICENSE.openssl-1.1.txt --- + + LICENSE ISSUES + ============== + + The OpenSSL toolkit stays under a double license, i.e. both the conditions of + the OpenSSL License and the original SSLeay license apply to the toolkit. + See below for the actual license texts. + + OpenSSL License + --------------- + +/* ==================================================================== + * Copyright (c) 1998-2019 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + + Original SSLeay License + ----------------------- + +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +--- licenses/LICENSE.openssl-3.txt --- + + Apache License + Version 2.0, January 2004 + https://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + +--- licenses/LICENSE.sqlite.txt --- +All of the code and documentation in SQLite has been dedicated to the public +domain by the authors. All code authors, and representatives of the companies +they work for, have signed affidavits dedicating their contributions to the +public domain and originals of those signed affidavits are stored in a firesafe +at the main offices of Hwaci. Anyone is free to copy, modify, publish, use, +compile, sell, or distribute the original SQLite code, either in source code form +or as a compiled binary, for any purpose, commercial or non-commercial, and by +any means. + +The previous paragraph applies to the deliverable code and documentation in +SQLite - those parts of the SQLite library that you actually bundle and ship +with a larger application. Some scripts used as part of the build process (for +example the "configure" scripts generated by autoconf) might fall under other +open-source licenses. Nothing from these build scripts ever reaches the final +deliverable SQLite library, however, and so the licenses associated with those +scripts should not be a factor in assessing your rights to copy and use the +SQLite library. + +All of the deliverable code in SQLite has been written from scratch. No code has +been taken from other projects or from the open internet. Every line of code can +be traced back to its original author, and all of those authors have public +domain dedications on file. So the SQLite code base is clean and is +uncontaminated with licensed code from other projects. + +--- licenses/LICENSE.tcl.txt --- +This software is copyrighted by the Regents of the University of +California, Sun Microsystems, Inc., Scriptics Corporation, ActiveState +Corporation and other parties. The following terms apply to all files +associated with the software unless explicitly disclaimed in +individual files. + +The authors hereby grant permission to use, copy, modify, distribute, +and license this software and its documentation for any purpose, provided +that existing copyright notices are retained in all copies and that this +notice is included verbatim in any distributions. No written agreement, +license, or royalty fee is required for any of the authorized uses. +Modifications to this software may be copyrighted by their authors +and need not follow the licensing terms described here, provided that +the new terms are clearly indicated on the first page of each file where +they apply. + +IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +MODIFICATIONS. + +GOVERNMENT USE: If you are acquiring this software on behalf of the +U.S. government, the Government shall have only "Restricted Rights" +in the software and related documentation as defined in the Federal +Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you +are acquiring the software on behalf of the Department of Defense, the +software shall be classified as "Commercial Computer Software" and the +Government shall have only "Restricted Rights" as defined in Clause +252.227-7014 (b) (3) of DFARs. Notwithstanding the foregoing, the +authors grant the U.S. Government and others acting in its behalf +permission to use and distribute the software in accordance with the +terms specified in this license. + +--- licenses/LICENSE.tix.txt --- +Copyright (c) 1993-1999 Ioi Kim Lam. +Copyright (c) 2000-2001 Tix Project Group. +Copyright (c) 2004 ActiveState + +This software is copyrighted by the above entities +and other parties. The following terms apply to all files associated +with the software unless explicitly disclaimed in individual files. + +The authors hereby grant permission to use, copy, modify, distribute, +and license this software and its documentation for any purpose, provided +that existing copyright notices are retained in all copies and that this +notice is included verbatim in any distributions. No written agreement, +license, or royalty fee is required for any of the authorized uses. +Modifications to this software may be copyrighted by their authors +and need not follow the licensing terms described here, provided that +the new terms are clearly indicated on the first page of each file where +they apply. + +IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +MODIFICATIONS. + +GOVERNMENT USE: If you are acquiring this software on behalf of the +U.S. government, the Government shall have only "Restricted Rights" +in the software and related documentation as defined in the Federal +Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you +are acquiring the software on behalf of the Department of Defense, the +software shall be classified as "Commercial Computer Software" and the +Government shall have only "Restricted Rights" as defined in Clause +252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the +authors grant the U.S. Government and others acting in its behalf +permission to use and distribute the software in accordance with the +terms specified in this license. + +---------------------------------------------------------------------- + +Parts of this software are based on the Tcl/Tk software copyrighted by +the Regents of the University of California, Sun Microsystems, Inc., +and other parties. The original license terms of the Tcl/Tk software +distribution is included in the file docs/license.tcltk. + +Parts of this software are based on the HTML Library software +copyrighted by Sun Microsystems, Inc. The original license terms of +the HTML Library software distribution is included in the file +docs/license.html_lib. + +--- licenses/LICENSE.zlib.txt --- + + Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + + +============================================================================== + +CPython full archive 3.14.7 (Managed Python full-archive notice superset for x86_64-unknown-linux-gnu; selected install-only runtime tracked separately) +Source: https://github.com/astral-sh/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst +Declared license: Python-2.0, CNRI-Python +--- licenses/LICENSE.bdb.txt --- +The following is the license that applies to this copy of the Berkeley DB +software. For a license to use the Berkeley DB software under conditions +other than those described here, or to purchase support for this software, +please contact Oracle at berkeleydb-info_us@oracle.com. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +/* + * Copyright (c) 1990, 2013 Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Redistributions in any form must be accompanied by information on + * how to obtain complete source code for the DB software and any + * accompanying software that uses the DB software. The source code + * must either be included in the distribution or be available for no + * more than the cost of distribution plus a nominal fee, and must be + * freely redistributable under reasonable conditions. For an + * executable file, complete source code means the source code for all + * modules it contains. It does not include source code for modules or + * files that typically accompany the major components of the operating + * system on which the executable file runs. + * + * THIS SOFTWARE IS PROVIDED BY ORACLE ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR + * NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL ORACLE BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +/* + * Copyright (c) 1990, 1993, 1994, 1995 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +/* + * Copyright (c) 1995, 1996 + * The President and Fellows of Harvard University. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY HARVARD AND ITS CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL HARVARD OR ITS CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +/*** + * ASM: a very small and fast Java bytecode manipulation framework + * Copyright (c) 2000-2005 INRIA, France Telecom + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holders nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ + +--- licenses/LICENSE.bzip2.txt --- +This program, "bzip2", the associated library "libbzip2", and all +documentation, are copyright (C) 1996-2010 Julian R Seward. All +rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. The origin of this software must not be misrepresented; you must + not claim that you wrote the original software. If you use this + software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + +3. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + +4. The name of the author may not be used to endorse or promote + products derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Julian Seward, jseward@bzip.org +bzip2/libbzip2 version 1.0.6 of 6 September 2010 + +--- licenses/LICENSE.cpython.txt --- +A. HISTORY OF THE SOFTWARE +========================== + +Python was created in the early 1990s by Guido van Rossum at Stichting +Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands +as a successor of a language called ABC. Guido remains Python's +principal author, although it includes many contributions from others. + +In 1995, Guido continued his work on Python at the Corporation for +National Research Initiatives (CNRI, see http://www.cnri.reston.va.us) +in Reston, Virginia where he released several versions of the +software. + +In May 2000, Guido and the Python core development team moved to +BeOpen.com to form the BeOpen PythonLabs team. In October of the same +year, the PythonLabs team moved to Digital Creations, which became +Zope Corporation. In 2001, the Python Software Foundation (PSF, see +https://www.python.org/psf/) was formed, a non-profit organization +created specifically to own Python-related Intellectual Property. +Zope Corporation was a sponsoring member of the PSF. + +All Python releases are Open Source (see http://www.opensource.org for +the Open Source Definition). Historically, most, but not all, Python +releases have also been GPL-compatible; the table below summarizes +the various releases. + + Release Derived Year Owner GPL- + from compatible? (1) + + 0.9.0 thru 1.2 1991-1995 CWI yes + 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes + 1.6 1.5.2 2000 CNRI no + 2.0 1.6 2000 BeOpen.com no + 1.6.1 1.6 2001 CNRI yes (2) + 2.1 2.0+1.6.1 2001 PSF no + 2.0.1 2.0+1.6.1 2001 PSF yes + 2.1.1 2.1+2.0.1 2001 PSF yes + 2.1.2 2.1.1 2002 PSF yes + 2.1.3 2.1.2 2002 PSF yes + 2.2 and above 2.1.1 2001-now PSF yes + +Footnotes: + +(1) GPL-compatible doesn't mean that we're distributing Python under + the GPL. All Python licenses, unlike the GPL, let you distribute + a modified version without making your changes open source. The + GPL-compatible licenses make it possible to combine Python with + other software that is released under the GPL; the others don't. + +(2) According to Richard Stallman, 1.6.1 is not GPL-compatible, + because its license has a choice of law clause. According to + CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1 + is "not incompatible" with the GPL. + +Thanks to the many outside volunteers who have worked under Guido's +direction to make these releases possible. + + +B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON +=============================================================== + +Python software and documentation are licensed under the +Python Software Foundation License Version 2. + +Starting with Python 3.8.6, examples, recipes, and other code in +the documentation are dual licensed under the PSF License Version 2 +and the Zero-Clause BSD license. + +Some software incorporated into Python is under different licenses. +The licenses are listed with code falling under that license. + + +PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 +-------------------------------------------- + +1. This LICENSE AGREEMENT is between the Python Software Foundation +("PSF"), and the Individual or Organization ("Licensee") accessing and +otherwise using this software ("Python") in source or binary form and +its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, PSF hereby +grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, +analyze, test, perform and/or display publicly, prepare derivative works, +distribute, and otherwise use Python alone or in any derivative version, +provided, however, that PSF's License Agreement and PSF's notice of copyright, +i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Python Software Foundation; +All Rights Reserved" are retained in Python alone or in any derivative version +prepared by Licensee. + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python. + +4. PSF is making Python available to Licensee on an "AS IS" +basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. Nothing in this License Agreement shall be deemed to create any +relationship of agency, partnership, or joint venture between PSF and +Licensee. This License Agreement does not grant permission to use PSF +trademarks or trade name in a trademark sense to endorse or promote +products or services of Licensee, or any third party. + +8. By copying, installing or otherwise using Python, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 +------------------------------------------- + +BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 + +1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an +office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the +Individual or Organization ("Licensee") accessing and otherwise using +this software in source or binary form and its associated +documentation ("the Software"). + +2. Subject to the terms and conditions of this BeOpen Python License +Agreement, BeOpen hereby grants Licensee a non-exclusive, +royalty-free, world-wide license to reproduce, analyze, test, perform +and/or display publicly, prepare derivative works, distribute, and +otherwise use the Software alone or in any derivative version, +provided, however, that the BeOpen Python License is retained in the +Software, alone or in any derivative version prepared by Licensee. + +3. BeOpen is making the Software available to Licensee on an "AS IS" +basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE +SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS +AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY +DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +5. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +6. This License Agreement shall be governed by and interpreted in all +respects by the law of the State of California, excluding conflict of +law provisions. Nothing in this License Agreement shall be deemed to +create any relationship of agency, partnership, or joint venture +between BeOpen and Licensee. This License Agreement does not grant +permission to use BeOpen trademarks or trade names in a trademark +sense to endorse or promote products or services of Licensee, or any +third party. As an exception, the "BeOpen Python" logos available at +http://www.pythonlabs.com/logos.html may be used according to the +permissions granted on that web page. + +7. By copying, installing or otherwise using the software, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 +--------------------------------------- + +1. This LICENSE AGREEMENT is between the Corporation for National +Research Initiatives, having an office at 1895 Preston White Drive, +Reston, VA 20191 ("CNRI"), and the Individual or Organization +("Licensee") accessing and otherwise using Python 1.6.1 software in +source or binary form and its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, CNRI +hereby grants Licensee a nonexclusive, royalty-free, world-wide +license to reproduce, analyze, test, perform and/or display publicly, +prepare derivative works, distribute, and otherwise use Python 1.6.1 +alone or in any derivative version, provided, however, that CNRI's +License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) +1995-2001 Corporation for National Research Initiatives; All Rights +Reserved" are retained in Python 1.6.1 alone or in any derivative +version prepared by Licensee. Alternately, in lieu of CNRI's License +Agreement, Licensee may substitute the following text (omitting the +quotes): "Python 1.6.1 is made available subject to the terms and +conditions in CNRI's License Agreement. This Agreement together with +Python 1.6.1 may be located on the internet using the following +unique, persistent identifier (known as a handle): 1895.22/1013. This +Agreement may also be obtained from a proxy server on the internet +using the following URL: http://hdl.handle.net/1895.22/1013". + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python 1.6.1 or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python 1.6.1. + +4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" +basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. This License Agreement shall be governed by the federal +intellectual property law of the United States, including without +limitation the federal copyright law, and, to the extent such +U.S. federal law does not apply, by the law of the Commonwealth of +Virginia, excluding Virginia's conflict of law provisions. +Notwithstanding the foregoing, with regard to derivative works based +on Python 1.6.1 that incorporate non-separable material that was +previously distributed under the GNU General Public License (GPL), the +law of the Commonwealth of Virginia shall govern this License +Agreement only as to issues arising under or with respect to +Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this +License Agreement shall be deemed to create any relationship of +agency, partnership, or joint venture between CNRI and Licensee. This +License Agreement does not grant permission to use CNRI trademarks or +trade name in a trademark sense to endorse or promote products or +services of Licensee, or any third party. + +8. By clicking on the "ACCEPT" button where indicated, or by copying, +installing or otherwise using Python 1.6.1, Licensee agrees to be +bound by the terms and conditions of this License Agreement. + + ACCEPT + + +CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 +-------------------------------------------------- + +Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, +The Netherlands. All rights reserved. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Stichting Mathematisch +Centrum or CWI not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +ZERO-CLAUSE BSD LICENSE FOR CODE IN THE PYTHON DOCUMENTATION +---------------------------------------------------------------------- + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + +Licenses and Acknowledgements for Incorporated Software +======================================================= + +This section is an incomplete, but growing list of licenses and acknowledgements +for third-party software incorporated in the Python distribution. + +Mersenne Twister +---------------- + +The :mod:`_random` module includes code based on a download from +http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/emt19937ar.html. The following are +the verbatim comments from the original code:: + + A C-program for MT19937, with initialization improved 2002/1/26. + Coded by Takuji Nishimura and Makoto Matsumoto. + + Before using, initialize the state by using init_genrand(seed) + or init_by_array(init_key, key_length). + + Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura, + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. The names of its contributors may not be used to endorse or promote + products derived from this software without specific prior written + permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + Any feedback is very welcome. + http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html + email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space) + + +Sockets +------- + +The :mod:`socket` module uses the functions, :func:`getaddrinfo`, and +:func:`getnameinfo`, which are coded in separate source files from the WIDE +Project, http://www.wide.ad.jp/. :: + + Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the project nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + + +Asynchronous socket services +---------------------------- + +The :mod:`asynchat` and :mod:`asyncore` modules contain the following notice:: + + Copyright 1996 by Sam Rushing + + All Rights Reserved + + Permission to use, copy, modify, and distribute this software and + its documentation for any purpose and without fee is hereby + granted, provided that the above copyright notice appear in all + copies and that both that copyright notice and this permission + notice appear in supporting documentation, and that the name of Sam + Rushing not be used in advertising or publicity pertaining to + distribution of the software without specific, written prior + permission. + + SAM RUSHING DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN + NO EVENT SHALL SAM RUSHING BE LIABLE FOR ANY SPECIAL, INDIRECT OR + CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS + OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +Cookie management +----------------- + +The :mod:`http.cookies` module contains the following notice:: + + Copyright 2000 by Timothy O'Malley + + All Rights Reserved + + Permission to use, copy, modify, and distribute this software + and its documentation for any purpose and without fee is hereby + granted, provided that the above copyright notice appear in all + copies and that both that copyright notice and this permission + notice appear in supporting documentation, and that the name of + Timothy O'Malley not be used in advertising or publicity + pertaining to distribution of the software without specific, written + prior permission. + + Timothy O'Malley DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS + SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS, IN NO EVENT SHALL Timothy O'Malley BE LIABLE FOR + ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + + +Execution tracing +----------------- + +The :mod:`trace` module contains the following notice:: + + portions copyright 2001, Autonomous Zones Industries, Inc., all rights... + err... reserved and offered to the public under the terms of the + Python 2.2 license. + Author: Zooko O'Whielacronx + http://zooko.com/ + mailto:zooko@zooko.com + + Copyright 2000, Mojam Media, Inc., all rights reserved. + Author: Skip Montanaro + + Copyright 1999, Bioreason, Inc., all rights reserved. + Author: Andrew Dalke + + Copyright 1995-1997, Automatrix, Inc., all rights reserved. + Author: Skip Montanaro + + Copyright 1991-1995, Stichting Mathematisch Centrum, all rights reserved. + + + Permission to use, copy, modify, and distribute this Python software and + its associated documentation for any purpose without fee is hereby + granted, provided that the above copyright notice appears in all copies, + and that both that copyright notice and this permission notice appear in + supporting documentation, and that the name of neither Automatrix, + Bioreason or Mojam Media be used in advertising or publicity pertaining to + distribution of the software without specific, written prior permission. + + +UUencode and UUdecode functions +------------------------------- + +The :mod:`uu` module contains the following notice:: + + Copyright 1994 by Lance Ellinghouse + Cathedral City, California Republic, United States of America. + All Rights Reserved + Permission to use, copy, modify, and distribute this software and its + documentation for any purpose and without fee is hereby granted, + provided that the above copyright notice appear in all copies and that + both that copyright notice and this permission notice appear in + supporting documentation, and that the name of Lance Ellinghouse + not be used in advertising or publicity pertaining to distribution + of the software without specific, written prior permission. + LANCE ELLINGHOUSE DISCLAIMS ALL WARRANTIES WITH REGARD TO + THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS, IN NO EVENT SHALL LANCE ELLINGHOUSE CENTRUM BE LIABLE + FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT + OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + Modified by Jack Jansen, CWI, July 1995: + - Use binascii module to do the actual line-by-line conversion + between ascii and binary. This results in a 1000-fold speedup. The C + version is still 5 times faster, though. + - Arguments more compliant with Python standard + + +XML Remote Procedure Calls +-------------------------- + +The :mod:`xmlrpc.client` module contains the following notice:: + + The XML-RPC client interface is + + Copyright (c) 1999-2002 by Secret Labs AB + Copyright (c) 1999-2002 by Fredrik Lundh + + By obtaining, using, and/or copying this software and/or its + associated documentation, you agree that you have read, understood, + and will comply with the following terms and conditions: + + Permission to use, copy, modify, and distribute this software and + its associated documentation for any purpose and without fee is + hereby granted, provided that the above copyright notice appears in + all copies, and that both that copyright notice and this permission + notice appear in supporting documentation, and that the name of + Secret Labs AB or the author not be used in advertising or publicity + pertaining to distribution of the software without specific, written + prior permission. + + SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANT- + ABILITY AND FITNESS. IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR + BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY + DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + OF THIS SOFTWARE. + + +test_epoll +---------- + +The :mod:`test_epoll` module contains the following notice:: + + Copyright (c) 2001-2006 Twisted Matrix Laboratories. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Select kqueue +------------- + +The :mod:`select` module contains the following notice for the kqueue +interface:: + + Copyright (c) 2000 Doug White, 2006 James Knight, 2007 Christian Heimes + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + + +SipHash24 +--------- + +The file :file:`Python/pyhash.c` contains Marek Majkowski' implementation of +Dan Bernstein's SipHash24 algorithm. It contains the following note:: + + + Copyright (c) 2013 Marek Majkowski + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + + Original location: + https://github.com/majek/csiphash/ + + Solution inspired by code from: + Samuel Neves (supercop/crypto_auth/siphash24/little) + djb (supercop/crypto_auth/siphash24/little2) + Jean-Philippe Aumasson (https://131002.net/siphash/siphash24.c) + + +strtod and dtoa +--------------- + +The file :file:`Python/dtoa.c`, which supplies C functions dtoa and +strtod for conversion of C doubles to and from strings, is derived +from the file of the same name by David M. Gay, currently available +from http://www.netlib.org/fp/. The original file, as retrieved on +March 16, 2009, contains the following copyright and licensing +notice:: + + /**************************************************************** + * + * The author of this software is David M. Gay. + * + * Copyright (c) 1991, 2000, 2001 by Lucent Technologies. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose without fee is hereby granted, provided that this entire notice + * is included in all copies of any software which is or includes a copy + * or modification of this software and in all copies of the supporting + * documentation for such software. + * + * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED + * WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR LUCENT MAKES ANY + * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY + * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. + * + ***************************************************************/ + +expat +----- + +The :mod:`pyexpat` extension is built using an included copy of the expat +sources unless the build is configured ``--with-system-expat``:: + + Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd + and Clark Cooper + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +cfuhash +------- + +The implementation of the hash table used by the :mod:`tracemalloc` is based +on the cfuhash project:: + + Copyright (c) 2005 Don Owens + All rights reserved. + + This code is released under the BSD license: + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + * Neither the name of the author nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + OF THE POSSIBILITY OF SUCH DAMAGE. + + +libmpdec +-------- + +The :mod:`_decimal` module is built using an included copy of the libmpdec +library unless the build is configured ``--with-system-libmpdec``:: + + Copyright (c) 2008-2020 Stefan Krah. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + +W3C C14N test suite +------------------- + +The C14N 2.0 test suite in the :mod:`test` package +(``Lib/test/xmltestdata/c14n-20/``) was retrieved from the W3C website at +https://www.w3.org/TR/xml-c14n2-testcases/ and is distributed under the +3-clause BSD license:: + + Copyright (c) 2013 W3C(R) (MIT, ERCIM, Keio, Beihang), + All Rights Reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + * Redistributions of works must retain the original copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the original copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the W3C nor the names of its contributors may be + used to endorse or promote products derived from this work without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +--- licenses/LICENSE.expat.txt --- +Copyright (c) 1998-2000 Thai Open Source Software Center Ltd and Clark Cooper +Copyright (c) 2001-2022 Expat maintainers + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--- licenses/LICENSE.libX11.txt --- +The following is the 'standard copyright' agreed upon by most contributors, +and is currently the canonical license preferred by the X.Org Foundation. +This is a slight variant of the common MIT license form published by the +Open Source Initiative at http://www.opensource.org/licenses/mit-license.php + +Copyright holders of new code should use this license statement where +possible, and insert their name to this list. Please sort by surname +for people, and by the full name for other entities (e.g. Juliusz +Chroboczek sorts before Intel Corporation sorts before Daniel Stone). + +See each individual source file or directory for the license that applies +to that file. + +Copyright (C) 2003-2006,2008 Jamey Sharp, Josh Triplett +Copyright © 2009 Red Hat, Inc. +Copyright 1990-1992,1999,2000,2004,2009,2010 Oracle and/or its affiliates. +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next +paragraph) shall be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + + ---------------------------------------------------------------------- + +The following licenses are 'legacy' - usually MIT/X11 licenses with the name +of the copyright holder(s) in the license statement: + +Copyright 1984-1994, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from The Open Group. + +X Window System is a trademark of The Open Group. + + ---------------------------------------- + +Copyright 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium +Copyright 2000 The XFree86 Project, Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the X Consortium shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization +from the X Consortium. + +Copyright 1985, 1986, 1987, 1988, 1989, 1990, 1991 by +Digital Equipment Corporation + +Portions Copyright 1990, 1991 by Tektronix, Inc. + +Permission to use, copy, modify and distribute this documentation for +any purpose and without fee is hereby granted, provided that the above +copyright notice appears in all copies and that both that copyright notice +and this permission notice appear in all copies, and that the names of +Digital and Tektronix not be used in in advertising or publicity pertaining +to this documentation without specific, written prior permission. +Digital and Tektronix makes no representations about the suitability +of this documentation for any purpose. +It is provided ``as is'' without express or implied warranty. + + ---------------------------------------- + +Copyright (c) 1999-2000 Free Software Foundation, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +FREE SOFTWARE FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the Free Software Foundation +shall not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization from the +Free Software Foundation. + + ---------------------------------------- + +Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. + All Rights Reserved + +This file is a component of an X Window System-specific implementation +of Xcms based on the TekColor Color Management System. TekColor is a +trademark of Tektronix, Inc. The term "TekHVC" designates a particular +color space that is the subject of U.S. Patent No. 4,985,853 (equivalent +foreign patents pending). Permission is hereby granted to use, copy, +modify, sell, and otherwise distribute this software and its +documentation for any purpose and without fee, provided that: + +1. This copyright, permission, and disclaimer notice is reproduced in + all copies of this software and any modification thereof and in + supporting documentation; +2. Any color-handling application which displays TekHVC color + cooordinates identifies these as TekHVC color coordinates in any + interface that displays these coordinates and in any associated + documentation; +3. The term "TekHVC" is always used, and is only used, in association + with the mathematical derivations of the TekHVC Color Space, + including those provided in this file and any equivalent pathways and + mathematical derivations, regardless of digital (e.g., floating point + or integer) representation. + +Tektronix makes no representation about the suitability of this software +for any purpose. It is provided "as is" and with all faults. + +TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, +INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF +CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +(c) Copyright 1995 FUJITSU LIMITED +This is source code modified by FUJITSU LIMITED under the Joint +Development Agreement for the CDE/Motif PST. + + ---------------------------------------- + +Copyright 1992 by Oki Technosystems Laboratory, Inc. +Copyright 1992 by Fuji Xerox Co., Ltd. + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of Oki Technosystems +Laboratory and Fuji Xerox not be used in advertising or publicity +pertaining to distribution of the software without specific, written +prior permission. +Oki Technosystems Laboratory and Fuji Xerox make no representations +about the suitability of this software for any purpose. It is provided +"as is" without express or implied warranty. + +OKI TECHNOSYSTEMS LABORATORY AND FUJI XEROX DISCLAIM ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL OKI TECHNOSYSTEMS +LABORATORY AND FUJI XEROX BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE +OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1990, 1991, 1992, 1993, 1994 by FUJITSU LIMITED + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of FUJITSU LIMITED +not be used in advertising or publicity pertaining to distribution +of the software without specific, written prior permission. +FUJITSU LIMITED makes no representations about the suitability of +this software for any purpose. +It is provided "as is" without express or implied warranty. + +FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + + +Copyright (c) 1995 David E. Wexelblat. All rights reserved + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL DAVID E. WEXELBLAT BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of David E. Wexelblat shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization +from David E. Wexelblat. + + ---------------------------------------- + +Copyright 1990, 1991 by OMRON Corporation + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name OMRON not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. OMRON makes no representations +about the suitability of this software for any purpose. It is provided +"as is" without express or implied warranty. + +OMRON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL OMRON BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTUOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1985, 1986, 1987, 1988, 1989, 1990, 1991 by +Digital Equipment Corporation + +Portions Copyright 1990, 1991 by Tektronix, Inc + +Rewritten for X.org by Chris Lee + +Permission to use, copy, modify, distribute, and sell this documentation +for any purpose and without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. +Chris Lee makes no representations about the suitability for any purpose +of the information in this document. It is provided \`\`as-is'' without +express or implied warranty. + + ---------------------------------------- + +Copyright 1993 by Digital Equipment Corporation, Maynard, Massachusetts, +Copyright 1994 by FUJITSU LIMITED +Copyright 1994 by Sony Corporation + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the names of Digital, FUJITSU +LIMITED and Sony Corporation not be used in advertising or publicity +pertaining to distribution of the software without specific, written +prior permission. + +DIGITAL, FUJITSU LIMITED AND SONY CORPORATION DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL, FUJITSU LIMITED +AND SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + + +Copyright 1991 by the Open Software Foundation + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of Open Software Foundation +not be used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. Open Software +Foundation makes no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +OPEN SOFTWARE FOUNDATION DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL OPEN SOFTWARE FOUNDATIONN BE +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1990, 1991, 1992,1993, 1994 by FUJITSU LIMITED +Copyright 1993, 1994 by Sony Corporation + +Permission to use, copy, modify, distribute, and sell this software and +its documentation for any purpose is hereby granted without fee, provided +that the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of FUJITSU LIMITED and Sony Corporation +not be used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. FUJITSU LIMITED and +Sony Corporation makes no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +FUJITSU LIMITED AND SONY CORPORATION DISCLAIMS ALL WARRANTIES WITH REGARD +TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL FUJITSU LIMITED OR SONY CORPORATION BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE +USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright (c) 1993, 1995 by Silicon Graphics Computer Systems, Inc. + +Permission to use, copy, modify, and distribute this +software and its documentation for any purpose and without +fee is hereby granted, provided that the above copyright +notice appear in all copies and that both that copyright +notice and this permission notice appear in supporting +documentation, and that the name of Silicon Graphics not be +used in advertising or publicity pertaining to distribution +of the software without specific prior written permission. +Silicon Graphics makes no representation about the suitability +of this software for any purpose. It is provided "as is" +without any express or implied warranty. + +SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS +SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON +GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH +THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1991, 1992, 1993, 1994 by FUJITSU LIMITED +Copyright 1993 by Digital Equipment Corporation + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of FUJITSU LIMITED and +Digital Equipment Corporation not be used in advertising or publicity +pertaining to distribution of the software without specific, written +prior permission. FUJITSU LIMITED and Digital Equipment Corporation +makes no representations about the suitability of this software for +any purpose. It is provided "as is" without express or implied +warranty. + +FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION DISCLAIM ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION BE LIABLE FOR +ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1992, 1993 by FUJITSU LIMITED +Copyright 1993 by Fujitsu Open Systems Solutions, Inc. +Copyright 1994 by Sony Corporation + +Permission to use, copy, modify, distribute and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of FUJITSU LIMITED, +Fujitsu Open Systems Solutions, Inc. and Sony Corporation not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. +FUJITSU LIMITED, Fujitsu Open Systems Solutions, Inc. and +Sony Corporation make no representations about the suitability of +this software for any purpose. It is provided "as is" without +express or implied warranty. + +FUJITSU LIMITED, FUJITSU OPEN SYSTEMS SOLUTIONS, INC. AND SONY +CORPORATION DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, +IN NO EVENT SHALL FUJITSU OPEN SYSTEMS SOLUTIONS, INC., FUJITSU LIMITED +AND SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE +OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1987, 1988, 1990, 1993 by Digital Equipment Corporation, +Maynard, Massachusetts, + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Digital not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + + ---------------------------------------- + +Copyright 1993 by SunSoft, Inc. +Copyright 1999-2000 by Bruno Haible + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the names of SunSoft, Inc. and +Bruno Haible not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. SunSoft, Inc. and Bruno Haible make no representations +about the suitability of this software for any purpose. It is +provided "as is" without express or implied warranty. + +SunSoft Inc. AND Bruno Haible DISCLAIM ALL WARRANTIES WITH REGARD +TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS, IN NO EVENT SHALL SunSoft, Inc. OR Bruno Haible BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1991 by the Open Software Foundation +Copyright 1993 by the TOSHIBA Corp. + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the names of Open Software Foundation and TOSHIBA +not be used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. Open Software +Foundation and TOSHIBA make no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +OPEN SOFTWARE FOUNDATION AND TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL OPEN SOFTWARE FOUNDATIONN OR TOSHIBA BE +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1988 by Wyse Technology, Inc., San Jose, Ca., + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name Wyse not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +WYSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + + ---------------------------------------- + + +Copyright 1991 by the Open Software Foundation +Copyright 1993, 1994 by the Sony Corporation + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the names of Open Software Foundation and +Sony Corporation not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior permission. +Open Software Foundation and Sony Corporation make no +representations about the suitability of this software for any purpose. +It is provided "as is" without express or implied warranty. + +OPEN SOFTWARE FOUNDATION AND SONY CORPORATION DISCLAIM ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL OPEN +SOFTWARE FOUNDATIONN OR SONY CORPORATION BE LIABLE FOR ANY SPECIAL, +INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1992, 1993 by FUJITSU LIMITED +Copyright 1993 by Fujitsu Open Systems Solutions, Inc. + +Permission to use, copy, modify, distribute and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of FUJITSU LIMITED and +Fujitsu Open Systems Solutions, Inc. not be used in advertising or +publicity pertaining to distribution of the software without specific, +written prior permission. +FUJITSU LIMITED and Fujitsu Open Systems Solutions, Inc. makes no +representations about the suitability of this software for any purpose. +It is provided "as is" without express or implied warranty. + +FUJITSU LIMITED AND FUJITSU OPEN SYSTEMS SOLUTIONS, INC. DISCLAIMS ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU OPEN SYSTEMS +SOLUTIONS, INC. AND FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT +OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE +OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1993, 1994 by Sony Corporation + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of Sony Corporation +not be used in advertising or publicity pertaining to distribution +of the software without specific, written prior permission. +Sony Corporation makes no representations about the suitability of +this software for any purpose. It is provided "as is" without +express or implied warranty. + +SONY CORPORATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1986, 1998 The Open Group +Copyright (c) 2000 The XFree86 Project, Inc. + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +X CONSORTIUM OR THE XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +Except as contained in this notice, the name of the X Consortium or of the +XFree86 Project shall not be used in advertising or otherwise to promote the +sale, use or other dealings in this Software without prior written +authorization from the X Consortium and the XFree86 Project. + + ---------------------------------------- + +Copyright 1990, 1991 by OMRON Corporation, NTT Software Corporation, + and Nippon Telegraph and Telephone Corporation +Copyright 1991 by the Open Software Foundation +Copyright 1993 by the FUJITSU LIMITED + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the names of OMRON, NTT Software, NTT, and +Open Software Foundation not be used in advertising or publicity +pertaining to distribution of the software without specific, +written prior permission. OMRON, NTT Software, NTT, and Open Software +Foundation make no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +OMRON, NTT SOFTWARE, NTT, AND OPEN SOFTWARE FOUNDATION +DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT +SHALL OMRON, NTT SOFTWARE, NTT, OR OPEN SOFTWARE FOUNDATION BE +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 1988 by Wyse Technology, Inc., San Jose, Ca, +Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts, + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name Digital not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL AND WYSE DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL DIGITAL OR WYSE BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + + +Copyright 1991, 1992 by Fuji Xerox Co., Ltd. +Copyright 1992, 1993, 1994 by FUJITSU LIMITED + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of Fuji Xerox, +FUJITSU LIMITED not be used in advertising or publicity pertaining +to distribution of the software without specific, written prior +permission. Fuji Xerox, FUJITSU LIMITED make no representations +about the suitability of this software for any purpose. +It is provided "as is" without express or implied warranty. + +FUJI XEROX, FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJI XEROX, +FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA +OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 2006 Josh Triplett + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + + ---------------------------------------- + +(c) Copyright 1996 by Sebastien Marineau and Holger Veit + + + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +HOLGER VEIT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +Except as contained in this notice, the name of Sebastien Marineau or Holger Veit +shall not be used in advertising or otherwise to promote the sale, use or other +dealings in this Software without prior written authorization from Holger Veit or +Sebastien Marineau. + + ---------------------------------------- + +Copyright 1990, 1991 by OMRON Corporation, NTT Software Corporation, + and Nippon Telegraph and Telephone Corporation +Copyright 1991 by the Open Software Foundation +Copyright 1993 by the TOSHIBA Corp. +Copyright 1993, 1994 by Sony Corporation +Copyright 1993, 1994 by the FUJITSU LIMITED + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the names of OMRON, NTT Software, NTT, Open +Software Foundation, and Sony Corporation not be used in advertising +or publicity pertaining to distribution of the software without specific, +written prior permission. OMRON, NTT Software, NTT, Open Software +Foundation, and Sony Corporation make no representations about the +suitability of this software for any purpose. It is provided "as is" +without express or implied warranty. + +OMRON, NTT SOFTWARE, NTT, OPEN SOFTWARE FOUNDATION, AND SONY +CORPORATION DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT +SHALL OMRON, NTT SOFTWARE, NTT, OPEN SOFTWARE FOUNDATION, OR SONY +CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright 2000 by Bruno Haible + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of Bruno Haible not +be used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. Bruno Haible +makes no representations about the suitability of this software for +any purpose. It is provided "as is" without express or implied +warranty. + +Bruno Haible DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN +NO EVENT SHALL Bruno Haible BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE +OR PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright © 2003 Keith Packard + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of Keith Packard not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. Keith Packard makes no +representations about the suitability of this software for any purpose. It +is provided "as is" without express or implied warranty. + +KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------- + +Copyright (c) 2007-2009, Troy D. Hanson +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + ---------------------------------------- + +Copyright 1992, 1993 by TOSHIBA Corp. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, provided +that the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of TOSHIBA not be used in advertising +or publicity pertaining to distribution of the software without specific, +written prior permission. TOSHIBA make no representations about the +suitability of this software for any purpose. It is provided "as is" +without express or implied warranty. + +TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + + + ---------------------------------------- + +Copyright IBM Corporation 1993 + +All Rights Reserved + +License to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of IBM not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS, AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS, IN NO EVENT SHALL +IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + + ---------------------------------------- + +Copyright 1990, 1991 by OMRON Corporation, NTT Software Corporation, + and Nippon Telegraph and Telephone Corporation + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the names of OMRON, NTT Software, and NTT +not be used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. OMRON, NTT Software, +and NTT make no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +OMRON, NTT SOFTWARE, AND NTT, DISCLAIM ALL WARRANTIES WITH REGARD +TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS, IN NO EVENT SHALL OMRON, NTT SOFTWARE, OR NTT, BE +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +--- licenses/LICENSE.libXau.txt --- +Copyright 1988, 1993, 1994, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from The Open Group. + +--- licenses/LICENSE.libedit.txt --- +Copyright (c) 1992, 1993 + The Regents of the University of California. All rights reserved. + +This code is derived from software contributed to Berkeley by +Christos Zoulas of Cornell University. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +--- licenses/LICENSE.libffi.txt --- +libffi - Copyright (c) 1996-2019 Anthony Green, Red Hat, Inc and others. +See source files for details. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +``Software''), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--- licenses/LICENSE.liblzma.txt --- +Copyright (C) The XZ Utils authors and contributors + +Permission to use, copy, modify, and/or distribute this +software for any purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL +THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +--- licenses/LICENSE.libuuid.txt --- +Copyright (C) 1996, 1997 Theodore Ts'o. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, and the entire permission notice in its entirety, + including the disclaimer of warranties. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote + products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF +WHICH ARE HEREBY DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +--- licenses/LICENSE.libxcb.txt --- +Copyright (C) 2001-2006 Bart Massey, Jamey Sharp, and Josh Triplett. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, +sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall +be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the names of the authors +or their institutions shall not be used in advertising or +otherwise to promote the sale, use or other dealings in this +Software without prior written authorization from the +authors. + +--- licenses/LICENSE.mpdecimal.txt --- +Copyright (c) 2008-2020 Stefan Krah. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +--- licenses/LICENSE.ncurses.txt --- +Copyright 2018-2020,2021 Thomas E. Dickey +Copyright 1998-2017,2018 Free Software Foundation, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, distribute with modifications, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR +THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name(s) of the above copyright +holders shall not be used in advertising or otherwise to promote the +sale, use or other dealings in this Software without prior written +authorization. + +-- vile:txtmode fc=72 +-- $Id: COPYING,v 1.10 2021/01/01 09:54:30 tom Exp $ + +--- licenses/LICENSE.openssl-1.1.txt --- + + LICENSE ISSUES + ============== + + The OpenSSL toolkit stays under a double license, i.e. both the conditions of + the OpenSSL License and the original SSLeay license apply to the toolkit. + See below for the actual license texts. + + OpenSSL License + --------------- + +/* ==================================================================== + * Copyright (c) 1998-2019 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + + Original SSLeay License + ----------------------- + +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +--- licenses/LICENSE.openssl-3.txt --- + + Apache License + Version 2.0, January 2004 + https://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + +--- licenses/LICENSE.sqlite.txt --- +All of the code and documentation in SQLite has been dedicated to the public +domain by the authors. All code authors, and representatives of the companies +they work for, have signed affidavits dedicating their contributions to the +public domain and originals of those signed affidavits are stored in a firesafe +at the main offices of Hwaci. Anyone is free to copy, modify, publish, use, +compile, sell, or distribute the original SQLite code, either in source code form +or as a compiled binary, for any purpose, commercial or non-commercial, and by +any means. + +The previous paragraph applies to the deliverable code and documentation in +SQLite - those parts of the SQLite library that you actually bundle and ship +with a larger application. Some scripts used as part of the build process (for +example the "configure" scripts generated by autoconf) might fall under other +open-source licenses. Nothing from these build scripts ever reaches the final +deliverable SQLite library, however, and so the licenses associated with those +scripts should not be a factor in assessing your rights to copy and use the +SQLite library. + +All of the deliverable code in SQLite has been written from scratch. No code has +been taken from other projects or from the open internet. Every line of code can +be traced back to its original author, and all of those authors have public +domain dedications on file. So the SQLite code base is clean and is +uncontaminated with licensed code from other projects. + +--- licenses/LICENSE.tcl.txt --- +This software is copyrighted by the Regents of the University of +California, Sun Microsystems, Inc., Scriptics Corporation, ActiveState +Corporation and other parties. The following terms apply to all files +associated with the software unless explicitly disclaimed in +individual files. + +The authors hereby grant permission to use, copy, modify, distribute, +and license this software and its documentation for any purpose, provided +that existing copyright notices are retained in all copies and that this +notice is included verbatim in any distributions. No written agreement, +license, or royalty fee is required for any of the authorized uses. +Modifications to this software may be copyrighted by their authors +and need not follow the licensing terms described here, provided that +the new terms are clearly indicated on the first page of each file where +they apply. + +IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +MODIFICATIONS. + +GOVERNMENT USE: If you are acquiring this software on behalf of the +U.S. government, the Government shall have only "Restricted Rights" +in the software and related documentation as defined in the Federal +Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you +are acquiring the software on behalf of the Department of Defense, the +software shall be classified as "Commercial Computer Software" and the +Government shall have only "Restricted Rights" as defined in Clause +252.227-7014 (b) (3) of DFARs. Notwithstanding the foregoing, the +authors grant the U.S. Government and others acting in its behalf +permission to use and distribute the software in accordance with the +terms specified in this license. + +--- licenses/LICENSE.tix.txt --- +Copyright (c) 1993-1999 Ioi Kim Lam. +Copyright (c) 2000-2001 Tix Project Group. +Copyright (c) 2004 ActiveState + +This software is copyrighted by the above entities +and other parties. The following terms apply to all files associated +with the software unless explicitly disclaimed in individual files. + +The authors hereby grant permission to use, copy, modify, distribute, +and license this software and its documentation for any purpose, provided +that existing copyright notices are retained in all copies and that this +notice is included verbatim in any distributions. No written agreement, +license, or royalty fee is required for any of the authorized uses. +Modifications to this software may be copyrighted by their authors +and need not follow the licensing terms described here, provided that +the new terms are clearly indicated on the first page of each file where +they apply. + +IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +MODIFICATIONS. + +GOVERNMENT USE: If you are acquiring this software on behalf of the +U.S. government, the Government shall have only "Restricted Rights" +in the software and related documentation as defined in the Federal +Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you +are acquiring the software on behalf of the Department of Defense, the +software shall be classified as "Commercial Computer Software" and the +Government shall have only "Restricted Rights" as defined in Clause +252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the +authors grant the U.S. Government and others acting in its behalf +permission to use and distribute the software in accordance with the +terms specified in this license. + +---------------------------------------------------------------------- + +Parts of this software are based on the Tcl/Tk software copyrighted by +the Regents of the University of California, Sun Microsystems, Inc., +and other parties. The original license terms of the Tcl/Tk software +distribution is included in the file docs/license.tcltk. + +Parts of this software are based on the HTML Library software +copyrighted by Sun Microsystems, Inc. The original license terms of +the HTML Library software distribution is included in the file +docs/license.html_lib. + +--- licenses/LICENSE.zlib.txt --- + + Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + + +============================================================================== + +uv 0.12.18 (Managed Python provider runtime executable downloaded by Pumas; not bundled) +Source: https://github.com/astral-sh/uv/tree/0.12.18 +Declared license: MIT OR Apache-2.0 +--- uv-0.12.18-LICENSE-MIT --- +MIT License + +Copyright (c) 2025 Astral Software Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +--- uv-0.12.18-LICENSE-APACHE --- + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + ============================================================================== SQLite bundled by libsqlite3-sys 0.30.1 diff --git a/docs/release-attribution/0.7.0/inventory.json b/docs/release-attribution/0.7.0/inventory.json index 860253b92..bf17ea2cf 100644 --- a/docs/release-attribution/0.7.0/inventory.json +++ b/docs/release-attribution/0.7.0/inventory.json @@ -6007,6 +6007,278 @@ } ] }, + { + "name": "CPython full archive", + "version": "3.14.7", + "license_declared": "Python-2.0, CNRI-Python", + "source": "https://github.com/astral-sh/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "scope": "Managed Python full-archive notice superset for aarch64-apple-darwin; selected install-only runtime tracked separately", + "texts": [ + { + "path": "licenses/LICENSE.bdb.txt", + "sha256": "3bdff06e69991c94664f2ef5c5f8096f60b7dbec071756ea6cc26b445e06ec5b" + }, + { + "path": "licenses/LICENSE.bzip2.txt", + "sha256": "1f38bbc7caacafd65169276d759c0d88c991b753b643ce35d0e45ea1971dd441" + }, + { + "path": "licenses/LICENSE.cpython.txt", + "sha256": "86e61415828a8b5b06ec8d024e6f086ce155a8b85fd0c419c0ba4dc004e74fdd" + }, + { + "path": "licenses/LICENSE.expat.txt", + "sha256": "122f2c27000472a201d337b9b31f7eb2b52d091b02857061a8880371612d9534" + }, + { + "path": "licenses/LICENSE.libX11.txt", + "sha256": "2daec087a88e7c9b8082557cdeebad5bbb8155a4137472f0b22e269cd99d0c1e" + }, + { + "path": "licenses/LICENSE.libXau.txt", + "sha256": "56abe29bb1d9806a9e04fa9f80fed2c0f18027594df3f098148d814aef6bddfa" + }, + { + "path": "licenses/LICENSE.libedit.txt", + "sha256": "29cea33c32bbc9785142386377915612a2fa786482c46843383384aded2e09b1" + }, + { + "path": "licenses/LICENSE.libffi.txt", + "sha256": "deaf3a42effb551a5b140fa9afefed183a27f1341c6d1bf430d106a5e6931fc0" + }, + { + "path": "licenses/LICENSE.liblzma.txt", + "sha256": "9a4062de0a2c388a98cf35a35d348b62fa97c838a71c3c28ee1a2d7d0a565b02" + }, + { + "path": "licenses/LICENSE.libuuid.txt", + "sha256": "122ee1f7e258f2c3c0e538a75c037684f420454bf3850ddc74ce750bbf5fe86b" + }, + { + "path": "licenses/LICENSE.libxcb.txt", + "sha256": "c5ffbfeaa501071ceeb97b7de2c0d703fdaa35de01c0fb6cbac1c28453a3e9fd" + }, + { + "path": "licenses/LICENSE.mpdecimal.txt", + "sha256": "669512af7219f58be03a398766d7c9da11a3b3df9d3f05cb74c5ceca25c8da3b" + }, + { + "path": "licenses/LICENSE.ncurses.txt", + "sha256": "87a4c4442337b8968ef956031c406b74f9cb7149b7ba87311bdaba534816201c" + }, + { + "path": "licenses/LICENSE.openssl-1.1.txt", + "sha256": "9c04cce50c4989d5601dd8b07f6ab922c40388b66ac736c9007cb1ed9d9dd560" + }, + { + "path": "licenses/LICENSE.openssl-3.txt", + "sha256": "7d5450cb2d142651b8afa315b5f238efc805dad827d91ba367d8516bc9d49e7a" + }, + { + "path": "licenses/LICENSE.sqlite.txt", + "sha256": "38bef3d28b24f145ea293bd3b6eb4b20396982abc8303128fb493986ea5bc719" + }, + { + "path": "licenses/LICENSE.tcl.txt", + "sha256": "c0a69a2bfd757361ec7e6143973b103c90409316b49e9c88db26ad6388e79f16" + }, + { + "path": "licenses/LICENSE.tix.txt", + "sha256": "3ac5cdd0bef6c43ce34c6a7ced452081d9e5a0bf94082b9f9147d23ec9e214f5" + }, + { + "path": "licenses/LICENSE.zlib.txt", + "sha256": "818922b2620f12801a12bf78e399644a30990e66824abd8ca8ec24d451d6f92c" + } + ] + }, + { + "name": "CPython full archive", + "version": "3.14.7", + "license_declared": "Python-2.0, CNRI-Python", + "source": "https://github.com/astral-sh/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-x86_64-pc-windows-msvc-pgo-full.tar.zst", + "scope": "Managed Python full-archive notice superset for x86_64-pc-windows-msvc; selected install-only runtime tracked separately", + "texts": [ + { + "path": "licenses/LICENSE.bdb.txt", + "sha256": "8f2d533ab34899499d5b07f209854b101b17dba2c69f3251860aecf3e4005faa" + }, + { + "path": "licenses/LICENSE.bzip2.txt", + "sha256": "bd5628cc76fb0ebf9c657d1dd4d1a240a1a7b216c31663e7bbf1131c0b70a910" + }, + { + "path": "licenses/LICENSE.cpython.txt", + "sha256": "8fe98bf9822926d854f56ffd8d97877d8b942617aa44eb7ea77fd99e22f2537e" + }, + { + "path": "licenses/LICENSE.expat.txt", + "sha256": "8a9cfe4b5924f4b25881aa0c9f5e4561c5f31065d0c4a13cdcdbcf917edf39aa" + }, + { + "path": "licenses/LICENSE.libX11.txt", + "sha256": "f353accfe2976df31ea297a77d1d454bd51ef6be8c3df39bd6aca95901579357" + }, + { + "path": "licenses/LICENSE.libXau.txt", + "sha256": "cec808cd2163fccdc8de4a91d526490777afbaeea060e1168c40a804694b7444" + }, + { + "path": "licenses/LICENSE.libedit.txt", + "sha256": "d9932ccdd42eccf6cdded7bcb35b088e64cfc7c24d355af2cc0d02edb6b637d3" + }, + { + "path": "licenses/LICENSE.libffi.txt", + "sha256": "9afb8970cd29fc1031fa647278e4bef613399e2e3468a1e3a397f4d158c6101c" + }, + { + "path": "licenses/LICENSE.liblzma.txt", + "sha256": "d87d218dd908b3243ec4cbc72af400e5b7437513ea9d9229291d0812b8464fec" + }, + { + "path": "licenses/LICENSE.libuuid.txt", + "sha256": "cbccaa3efe07a9a602751375085be572d4410a250b996716fbe8c5255c7ec6f2" + }, + { + "path": "licenses/LICENSE.libxcb.txt", + "sha256": "29a9539190e6de1af5fd06a9139c7103137cd1f9290b08c7b11bce89c01c14d2" + }, + { + "path": "licenses/LICENSE.mpdecimal.txt", + "sha256": "f094277cd46e1f6e4d87916cc4b51e22f613d45eb81f48231c3cb7caf8fc8a6a" + }, + { + "path": "licenses/LICENSE.ncurses.txt", + "sha256": "4f571cad3ea6c888bf0a7092e5b215dddb3142e9e3f1857fd5fac6cf13d345d7" + }, + { + "path": "licenses/LICENSE.openssl-1.1.txt", + "sha256": "ad89e3fed746413af1d34d5353978ee1520cedd361c853f8022e7bb210ac6b31" + }, + { + "path": "licenses/LICENSE.openssl-3.txt", + "sha256": "ed72ce2b51ee58f117e5a021e2e04af158857f40269fbc03491f0b2a99dbcc96" + }, + { + "path": "licenses/LICENSE.sqlite.txt", + "sha256": "d8eb9aba7ef6b5ed06cb3ec19a7242316af2e5933c638eb67fb781c13884e01d" + }, + { + "path": "licenses/LICENSE.tcl.txt", + "sha256": "41613eabfc08921a7da9c4bfd7f3ce5d5406f55214b253d89f392ed86eebeb8f" + }, + { + "path": "licenses/LICENSE.tix.txt", + "sha256": "8cdff3addb9e9eb108c78e2cf5e05f26b216c098304945733bbec382b2eaef66" + }, + { + "path": "licenses/LICENSE.zlib.txt", + "sha256": "365e36720db366054863235aea5d6f440142ab968834bfaf81fa9d187c99b9b8" + } + ] + }, + { + "name": "CPython full archive", + "version": "3.14.7", + "license_declared": "Python-2.0, CNRI-Python", + "source": "https://github.com/astral-sh/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "scope": "Managed Python full-archive notice superset for x86_64-unknown-linux-gnu; selected install-only runtime tracked separately", + "texts": [ + { + "path": "licenses/LICENSE.bdb.txt", + "sha256": "3bdff06e69991c94664f2ef5c5f8096f60b7dbec071756ea6cc26b445e06ec5b" + }, + { + "path": "licenses/LICENSE.bzip2.txt", + "sha256": "1f38bbc7caacafd65169276d759c0d88c991b753b643ce35d0e45ea1971dd441" + }, + { + "path": "licenses/LICENSE.cpython.txt", + "sha256": "86e61415828a8b5b06ec8d024e6f086ce155a8b85fd0c419c0ba4dc004e74fdd" + }, + { + "path": "licenses/LICENSE.expat.txt", + "sha256": "122f2c27000472a201d337b9b31f7eb2b52d091b02857061a8880371612d9534" + }, + { + "path": "licenses/LICENSE.libX11.txt", + "sha256": "2daec087a88e7c9b8082557cdeebad5bbb8155a4137472f0b22e269cd99d0c1e" + }, + { + "path": "licenses/LICENSE.libXau.txt", + "sha256": "56abe29bb1d9806a9e04fa9f80fed2c0f18027594df3f098148d814aef6bddfa" + }, + { + "path": "licenses/LICENSE.libedit.txt", + "sha256": "29cea33c32bbc9785142386377915612a2fa786482c46843383384aded2e09b1" + }, + { + "path": "licenses/LICENSE.libffi.txt", + "sha256": "deaf3a42effb551a5b140fa9afefed183a27f1341c6d1bf430d106a5e6931fc0" + }, + { + "path": "licenses/LICENSE.liblzma.txt", + "sha256": "9a4062de0a2c388a98cf35a35d348b62fa97c838a71c3c28ee1a2d7d0a565b02" + }, + { + "path": "licenses/LICENSE.libuuid.txt", + "sha256": "122ee1f7e258f2c3c0e538a75c037684f420454bf3850ddc74ce750bbf5fe86b" + }, + { + "path": "licenses/LICENSE.libxcb.txt", + "sha256": "c5ffbfeaa501071ceeb97b7de2c0d703fdaa35de01c0fb6cbac1c28453a3e9fd" + }, + { + "path": "licenses/LICENSE.mpdecimal.txt", + "sha256": "669512af7219f58be03a398766d7c9da11a3b3df9d3f05cb74c5ceca25c8da3b" + }, + { + "path": "licenses/LICENSE.ncurses.txt", + "sha256": "87a4c4442337b8968ef956031c406b74f9cb7149b7ba87311bdaba534816201c" + }, + { + "path": "licenses/LICENSE.openssl-1.1.txt", + "sha256": "9c04cce50c4989d5601dd8b07f6ab922c40388b66ac736c9007cb1ed9d9dd560" + }, + { + "path": "licenses/LICENSE.openssl-3.txt", + "sha256": "7d5450cb2d142651b8afa315b5f238efc805dad827d91ba367d8516bc9d49e7a" + }, + { + "path": "licenses/LICENSE.sqlite.txt", + "sha256": "38bef3d28b24f145ea293bd3b6eb4b20396982abc8303128fb493986ea5bc719" + }, + { + "path": "licenses/LICENSE.tcl.txt", + "sha256": "c0a69a2bfd757361ec7e6143973b103c90409316b49e9c88db26ad6388e79f16" + }, + { + "path": "licenses/LICENSE.tix.txt", + "sha256": "3ac5cdd0bef6c43ce34c6a7ced452081d9e5a0bf94082b9f9147d23ec9e214f5" + }, + { + "path": "licenses/LICENSE.zlib.txt", + "sha256": "818922b2620f12801a12bf78e399644a30990e66824abd8ca8ec24d451d6f92c" + } + ] + }, + { + "name": "uv", + "version": "0.12.18", + "license_declared": "MIT OR Apache-2.0", + "source": "https://github.com/astral-sh/uv/tree/0.12.18", + "scope": "Managed Python provider runtime executable downloaded by Pumas; not bundled", + "texts": [ + { + "path": "uv-0.12.18-LICENSE-MIT", + "sha256": "860e3d7a86b84e6a7012c7a635fc64df475cebc6cce34dfeb73a5982ec58176c" + }, + { + "path": "uv-0.12.18-LICENSE-APACHE", + "sha256": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4" + } + ] + }, { "name": "Electron", "version": "43.7.0", @@ -6066,17 +6338,372 @@ "file": "pyke-ort-artifacts-LICENSE", "source": "https://github.com/pykeio/ort-artifacts/blob/f267947bba782f315bd667b9b2a607ab51363445/LICENSE", "sha256": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30" + }, + { + "file": "uv-0.12.18-LICENSE-MIT", + "source": "https://raw.githubusercontent.com/astral-sh/uv/0.12.18/LICENSE-MIT", + "sha256": "860e3d7a86b84e6a7012c7a635fc64df475cebc6cce34dfeb73a5982ec58176c" + }, + { + "file": "uv-0.12.18-LICENSE-APACHE", + "source": "https://raw.githubusercontent.com/astral-sh/uv/0.12.18/LICENSE-APACHE", + "sha256": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4" + } + ], + "managed_python": [ + { + "target": "aarch64-apple-darwin", + "runtime_report": "docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-cpu-rpc-restart-acceptance/runtime.json", + "manifest": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive-manifest.json", + "catalog_key": "cpython-3.14.7-macos-aarch64-none", + "selected_install_only_url": "https://releases.astral.sh/github/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-aarch64-apple-darwin-install_only_stripped.tar.gz", + "provider_name": "uv", + "provider_version": "0.12.18", + "provider_archive_sha256": "cf40e0c6a202190ccd9e0406dcfdd5b2d6668a9a5c779b17948963df32aafe5b", + "full_archive_url": "https://github.com/astral-sh/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "full_archive_sha256": "185fa676e14b648bd736ce7f20f9b11e201131b3216ec5a39d4ecd8ab8a71112", + "python_json": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/PYTHON.json", + "legal_files": [ + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.bdb.txt", + "sha256": "3bdff06e69991c94664f2ef5c5f8096f60b7dbec071756ea6cc26b445e06ec5b" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.bzip2.txt", + "sha256": "1f38bbc7caacafd65169276d759c0d88c991b753b643ce35d0e45ea1971dd441" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.cpython.txt", + "sha256": "86e61415828a8b5b06ec8d024e6f086ce155a8b85fd0c419c0ba4dc004e74fdd" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.expat.txt", + "sha256": "122f2c27000472a201d337b9b31f7eb2b52d091b02857061a8880371612d9534" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libX11.txt", + "sha256": "2daec087a88e7c9b8082557cdeebad5bbb8155a4137472f0b22e269cd99d0c1e" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libXau.txt", + "sha256": "56abe29bb1d9806a9e04fa9f80fed2c0f18027594df3f098148d814aef6bddfa" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libedit.txt", + "sha256": "29cea33c32bbc9785142386377915612a2fa786482c46843383384aded2e09b1" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libffi.txt", + "sha256": "deaf3a42effb551a5b140fa9afefed183a27f1341c6d1bf430d106a5e6931fc0" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.liblzma.txt", + "sha256": "9a4062de0a2c388a98cf35a35d348b62fa97c838a71c3c28ee1a2d7d0a565b02" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libuuid.txt", + "sha256": "122ee1f7e258f2c3c0e538a75c037684f420454bf3850ddc74ce750bbf5fe86b" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libxcb.txt", + "sha256": "c5ffbfeaa501071ceeb97b7de2c0d703fdaa35de01c0fb6cbac1c28453a3e9fd" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.mpdecimal.txt", + "sha256": "669512af7219f58be03a398766d7c9da11a3b3df9d3f05cb74c5ceca25c8da3b" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.ncurses.txt", + "sha256": "87a4c4442337b8968ef956031c406b74f9cb7149b7ba87311bdaba534816201c" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.openssl-1.1.txt", + "sha256": "9c04cce50c4989d5601dd8b07f6ab922c40388b66ac736c9007cb1ed9d9dd560" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.openssl-3.txt", + "sha256": "7d5450cb2d142651b8afa315b5f238efc805dad827d91ba367d8516bc9d49e7a" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.sqlite.txt", + "sha256": "38bef3d28b24f145ea293bd3b6eb4b20396982abc8303128fb493986ea5bc719" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.tcl.txt", + "sha256": "c0a69a2bfd757361ec7e6143973b103c90409316b49e9c88db26ad6388e79f16" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.tix.txt", + "sha256": "3ac5cdd0bef6c43ce34c6a7ced452081d9e5a0bf94082b9f9147d23ec9e214f5" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.zlib.txt", + "sha256": "818922b2620f12801a12bf78e399644a30990e66824abd8ca8ec24d451d6f92c" + } + ] + }, + { + "target": "x86_64-pc-windows-msvc", + "runtime_report": "docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-cpu-rpc-restart-acceptance/runtime.json", + "manifest": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive-manifest.json", + "catalog_key": "cpython-3.14.7-windows-x86_64-none", + "selected_install_only_url": "https://releases.astral.sh/github/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-x86_64-pc-windows-msvc-install_only_stripped.tar.gz", + "provider_name": "uv", + "provider_version": "0.12.18", + "provider_archive_sha256": "cae6a3bc25239f83dffb467a4b180508d9da23986c04639ebfa44e43e6a84bff", + "full_archive_url": "https://github.com/astral-sh/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-x86_64-pc-windows-msvc-pgo-full.tar.zst", + "full_archive_sha256": "5363ec4aab59c24417f9877217aae95ca17f9ae6eb99c3bbfb25e4a76dcadafe", + "python_json": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/PYTHON.json", + "legal_files": [ + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.bdb.txt", + "sha256": "8f2d533ab34899499d5b07f209854b101b17dba2c69f3251860aecf3e4005faa" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.bzip2.txt", + "sha256": "bd5628cc76fb0ebf9c657d1dd4d1a240a1a7b216c31663e7bbf1131c0b70a910" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.cpython.txt", + "sha256": "8fe98bf9822926d854f56ffd8d97877d8b942617aa44eb7ea77fd99e22f2537e" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.expat.txt", + "sha256": "8a9cfe4b5924f4b25881aa0c9f5e4561c5f31065d0c4a13cdcdbcf917edf39aa" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libX11.txt", + "sha256": "f353accfe2976df31ea297a77d1d454bd51ef6be8c3df39bd6aca95901579357" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libXau.txt", + "sha256": "cec808cd2163fccdc8de4a91d526490777afbaeea060e1168c40a804694b7444" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libedit.txt", + "sha256": "d9932ccdd42eccf6cdded7bcb35b088e64cfc7c24d355af2cc0d02edb6b637d3" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libffi.txt", + "sha256": "9afb8970cd29fc1031fa647278e4bef613399e2e3468a1e3a397f4d158c6101c" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.liblzma.txt", + "sha256": "d87d218dd908b3243ec4cbc72af400e5b7437513ea9d9229291d0812b8464fec" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libuuid.txt", + "sha256": "cbccaa3efe07a9a602751375085be572d4410a250b996716fbe8c5255c7ec6f2" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libxcb.txt", + "sha256": "29a9539190e6de1af5fd06a9139c7103137cd1f9290b08c7b11bce89c01c14d2" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.mpdecimal.txt", + "sha256": "f094277cd46e1f6e4d87916cc4b51e22f613d45eb81f48231c3cb7caf8fc8a6a" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.ncurses.txt", + "sha256": "4f571cad3ea6c888bf0a7092e5b215dddb3142e9e3f1857fd5fac6cf13d345d7" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.openssl-1.1.txt", + "sha256": "ad89e3fed746413af1d34d5353978ee1520cedd361c853f8022e7bb210ac6b31" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.openssl-3.txt", + "sha256": "ed72ce2b51ee58f117e5a021e2e04af158857f40269fbc03491f0b2a99dbcc96" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.sqlite.txt", + "sha256": "d8eb9aba7ef6b5ed06cb3ec19a7242316af2e5933c638eb67fb781c13884e01d" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.tcl.txt", + "sha256": "41613eabfc08921a7da9c4bfd7f3ce5d5406f55214b253d89f392ed86eebeb8f" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.tix.txt", + "sha256": "8cdff3addb9e9eb108c78e2cf5e05f26b216c098304945733bbec382b2eaef66" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.zlib.txt", + "sha256": "365e36720db366054863235aea5d6f440142ab968834bfaf81fa9d187c99b9b8" + } + ] + }, + { + "target": "x86_64-unknown-linux-gnu", + "runtime_report": "docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-restart-acceptance/runtime.json", + "manifest": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive-manifest.json", + "catalog_key": "cpython-3.14.7-linux-x86_64-gnu", + "selected_install_only_url": "https://releases.astral.sh/github/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz", + "provider_name": "uv", + "provider_version": "0.12.18", + "provider_archive_sha256": "89eadd7c76fc063887959510d5ba0ab1264dfd5f1143b925ddb73021a40acf16", + "full_archive_url": "https://github.com/astral-sh/python-build-standalone/releases/download/20260901/cpython-3.14.7%2B20260901-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "full_archive_sha256": "46a9e98d2c7fd2c5b9ca67510b5a0699f5ccad5fb750957961c22c52e07b6cb0", + "python_json": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/PYTHON.json", + "legal_files": [ + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.bdb.txt", + "sha256": "3bdff06e69991c94664f2ef5c5f8096f60b7dbec071756ea6cc26b445e06ec5b" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.bzip2.txt", + "sha256": "1f38bbc7caacafd65169276d759c0d88c991b753b643ce35d0e45ea1971dd441" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.cpython.txt", + "sha256": "86e61415828a8b5b06ec8d024e6f086ce155a8b85fd0c419c0ba4dc004e74fdd" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.expat.txt", + "sha256": "122f2c27000472a201d337b9b31f7eb2b52d091b02857061a8880371612d9534" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libX11.txt", + "sha256": "2daec087a88e7c9b8082557cdeebad5bbb8155a4137472f0b22e269cd99d0c1e" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libXau.txt", + "sha256": "56abe29bb1d9806a9e04fa9f80fed2c0f18027594df3f098148d814aef6bddfa" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libedit.txt", + "sha256": "29cea33c32bbc9785142386377915612a2fa786482c46843383384aded2e09b1" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libffi.txt", + "sha256": "deaf3a42effb551a5b140fa9afefed183a27f1341c6d1bf430d106a5e6931fc0" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.liblzma.txt", + "sha256": "9a4062de0a2c388a98cf35a35d348b62fa97c838a71c3c28ee1a2d7d0a565b02" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libuuid.txt", + "sha256": "122ee1f7e258f2c3c0e538a75c037684f420454bf3850ddc74ce750bbf5fe86b" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libxcb.txt", + "sha256": "c5ffbfeaa501071ceeb97b7de2c0d703fdaa35de01c0fb6cbac1c28453a3e9fd" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.mpdecimal.txt", + "sha256": "669512af7219f58be03a398766d7c9da11a3b3df9d3f05cb74c5ceca25c8da3b" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.ncurses.txt", + "sha256": "87a4c4442337b8968ef956031c406b74f9cb7149b7ba87311bdaba534816201c" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.openssl-1.1.txt", + "sha256": "9c04cce50c4989d5601dd8b07f6ab922c40388b66ac736c9007cb1ed9d9dd560" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.openssl-3.txt", + "sha256": "7d5450cb2d142651b8afa315b5f238efc805dad827d91ba367d8516bc9d49e7a" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.sqlite.txt", + "sha256": "38bef3d28b24f145ea293bd3b6eb4b20396982abc8303128fb493986ea5bc719" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.tcl.txt", + "sha256": "c0a69a2bfd757361ec7e6143973b103c90409316b49e9c88db26ad6388e79f16" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.tix.txt", + "sha256": "3ac5cdd0bef6c43ce34c6a7ced452081d9e5a0bf94082b9f9147d23ec9e214f5" + }, + { + "path": "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.zlib.txt", + "sha256": "818922b2620f12801a12bf78e399644a30990e66824abd8ca8ec24d451d6f92c" + } + ] } ], "input_sha256": { - "rust/Cargo.lock": "8a6a244244d3bc5fbc91bfd5425ce24d1d329b356367733a6f402d90c413c11e", - "rust/Cargo.toml": "1f8782df439d528763c3b9780d585d62d8accf0cc2b7b5c3752d5000ed000287", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive-manifest.json": "9e22bb390cc8af89284c421a48154462c234fd879fd6a58d79cbe7b1ebd594ea", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/PYTHON.json": "0bb1b7ad30bac3dbd00ec6f8cab3b07dbd0ab727980fa6ac4f4947eb45ab831d", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.bdb.txt": "3bdff06e69991c94664f2ef5c5f8096f60b7dbec071756ea6cc26b445e06ec5b", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.bzip2.txt": "1f38bbc7caacafd65169276d759c0d88c991b753b643ce35d0e45ea1971dd441", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.cpython.txt": "86e61415828a8b5b06ec8d024e6f086ce155a8b85fd0c419c0ba4dc004e74fdd", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.expat.txt": "122f2c27000472a201d337b9b31f7eb2b52d091b02857061a8880371612d9534", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libX11.txt": "2daec087a88e7c9b8082557cdeebad5bbb8155a4137472f0b22e269cd99d0c1e", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libXau.txt": "56abe29bb1d9806a9e04fa9f80fed2c0f18027594df3f098148d814aef6bddfa", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libedit.txt": "29cea33c32bbc9785142386377915612a2fa786482c46843383384aded2e09b1", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libffi.txt": "deaf3a42effb551a5b140fa9afefed183a27f1341c6d1bf430d106a5e6931fc0", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.liblzma.txt": "9a4062de0a2c388a98cf35a35d348b62fa97c838a71c3c28ee1a2d7d0a565b02", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libuuid.txt": "122ee1f7e258f2c3c0e538a75c037684f420454bf3850ddc74ce750bbf5fe86b", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libxcb.txt": "c5ffbfeaa501071ceeb97b7de2c0d703fdaa35de01c0fb6cbac1c28453a3e9fd", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.mpdecimal.txt": "669512af7219f58be03a398766d7c9da11a3b3df9d3f05cb74c5ceca25c8da3b", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.ncurses.txt": "87a4c4442337b8968ef956031c406b74f9cb7149b7ba87311bdaba534816201c", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.openssl-1.1.txt": "9c04cce50c4989d5601dd8b07f6ab922c40388b66ac736c9007cb1ed9d9dd560", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.openssl-3.txt": "7d5450cb2d142651b8afa315b5f238efc805dad827d91ba367d8516bc9d49e7a", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.sqlite.txt": "38bef3d28b24f145ea293bd3b6eb4b20396982abc8303128fb493986ea5bc719", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.tcl.txt": "c0a69a2bfd757361ec7e6143973b103c90409316b49e9c88db26ad6388e79f16", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.tix.txt": "3ac5cdd0bef6c43ce34c6a7ced452081d9e5a0bf94082b9f9147d23ec9e214f5", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/linux-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.zlib.txt": "818922b2620f12801a12bf78e399644a30990e66824abd8ca8ec24d451d6f92c", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive-manifest.json": "7b3e139c346cde9976d06b9f366079c0e1fd40d65c59aaf1caa4e3fe9c17fdbb", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/PYTHON.json": "469cdc82612064f19338a524bc8eedbce8f6f411e0080c4dc1a5ccf30c538a71", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.bdb.txt": "3bdff06e69991c94664f2ef5c5f8096f60b7dbec071756ea6cc26b445e06ec5b", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.bzip2.txt": "1f38bbc7caacafd65169276d759c0d88c991b753b643ce35d0e45ea1971dd441", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.cpython.txt": "86e61415828a8b5b06ec8d024e6f086ce155a8b85fd0c419c0ba4dc004e74fdd", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.expat.txt": "122f2c27000472a201d337b9b31f7eb2b52d091b02857061a8880371612d9534", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libX11.txt": "2daec087a88e7c9b8082557cdeebad5bbb8155a4137472f0b22e269cd99d0c1e", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libXau.txt": "56abe29bb1d9806a9e04fa9f80fed2c0f18027594df3f098148d814aef6bddfa", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libedit.txt": "29cea33c32bbc9785142386377915612a2fa786482c46843383384aded2e09b1", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libffi.txt": "deaf3a42effb551a5b140fa9afefed183a27f1341c6d1bf430d106a5e6931fc0", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.liblzma.txt": "9a4062de0a2c388a98cf35a35d348b62fa97c838a71c3c28ee1a2d7d0a565b02", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libuuid.txt": "122ee1f7e258f2c3c0e538a75c037684f420454bf3850ddc74ce750bbf5fe86b", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libxcb.txt": "c5ffbfeaa501071ceeb97b7de2c0d703fdaa35de01c0fb6cbac1c28453a3e9fd", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.mpdecimal.txt": "669512af7219f58be03a398766d7c9da11a3b3df9d3f05cb74c5ceca25c8da3b", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.ncurses.txt": "87a4c4442337b8968ef956031c406b74f9cb7149b7ba87311bdaba534816201c", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.openssl-1.1.txt": "9c04cce50c4989d5601dd8b07f6ab922c40388b66ac736c9007cb1ed9d9dd560", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.openssl-3.txt": "7d5450cb2d142651b8afa315b5f238efc805dad827d91ba367d8516bc9d49e7a", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.sqlite.txt": "38bef3d28b24f145ea293bd3b6eb4b20396982abc8303128fb493986ea5bc719", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.tcl.txt": "c0a69a2bfd757361ec7e6143973b103c90409316b49e9c88db26ad6388e79f16", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.tix.txt": "3ac5cdd0bef6c43ce34c6a7ced452081d9e5a0bf94082b9f9147d23ec9e214f5", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/macos-arm64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.zlib.txt": "818922b2620f12801a12bf78e399644a30990e66824abd8ca8ec24d451d6f92c", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive-manifest.json": "fbb188f4a1ec0ae015905abed25c38d1e2fa7fab52ea0733f3a67f740f092c63", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/PYTHON.json": "621218c8ca0ff0d9a92ba0533a2d460d6832cc277286852800e605e8062ec401", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.bdb.txt": "8f2d533ab34899499d5b07f209854b101b17dba2c69f3251860aecf3e4005faa", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.bzip2.txt": "bd5628cc76fb0ebf9c657d1dd4d1a240a1a7b216c31663e7bbf1131c0b70a910", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.cpython.txt": "8fe98bf9822926d854f56ffd8d97877d8b942617aa44eb7ea77fd99e22f2537e", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.expat.txt": "8a9cfe4b5924f4b25881aa0c9f5e4561c5f31065d0c4a13cdcdbcf917edf39aa", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libX11.txt": "f353accfe2976df31ea297a77d1d454bd51ef6be8c3df39bd6aca95901579357", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libXau.txt": "cec808cd2163fccdc8de4a91d526490777afbaeea060e1168c40a804694b7444", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libedit.txt": "d9932ccdd42eccf6cdded7bcb35b088e64cfc7c24d355af2cc0d02edb6b637d3", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libffi.txt": "9afb8970cd29fc1031fa647278e4bef613399e2e3468a1e3a397f4d158c6101c", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.liblzma.txt": "d87d218dd908b3243ec4cbc72af400e5b7437513ea9d9229291d0812b8464fec", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libuuid.txt": "cbccaa3efe07a9a602751375085be572d4410a250b996716fbe8c5255c7ec6f2", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.libxcb.txt": "29a9539190e6de1af5fd06a9139c7103137cd1f9290b08c7b11bce89c01c14d2", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.mpdecimal.txt": "f094277cd46e1f6e4d87916cc4b51e22f613d45eb81f48231c3cb7caf8fc8a6a", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.ncurses.txt": "4f571cad3ea6c888bf0a7092e5b215dddb3142e9e3f1857fd5fac6cf13d345d7", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.openssl-1.1.txt": "ad89e3fed746413af1d34d5353978ee1520cedd361c853f8022e7bb210ac6b31", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.openssl-3.txt": "ed72ce2b51ee58f117e5a021e2e04af158857f40269fbc03491f0b2a99dbcc96", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.sqlite.txt": "d8eb9aba7ef6b5ed06cb3ec19a7242316af2e5933c638eb67fb781c13884e01d", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.tcl.txt": "41613eabfc08921a7da9c4bfd7f3ce5d5406f55214b253d89f392ed86eebeb8f", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.tix.txt": "8cdff3addb9e9eb108c78e2cf5e05f26b216c098304945733bbec382b2eaef66", + "docs/plans/torch-cross-platform-runtime-management/reports/managed-python-license-collection/windows-x86_64-cpython-3.14.7/managed-python-licenses/full-archive/licenses/LICENSE.zlib.txt": "365e36720db366054863235aea5d6f440142ab968834bfaf81fa9d187c99b9b8", + "docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-linux-cpu-rpc-restart-acceptance/runtime.json": "d8b9826efc0aa5fedd0353f5227b1001cfe6bda96287ff3136b81b513c71e104", + "docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-macos-cpu-rpc-restart-acceptance/runtime.json": "a280a955f040983398474af0c34f92e9172fc3c69ef22f7422ac990ed0554e26", + "docs/plans/torch-cross-platform-runtime-management/reports/v2.14.0-windows-cpu-rpc-restart-acceptance/runtime.json": "3e2f6e67e3a4492c01232778191871e9f39543f02996349f055272f2d19fbb89", + "electron/package.json": "1f2b68e5819cbea84a2d8f25bbdda5d8288b3c1bf90a52162dc414c5938d72d8", + "frontend/package.json": "0f3d0d26b1155cdabd7a5b1f93d2b99aff64b70105760284343adeb1afb6ca2e", + "pnpm-lock.yaml": "8ef64f92ef3734992ce825b3253a6edef6586cf87b0a22494096bb12b9c86304", + "rust/Cargo.lock": "ec83a541f165ac6161d4f26b220152cebe422c594405a9dc982952ddef195927", + "rust/Cargo.toml": "c81fc6cbbe7b8a371f7492cb08b8715cf567ba9ec5321f19ffc1a1b8df50fd28", + "rust/crates/pumas-app-manager/Cargo.toml": "2974043227b88401adef73f0706344c804f9aa1447f49ff8c7ed19ddf66e2a8e", + "rust/crates/pumas-app-manager/src/version_manager/managed_python.rs": "e6a33e5febf57a21dee80f87281fe4e5ae34f8fd2a07956c0f55eab3038eb653", "rust/crates/pumas-core/Cargo.toml": "920dfa71dc7160c14c753b656d16f65ad2b3fcdc7cbe1c56525e195588897022", "rust/crates/pumas-rpc/Cargo.toml": "b51fc102e08bf9ba72cbec544cd8b933171031078b1ba273b289a6f4c5cf981a", - "rust/crates/pumas-app-manager/Cargo.toml": "d5c9c33758a64d5db0d379abba14db300788977e5bae1957d44ff7ea32702c70", - "pnpm-lock.yaml": "8ef64f92ef3734992ce825b3253a6edef6586cf87b0a22494096bb12b9c86304", - "electron/package.json": "1f2b68e5819cbea84a2d8f25bbdda5d8288b3c1bf90a52162dc414c5938d72d8", - "frontend/package.json": "0f3d0d26b1155cdabd7a5b1f93d2b99aff64b70105760284343adeb1afb6ca2e" + "scripts/release/artifact-plan.json": "d5e4a2700728ba61cabca36d727efd477d716f3b50cc90fa9ce7f5e7959c7b0c", + "scripts/release/licenses/managed-python-sources.json": "eabda4e2a25a92cfa8610865e79d11a50836930f53098efe89dd90778c4212ca", + "scripts/release/torch-managed-python-acceptance.py": "1ddb8f7ff8433750a49e855c2392eb701a0616619ef2d241e3f4159d454b8ac9" }, - "notices_sha256": "e4fca768460b0db777f4a2f226f5f20a71a9d0bf349a4aab5cf89fb1581fdcd2" + "notices_sha256": "b1631dab130001c76f70f116c2099bae0b87b8ba67d2f110c2f5bae7e465ef89" } diff --git a/electron/src/generated/desktop-contract.ts b/electron/src/generated/desktop-contract.ts index eb3e65bad..ae8ff956d 100644 --- a/electron/src/generated/desktop-contract.ts +++ b/electron/src/generated/desktop-contract.ts @@ -1,5 +1,5 @@ -// Generated from pumas-rpc contract.rs; SHA256 4f6771f852879c4de52ee8d1e66c25a3bba650bf832d9dbba022b3b8b0b4c75c. DO NOT EDIT. -import { validateAvailableVersionsOutcome, validateBackendStatusOutcome, validateCancelInstallationOutcome, validateCatalogSearchOutcome, validateCheckVersionDependenciesOutcome, validateCheckVersionDependenciesParams, validateConversionCancelledOutcome, validateConversionEnvironmentOutcome, validateConversionListOutcome, validateConversionProgressResponse, validateConversionSetupStartedOutcome, validateConversionSetupStatusOutcome, validateConversionStartedOutcome, validateDownloadIdParams, validateDownloadListOutcome, validateDownloadMutationOutcome, validateDownloadStartedOutcome, validateDownloadStatusOutcome, validateFindTorchAlternativesParams, validateGetBackendSetupParams, validateGetHfDownloadDetailsParams, validateGetReleaseDependenciesOutcome, validateGetReleaseDependenciesParams, validateGetTorchPreviewReportParams, validateGetTorchRuntimeProbeParams, validateGithubCacheStatusOutcome, validateHfDownloadDetailsOutcome, validateInferenceSettingsOutcome, validateInstallVersionDependenciesOutcome, validateInstallVersionDependenciesParams, validateInstallVersionOutcome, validateInstallVersionParams, validateInstallationProgressOutcome, validateInstalledVersionsOutcome, validateLibraryModelMetadataOutcome, validateLinkHealthOutcome, validateModelIndexRefreshOutcome, validateModelsOutcome, validatePartialDownloadOutcome, validatePreviewTorchRuntimeParams, validatePublicError, validateRecoverDownloadParams, validateRemoveVersionOutcome, validateRouterProfileSyncStatus, validateRuntimeLaunchOutcome, validateRuntimeLaunchParams, validateRuntimeRunningOutcome, validateRuntimeStopOutcome, validateSearchCatalogParams, validateSelectedVersionOutcome, validateSetDefaultVersionOutcome, validateSetDefaultVersionParams, validateStartBackendSetupParams, validateStartConversionSetupParams, validateStopRuntimeProfileGenerationOutcome, validateStopRuntimeProfileGenerationParams, validateSuccessOutcome, validateSupportedQuantTypesOutcome, validateSwitchVersionOutcome, validateSwitchVersionParams, validateTorchRuntimePreview, validateTorchRuntimePreviewArtifact, validateTorchRuntimePreviewOutcome, validateTorchRuntimePreviewQualification, validateTorchRuntimePreviewRejectionReason, validateTrialTorchRuntimeOutcome, validateTrialTorchRuntimeParams, validateUpdateInferenceSettingsOutcome, validateUpdateInferenceSettingsParams, validateUpdateModelNotesOutcome, validateUpdateModelNotesParams, validateValidateInstallationsOutcome, validateVersionInfoOutcome, validateVersionStatusOutcome } from './desktop-contract.validators.js'; +// Generated from pumas-rpc contract.rs; SHA256 67dd940c814b877de830883b563b559875d539d93a9158aba6cb812ffba3419a. DO NOT EDIT. +import { validateAvailableVersionsOutcome, validateBackendStatusOutcome, validateCancelInstallationOutcome, validateCatalogSearchOutcome, validateCheckVersionDependenciesOutcome, validateCheckVersionDependenciesParams, validateConversionCancelledOutcome, validateConversionEnvironmentOutcome, validateConversionListOutcome, validateConversionProgressResponse, validateConversionSetupStartedOutcome, validateConversionSetupStatusOutcome, validateConversionStartedOutcome, validateDownloadIdParams, validateDownloadListOutcome, validateDownloadMutationOutcome, validateDownloadStartedOutcome, validateDownloadStatusOutcome, validateFindTorchAlternativesParams, validateGetBackendSetupParams, validateGetHfDownloadDetailsParams, validateGetReleaseDependenciesOutcome, validateGetReleaseDependenciesParams, validateGetTorchPreviewReportParams, validateGetTorchReleaseOptionsParams, validateGetTorchRuntimeProbeParams, validateGithubCacheStatusOutcome, validateHfDownloadDetailsOutcome, validateInferenceSettingsOutcome, validateInstallVersionDependenciesOutcome, validateInstallVersionDependenciesParams, validateInstallVersionOutcome, validateInstallVersionParams, validateInstallationProgressOutcome, validateInstalledVersionsOutcome, validateLibraryModelMetadataOutcome, validateLinkHealthOutcome, validateModelIndexRefreshOutcome, validateModelsOutcome, validatePartialDownloadOutcome, validatePreviewTorchRuntimeParams, validatePublicError, validateRecoverDownloadParams, validateRemoveVersionOutcome, validateRouterProfileSyncStatus, validateRuntimeLaunchOutcome, validateRuntimeLaunchParams, validateRuntimeRunningOutcome, validateRuntimeStopOutcome, validateSearchCatalogParams, validateSelectedVersionOutcome, validateSetDefaultVersionOutcome, validateSetDefaultVersionParams, validateStartBackendSetupParams, validateStartConversionSetupParams, validateStopRuntimeProfileGenerationOutcome, validateStopRuntimeProfileGenerationParams, validateSuccessOutcome, validateSupportedQuantTypesOutcome, validateSwitchVersionOutcome, validateSwitchVersionParams, validateTorchDriverAvailability, validateTorchGpuVendor, validateTorchReleaseCombination, validateTorchReleaseDriverStatus, validateTorchReleaseOptionsOutcome, validateTorchReleaseOptionsStatus, validateTorchReleaseRecommendation, validateTorchRuntimePreview, validateTorchRuntimePreviewArtifact, validateTorchRuntimePreviewOutcome, validateTorchRuntimePreviewQualification, validateTorchRuntimePreviewRejectionReason, validateTrialTorchRuntimeOutcome, validateTrialTorchRuntimeParams, validateUpdateInferenceSettingsOutcome, validateUpdateInferenceSettingsParams, validateUpdateModelNotesOutcome, validateUpdateModelNotesParams, validateValidateInstallationsOutcome, validateVersionInfoOutcome, validateVersionStatusOutcome } from './desktop-contract.validators.js'; export type AvailableVersionsOutcome = (AvailableVersionsSuccess) | (AvailableVersionsRateLimited); export type AvailableVersionsRateLimited = { "error": string; "rate_limited": true; "retry_after_secs": number | null; "success": false }; export type AvailableVersionsSuccess = { "success": true; "versions": ReadonlyArray }; @@ -50,6 +50,7 @@ export type GetHfDownloadDetailsParams = ({ "quants"?: ReadonlyArray | n export type GetReleaseDependenciesOutcome = { "dependencies": ReadonlyArray; "success": true }; export type GetReleaseDependenciesParams = ({ "app_id": string; "tag": string }) | ({ "appId": string; "tag": string }); export type GetTorchPreviewReportParams = ({ "preview_id": string }) | ({ "previewId": string }); +export type GetTorchReleaseOptionsParams = { "tag": string }; export type GetTorchRuntimeProbeParams = { "tag": string }; export type GithubCacheStatusNoManager = { "has_cache": false; "is_fetching": false; "is_valid": false }; export type GithubCacheStatusOutcome = (GithubCacheStatusSnapshot) | (GithubCacheStatusNoManager); @@ -113,6 +114,13 @@ export type SuccessOutcome = { "success": true }; export type SupportedQuantTypesOutcome = { "quant_types": ReadonlyArray; "success": true }; export type SwitchVersionOutcome = { "success": boolean }; export type SwitchVersionParams = ({ "app_id": string; "tag": string }) | ({ "appId": string; "tag": string }); +export type TorchDriverAvailability = "available" | "unavailable" | "not_present" | "unknown"; +export type TorchGpuVendor = "nvidia" | "amd" | "intel"; +export type TorchReleaseCombination = { "build": string; "python": string; "sha256"?: string | null; "wheelUrl": string }; +export type TorchReleaseDriverStatus = { "amd": TorchDriverAvailability; "nvidia": TorchDriverAvailability }; +export type TorchReleaseOptionsOutcome = { "checkedChannels": ReadonlyArray; "combinations": ReadonlyArray; "completeScan": boolean; "detectedGpuVendors": ReadonlyArray; "driverStatus": TorchReleaseDriverStatus; "issues": ReadonlyArray; "recommendationNote": string | null; "recommended": (TorchReleaseRecommendation) | (null); "status": TorchReleaseOptionsStatus; "tag": string }; +export type TorchReleaseOptionsStatus = "matches" | "none" | "inconclusive"; +export type TorchReleaseRecommendation = { "build": string; "python": string }; export type TorchRuntimePreview = { "adapter": string; "artifacts": ReadonlyArray; "build": string; "expiresInSeconds": number; "previewId": string; "python": string; "qualification": TorchRuntimePreviewQualification; "tag": string }; export type TorchRuntimePreviewArtifact = { "name": string; "sha256": string; "url": string; "version": string }; export type TorchRuntimePreviewOutcome = ({ "preview": TorchRuntimePreview; "status": "resolved" }) | ({ "message": string; "reason": TorchRuntimePreviewRejectionReason; "status": "rejected" }); @@ -189,6 +197,7 @@ export function decodeGetHfDownloadDetailsParams(input: unknown): DecodeOutcome< export function decodeGetReleaseDependenciesOutcome(input: unknown): DecodeOutcome { return decode(input, validateGetReleaseDependenciesOutcome); } export function decodeGetReleaseDependenciesParams(input: unknown): DecodeOutcome { return decode(input, validateGetReleaseDependenciesParams); } export function decodeGetTorchPreviewReportParams(input: unknown): DecodeOutcome { return decode(input, validateGetTorchPreviewReportParams); } +export function decodeGetTorchReleaseOptionsParams(input: unknown): DecodeOutcome { return decode(input, validateGetTorchReleaseOptionsParams); } export function decodeGetTorchRuntimeProbeParams(input: unknown): DecodeOutcome { return decode(input, validateGetTorchRuntimeProbeParams); } export function decodeGithubCacheStatusOutcome(input: unknown): DecodeOutcome { return decode(input, validateGithubCacheStatusOutcome); } export function decodeHfDownloadDetailsOutcome(input: unknown): DecodeOutcome { return decode(input, validateHfDownloadDetailsOutcome); } @@ -225,6 +234,13 @@ export function decodeSuccessOutcome(input: unknown): DecodeOutcome { return decode(input, validateSupportedQuantTypesOutcome); } export function decodeSwitchVersionOutcome(input: unknown): DecodeOutcome { return decode(input, validateSwitchVersionOutcome); } export function decodeSwitchVersionParams(input: unknown): DecodeOutcome { return decode(input, validateSwitchVersionParams); } +export function decodeTorchDriverAvailability(input: unknown): DecodeOutcome { return decode(input, validateTorchDriverAvailability); } +export function decodeTorchGpuVendor(input: unknown): DecodeOutcome { return decode(input, validateTorchGpuVendor); } +export function decodeTorchReleaseCombination(input: unknown): DecodeOutcome { return decode(input, validateTorchReleaseCombination); } +export function decodeTorchReleaseDriverStatus(input: unknown): DecodeOutcome { return decode(input, validateTorchReleaseDriverStatus); } +export function decodeTorchReleaseOptionsOutcome(input: unknown): DecodeOutcome { return decode(input, validateTorchReleaseOptionsOutcome); } +export function decodeTorchReleaseOptionsStatus(input: unknown): DecodeOutcome { return decode(input, validateTorchReleaseOptionsStatus); } +export function decodeTorchReleaseRecommendation(input: unknown): DecodeOutcome { return decode(input, validateTorchReleaseRecommendation); } export function decodeTorchRuntimePreview(input: unknown): DecodeOutcome { return decode(input, validateTorchRuntimePreview); } export function decodeTorchRuntimePreviewArtifact(input: unknown): DecodeOutcome { return decode(input, validateTorchRuntimePreviewArtifact); } export function decodeTorchRuntimePreviewOutcome(input: unknown): DecodeOutcome { return decode(input, validateTorchRuntimePreviewOutcome); } diff --git a/electron/src/generated/desktop-contract.validators.d.ts b/electron/src/generated/desktop-contract.validators.d.ts index a3d66a5d4..8a0ca8711 100644 --- a/electron/src/generated/desktop-contract.validators.d.ts +++ b/electron/src/generated/desktop-contract.validators.d.ts @@ -1,4 +1,4 @@ -// Generated from pumas-rpc contract.rs; SHA256 4f6771f852879c4de52ee8d1e66c25a3bba650bf832d9dbba022b3b8b0b4c75c. DO NOT EDIT. +// Generated from pumas-rpc contract.rs; SHA256 67dd940c814b877de830883b563b559875d539d93a9158aba6cb812ffba3419a. DO NOT EDIT. export declare function validateAvailableVersionsOutcome(value: unknown): boolean; export declare function validateBackendStatusOutcome(value: unknown): boolean; export declare function validateCancelInstallationOutcome(value: unknown): boolean; @@ -23,6 +23,7 @@ export declare function validateGetHfDownloadDetailsParams(value: unknown): bool export declare function validateGetReleaseDependenciesOutcome(value: unknown): boolean; export declare function validateGetReleaseDependenciesParams(value: unknown): boolean; export declare function validateGetTorchPreviewReportParams(value: unknown): boolean; +export declare function validateGetTorchReleaseOptionsParams(value: unknown): boolean; export declare function validateGetTorchRuntimeProbeParams(value: unknown): boolean; export declare function validateGithubCacheStatusOutcome(value: unknown): boolean; export declare function validateHfDownloadDetailsOutcome(value: unknown): boolean; @@ -59,6 +60,13 @@ export declare function validateSuccessOutcome(value: unknown): boolean; export declare function validateSupportedQuantTypesOutcome(value: unknown): boolean; export declare function validateSwitchVersionOutcome(value: unknown): boolean; export declare function validateSwitchVersionParams(value: unknown): boolean; +export declare function validateTorchDriverAvailability(value: unknown): boolean; +export declare function validateTorchGpuVendor(value: unknown): boolean; +export declare function validateTorchReleaseCombination(value: unknown): boolean; +export declare function validateTorchReleaseDriverStatus(value: unknown): boolean; +export declare function validateTorchReleaseOptionsOutcome(value: unknown): boolean; +export declare function validateTorchReleaseOptionsStatus(value: unknown): boolean; +export declare function validateTorchReleaseRecommendation(value: unknown): boolean; export declare function validateTorchRuntimePreview(value: unknown): boolean; export declare function validateTorchRuntimePreviewArtifact(value: unknown): boolean; export declare function validateTorchRuntimePreviewOutcome(value: unknown): boolean; diff --git a/electron/src/generated/desktop-contract.validators.js b/electron/src/generated/desktop-contract.validators.js index 3ee71fab8..abfafbec0 100644 --- a/electron/src/generated/desktop-contract.validators.js +++ b/electron/src/generated/desktop-contract.validators.js @@ -1,4 +1,4 @@ -// Generated from pumas-rpc contract.rs; SHA256 4f6771f852879c4de52ee8d1e66c25a3bba650bf832d9dbba022b3b8b0b4c75c. DO NOT EDIT. +// Generated from pumas-rpc contract.rs; SHA256 67dd940c814b877de830883b563b559875d539d93a9158aba6cb812ffba3419a. DO NOT EDIT. var __getOwnPropNames = Object.getOwnPropertyNames; var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; @@ -7735,7 +7735,7 @@ function validate55(data, { instancePath = "", parentData, parentDataProperty, r validate55.errors = vErrors; return errors === 0; } -var validateGetTorchRuntimeProbeParams = validate56; +var validateGetTorchReleaseOptionsParams = validate56; function validate56(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; @@ -7771,9 +7771,45 @@ function validate56(data, { instancePath = "", parentData, parentDataProperty, r validate56.errors = vErrors; return errors === 0; } -var validateGithubCacheStatusOutcome = validate57; -var schema67 = { "additionalProperties": false, "properties": { "age_seconds": { "maximum": 9007199254740991, "minimum": 0, "type": ["integer", "null"] }, "has_cache": { "type": "boolean" }, "is_fetching": { "type": "boolean" }, "is_valid": { "type": "boolean" }, "last_fetched": { "type": ["string", "null"] }, "releases_count": { "maximum": 4294967295, "minimum": 0, "type": ["integer", "null"] } }, "required": ["has_cache", "is_valid", "is_fetching", "age_seconds", "last_fetched", "releases_count"], "type": "object" }; +var validateGetTorchRuntimeProbeParams = validate57; function validate57(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { + let vErrors = null; + let errors = 0; + if (errors === 0) { + if (data && typeof data == "object" && !Array.isArray(data)) { + let missing0; + if (data.tag === void 0 && (missing0 = "tag")) { + validate57.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + return false; + } else { + const _errs1 = errors; + for (const key0 in data) { + if (!(key0 === "tag")) { + validate57.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + return false; + break; + } + } + if (_errs1 === errors) { + if (data.tag !== void 0) { + if (typeof data.tag !== "string") { + validate57.errors = [{ instancePath: instancePath + "/tag", schemaPath: "#/properties/tag/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + return false; + } + } + } + } + } else { + validate57.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + return false; + } + } + validate57.errors = vErrors; + return errors === 0; +} +var validateGithubCacheStatusOutcome = validate58; +var schema68 = { "additionalProperties": false, "properties": { "age_seconds": { "maximum": 9007199254740991, "minimum": 0, "type": ["integer", "null"] }, "has_cache": { "type": "boolean" }, "is_fetching": { "type": "boolean" }, "is_valid": { "type": "boolean" }, "last_fetched": { "type": ["string", "null"] }, "releases_count": { "maximum": 4294967295, "minimum": 0, "type": ["integer", "null"] } }, "required": ["has_cache", "is_valid", "is_fetching", "age_seconds", "last_fetched", "releases_count"], "type": "object" }; +function validate58(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; const _errs0 = errors; @@ -7810,7 +7846,7 @@ function validate57(data, { instancePath = "", parentData, parentDataProperty, r let data0 = data.age_seconds; const _errs5 = errors; if (!(typeof data0 == "number" && (!(data0 % 1) && !isNaN(data0)) && isFinite(data0)) && data0 !== null) { - const err2 = { instancePath: instancePath + "/age_seconds", schemaPath: "#/definitions/GithubCacheStatusSnapshot/properties/age_seconds/type", keyword: "type", params: { type: schema67.properties.age_seconds.type }, message: "must be integer,null" }; + const err2 = { instancePath: instancePath + "/age_seconds", schemaPath: "#/definitions/GithubCacheStatusSnapshot/properties/age_seconds/type", keyword: "type", params: { type: schema68.properties.age_seconds.type }, message: "must be integer,null" }; if (vErrors === null) { vErrors = [err2]; } else { @@ -7898,7 +7934,7 @@ function validate57(data, { instancePath = "", parentData, parentDataProperty, r let data4 = data.last_fetched; const _errs13 = errors; if (typeof data4 !== "string" && data4 !== null) { - const err8 = { instancePath: instancePath + "/last_fetched", schemaPath: "#/definitions/GithubCacheStatusSnapshot/properties/last_fetched/type", keyword: "type", params: { type: schema67.properties.last_fetched.type }, message: "must be string,null" }; + const err8 = { instancePath: instancePath + "/last_fetched", schemaPath: "#/definitions/GithubCacheStatusSnapshot/properties/last_fetched/type", keyword: "type", params: { type: schema68.properties.last_fetched.type }, message: "must be string,null" }; if (vErrors === null) { vErrors = [err8]; } else { @@ -7915,7 +7951,7 @@ function validate57(data, { instancePath = "", parentData, parentDataProperty, r let data5 = data.releases_count; const _errs15 = errors; if (!(typeof data5 == "number" && (!(data5 % 1) && !isNaN(data5)) && isFinite(data5)) && data5 !== null) { - const err9 = { instancePath: instancePath + "/releases_count", schemaPath: "#/definitions/GithubCacheStatusSnapshot/properties/releases_count/type", keyword: "type", params: { type: schema67.properties.releases_count.type }, message: "must be integer,null" }; + const err9 = { instancePath: instancePath + "/releases_count", schemaPath: "#/definitions/GithubCacheStatusSnapshot/properties/releases_count/type", keyword: "type", params: { type: schema68.properties.releases_count.type }, message: "must be integer,null" }; if (vErrors === null) { vErrors = [err9]; } else { @@ -8100,7 +8136,7 @@ function validate57(data, { instancePath = "", parentData, parentDataProperty, r vErrors.push(err22); } errors++; - validate57.errors = vErrors; + validate58.errors = vErrors; return false; } else { errors = _errs0; @@ -8112,26 +8148,26 @@ function validate57(data, { instancePath = "", parentData, parentDataProperty, r } } } - validate57.errors = vErrors; + validate58.errors = vErrors; return errors === 0; } -var validateHfDownloadDetailsOutcome = validate58; -var schema71 = { "additionalProperties": false, "description": "Exact download details derived from a repository file tree.", "properties": { "downloadOptions": { "default": [], "items": { "$ref": "#/definitions/DownloadOption" }, "type": "array" }, "repoId": { "type": "string" }, "totalSizeBytes": { "default": null, "maximum": 9007199254740991, "minimum": 0, "type": ["integer", "null"] } }, "required": ["repoId", "downloadOptions", "totalSizeBytes"], "type": "object" }; -var schema72 = { "additionalProperties": false, "description": "Download option for a quantization variant or file group.", "properties": { "fileGroup": { "$ref": "#/definitions/FileGroup" }, "quant": { "type": "string" }, "sizeBytes": { "default": null, "maximum": 9007199254740991, "minimum": 0, "type": ["integer", "null"] } }, "required": ["quant", "sizeBytes"], "type": "object" }; -function validate61(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateHfDownloadDetailsOutcome = validate59; +var schema72 = { "additionalProperties": false, "description": "Exact download details derived from a repository file tree.", "properties": { "downloadOptions": { "default": [], "items": { "$ref": "#/definitions/DownloadOption" }, "type": "array" }, "repoId": { "type": "string" }, "totalSizeBytes": { "default": null, "maximum": 9007199254740991, "minimum": 0, "type": ["integer", "null"] } }, "required": ["repoId", "downloadOptions", "totalSizeBytes"], "type": "object" }; +var schema73 = { "additionalProperties": false, "description": "Download option for a quantization variant or file group.", "properties": { "fileGroup": { "$ref": "#/definitions/FileGroup" }, "quant": { "type": "string" }, "sizeBytes": { "default": null, "maximum": 9007199254740991, "minimum": 0, "type": ["integer", "null"] } }, "required": ["quant", "sizeBytes"], "type": "object" }; +function validate62(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.quant === void 0 && (missing0 = "quant") || data.sizeBytes === void 0 && (missing0 = "sizeBytes")) { - validate61.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate62.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "fileGroup" || key0 === "quant" || key0 === "sizeBytes")) { - validate61.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate62.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -8145,13 +8181,13 @@ function validate61(data, { instancePath = "", parentData, parentDataProperty, r if (data0 && typeof data0 == "object" && !Array.isArray(data0)) { let missing1; if (data0.filenames === void 0 && (missing1 = "filenames") || data0.shardCount === void 0 && (missing1 = "shardCount") || data0.label === void 0 && (missing1 = "label")) { - validate61.errors = [{ instancePath: instancePath + "/fileGroup", schemaPath: "#/definitions/FileGroup/required", keyword: "required", params: { missingProperty: missing1 }, message: "must have required property '" + missing1 + "'" }]; + validate62.errors = [{ instancePath: instancePath + "/fileGroup", schemaPath: "#/definitions/FileGroup/required", keyword: "required", params: { missingProperty: missing1 }, message: "must have required property '" + missing1 + "'" }]; return false; } else { const _errs5 = errors; for (const key1 in data0) { if (!(key1 === "filenames" || key1 === "label" || key1 === "shardCount")) { - validate61.errors = [{ instancePath: instancePath + "/fileGroup", schemaPath: "#/definitions/FileGroup/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key1 }, message: "must NOT have additional properties" }]; + validate62.errors = [{ instancePath: instancePath + "/fileGroup", schemaPath: "#/definitions/FileGroup/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key1 }, message: "must NOT have additional properties" }]; return false; break; } @@ -8167,7 +8203,7 @@ function validate61(data, { instancePath = "", parentData, parentDataProperty, r for (let i0 = 0; i0 < len0; i0++) { const _errs8 = errors; if (typeof data1[i0] !== "string") { - validate61.errors = [{ instancePath: instancePath + "/fileGroup/filenames/" + i0, schemaPath: "#/definitions/FileGroup/properties/filenames/items/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate62.errors = [{ instancePath: instancePath + "/fileGroup/filenames/" + i0, schemaPath: "#/definitions/FileGroup/properties/filenames/items/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid3 = _errs8 === errors; @@ -8176,7 +8212,7 @@ function validate61(data, { instancePath = "", parentData, parentDataProperty, r } } } else { - validate61.errors = [{ instancePath: instancePath + "/fileGroup/filenames", schemaPath: "#/definitions/FileGroup/properties/filenames/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; + validate62.errors = [{ instancePath: instancePath + "/fileGroup/filenames", schemaPath: "#/definitions/FileGroup/properties/filenames/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; return false; } } @@ -8188,7 +8224,7 @@ function validate61(data, { instancePath = "", parentData, parentDataProperty, r if (data0.label !== void 0) { const _errs10 = errors; if (typeof data0.label !== "string") { - validate61.errors = [{ instancePath: instancePath + "/fileGroup/label", schemaPath: "#/definitions/FileGroup/properties/label/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate62.errors = [{ instancePath: instancePath + "/fileGroup/label", schemaPath: "#/definitions/FileGroup/properties/label/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid2 = _errs10 === errors; @@ -8200,17 +8236,17 @@ function validate61(data, { instancePath = "", parentData, parentDataProperty, r let data4 = data0.shardCount; const _errs12 = errors; if (!(typeof data4 == "number" && (!(data4 % 1) && !isNaN(data4)) && isFinite(data4))) { - validate61.errors = [{ instancePath: instancePath + "/fileGroup/shardCount", schemaPath: "#/definitions/FileGroup/properties/shardCount/type", keyword: "type", params: { type: "integer" }, message: "must be integer" }]; + validate62.errors = [{ instancePath: instancePath + "/fileGroup/shardCount", schemaPath: "#/definitions/FileGroup/properties/shardCount/type", keyword: "type", params: { type: "integer" }, message: "must be integer" }]; return false; } if (errors === _errs12) { if (typeof data4 == "number" && isFinite(data4)) { if (data4 > 4294967295 || isNaN(data4)) { - validate61.errors = [{ instancePath: instancePath + "/fileGroup/shardCount", schemaPath: "#/definitions/FileGroup/properties/shardCount/maximum", keyword: "maximum", params: { comparison: "<=", limit: 4294967295 }, message: "must be <= 4294967295" }]; + validate62.errors = [{ instancePath: instancePath + "/fileGroup/shardCount", schemaPath: "#/definitions/FileGroup/properties/shardCount/maximum", keyword: "maximum", params: { comparison: "<=", limit: 4294967295 }, message: "must be <= 4294967295" }]; return false; } else { if (data4 < 0 || isNaN(data4)) { - validate61.errors = [{ instancePath: instancePath + "/fileGroup/shardCount", schemaPath: "#/definitions/FileGroup/properties/shardCount/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; + validate62.errors = [{ instancePath: instancePath + "/fileGroup/shardCount", schemaPath: "#/definitions/FileGroup/properties/shardCount/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; return false; } } @@ -8225,7 +8261,7 @@ function validate61(data, { instancePath = "", parentData, parentDataProperty, r } } } else { - validate61.errors = [{ instancePath: instancePath + "/fileGroup", schemaPath: "#/definitions/FileGroup/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate62.errors = [{ instancePath: instancePath + "/fileGroup", schemaPath: "#/definitions/FileGroup/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } @@ -8237,7 +8273,7 @@ function validate61(data, { instancePath = "", parentData, parentDataProperty, r if (data.quant !== void 0) { const _errs14 = errors; if (typeof data.quant !== "string") { - validate61.errors = [{ instancePath: instancePath + "/quant", schemaPath: "#/properties/quant/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate62.errors = [{ instancePath: instancePath + "/quant", schemaPath: "#/properties/quant/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs14 === errors; @@ -8249,17 +8285,17 @@ function validate61(data, { instancePath = "", parentData, parentDataProperty, r let data6 = data.sizeBytes; const _errs16 = errors; if (!(typeof data6 == "number" && (!(data6 % 1) && !isNaN(data6)) && isFinite(data6)) && data6 !== null) { - validate61.errors = [{ instancePath: instancePath + "/sizeBytes", schemaPath: "#/properties/sizeBytes/type", keyword: "type", params: { type: schema72.properties.sizeBytes.type }, message: "must be integer,null" }]; + validate62.errors = [{ instancePath: instancePath + "/sizeBytes", schemaPath: "#/properties/sizeBytes/type", keyword: "type", params: { type: schema73.properties.sizeBytes.type }, message: "must be integer,null" }]; return false; } if (errors === _errs16) { if (typeof data6 == "number" && isFinite(data6)) { if (data6 > 9007199254740991 || isNaN(data6)) { - validate61.errors = [{ instancePath: instancePath + "/sizeBytes", schemaPath: "#/properties/sizeBytes/maximum", keyword: "maximum", params: { comparison: "<=", limit: 9007199254740991 }, message: "must be <= 9007199254740991" }]; + validate62.errors = [{ instancePath: instancePath + "/sizeBytes", schemaPath: "#/properties/sizeBytes/maximum", keyword: "maximum", params: { comparison: "<=", limit: 9007199254740991 }, message: "must be <= 9007199254740991" }]; return false; } else { if (data6 < 0 || isNaN(data6)) { - validate61.errors = [{ instancePath: instancePath + "/sizeBytes", schemaPath: "#/properties/sizeBytes/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; + validate62.errors = [{ instancePath: instancePath + "/sizeBytes", schemaPath: "#/properties/sizeBytes/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; return false; } } @@ -8274,27 +8310,27 @@ function validate61(data, { instancePath = "", parentData, parentDataProperty, r } } } else { - validate61.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate62.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate61.errors = vErrors; + validate62.errors = vErrors; return errors === 0; } -function validate60(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +function validate61(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.repoId === void 0 && (missing0 = "repoId") || data.downloadOptions === void 0 && (missing0 = "downloadOptions") || data.totalSizeBytes === void 0 && (missing0 = "totalSizeBytes")) { - validate60.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate61.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "downloadOptions" || key0 === "repoId" || key0 === "totalSizeBytes")) { - validate60.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate61.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -8309,8 +8345,8 @@ function validate60(data, { instancePath = "", parentData, parentDataProperty, r const len0 = data0.length; for (let i0 = 0; i0 < len0; i0++) { const _errs4 = errors; - if (!validate61(data0[i0], { instancePath: instancePath + "/downloadOptions/" + i0, parentData: data0, parentDataProperty: i0, rootData })) { - vErrors = vErrors === null ? validate61.errors : vErrors.concat(validate61.errors); + if (!validate62(data0[i0], { instancePath: instancePath + "/downloadOptions/" + i0, parentData: data0, parentDataProperty: i0, rootData })) { + vErrors = vErrors === null ? validate62.errors : vErrors.concat(validate62.errors); errors = vErrors.length; } var valid1 = _errs4 === errors; @@ -8319,7 +8355,7 @@ function validate60(data, { instancePath = "", parentData, parentDataProperty, r } } } else { - validate60.errors = [{ instancePath: instancePath + "/downloadOptions", schemaPath: "#/properties/downloadOptions/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; + validate61.errors = [{ instancePath: instancePath + "/downloadOptions", schemaPath: "#/properties/downloadOptions/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; return false; } } @@ -8331,7 +8367,7 @@ function validate60(data, { instancePath = "", parentData, parentDataProperty, r if (data.repoId !== void 0) { const _errs5 = errors; if (typeof data.repoId !== "string") { - validate60.errors = [{ instancePath: instancePath + "/repoId", schemaPath: "#/properties/repoId/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate61.errors = [{ instancePath: instancePath + "/repoId", schemaPath: "#/properties/repoId/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs5 === errors; @@ -8343,17 +8379,17 @@ function validate60(data, { instancePath = "", parentData, parentDataProperty, r let data3 = data.totalSizeBytes; const _errs7 = errors; if (!(typeof data3 == "number" && (!(data3 % 1) && !isNaN(data3)) && isFinite(data3)) && data3 !== null) { - validate60.errors = [{ instancePath: instancePath + "/totalSizeBytes", schemaPath: "#/properties/totalSizeBytes/type", keyword: "type", params: { type: schema71.properties.totalSizeBytes.type }, message: "must be integer,null" }]; + validate61.errors = [{ instancePath: instancePath + "/totalSizeBytes", schemaPath: "#/properties/totalSizeBytes/type", keyword: "type", params: { type: schema72.properties.totalSizeBytes.type }, message: "must be integer,null" }]; return false; } if (errors === _errs7) { if (typeof data3 == "number" && isFinite(data3)) { if (data3 > 9007199254740991 || isNaN(data3)) { - validate60.errors = [{ instancePath: instancePath + "/totalSizeBytes", schemaPath: "#/properties/totalSizeBytes/maximum", keyword: "maximum", params: { comparison: "<=", limit: 9007199254740991 }, message: "must be <= 9007199254740991" }]; + validate61.errors = [{ instancePath: instancePath + "/totalSizeBytes", schemaPath: "#/properties/totalSizeBytes/maximum", keyword: "maximum", params: { comparison: "<=", limit: 9007199254740991 }, message: "must be <= 9007199254740991" }]; return false; } else { if (data3 < 0 || isNaN(data3)) { - validate60.errors = [{ instancePath: instancePath + "/totalSizeBytes", schemaPath: "#/properties/totalSizeBytes/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; + validate61.errors = [{ instancePath: instancePath + "/totalSizeBytes", schemaPath: "#/properties/totalSizeBytes/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; return false; } } @@ -8368,27 +8404,27 @@ function validate60(data, { instancePath = "", parentData, parentDataProperty, r } } } else { - validate60.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate61.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate60.errors = vErrors; + validate61.errors = vErrors; return errors === 0; } -function validate59(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +function validate60(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.success === void 0 && (missing0 = "success") || data.details === void 0 && (missing0 = "details")) { - validate59.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate60.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "details" || key0 === "success")) { - validate59.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate60.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -8396,8 +8432,8 @@ function validate59(data, { instancePath = "", parentData, parentDataProperty, r if (_errs1 === errors) { if (data.details !== void 0) { const _errs2 = errors; - if (!validate60(data.details, { instancePath: instancePath + "/details", parentData: data, parentDataProperty: "details", rootData })) { - vErrors = vErrors === null ? validate60.errors : vErrors.concat(validate60.errors); + if (!validate61(data.details, { instancePath: instancePath + "/details", parentData: data, parentDataProperty: "details", rootData })) { + vErrors = vErrors === null ? validate61.errors : vErrors.concat(validate61.errors); errors = vErrors.length; } var valid0 = _errs2 === errors; @@ -8409,11 +8445,11 @@ function validate59(data, { instancePath = "", parentData, parentDataProperty, r let data1 = data.success; const _errs3 = errors; if (typeof data1 !== "boolean") { - validate59.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; + validate60.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; return false; } if (true !== data1) { - validate59.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/const", keyword: "const", params: { allowedValue: true }, message: "must be equal to constant" }]; + validate60.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/const", keyword: "const", params: { allowedValue: true }, message: "must be equal to constant" }]; return false; } var valid0 = _errs3 === errors; @@ -8424,21 +8460,21 @@ function validate59(data, { instancePath = "", parentData, parentDataProperty, r } } } else { - validate59.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate60.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate59.errors = vErrors; + validate60.errors = vErrors; return errors === 0; } -function validate58(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +function validate59(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; const _errs0 = errors; let valid0 = false; const _errs1 = errors; - if (!validate59(data, { instancePath, parentData, parentDataProperty, rootData })) { - vErrors = vErrors === null ? validate59.errors : vErrors.concat(validate59.errors); + if (!validate60(data, { instancePath, parentData, parentDataProperty, rootData })) { + vErrors = vErrors === null ? validate60.errors : vErrors.concat(validate60.errors); errors = vErrors.length; } var _valid0 = _errs1 === errors; @@ -8537,7 +8573,7 @@ function validate58(data, { instancePath = "", parentData, parentDataProperty, r vErrors.push(err6); } errors++; - validate58.errors = vErrors; + validate59.errors = vErrors; return false; } else { errors = _errs0; @@ -8549,15 +8585,15 @@ function validate58(data, { instancePath = "", parentData, parentDataProperty, r } } } - validate58.errors = vErrors; + validate59.errors = vErrors; return errors === 0; } -var validateInferenceSettingsOutcome = validate65; -var schema76 = { "additionalProperties": false, "description": "Describes a single configurable inference parameter with its type,\ndefault value, and optional constraints.\n\nDownstream consumers (e.g. Pantograph node graph) use this schema\nto dynamically render UI controls for model-specific settings.", "properties": { "constraints": { "anyOf": [{ "$ref": "#/definitions/ParamConstraints" }, { "type": "null" }], "default": null, "description": "Optional numeric/enum constraints." }, "default": { "$ref": "#/definitions/DesktopJsonValue" }, "description": { "default": null, "description": "Optional description / tooltip.", "type": ["string", "null"] }, "key": { "description": 'Machine-readable key (e.g. "context_length", "denoising_steps").', "type": "string" }, "label": { "description": 'Human-readable label (e.g. "Context Length").', "type": "string" }, "param_type": { "allOf": [{ "$ref": "#/definitions/ParamType" }], "description": "Data type of this parameter." } }, "required": ["key", "label", "param_type", "default", "description", "constraints"], "type": "object" }; -var schema79 = { "description": "Data type for an inference parameter.", "enum": ["Number", "Integer", "String", "Boolean"], "type": "string" }; -var schema77 = { "additionalProperties": false, "description": "Constraints on an inference parameter value.", "properties": { "allowed_values": { "anyOf": [{ "type": "null" }, { "items": { "$ref": "#/definitions/DesktopJsonValue" }, "type": "array" }] }, "max": { "default": null, "maximum": 17976931348623157e292, "minimum": -17976931348623157e292, "type": ["number", "null"] }, "min": { "default": null, "maximum": 17976931348623157e292, "minimum": -17976931348623157e292, "type": ["number", "null"] } }, "required": ["min", "max", "allowed_values"], "type": "object" }; -var wrapper0 = { validate: validate68 }; -function validate68(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateInferenceSettingsOutcome = validate66; +var schema77 = { "additionalProperties": false, "description": "Describes a single configurable inference parameter with its type,\ndefault value, and optional constraints.\n\nDownstream consumers (e.g. Pantograph node graph) use this schema\nto dynamically render UI controls for model-specific settings.", "properties": { "constraints": { "anyOf": [{ "$ref": "#/definitions/ParamConstraints" }, { "type": "null" }], "default": null, "description": "Optional numeric/enum constraints." }, "default": { "$ref": "#/definitions/DesktopJsonValue" }, "description": { "default": null, "description": "Optional description / tooltip.", "type": ["string", "null"] }, "key": { "description": 'Machine-readable key (e.g. "context_length", "denoising_steps").', "type": "string" }, "label": { "description": 'Human-readable label (e.g. "Context Length").', "type": "string" }, "param_type": { "allOf": [{ "$ref": "#/definitions/ParamType" }], "description": "Data type of this parameter." } }, "required": ["key", "label", "param_type", "default", "description", "constraints"], "type": "object" }; +var schema80 = { "description": "Data type for an inference parameter.", "enum": ["Number", "Integer", "String", "Boolean"], "type": "string" }; +var schema78 = { "additionalProperties": false, "description": "Constraints on an inference parameter value.", "properties": { "allowed_values": { "anyOf": [{ "type": "null" }, { "items": { "$ref": "#/definitions/DesktopJsonValue" }, "type": "array" }] }, "max": { "default": null, "maximum": 17976931348623157e292, "minimum": -17976931348623157e292, "type": ["number", "null"] }, "min": { "default": null, "maximum": 17976931348623157e292, "minimum": -17976931348623157e292, "type": ["number", "null"] } }, "required": ["min", "max", "allowed_values"], "type": "object" }; +var wrapper0 = { validate: validate69 }; +function validate69(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; const _errs0 = errors; @@ -8704,7 +8740,7 @@ function validate68(data, { instancePath = "", parentData, parentDataProperty, r vErrors.push(err8); } errors++; - validate68.errors = vErrors; + validate69.errors = vErrors; return false; } else { errors = _errs0; @@ -8716,23 +8752,23 @@ function validate68(data, { instancePath = "", parentData, parentDataProperty, r } } } - validate68.errors = vErrors; + validate69.errors = vErrors; return errors === 0; } -function validate67(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +function validate68(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.min === void 0 && (missing0 = "min") || data.max === void 0 && (missing0 = "max") || data.allowed_values === void 0 && (missing0 = "allowed_values")) { - validate67.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate68.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "allowed_values" || key0 === "max" || key0 === "min")) { - validate67.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate68.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -8763,8 +8799,8 @@ function validate67(data, { instancePath = "", parentData, parentDataProperty, r const len0 = data0.length; for (let i0 = 0; i0 < len0; i0++) { const _errs8 = errors; - if (!validate68(data0[i0], { instancePath: instancePath + "/allowed_values/" + i0, parentData: data0, parentDataProperty: i0, rootData })) { - vErrors = vErrors === null ? validate68.errors : vErrors.concat(validate68.errors); + if (!validate69(data0[i0], { instancePath: instancePath + "/allowed_values/" + i0, parentData: data0, parentDataProperty: i0, rootData })) { + vErrors = vErrors === null ? validate69.errors : vErrors.concat(validate69.errors); errors = vErrors.length; } var valid2 = _errs8 === errors; @@ -8793,7 +8829,7 @@ function validate67(data, { instancePath = "", parentData, parentDataProperty, r vErrors.push(err2); } errors++; - validate67.errors = vErrors; + validate68.errors = vErrors; return false; } else { errors = _errs3; @@ -8814,17 +8850,17 @@ function validate67(data, { instancePath = "", parentData, parentDataProperty, r let data2 = data.max; const _errs9 = errors; if (!(typeof data2 == "number" && isFinite(data2)) && data2 !== null) { - validate67.errors = [{ instancePath: instancePath + "/max", schemaPath: "#/properties/max/type", keyword: "type", params: { type: schema77.properties.max.type }, message: "must be number,null" }]; + validate68.errors = [{ instancePath: instancePath + "/max", schemaPath: "#/properties/max/type", keyword: "type", params: { type: schema78.properties.max.type }, message: "must be number,null" }]; return false; } if (errors === _errs9) { if (typeof data2 == "number" && isFinite(data2)) { if (data2 > 17976931348623157e292 || isNaN(data2)) { - validate67.errors = [{ instancePath: instancePath + "/max", schemaPath: "#/properties/max/maximum", keyword: "maximum", params: { comparison: "<=", limit: 17976931348623157e292 }, message: "must be <= 1.7976931348623157e+308" }]; + validate68.errors = [{ instancePath: instancePath + "/max", schemaPath: "#/properties/max/maximum", keyword: "maximum", params: { comparison: "<=", limit: 17976931348623157e292 }, message: "must be <= 1.7976931348623157e+308" }]; return false; } else { if (data2 < -17976931348623157e292 || isNaN(data2)) { - validate67.errors = [{ instancePath: instancePath + "/max", schemaPath: "#/properties/max/minimum", keyword: "minimum", params: { comparison: ">=", limit: -17976931348623157e292 }, message: "must be >= -1.7976931348623157e+308" }]; + validate68.errors = [{ instancePath: instancePath + "/max", schemaPath: "#/properties/max/minimum", keyword: "minimum", params: { comparison: ">=", limit: -17976931348623157e292 }, message: "must be >= -1.7976931348623157e+308" }]; return false; } } @@ -8839,17 +8875,17 @@ function validate67(data, { instancePath = "", parentData, parentDataProperty, r let data3 = data.min; const _errs11 = errors; if (!(typeof data3 == "number" && isFinite(data3)) && data3 !== null) { - validate67.errors = [{ instancePath: instancePath + "/min", schemaPath: "#/properties/min/type", keyword: "type", params: { type: schema77.properties.min.type }, message: "must be number,null" }]; + validate68.errors = [{ instancePath: instancePath + "/min", schemaPath: "#/properties/min/type", keyword: "type", params: { type: schema78.properties.min.type }, message: "must be number,null" }]; return false; } if (errors === _errs11) { if (typeof data3 == "number" && isFinite(data3)) { if (data3 > 17976931348623157e292 || isNaN(data3)) { - validate67.errors = [{ instancePath: instancePath + "/min", schemaPath: "#/properties/min/maximum", keyword: "maximum", params: { comparison: "<=", limit: 17976931348623157e292 }, message: "must be <= 1.7976931348623157e+308" }]; + validate68.errors = [{ instancePath: instancePath + "/min", schemaPath: "#/properties/min/maximum", keyword: "maximum", params: { comparison: "<=", limit: 17976931348623157e292 }, message: "must be <= 1.7976931348623157e+308" }]; return false; } else { if (data3 < -17976931348623157e292 || isNaN(data3)) { - validate67.errors = [{ instancePath: instancePath + "/min", schemaPath: "#/properties/min/minimum", keyword: "minimum", params: { comparison: ">=", limit: -17976931348623157e292 }, message: "must be >= -1.7976931348623157e+308" }]; + validate68.errors = [{ instancePath: instancePath + "/min", schemaPath: "#/properties/min/minimum", keyword: "minimum", params: { comparison: ">=", limit: -17976931348623157e292 }, message: "must be >= -1.7976931348623157e+308" }]; return false; } } @@ -8864,27 +8900,27 @@ function validate67(data, { instancePath = "", parentData, parentDataProperty, r } } } else { - validate67.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate68.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate67.errors = vErrors; + validate68.errors = vErrors; return errors === 0; } -function validate66(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +function validate67(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.key === void 0 && (missing0 = "key") || data.label === void 0 && (missing0 = "label") || data.param_type === void 0 && (missing0 = "param_type") || data.default === void 0 && (missing0 = "default") || data.description === void 0 && (missing0 = "description") || data.constraints === void 0 && (missing0 = "constraints")) { - validate66.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate67.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "constraints" || key0 === "default" || key0 === "description" || key0 === "key" || key0 === "label" || key0 === "param_type")) { - validate66.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate67.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -8896,8 +8932,8 @@ function validate66(data, { instancePath = "", parentData, parentDataProperty, r const _errs3 = errors; let valid1 = false; const _errs4 = errors; - if (!validate67(data0, { instancePath: instancePath + "/constraints", parentData: data, parentDataProperty: "constraints", rootData })) { - vErrors = vErrors === null ? validate67.errors : vErrors.concat(validate67.errors); + if (!validate68(data0, { instancePath: instancePath + "/constraints", parentData: data, parentDataProperty: "constraints", rootData })) { + vErrors = vErrors === null ? validate68.errors : vErrors.concat(validate68.errors); errors = vErrors.length; } var _valid0 = _errs4 === errors; @@ -8924,7 +8960,7 @@ function validate66(data, { instancePath = "", parentData, parentDataProperty, r vErrors.push(err1); } errors++; - validate66.errors = vErrors; + validate67.errors = vErrors; return false; } else { errors = _errs3; @@ -8943,8 +8979,8 @@ function validate66(data, { instancePath = "", parentData, parentDataProperty, r if (valid0) { if (data.default !== void 0) { const _errs7 = errors; - if (!validate68(data.default, { instancePath: instancePath + "/default", parentData: data, parentDataProperty: "default", rootData })) { - vErrors = vErrors === null ? validate68.errors : vErrors.concat(validate68.errors); + if (!validate69(data.default, { instancePath: instancePath + "/default", parentData: data, parentDataProperty: "default", rootData })) { + vErrors = vErrors === null ? validate69.errors : vErrors.concat(validate69.errors); errors = vErrors.length; } var valid0 = _errs7 === errors; @@ -8956,7 +8992,7 @@ function validate66(data, { instancePath = "", parentData, parentDataProperty, r let data2 = data.description; const _errs8 = errors; if (typeof data2 !== "string" && data2 !== null) { - validate66.errors = [{ instancePath: instancePath + "/description", schemaPath: "#/properties/description/type", keyword: "type", params: { type: schema76.properties.description.type }, message: "must be string,null" }]; + validate67.errors = [{ instancePath: instancePath + "/description", schemaPath: "#/properties/description/type", keyword: "type", params: { type: schema77.properties.description.type }, message: "must be string,null" }]; return false; } var valid0 = _errs8 === errors; @@ -8967,7 +9003,7 @@ function validate66(data, { instancePath = "", parentData, parentDataProperty, r if (data.key !== void 0) { const _errs10 = errors; if (typeof data.key !== "string") { - validate66.errors = [{ instancePath: instancePath + "/key", schemaPath: "#/properties/key/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate67.errors = [{ instancePath: instancePath + "/key", schemaPath: "#/properties/key/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs10 === errors; @@ -8978,7 +9014,7 @@ function validate66(data, { instancePath = "", parentData, parentDataProperty, r if (data.label !== void 0) { const _errs12 = errors; if (typeof data.label !== "string") { - validate66.errors = [{ instancePath: instancePath + "/label", schemaPath: "#/properties/label/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate67.errors = [{ instancePath: instancePath + "/label", schemaPath: "#/properties/label/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs12 === errors; @@ -8990,11 +9026,11 @@ function validate66(data, { instancePath = "", parentData, parentDataProperty, r let data5 = data.param_type; const _errs14 = errors; if (typeof data5 !== "string") { - validate66.errors = [{ instancePath: instancePath + "/param_type", schemaPath: "#/definitions/ParamType/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate67.errors = [{ instancePath: instancePath + "/param_type", schemaPath: "#/definitions/ParamType/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } if (!(data5 === "Number" || data5 === "Integer" || data5 === "String" || data5 === "Boolean")) { - validate66.errors = [{ instancePath: instancePath + "/param_type", schemaPath: "#/definitions/ParamType/enum", keyword: "enum", params: { allowedValues: schema79.enum }, message: "must be equal to one of the allowed values" }]; + validate67.errors = [{ instancePath: instancePath + "/param_type", schemaPath: "#/definitions/ParamType/enum", keyword: "enum", params: { allowedValues: schema80.enum }, message: "must be equal to one of the allowed values" }]; return false; } var valid0 = _errs14 === errors; @@ -9009,27 +9045,27 @@ function validate66(data, { instancePath = "", parentData, parentDataProperty, r } } } else { - validate66.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate67.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate66.errors = vErrors; + validate67.errors = vErrors; return errors === 0; } -function validate65(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +function validate66(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.success === void 0 && (missing0 = "success") || data.model_id === void 0 && (missing0 = "model_id") || data.inference_settings === void 0 && (missing0 = "inference_settings")) { - validate65.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate66.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "inference_settings" || key0 === "model_id" || key0 === "success")) { - validate65.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate66.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -9044,8 +9080,8 @@ function validate65(data, { instancePath = "", parentData, parentDataProperty, r const len0 = data0.length; for (let i0 = 0; i0 < len0; i0++) { const _errs4 = errors; - if (!validate66(data0[i0], { instancePath: instancePath + "/inference_settings/" + i0, parentData: data0, parentDataProperty: i0, rootData })) { - vErrors = vErrors === null ? validate66.errors : vErrors.concat(validate66.errors); + if (!validate67(data0[i0], { instancePath: instancePath + "/inference_settings/" + i0, parentData: data0, parentDataProperty: i0, rootData })) { + vErrors = vErrors === null ? validate67.errors : vErrors.concat(validate67.errors); errors = vErrors.length; } var valid1 = _errs4 === errors; @@ -9054,7 +9090,7 @@ function validate65(data, { instancePath = "", parentData, parentDataProperty, r } } } else { - validate65.errors = [{ instancePath: instancePath + "/inference_settings", schemaPath: "#/properties/inference_settings/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; + validate66.errors = [{ instancePath: instancePath + "/inference_settings", schemaPath: "#/properties/inference_settings/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; return false; } } @@ -9066,7 +9102,7 @@ function validate65(data, { instancePath = "", parentData, parentDataProperty, r if (data.model_id !== void 0) { const _errs5 = errors; if (typeof data.model_id !== "string") { - validate65.errors = [{ instancePath: instancePath + "/model_id", schemaPath: "#/properties/model_id/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate66.errors = [{ instancePath: instancePath + "/model_id", schemaPath: "#/properties/model_id/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs5 === errors; @@ -9078,11 +9114,11 @@ function validate65(data, { instancePath = "", parentData, parentDataProperty, r let data3 = data.success; const _errs7 = errors; if (typeof data3 !== "boolean") { - validate65.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; + validate66.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; return false; } if (true !== data3) { - validate65.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/const", keyword: "const", params: { allowedValue: true }, message: "must be equal to constant" }]; + validate66.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/const", keyword: "const", params: { allowedValue: true }, message: "must be equal to constant" }]; return false; } var valid0 = _errs7 === errors; @@ -9094,31 +9130,31 @@ function validate65(data, { instancePath = "", parentData, parentDataProperty, r } } } else { - validate65.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate66.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate65.errors = vErrors; + validate66.errors = vErrors; return errors === 0; } -var validateInstallationProgressOutcome = validate73; -var schema81 = { "additionalProperties": false, "properties": { "completedAt": { "type": ["string", "null"] }, "completedDependencies": { "maximum": 4294967295, "minimum": 0, "type": "integer" }, "completedItems": { "items": { "$ref": "#/definitions/RuntimeInstallationProgressItem" }, "type": "array" }, "currentItem": { "type": ["string", "null"] }, "dependencyCount": { "maximum": 4294967295, "minimum": 0, "type": ["integer", "null"] }, "downloadSpeed": { "maximum": 17976931348623157e292, "minimum": -17976931348623157e292, "type": ["number", "null"] }, "downloadedBytes": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "error": { "type": ["string", "null"] }, "etaSeconds": { "maximum": 17976931348623157e292, "minimum": -17976931348623157e292, "type": ["number", "null"] }, "logPath": { "type": ["string", "null"] }, "overallProgress": { "maximum": 34028234663852886e22, "minimum": -34028234663852886e22, "type": ["number", "null"] }, "stage": { "$ref": "#/definitions/RuntimeInstallationStage" }, "stageProgress": { "maximum": 34028234663852886e22, "minimum": -34028234663852886e22, "type": ["number", "null"] }, "startedAt": { "type": "string" }, "success": { "type": ["boolean", "null"] }, "tag": { "type": "string" }, "totalSize": { "maximum": 9007199254740991, "minimum": 0, "type": ["integer", "null"] } }, "required": ["tag", "startedAt", "stage", "stageProgress", "overallProgress", "currentItem", "downloadSpeed", "etaSeconds", "totalSize", "downloadedBytes", "dependencyCount", "completedDependencies", "completedItems", "error", "completedAt", "success", "logPath"], "type": "object" }; -var schema82 = { "additionalProperties": false, "properties": { "completedAt": { "type": "string" }, "name": { "type": "string" }, "size": { "maximum": 9007199254740991, "minimum": 0, "type": ["integer", "null"] }, "type": { "type": "string" } }, "required": ["name", "type", "size", "completedAt"], "type": "object" }; -var schema83 = { "enum": ["download", "extract", "venv", "dependencies", "setup"], "type": "string" }; -function validate74(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateInstallationProgressOutcome = validate74; +var schema82 = { "additionalProperties": false, "properties": { "completedAt": { "type": ["string", "null"] }, "completedDependencies": { "maximum": 4294967295, "minimum": 0, "type": "integer" }, "completedItems": { "items": { "$ref": "#/definitions/RuntimeInstallationProgressItem" }, "type": "array" }, "currentItem": { "type": ["string", "null"] }, "dependencyCount": { "maximum": 4294967295, "minimum": 0, "type": ["integer", "null"] }, "downloadSpeed": { "maximum": 17976931348623157e292, "minimum": -17976931348623157e292, "type": ["number", "null"] }, "downloadedBytes": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "error": { "type": ["string", "null"] }, "etaSeconds": { "maximum": 17976931348623157e292, "minimum": -17976931348623157e292, "type": ["number", "null"] }, "logPath": { "type": ["string", "null"] }, "overallProgress": { "maximum": 34028234663852886e22, "minimum": -34028234663852886e22, "type": ["number", "null"] }, "stage": { "$ref": "#/definitions/RuntimeInstallationStage" }, "stageProgress": { "maximum": 34028234663852886e22, "minimum": -34028234663852886e22, "type": ["number", "null"] }, "startedAt": { "type": "string" }, "success": { "type": ["boolean", "null"] }, "tag": { "type": "string" }, "totalSize": { "maximum": 9007199254740991, "minimum": 0, "type": ["integer", "null"] } }, "required": ["tag", "startedAt", "stage", "stageProgress", "overallProgress", "currentItem", "downloadSpeed", "etaSeconds", "totalSize", "downloadedBytes", "dependencyCount", "completedDependencies", "completedItems", "error", "completedAt", "success", "logPath"], "type": "object" }; +var schema83 = { "additionalProperties": false, "properties": { "completedAt": { "type": "string" }, "name": { "type": "string" }, "size": { "maximum": 9007199254740991, "minimum": 0, "type": ["integer", "null"] }, "type": { "type": "string" } }, "required": ["name", "type", "size", "completedAt"], "type": "object" }; +var schema84 = { "enum": ["download", "extract", "venv", "dependencies", "setup"], "type": "string" }; +function validate75(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.tag === void 0 && (missing0 = "tag") || data.startedAt === void 0 && (missing0 = "startedAt") || data.stage === void 0 && (missing0 = "stage") || data.stageProgress === void 0 && (missing0 = "stageProgress") || data.overallProgress === void 0 && (missing0 = "overallProgress") || data.currentItem === void 0 && (missing0 = "currentItem") || data.downloadSpeed === void 0 && (missing0 = "downloadSpeed") || data.etaSeconds === void 0 && (missing0 = "etaSeconds") || data.totalSize === void 0 && (missing0 = "totalSize") || data.downloadedBytes === void 0 && (missing0 = "downloadedBytes") || data.dependencyCount === void 0 && (missing0 = "dependencyCount") || data.completedDependencies === void 0 && (missing0 = "completedDependencies") || data.completedItems === void 0 && (missing0 = "completedItems") || data.error === void 0 && (missing0 = "error") || data.completedAt === void 0 && (missing0 = "completedAt") || data.success === void 0 && (missing0 = "success") || data.logPath === void 0 && (missing0 = "logPath")) { - validate74.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate75.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { - if (!func2.call(schema81.properties, key0)) { - validate74.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + if (!func2.call(schema82.properties, key0)) { + validate75.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -9128,7 +9164,7 @@ function validate74(data, { instancePath = "", parentData, parentDataProperty, r let data0 = data.completedAt; const _errs2 = errors; if (typeof data0 !== "string" && data0 !== null) { - validate74.errors = [{ instancePath: instancePath + "/completedAt", schemaPath: "#/properties/completedAt/type", keyword: "type", params: { type: schema81.properties.completedAt.type }, message: "must be string,null" }]; + validate75.errors = [{ instancePath: instancePath + "/completedAt", schemaPath: "#/properties/completedAt/type", keyword: "type", params: { type: schema82.properties.completedAt.type }, message: "must be string,null" }]; return false; } var valid0 = _errs2 === errors; @@ -9140,17 +9176,17 @@ function validate74(data, { instancePath = "", parentData, parentDataProperty, r let data1 = data.completedDependencies; const _errs4 = errors; if (!(typeof data1 == "number" && (!(data1 % 1) && !isNaN(data1)) && isFinite(data1))) { - validate74.errors = [{ instancePath: instancePath + "/completedDependencies", schemaPath: "#/properties/completedDependencies/type", keyword: "type", params: { type: "integer" }, message: "must be integer" }]; + validate75.errors = [{ instancePath: instancePath + "/completedDependencies", schemaPath: "#/properties/completedDependencies/type", keyword: "type", params: { type: "integer" }, message: "must be integer" }]; return false; } if (errors === _errs4) { if (typeof data1 == "number" && isFinite(data1)) { if (data1 > 4294967295 || isNaN(data1)) { - validate74.errors = [{ instancePath: instancePath + "/completedDependencies", schemaPath: "#/properties/completedDependencies/maximum", keyword: "maximum", params: { comparison: "<=", limit: 4294967295 }, message: "must be <= 4294967295" }]; + validate75.errors = [{ instancePath: instancePath + "/completedDependencies", schemaPath: "#/properties/completedDependencies/maximum", keyword: "maximum", params: { comparison: "<=", limit: 4294967295 }, message: "must be <= 4294967295" }]; return false; } else { if (data1 < 0 || isNaN(data1)) { - validate74.errors = [{ instancePath: instancePath + "/completedDependencies", schemaPath: "#/properties/completedDependencies/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; + validate75.errors = [{ instancePath: instancePath + "/completedDependencies", schemaPath: "#/properties/completedDependencies/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; return false; } } @@ -9176,13 +9212,13 @@ function validate74(data, { instancePath = "", parentData, parentDataProperty, r if (data3 && typeof data3 == "object" && !Array.isArray(data3)) { let missing1; if (data3.name === void 0 && (missing1 = "name") || data3.type === void 0 && (missing1 = "type") || data3.size === void 0 && (missing1 = "size") || data3.completedAt === void 0 && (missing1 = "completedAt")) { - validate74.errors = [{ instancePath: instancePath + "/completedItems/" + i0, schemaPath: "#/definitions/RuntimeInstallationProgressItem/required", keyword: "required", params: { missingProperty: missing1 }, message: "must have required property '" + missing1 + "'" }]; + validate75.errors = [{ instancePath: instancePath + "/completedItems/" + i0, schemaPath: "#/definitions/RuntimeInstallationProgressItem/required", keyword: "required", params: { missingProperty: missing1 }, message: "must have required property '" + missing1 + "'" }]; return false; } else { const _errs11 = errors; for (const key1 in data3) { if (!(key1 === "completedAt" || key1 === "name" || key1 === "size" || key1 === "type")) { - validate74.errors = [{ instancePath: instancePath + "/completedItems/" + i0, schemaPath: "#/definitions/RuntimeInstallationProgressItem/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key1 }, message: "must NOT have additional properties" }]; + validate75.errors = [{ instancePath: instancePath + "/completedItems/" + i0, schemaPath: "#/definitions/RuntimeInstallationProgressItem/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key1 }, message: "must NOT have additional properties" }]; return false; break; } @@ -9191,7 +9227,7 @@ function validate74(data, { instancePath = "", parentData, parentDataProperty, r if (data3.completedAt !== void 0) { const _errs12 = errors; if (typeof data3.completedAt !== "string") { - validate74.errors = [{ instancePath: instancePath + "/completedItems/" + i0 + "/completedAt", schemaPath: "#/definitions/RuntimeInstallationProgressItem/properties/completedAt/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate75.errors = [{ instancePath: instancePath + "/completedItems/" + i0 + "/completedAt", schemaPath: "#/definitions/RuntimeInstallationProgressItem/properties/completedAt/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid3 = _errs12 === errors; @@ -9202,7 +9238,7 @@ function validate74(data, { instancePath = "", parentData, parentDataProperty, r if (data3.name !== void 0) { const _errs14 = errors; if (typeof data3.name !== "string") { - validate74.errors = [{ instancePath: instancePath + "/completedItems/" + i0 + "/name", schemaPath: "#/definitions/RuntimeInstallationProgressItem/properties/name/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate75.errors = [{ instancePath: instancePath + "/completedItems/" + i0 + "/name", schemaPath: "#/definitions/RuntimeInstallationProgressItem/properties/name/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid3 = _errs14 === errors; @@ -9214,17 +9250,17 @@ function validate74(data, { instancePath = "", parentData, parentDataProperty, r let data6 = data3.size; const _errs16 = errors; if (!(typeof data6 == "number" && (!(data6 % 1) && !isNaN(data6)) && isFinite(data6)) && data6 !== null) { - validate74.errors = [{ instancePath: instancePath + "/completedItems/" + i0 + "/size", schemaPath: "#/definitions/RuntimeInstallationProgressItem/properties/size/type", keyword: "type", params: { type: schema82.properties.size.type }, message: "must be integer,null" }]; + validate75.errors = [{ instancePath: instancePath + "/completedItems/" + i0 + "/size", schemaPath: "#/definitions/RuntimeInstallationProgressItem/properties/size/type", keyword: "type", params: { type: schema83.properties.size.type }, message: "must be integer,null" }]; return false; } if (errors === _errs16) { if (typeof data6 == "number" && isFinite(data6)) { if (data6 > 9007199254740991 || isNaN(data6)) { - validate74.errors = [{ instancePath: instancePath + "/completedItems/" + i0 + "/size", schemaPath: "#/definitions/RuntimeInstallationProgressItem/properties/size/maximum", keyword: "maximum", params: { comparison: "<=", limit: 9007199254740991 }, message: "must be <= 9007199254740991" }]; + validate75.errors = [{ instancePath: instancePath + "/completedItems/" + i0 + "/size", schemaPath: "#/definitions/RuntimeInstallationProgressItem/properties/size/maximum", keyword: "maximum", params: { comparison: "<=", limit: 9007199254740991 }, message: "must be <= 9007199254740991" }]; return false; } else { if (data6 < 0 || isNaN(data6)) { - validate74.errors = [{ instancePath: instancePath + "/completedItems/" + i0 + "/size", schemaPath: "#/definitions/RuntimeInstallationProgressItem/properties/size/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; + validate75.errors = [{ instancePath: instancePath + "/completedItems/" + i0 + "/size", schemaPath: "#/definitions/RuntimeInstallationProgressItem/properties/size/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; return false; } } @@ -9238,7 +9274,7 @@ function validate74(data, { instancePath = "", parentData, parentDataProperty, r if (data3.type !== void 0) { const _errs18 = errors; if (typeof data3.type !== "string") { - validate74.errors = [{ instancePath: instancePath + "/completedItems/" + i0 + "/type", schemaPath: "#/definitions/RuntimeInstallationProgressItem/properties/type/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate75.errors = [{ instancePath: instancePath + "/completedItems/" + i0 + "/type", schemaPath: "#/definitions/RuntimeInstallationProgressItem/properties/type/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid3 = _errs18 === errors; @@ -9251,7 +9287,7 @@ function validate74(data, { instancePath = "", parentData, parentDataProperty, r } } } else { - validate74.errors = [{ instancePath: instancePath + "/completedItems/" + i0, schemaPath: "#/definitions/RuntimeInstallationProgressItem/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate75.errors = [{ instancePath: instancePath + "/completedItems/" + i0, schemaPath: "#/definitions/RuntimeInstallationProgressItem/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } @@ -9261,7 +9297,7 @@ function validate74(data, { instancePath = "", parentData, parentDataProperty, r } } } else { - validate74.errors = [{ instancePath: instancePath + "/completedItems", schemaPath: "#/properties/completedItems/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; + validate75.errors = [{ instancePath: instancePath + "/completedItems", schemaPath: "#/properties/completedItems/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; return false; } } @@ -9274,7 +9310,7 @@ function validate74(data, { instancePath = "", parentData, parentDataProperty, r let data8 = data.currentItem; const _errs20 = errors; if (typeof data8 !== "string" && data8 !== null) { - validate74.errors = [{ instancePath: instancePath + "/currentItem", schemaPath: "#/properties/currentItem/type", keyword: "type", params: { type: schema81.properties.currentItem.type }, message: "must be string,null" }]; + validate75.errors = [{ instancePath: instancePath + "/currentItem", schemaPath: "#/properties/currentItem/type", keyword: "type", params: { type: schema82.properties.currentItem.type }, message: "must be string,null" }]; return false; } var valid0 = _errs20 === errors; @@ -9286,17 +9322,17 @@ function validate74(data, { instancePath = "", parentData, parentDataProperty, r let data9 = data.dependencyCount; const _errs22 = errors; if (!(typeof data9 == "number" && (!(data9 % 1) && !isNaN(data9)) && isFinite(data9)) && data9 !== null) { - validate74.errors = [{ instancePath: instancePath + "/dependencyCount", schemaPath: "#/properties/dependencyCount/type", keyword: "type", params: { type: schema81.properties.dependencyCount.type }, message: "must be integer,null" }]; + validate75.errors = [{ instancePath: instancePath + "/dependencyCount", schemaPath: "#/properties/dependencyCount/type", keyword: "type", params: { type: schema82.properties.dependencyCount.type }, message: "must be integer,null" }]; return false; } if (errors === _errs22) { if (typeof data9 == "number" && isFinite(data9)) { if (data9 > 4294967295 || isNaN(data9)) { - validate74.errors = [{ instancePath: instancePath + "/dependencyCount", schemaPath: "#/properties/dependencyCount/maximum", keyword: "maximum", params: { comparison: "<=", limit: 4294967295 }, message: "must be <= 4294967295" }]; + validate75.errors = [{ instancePath: instancePath + "/dependencyCount", schemaPath: "#/properties/dependencyCount/maximum", keyword: "maximum", params: { comparison: "<=", limit: 4294967295 }, message: "must be <= 4294967295" }]; return false; } else { if (data9 < 0 || isNaN(data9)) { - validate74.errors = [{ instancePath: instancePath + "/dependencyCount", schemaPath: "#/properties/dependencyCount/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; + validate75.errors = [{ instancePath: instancePath + "/dependencyCount", schemaPath: "#/properties/dependencyCount/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; return false; } } @@ -9311,17 +9347,17 @@ function validate74(data, { instancePath = "", parentData, parentDataProperty, r let data10 = data.downloadSpeed; const _errs24 = errors; if (!(typeof data10 == "number" && isFinite(data10)) && data10 !== null) { - validate74.errors = [{ instancePath: instancePath + "/downloadSpeed", schemaPath: "#/properties/downloadSpeed/type", keyword: "type", params: { type: schema81.properties.downloadSpeed.type }, message: "must be number,null" }]; + validate75.errors = [{ instancePath: instancePath + "/downloadSpeed", schemaPath: "#/properties/downloadSpeed/type", keyword: "type", params: { type: schema82.properties.downloadSpeed.type }, message: "must be number,null" }]; return false; } if (errors === _errs24) { if (typeof data10 == "number" && isFinite(data10)) { if (data10 > 17976931348623157e292 || isNaN(data10)) { - validate74.errors = [{ instancePath: instancePath + "/downloadSpeed", schemaPath: "#/properties/downloadSpeed/maximum", keyword: "maximum", params: { comparison: "<=", limit: 17976931348623157e292 }, message: "must be <= 1.7976931348623157e+308" }]; + validate75.errors = [{ instancePath: instancePath + "/downloadSpeed", schemaPath: "#/properties/downloadSpeed/maximum", keyword: "maximum", params: { comparison: "<=", limit: 17976931348623157e292 }, message: "must be <= 1.7976931348623157e+308" }]; return false; } else { if (data10 < -17976931348623157e292 || isNaN(data10)) { - validate74.errors = [{ instancePath: instancePath + "/downloadSpeed", schemaPath: "#/properties/downloadSpeed/minimum", keyword: "minimum", params: { comparison: ">=", limit: -17976931348623157e292 }, message: "must be >= -1.7976931348623157e+308" }]; + validate75.errors = [{ instancePath: instancePath + "/downloadSpeed", schemaPath: "#/properties/downloadSpeed/minimum", keyword: "minimum", params: { comparison: ">=", limit: -17976931348623157e292 }, message: "must be >= -1.7976931348623157e+308" }]; return false; } } @@ -9336,17 +9372,17 @@ function validate74(data, { instancePath = "", parentData, parentDataProperty, r let data11 = data.downloadedBytes; const _errs26 = errors; if (!(typeof data11 == "number" && (!(data11 % 1) && !isNaN(data11)) && isFinite(data11))) { - validate74.errors = [{ instancePath: instancePath + "/downloadedBytes", schemaPath: "#/properties/downloadedBytes/type", keyword: "type", params: { type: "integer" }, message: "must be integer" }]; + validate75.errors = [{ instancePath: instancePath + "/downloadedBytes", schemaPath: "#/properties/downloadedBytes/type", keyword: "type", params: { type: "integer" }, message: "must be integer" }]; return false; } if (errors === _errs26) { if (typeof data11 == "number" && isFinite(data11)) { if (data11 > 9007199254740991 || isNaN(data11)) { - validate74.errors = [{ instancePath: instancePath + "/downloadedBytes", schemaPath: "#/properties/downloadedBytes/maximum", keyword: "maximum", params: { comparison: "<=", limit: 9007199254740991 }, message: "must be <= 9007199254740991" }]; + validate75.errors = [{ instancePath: instancePath + "/downloadedBytes", schemaPath: "#/properties/downloadedBytes/maximum", keyword: "maximum", params: { comparison: "<=", limit: 9007199254740991 }, message: "must be <= 9007199254740991" }]; return false; } else { if (data11 < 0 || isNaN(data11)) { - validate74.errors = [{ instancePath: instancePath + "/downloadedBytes", schemaPath: "#/properties/downloadedBytes/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; + validate75.errors = [{ instancePath: instancePath + "/downloadedBytes", schemaPath: "#/properties/downloadedBytes/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; return false; } } @@ -9361,7 +9397,7 @@ function validate74(data, { instancePath = "", parentData, parentDataProperty, r let data12 = data.error; const _errs28 = errors; if (typeof data12 !== "string" && data12 !== null) { - validate74.errors = [{ instancePath: instancePath + "/error", schemaPath: "#/properties/error/type", keyword: "type", params: { type: schema81.properties.error.type }, message: "must be string,null" }]; + validate75.errors = [{ instancePath: instancePath + "/error", schemaPath: "#/properties/error/type", keyword: "type", params: { type: schema82.properties.error.type }, message: "must be string,null" }]; return false; } var valid0 = _errs28 === errors; @@ -9373,17 +9409,17 @@ function validate74(data, { instancePath = "", parentData, parentDataProperty, r let data13 = data.etaSeconds; const _errs30 = errors; if (!(typeof data13 == "number" && isFinite(data13)) && data13 !== null) { - validate74.errors = [{ instancePath: instancePath + "/etaSeconds", schemaPath: "#/properties/etaSeconds/type", keyword: "type", params: { type: schema81.properties.etaSeconds.type }, message: "must be number,null" }]; + validate75.errors = [{ instancePath: instancePath + "/etaSeconds", schemaPath: "#/properties/etaSeconds/type", keyword: "type", params: { type: schema82.properties.etaSeconds.type }, message: "must be number,null" }]; return false; } if (errors === _errs30) { if (typeof data13 == "number" && isFinite(data13)) { if (data13 > 17976931348623157e292 || isNaN(data13)) { - validate74.errors = [{ instancePath: instancePath + "/etaSeconds", schemaPath: "#/properties/etaSeconds/maximum", keyword: "maximum", params: { comparison: "<=", limit: 17976931348623157e292 }, message: "must be <= 1.7976931348623157e+308" }]; + validate75.errors = [{ instancePath: instancePath + "/etaSeconds", schemaPath: "#/properties/etaSeconds/maximum", keyword: "maximum", params: { comparison: "<=", limit: 17976931348623157e292 }, message: "must be <= 1.7976931348623157e+308" }]; return false; } else { if (data13 < -17976931348623157e292 || isNaN(data13)) { - validate74.errors = [{ instancePath: instancePath + "/etaSeconds", schemaPath: "#/properties/etaSeconds/minimum", keyword: "minimum", params: { comparison: ">=", limit: -17976931348623157e292 }, message: "must be >= -1.7976931348623157e+308" }]; + validate75.errors = [{ instancePath: instancePath + "/etaSeconds", schemaPath: "#/properties/etaSeconds/minimum", keyword: "minimum", params: { comparison: ">=", limit: -17976931348623157e292 }, message: "must be >= -1.7976931348623157e+308" }]; return false; } } @@ -9398,7 +9434,7 @@ function validate74(data, { instancePath = "", parentData, parentDataProperty, r let data14 = data.logPath; const _errs32 = errors; if (typeof data14 !== "string" && data14 !== null) { - validate74.errors = [{ instancePath: instancePath + "/logPath", schemaPath: "#/properties/logPath/type", keyword: "type", params: { type: schema81.properties.logPath.type }, message: "must be string,null" }]; + validate75.errors = [{ instancePath: instancePath + "/logPath", schemaPath: "#/properties/logPath/type", keyword: "type", params: { type: schema82.properties.logPath.type }, message: "must be string,null" }]; return false; } var valid0 = _errs32 === errors; @@ -9410,17 +9446,17 @@ function validate74(data, { instancePath = "", parentData, parentDataProperty, r let data15 = data.overallProgress; const _errs34 = errors; if (!(typeof data15 == "number" && isFinite(data15)) && data15 !== null) { - validate74.errors = [{ instancePath: instancePath + "/overallProgress", schemaPath: "#/properties/overallProgress/type", keyword: "type", params: { type: schema81.properties.overallProgress.type }, message: "must be number,null" }]; + validate75.errors = [{ instancePath: instancePath + "/overallProgress", schemaPath: "#/properties/overallProgress/type", keyword: "type", params: { type: schema82.properties.overallProgress.type }, message: "must be number,null" }]; return false; } if (errors === _errs34) { if (typeof data15 == "number" && isFinite(data15)) { if (data15 > 34028234663852886e22 || isNaN(data15)) { - validate74.errors = [{ instancePath: instancePath + "/overallProgress", schemaPath: "#/properties/overallProgress/maximum", keyword: "maximum", params: { comparison: "<=", limit: 34028234663852886e22 }, message: "must be <= 3.4028234663852886e+38" }]; + validate75.errors = [{ instancePath: instancePath + "/overallProgress", schemaPath: "#/properties/overallProgress/maximum", keyword: "maximum", params: { comparison: "<=", limit: 34028234663852886e22 }, message: "must be <= 3.4028234663852886e+38" }]; return false; } else { if (data15 < -34028234663852886e22 || isNaN(data15)) { - validate74.errors = [{ instancePath: instancePath + "/overallProgress", schemaPath: "#/properties/overallProgress/minimum", keyword: "minimum", params: { comparison: ">=", limit: -34028234663852886e22 }, message: "must be >= -3.4028234663852886e+38" }]; + validate75.errors = [{ instancePath: instancePath + "/overallProgress", schemaPath: "#/properties/overallProgress/minimum", keyword: "minimum", params: { comparison: ">=", limit: -34028234663852886e22 }, message: "must be >= -3.4028234663852886e+38" }]; return false; } } @@ -9435,11 +9471,11 @@ function validate74(data, { instancePath = "", parentData, parentDataProperty, r let data16 = data.stage; const _errs36 = errors; if (typeof data16 !== "string") { - validate74.errors = [{ instancePath: instancePath + "/stage", schemaPath: "#/definitions/RuntimeInstallationStage/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate75.errors = [{ instancePath: instancePath + "/stage", schemaPath: "#/definitions/RuntimeInstallationStage/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } if (!(data16 === "download" || data16 === "extract" || data16 === "venv" || data16 === "dependencies" || data16 === "setup")) { - validate74.errors = [{ instancePath: instancePath + "/stage", schemaPath: "#/definitions/RuntimeInstallationStage/enum", keyword: "enum", params: { allowedValues: schema83.enum }, message: "must be equal to one of the allowed values" }]; + validate75.errors = [{ instancePath: instancePath + "/stage", schemaPath: "#/definitions/RuntimeInstallationStage/enum", keyword: "enum", params: { allowedValues: schema84.enum }, message: "must be equal to one of the allowed values" }]; return false; } var valid0 = _errs36 === errors; @@ -9451,17 +9487,17 @@ function validate74(data, { instancePath = "", parentData, parentDataProperty, r let data17 = data.stageProgress; const _errs39 = errors; if (!(typeof data17 == "number" && isFinite(data17)) && data17 !== null) { - validate74.errors = [{ instancePath: instancePath + "/stageProgress", schemaPath: "#/properties/stageProgress/type", keyword: "type", params: { type: schema81.properties.stageProgress.type }, message: "must be number,null" }]; + validate75.errors = [{ instancePath: instancePath + "/stageProgress", schemaPath: "#/properties/stageProgress/type", keyword: "type", params: { type: schema82.properties.stageProgress.type }, message: "must be number,null" }]; return false; } if (errors === _errs39) { if (typeof data17 == "number" && isFinite(data17)) { if (data17 > 34028234663852886e22 || isNaN(data17)) { - validate74.errors = [{ instancePath: instancePath + "/stageProgress", schemaPath: "#/properties/stageProgress/maximum", keyword: "maximum", params: { comparison: "<=", limit: 34028234663852886e22 }, message: "must be <= 3.4028234663852886e+38" }]; + validate75.errors = [{ instancePath: instancePath + "/stageProgress", schemaPath: "#/properties/stageProgress/maximum", keyword: "maximum", params: { comparison: "<=", limit: 34028234663852886e22 }, message: "must be <= 3.4028234663852886e+38" }]; return false; } else { if (data17 < -34028234663852886e22 || isNaN(data17)) { - validate74.errors = [{ instancePath: instancePath + "/stageProgress", schemaPath: "#/properties/stageProgress/minimum", keyword: "minimum", params: { comparison: ">=", limit: -34028234663852886e22 }, message: "must be >= -3.4028234663852886e+38" }]; + validate75.errors = [{ instancePath: instancePath + "/stageProgress", schemaPath: "#/properties/stageProgress/minimum", keyword: "minimum", params: { comparison: ">=", limit: -34028234663852886e22 }, message: "must be >= -3.4028234663852886e+38" }]; return false; } } @@ -9475,7 +9511,7 @@ function validate74(data, { instancePath = "", parentData, parentDataProperty, r if (data.startedAt !== void 0) { const _errs41 = errors; if (typeof data.startedAt !== "string") { - validate74.errors = [{ instancePath: instancePath + "/startedAt", schemaPath: "#/properties/startedAt/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate75.errors = [{ instancePath: instancePath + "/startedAt", schemaPath: "#/properties/startedAt/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs41 === errors; @@ -9487,7 +9523,7 @@ function validate74(data, { instancePath = "", parentData, parentDataProperty, r let data19 = data.success; const _errs43 = errors; if (typeof data19 !== "boolean" && data19 !== null) { - validate74.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: schema81.properties.success.type }, message: "must be boolean,null" }]; + validate75.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: schema82.properties.success.type }, message: "must be boolean,null" }]; return false; } var valid0 = _errs43 === errors; @@ -9498,7 +9534,7 @@ function validate74(data, { instancePath = "", parentData, parentDataProperty, r if (data.tag !== void 0) { const _errs45 = errors; if (typeof data.tag !== "string") { - validate74.errors = [{ instancePath: instancePath + "/tag", schemaPath: "#/properties/tag/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate75.errors = [{ instancePath: instancePath + "/tag", schemaPath: "#/properties/tag/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs45 === errors; @@ -9510,17 +9546,17 @@ function validate74(data, { instancePath = "", parentData, parentDataProperty, r let data21 = data.totalSize; const _errs47 = errors; if (!(typeof data21 == "number" && (!(data21 % 1) && !isNaN(data21)) && isFinite(data21)) && data21 !== null) { - validate74.errors = [{ instancePath: instancePath + "/totalSize", schemaPath: "#/properties/totalSize/type", keyword: "type", params: { type: schema81.properties.totalSize.type }, message: "must be integer,null" }]; + validate75.errors = [{ instancePath: instancePath + "/totalSize", schemaPath: "#/properties/totalSize/type", keyword: "type", params: { type: schema82.properties.totalSize.type }, message: "must be integer,null" }]; return false; } if (errors === _errs47) { if (typeof data21 == "number" && isFinite(data21)) { if (data21 > 9007199254740991 || isNaN(data21)) { - validate74.errors = [{ instancePath: instancePath + "/totalSize", schemaPath: "#/properties/totalSize/maximum", keyword: "maximum", params: { comparison: "<=", limit: 9007199254740991 }, message: "must be <= 9007199254740991" }]; + validate75.errors = [{ instancePath: instancePath + "/totalSize", schemaPath: "#/properties/totalSize/maximum", keyword: "maximum", params: { comparison: "<=", limit: 9007199254740991 }, message: "must be <= 9007199254740991" }]; return false; } else { if (data21 < 0 || isNaN(data21)) { - validate74.errors = [{ instancePath: instancePath + "/totalSize", schemaPath: "#/properties/totalSize/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; + validate75.errors = [{ instancePath: instancePath + "/totalSize", schemaPath: "#/properties/totalSize/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; return false; } } @@ -9549,21 +9585,21 @@ function validate74(data, { instancePath = "", parentData, parentDataProperty, r } } } else { - validate74.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate75.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate74.errors = vErrors; + validate75.errors = vErrors; return errors === 0; } -function validate73(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +function validate74(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; const _errs0 = errors; let valid0 = false; const _errs1 = errors; - if (!validate74(data, { instancePath, parentData, parentDataProperty, rootData })) { - vErrors = vErrors === null ? validate74.errors : vErrors.concat(validate74.errors); + if (!validate75(data, { instancePath, parentData, parentDataProperty, rootData })) { + vErrors = vErrors === null ? validate75.errors : vErrors.concat(validate75.errors); errors = vErrors.length; } var _valid0 = _errs1 === errors; @@ -9590,7 +9626,7 @@ function validate73(data, { instancePath = "", parentData, parentDataProperty, r vErrors.push(err1); } errors++; - validate73.errors = vErrors; + validate74.errors = vErrors; return false; } else { errors = _errs0; @@ -9602,24 +9638,24 @@ function validate73(data, { instancePath = "", parentData, parentDataProperty, r } } } - validate73.errors = vErrors; + validate74.errors = vErrors; return errors === 0; } -var validateInstalledVersionsOutcome = validate76; -function validate76(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateInstalledVersionsOutcome = validate77; +function validate77(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.success === void 0 && (missing0 = "success") || data.versions === void 0 && (missing0 = "versions")) { - validate76.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate77.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "success" || key0 === "versions")) { - validate76.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate77.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -9629,11 +9665,11 @@ function validate76(data, { instancePath = "", parentData, parentDataProperty, r let data0 = data.success; const _errs2 = errors; if (typeof data0 !== "boolean") { - validate76.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; + validate77.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; return false; } if (true !== data0) { - validate76.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/const", keyword: "const", params: { allowedValue: true }, message: "must be equal to constant" }]; + validate77.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/const", keyword: "const", params: { allowedValue: true }, message: "must be equal to constant" }]; return false; } var valid0 = _errs2 === errors; @@ -9651,7 +9687,7 @@ function validate76(data, { instancePath = "", parentData, parentDataProperty, r for (let i0 = 0; i0 < len0; i0++) { const _errs6 = errors; if (typeof data1[i0] !== "string") { - validate76.errors = [{ instancePath: instancePath + "/versions/" + i0, schemaPath: "#/properties/versions/items/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate77.errors = [{ instancePath: instancePath + "/versions/" + i0, schemaPath: "#/properties/versions/items/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid1 = _errs6 === errors; @@ -9660,7 +9696,7 @@ function validate76(data, { instancePath = "", parentData, parentDataProperty, r } } } else { - validate76.errors = [{ instancePath: instancePath + "/versions", schemaPath: "#/properties/versions/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; + validate77.errors = [{ instancePath: instancePath + "/versions", schemaPath: "#/properties/versions/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; return false; } } @@ -9672,28 +9708,28 @@ function validate76(data, { instancePath = "", parentData, parentDataProperty, r } } } else { - validate76.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate77.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate76.errors = vErrors; + validate77.errors = vErrors; return errors === 0; } -var validateInstallVersionDependenciesOutcome = validate77; -function validate77(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateInstallVersionDependenciesOutcome = validate78; +function validate78(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.success === void 0 && (missing0 = "success")) { - validate77.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate78.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "success")) { - validate77.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate78.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -9701,22 +9737,22 @@ function validate77(data, { instancePath = "", parentData, parentDataProperty, r if (_errs1 === errors) { if (data.success !== void 0) { if (typeof data.success !== "boolean") { - validate77.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; + validate78.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; return false; } } } } } else { - validate77.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate78.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate77.errors = vErrors; + validate78.errors = vErrors; return errors === 0; } -var validateInstallVersionDependenciesParams = validate78; -function validate78(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateInstallVersionDependenciesParams = validate79; +function validate79(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; const _errs0 = errors; @@ -9877,7 +9913,7 @@ function validate78(data, { instancePath = "", parentData, parentDataProperty, r vErrors.push(err10); } errors++; - validate78.errors = vErrors; + validate79.errors = vErrors; return false; } else { errors = _errs0; @@ -9889,11 +9925,11 @@ function validate78(data, { instancePath = "", parentData, parentDataProperty, r } } } - validate78.errors = vErrors; + validate79.errors = vErrors; return errors === 0; } -var validateInstallVersionOutcome = validate79; -function validate79(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateInstallVersionOutcome = validate80; +function validate80(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; const _errs0 = errors; @@ -10076,7 +10112,7 @@ function validate79(data, { instancePath = "", parentData, parentDataProperty, r vErrors.push(err12); } errors++; - validate79.errors = vErrors; + validate80.errors = vErrors; return false; } else { errors = _errs0; @@ -10088,12 +10124,12 @@ function validate79(data, { instancePath = "", parentData, parentDataProperty, r } } } - validate79.errors = vErrors; + validate80.errors = vErrors; return errors === 0; } -var validateInstallVersionParams = validate80; -var schema90 = { "anyOf": [{ "additionalProperties": false, "properties": { "app_id": { "type": "string" }, "preview_id": { "default": null, "type": ["string", "null"] }, "tag": { "type": "string" } }, "required": ["app_id", "tag"], "type": "object" }, { "additionalProperties": false, "properties": { "app_id": { "type": "string" }, "previewId": { "default": null, "type": ["string", "null"] }, "tag": { "type": "string" } }, "required": ["app_id", "tag"], "type": "object" }, { "additionalProperties": false, "properties": { "appId": { "type": "string" }, "preview_id": { "default": null, "type": ["string", "null"] }, "tag": { "type": "string" } }, "required": ["appId", "tag"], "type": "object" }, { "additionalProperties": false, "properties": { "appId": { "type": "string" }, "previewId": { "default": null, "type": ["string", "null"] }, "tag": { "type": "string" } }, "required": ["appId", "tag"], "type": "object" }] }; -function validate80(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateInstallVersionParams = validate81; +var schema91 = { "anyOf": [{ "additionalProperties": false, "properties": { "app_id": { "type": "string" }, "preview_id": { "default": null, "type": ["string", "null"] }, "tag": { "type": "string" } }, "required": ["app_id", "tag"], "type": "object" }, { "additionalProperties": false, "properties": { "app_id": { "type": "string" }, "previewId": { "default": null, "type": ["string", "null"] }, "tag": { "type": "string" } }, "required": ["app_id", "tag"], "type": "object" }, { "additionalProperties": false, "properties": { "appId": { "type": "string" }, "preview_id": { "default": null, "type": ["string", "null"] }, "tag": { "type": "string" } }, "required": ["appId", "tag"], "type": "object" }, { "additionalProperties": false, "properties": { "appId": { "type": "string" }, "previewId": { "default": null, "type": ["string", "null"] }, "tag": { "type": "string" } }, "required": ["appId", "tag"], "type": "object" }] }; +function validate81(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; const _errs0 = errors; @@ -10145,7 +10181,7 @@ function validate80(data, { instancePath = "", parentData, parentDataProperty, r let data1 = data.preview_id; const _errs6 = errors; if (typeof data1 !== "string" && data1 !== null) { - const err3 = { instancePath: instancePath + "/preview_id", schemaPath: "#/anyOf/0/properties/preview_id/type", keyword: "type", params: { type: schema90.anyOf[0].properties.preview_id.type }, message: "must be string,null" }; + const err3 = { instancePath: instancePath + "/preview_id", schemaPath: "#/anyOf/0/properties/preview_id/type", keyword: "type", params: { type: schema91.anyOf[0].properties.preview_id.type }, message: "must be string,null" }; if (vErrors === null) { vErrors = [err3]; } else { @@ -10237,7 +10273,7 @@ function validate80(data, { instancePath = "", parentData, parentDataProperty, r let data4 = data.previewId; const _errs15 = errors; if (typeof data4 !== "string" && data4 !== null) { - const err9 = { instancePath: instancePath + "/previewId", schemaPath: "#/anyOf/1/properties/previewId/type", keyword: "type", params: { type: schema90.anyOf[1].properties.previewId.type }, message: "must be string,null" }; + const err9 = { instancePath: instancePath + "/previewId", schemaPath: "#/anyOf/1/properties/previewId/type", keyword: "type", params: { type: schema91.anyOf[1].properties.previewId.type }, message: "must be string,null" }; if (vErrors === null) { vErrors = [err9]; } else { @@ -10329,7 +10365,7 @@ function validate80(data, { instancePath = "", parentData, parentDataProperty, r let data7 = data.preview_id; const _errs24 = errors; if (typeof data7 !== "string" && data7 !== null) { - const err15 = { instancePath: instancePath + "/preview_id", schemaPath: "#/anyOf/2/properties/preview_id/type", keyword: "type", params: { type: schema90.anyOf[2].properties.preview_id.type }, message: "must be string,null" }; + const err15 = { instancePath: instancePath + "/preview_id", schemaPath: "#/anyOf/2/properties/preview_id/type", keyword: "type", params: { type: schema91.anyOf[2].properties.preview_id.type }, message: "must be string,null" }; if (vErrors === null) { vErrors = [err15]; } else { @@ -10421,7 +10457,7 @@ function validate80(data, { instancePath = "", parentData, parentDataProperty, r let data10 = data.previewId; const _errs33 = errors; if (typeof data10 !== "string" && data10 !== null) { - const err21 = { instancePath: instancePath + "/previewId", schemaPath: "#/anyOf/3/properties/previewId/type", keyword: "type", params: { type: schema90.anyOf[3].properties.previewId.type }, message: "must be string,null" }; + const err21 = { instancePath: instancePath + "/previewId", schemaPath: "#/anyOf/3/properties/previewId/type", keyword: "type", params: { type: schema91.anyOf[3].properties.previewId.type }, message: "must be string,null" }; if (vErrors === null) { vErrors = [err21]; } else { @@ -10476,7 +10512,7 @@ function validate80(data, { instancePath = "", parentData, parentDataProperty, r vErrors.push(err24); } errors++; - validate80.errors = vErrors; + validate81.errors = vErrors; return false; } else { errors = _errs0; @@ -10488,26 +10524,26 @@ function validate80(data, { instancePath = "", parentData, parentDataProperty, r } } } - validate80.errors = vErrors; + validate81.errors = vErrors; return errors === 0; } -var validateLibraryModelMetadataOutcome = validate81; -var schema92 = { "additionalProperties": false, "description": "Derived component metadata for a directory-root bundle model.", "properties": { "class_name": { "default": null, "type": ["string", "null"] }, "name": { "type": "string" }, "relative_path": { "type": "string" }, "source_library": { "default": null, "type": ["string", "null"] }, "state": { "$ref": "#/definitions/BundleComponentState" } }, "required": ["name", "relative_path", "source_library", "class_name", "state"], "type": "object" }; -var schema93 = { "description": "Presence/state of a bundle component derived from bundle metadata.", "enum": ["present", "missing", "unreadable", "path_escape"], "type": "string" }; -function validate82(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateLibraryModelMetadataOutcome = validate82; +var schema93 = { "additionalProperties": false, "description": "Derived component metadata for a directory-root bundle model.", "properties": { "class_name": { "default": null, "type": ["string", "null"] }, "name": { "type": "string" }, "relative_path": { "type": "string" }, "source_library": { "default": null, "type": ["string", "null"] }, "state": { "$ref": "#/definitions/BundleComponentState" } }, "required": ["name", "relative_path", "source_library", "class_name", "state"], "type": "object" }; +var schema94 = { "description": "Presence/state of a bundle component derived from bundle metadata.", "enum": ["present", "missing", "unreadable", "path_escape"], "type": "string" }; +function validate83(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.name === void 0 && (missing0 = "name") || data.relative_path === void 0 && (missing0 = "relative_path") || data.source_library === void 0 && (missing0 = "source_library") || data.class_name === void 0 && (missing0 = "class_name") || data.state === void 0 && (missing0 = "state")) { - validate82.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate83.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "class_name" || key0 === "name" || key0 === "relative_path" || key0 === "source_library" || key0 === "state")) { - validate82.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate83.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -10517,7 +10553,7 @@ function validate82(data, { instancePath = "", parentData, parentDataProperty, r let data0 = data.class_name; const _errs2 = errors; if (typeof data0 !== "string" && data0 !== null) { - validate82.errors = [{ instancePath: instancePath + "/class_name", schemaPath: "#/properties/class_name/type", keyword: "type", params: { type: schema92.properties.class_name.type }, message: "must be string,null" }]; + validate83.errors = [{ instancePath: instancePath + "/class_name", schemaPath: "#/properties/class_name/type", keyword: "type", params: { type: schema93.properties.class_name.type }, message: "must be string,null" }]; return false; } var valid0 = _errs2 === errors; @@ -10528,7 +10564,7 @@ function validate82(data, { instancePath = "", parentData, parentDataProperty, r if (data.name !== void 0) { const _errs4 = errors; if (typeof data.name !== "string") { - validate82.errors = [{ instancePath: instancePath + "/name", schemaPath: "#/properties/name/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate83.errors = [{ instancePath: instancePath + "/name", schemaPath: "#/properties/name/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs4 === errors; @@ -10539,7 +10575,7 @@ function validate82(data, { instancePath = "", parentData, parentDataProperty, r if (data.relative_path !== void 0) { const _errs6 = errors; if (typeof data.relative_path !== "string") { - validate82.errors = [{ instancePath: instancePath + "/relative_path", schemaPath: "#/properties/relative_path/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate83.errors = [{ instancePath: instancePath + "/relative_path", schemaPath: "#/properties/relative_path/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs6 === errors; @@ -10551,7 +10587,7 @@ function validate82(data, { instancePath = "", parentData, parentDataProperty, r let data3 = data.source_library; const _errs8 = errors; if (typeof data3 !== "string" && data3 !== null) { - validate82.errors = [{ instancePath: instancePath + "/source_library", schemaPath: "#/properties/source_library/type", keyword: "type", params: { type: schema92.properties.source_library.type }, message: "must be string,null" }]; + validate83.errors = [{ instancePath: instancePath + "/source_library", schemaPath: "#/properties/source_library/type", keyword: "type", params: { type: schema93.properties.source_library.type }, message: "must be string,null" }]; return false; } var valid0 = _errs8 === errors; @@ -10563,11 +10599,11 @@ function validate82(data, { instancePath = "", parentData, parentDataProperty, r let data4 = data.state; const _errs10 = errors; if (typeof data4 !== "string") { - validate82.errors = [{ instancePath: instancePath + "/state", schemaPath: "#/definitions/BundleComponentState/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate83.errors = [{ instancePath: instancePath + "/state", schemaPath: "#/definitions/BundleComponentState/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } if (!(data4 === "present" || data4 === "missing" || data4 === "unreadable" || data4 === "path_escape")) { - validate82.errors = [{ instancePath: instancePath + "/state", schemaPath: "#/definitions/BundleComponentState/enum", keyword: "enum", params: { allowedValues: schema93.enum }, message: "must be equal to one of the allowed values" }]; + validate83.errors = [{ instancePath: instancePath + "/state", schemaPath: "#/definitions/BundleComponentState/enum", keyword: "enum", params: { allowedValues: schema94.enum }, message: "must be equal to one of the allowed values" }]; return false; } var valid0 = _errs10 === errors; @@ -10581,15 +10617,15 @@ function validate82(data, { instancePath = "", parentData, parentDataProperty, r } } } else { - validate82.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate83.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate82.errors = vErrors; + validate83.errors = vErrors; return errors === 0; } -var wrapper2 = { validate: validate84 }; -function validate84(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var wrapper2 = { validate: validate85 }; +function validate85(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; const _errs0 = errors; @@ -10736,7 +10772,7 @@ function validate84(data, { instancePath = "", parentData, parentDataProperty, r vErrors.push(err8); } errors++; - validate84.errors = vErrors; + validate85.errors = vErrors; return false; } else { errors = _errs0; @@ -10748,23 +10784,23 @@ function validate84(data, { instancePath = "", parentData, parentDataProperty, r } } } - validate84.errors = vErrors; + validate85.errors = vErrors; return errors === 0; } -function validate86(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +function validate87(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.file_type === void 0 && (missing0 = "file_type") || data.metadata === void 0 && (missing0 = "metadata")) { - validate86.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate87.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "file_type" || key0 === "metadata")) { - validate86.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate87.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -10773,7 +10809,7 @@ function validate86(data, { instancePath = "", parentData, parentDataProperty, r if (data.file_type !== void 0) { const _errs2 = errors; if (typeof data.file_type !== "string") { - validate86.errors = [{ instancePath: instancePath + "/file_type", schemaPath: "#/properties/file_type/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate87.errors = [{ instancePath: instancePath + "/file_type", schemaPath: "#/properties/file_type/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs2 === errors; @@ -10788,8 +10824,8 @@ function validate86(data, { instancePath = "", parentData, parentDataProperty, r if (data1 && typeof data1 == "object" && !Array.isArray(data1)) { for (const key1 in data1) { const _errs7 = errors; - if (!validate84(data1[key1], { instancePath: instancePath + "/metadata/" + key1.replace(/~/g, "~0").replace(/\//g, "~1"), parentData: data1, parentDataProperty: key1, rootData })) { - vErrors = vErrors === null ? validate84.errors : vErrors.concat(validate84.errors); + if (!validate85(data1[key1], { instancePath: instancePath + "/metadata/" + key1.replace(/~/g, "~0").replace(/\//g, "~1"), parentData: data1, parentDataProperty: key1, rootData })) { + vErrors = vErrors === null ? validate85.errors : vErrors.concat(validate85.errors); errors = vErrors.length; } var valid1 = _errs7 === errors; @@ -10798,7 +10834,7 @@ function validate86(data, { instancePath = "", parentData, parentDataProperty, r } } } else { - validate86.errors = [{ instancePath: instancePath + "/metadata", schemaPath: "#/properties/metadata/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate87.errors = [{ instancePath: instancePath + "/metadata", schemaPath: "#/properties/metadata/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } @@ -10810,27 +10846,27 @@ function validate86(data, { instancePath = "", parentData, parentDataProperty, r } } } else { - validate86.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate87.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate86.errors = vErrors; + validate87.errors = vErrors; return errors === 0; } -function validate81(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +function validate82(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.success === void 0 && (missing0 = "success") || data.model_id === void 0 && (missing0 = "model_id")) { - validate81.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate82.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "component_manifest" || key0 === "effective_metadata" || key0 === "embedded_metadata" || key0 === "model_id" || key0 === "primary_file" || key0 === "stored_metadata" || key0 === "success")) { - validate81.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate82.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -10845,8 +10881,8 @@ function validate81(data, { instancePath = "", parentData, parentDataProperty, r const len0 = data0.length; for (let i0 = 0; i0 < len0; i0++) { const _errs4 = errors; - if (!validate82(data0[i0], { instancePath: instancePath + "/component_manifest/" + i0, parentData: data0, parentDataProperty: i0, rootData })) { - vErrors = vErrors === null ? validate82.errors : vErrors.concat(validate82.errors); + if (!validate83(data0[i0], { instancePath: instancePath + "/component_manifest/" + i0, parentData: data0, parentDataProperty: i0, rootData })) { + vErrors = vErrors === null ? validate83.errors : vErrors.concat(validate83.errors); errors = vErrors.length; } var valid1 = _errs4 === errors; @@ -10855,7 +10891,7 @@ function validate81(data, { instancePath = "", parentData, parentDataProperty, r } } } else { - validate81.errors = [{ instancePath: instancePath + "/component_manifest", schemaPath: "#/properties/component_manifest/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; + validate82.errors = [{ instancePath: instancePath + "/component_manifest", schemaPath: "#/properties/component_manifest/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; return false; } } @@ -10871,8 +10907,8 @@ function validate81(data, { instancePath = "", parentData, parentDataProperty, r if (data2 && typeof data2 == "object" && !Array.isArray(data2)) { for (const key1 in data2) { const _errs8 = errors; - if (!validate84(data2[key1], { instancePath: instancePath + "/effective_metadata/" + key1.replace(/~/g, "~0").replace(/\//g, "~1"), parentData: data2, parentDataProperty: key1, rootData })) { - vErrors = vErrors === null ? validate84.errors : vErrors.concat(validate84.errors); + if (!validate85(data2[key1], { instancePath: instancePath + "/effective_metadata/" + key1.replace(/~/g, "~0").replace(/\//g, "~1"), parentData: data2, parentDataProperty: key1, rootData })) { + vErrors = vErrors === null ? validate85.errors : vErrors.concat(validate85.errors); errors = vErrors.length; } var valid2 = _errs8 === errors; @@ -10881,7 +10917,7 @@ function validate81(data, { instancePath = "", parentData, parentDataProperty, r } } } else { - validate81.errors = [{ instancePath: instancePath + "/effective_metadata", schemaPath: "#/properties/effective_metadata/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate82.errors = [{ instancePath: instancePath + "/effective_metadata", schemaPath: "#/properties/effective_metadata/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } @@ -10892,8 +10928,8 @@ function validate81(data, { instancePath = "", parentData, parentDataProperty, r if (valid0) { if (data.embedded_metadata !== void 0) { const _errs9 = errors; - if (!validate86(data.embedded_metadata, { instancePath: instancePath + "/embedded_metadata", parentData: data, parentDataProperty: "embedded_metadata", rootData })) { - vErrors = vErrors === null ? validate86.errors : vErrors.concat(validate86.errors); + if (!validate87(data.embedded_metadata, { instancePath: instancePath + "/embedded_metadata", parentData: data, parentDataProperty: "embedded_metadata", rootData })) { + vErrors = vErrors === null ? validate87.errors : vErrors.concat(validate87.errors); errors = vErrors.length; } var valid0 = _errs9 === errors; @@ -10904,7 +10940,7 @@ function validate81(data, { instancePath = "", parentData, parentDataProperty, r if (data.model_id !== void 0) { const _errs10 = errors; if (typeof data.model_id !== "string") { - validate81.errors = [{ instancePath: instancePath + "/model_id", schemaPath: "#/properties/model_id/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate82.errors = [{ instancePath: instancePath + "/model_id", schemaPath: "#/properties/model_id/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs10 === errors; @@ -10915,7 +10951,7 @@ function validate81(data, { instancePath = "", parentData, parentDataProperty, r if (data.primary_file !== void 0) { const _errs12 = errors; if (typeof data.primary_file !== "string") { - validate81.errors = [{ instancePath: instancePath + "/primary_file", schemaPath: "#/properties/primary_file/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate82.errors = [{ instancePath: instancePath + "/primary_file", schemaPath: "#/properties/primary_file/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs12 === errors; @@ -10930,8 +10966,8 @@ function validate81(data, { instancePath = "", parentData, parentDataProperty, r if (data7 && typeof data7 == "object" && !Array.isArray(data7)) { for (const key2 in data7) { const _errs17 = errors; - if (!validate84(data7[key2], { instancePath: instancePath + "/stored_metadata/" + key2.replace(/~/g, "~0").replace(/\//g, "~1"), parentData: data7, parentDataProperty: key2, rootData })) { - vErrors = vErrors === null ? validate84.errors : vErrors.concat(validate84.errors); + if (!validate85(data7[key2], { instancePath: instancePath + "/stored_metadata/" + key2.replace(/~/g, "~0").replace(/\//g, "~1"), parentData: data7, parentDataProperty: key2, rootData })) { + vErrors = vErrors === null ? validate85.errors : vErrors.concat(validate85.errors); errors = vErrors.length; } var valid3 = _errs17 === errors; @@ -10940,7 +10976,7 @@ function validate81(data, { instancePath = "", parentData, parentDataProperty, r } } } else { - validate81.errors = [{ instancePath: instancePath + "/stored_metadata", schemaPath: "#/properties/stored_metadata/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate82.errors = [{ instancePath: instancePath + "/stored_metadata", schemaPath: "#/properties/stored_metadata/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } @@ -10953,11 +10989,11 @@ function validate81(data, { instancePath = "", parentData, parentDataProperty, r let data9 = data.success; const _errs18 = errors; if (typeof data9 !== "boolean") { - validate81.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; + validate82.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; return false; } if (true !== data9) { - validate81.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/const", keyword: "const", params: { allowedValue: true }, message: "must be equal to constant" }]; + validate82.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/const", keyword: "const", params: { allowedValue: true }, message: "must be equal to constant" }]; return false; } var valid0 = _errs18 === errors; @@ -10973,16 +11009,16 @@ function validate81(data, { instancePath = "", parentData, parentDataProperty, r } } } else { - validate81.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate82.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate81.errors = vErrors; + validate82.errors = vErrors; return errors === 0; } -var validateLinkHealthOutcome = validate90; -var schema97 = { "additionalProperties": false, "description": "Link health response.\n\nNote: Not FFI-compatible due to `usize` fields. Use wrapper types in pumas-uniffi.", "properties": { "broken_links": { "items": { "type": "string" }, "type": "array" }, "error": { "type": "null" }, "errors": { "items": { "type": "string" }, "type": "array" }, "healthy_links": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "orphaned_links": { "items": { "type": "string" }, "type": "array" }, "status": { "enum": ["healthy", "degraded"], "type": "string" }, "success": { "const": true, "type": "boolean" }, "total_links": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "warnings": { "items": { "type": "string" }, "type": "array" } }, "pumasLinkHealth": true, "required": ["success", "status", "total_links", "healthy_links", "broken_links", "orphaned_links", "warnings", "errors"], "type": "object" }; -function validate90(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateLinkHealthOutcome = validate91; +var schema98 = { "additionalProperties": false, "description": "Link health response.\n\nNote: Not FFI-compatible due to `usize` fields. Use wrapper types in pumas-uniffi.", "properties": { "broken_links": { "items": { "type": "string" }, "type": "array" }, "error": { "type": "null" }, "errors": { "items": { "type": "string" }, "type": "array" }, "healthy_links": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "orphaned_links": { "items": { "type": "string" }, "type": "array" }, "status": { "enum": ["healthy", "degraded"], "type": "string" }, "success": { "const": true, "type": "boolean" }, "total_links": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "warnings": { "items": { "type": "string" }, "type": "array" } }, "pumasLinkHealth": true, "required": ["success", "status", "total_links", "healthy_links", "broken_links", "orphaned_links", "warnings", "errors"], "type": "object" }; +function validate91(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; const _errs1 = errors; @@ -10990,13 +11026,13 @@ function validate90(data, { instancePath = "", parentData, parentDataProperty, r if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.success === void 0 && (missing0 = "success") || data.status === void 0 && (missing0 = "status") || data.total_links === void 0 && (missing0 = "total_links") || data.healthy_links === void 0 && (missing0 = "healthy_links") || data.broken_links === void 0 && (missing0 = "broken_links") || data.orphaned_links === void 0 && (missing0 = "orphaned_links") || data.warnings === void 0 && (missing0 = "warnings") || data.errors === void 0 && (missing0 = "errors")) { - validate90.errors = [{ instancePath, schemaPath: "#/definitions/LinkHealthResponse/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate91.errors = [{ instancePath, schemaPath: "#/definitions/LinkHealthResponse/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs3 = errors; for (const key0 in data) { - if (!func2.call(schema97.properties, key0)) { - validate90.errors = [{ instancePath, schemaPath: "#/definitions/LinkHealthResponse/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + if (!func2.call(schema98.properties, key0)) { + validate91.errors = [{ instancePath, schemaPath: "#/definitions/LinkHealthResponse/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -11012,7 +11048,7 @@ function validate90(data, { instancePath = "", parentData, parentDataProperty, r for (let i0 = 0; i0 < len0; i0++) { const _errs6 = errors; if (typeof data0[i0] !== "string") { - validate90.errors = [{ instancePath: instancePath + "/broken_links/" + i0, schemaPath: "#/definitions/LinkHealthResponse/properties/broken_links/items/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate91.errors = [{ instancePath: instancePath + "/broken_links/" + i0, schemaPath: "#/definitions/LinkHealthResponse/properties/broken_links/items/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid3 = _errs6 === errors; @@ -11021,7 +11057,7 @@ function validate90(data, { instancePath = "", parentData, parentDataProperty, r } } } else { - validate90.errors = [{ instancePath: instancePath + "/broken_links", schemaPath: "#/definitions/LinkHealthResponse/properties/broken_links/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; + validate91.errors = [{ instancePath: instancePath + "/broken_links", schemaPath: "#/definitions/LinkHealthResponse/properties/broken_links/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; return false; } } @@ -11033,7 +11069,7 @@ function validate90(data, { instancePath = "", parentData, parentDataProperty, r if (data.error !== void 0) { const _errs8 = errors; if (data.error !== null) { - validate90.errors = [{ instancePath: instancePath + "/error", schemaPath: "#/definitions/LinkHealthResponse/properties/error/type", keyword: "type", params: { type: "null" }, message: "must be null" }]; + validate91.errors = [{ instancePath: instancePath + "/error", schemaPath: "#/definitions/LinkHealthResponse/properties/error/type", keyword: "type", params: { type: "null" }, message: "must be null" }]; return false; } var valid2 = _errs8 === errors; @@ -11051,7 +11087,7 @@ function validate90(data, { instancePath = "", parentData, parentDataProperty, r for (let i1 = 0; i1 < len1; i1++) { const _errs12 = errors; if (typeof data3[i1] !== "string") { - validate90.errors = [{ instancePath: instancePath + "/errors/" + i1, schemaPath: "#/definitions/LinkHealthResponse/properties/errors/items/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate91.errors = [{ instancePath: instancePath + "/errors/" + i1, schemaPath: "#/definitions/LinkHealthResponse/properties/errors/items/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid4 = _errs12 === errors; @@ -11060,7 +11096,7 @@ function validate90(data, { instancePath = "", parentData, parentDataProperty, r } } } else { - validate90.errors = [{ instancePath: instancePath + "/errors", schemaPath: "#/definitions/LinkHealthResponse/properties/errors/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; + validate91.errors = [{ instancePath: instancePath + "/errors", schemaPath: "#/definitions/LinkHealthResponse/properties/errors/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; return false; } } @@ -11073,17 +11109,17 @@ function validate90(data, { instancePath = "", parentData, parentDataProperty, r let data5 = data.healthy_links; const _errs14 = errors; if (!(typeof data5 == "number" && (!(data5 % 1) && !isNaN(data5)) && isFinite(data5))) { - validate90.errors = [{ instancePath: instancePath + "/healthy_links", schemaPath: "#/definitions/LinkHealthResponse/properties/healthy_links/type", keyword: "type", params: { type: "integer" }, message: "must be integer" }]; + validate91.errors = [{ instancePath: instancePath + "/healthy_links", schemaPath: "#/definitions/LinkHealthResponse/properties/healthy_links/type", keyword: "type", params: { type: "integer" }, message: "must be integer" }]; return false; } if (errors === _errs14) { if (typeof data5 == "number" && isFinite(data5)) { if (data5 > 9007199254740991 || isNaN(data5)) { - validate90.errors = [{ instancePath: instancePath + "/healthy_links", schemaPath: "#/definitions/LinkHealthResponse/properties/healthy_links/maximum", keyword: "maximum", params: { comparison: "<=", limit: 9007199254740991 }, message: "must be <= 9007199254740991" }]; + validate91.errors = [{ instancePath: instancePath + "/healthy_links", schemaPath: "#/definitions/LinkHealthResponse/properties/healthy_links/maximum", keyword: "maximum", params: { comparison: "<=", limit: 9007199254740991 }, message: "must be <= 9007199254740991" }]; return false; } else { if (data5 < 0 || isNaN(data5)) { - validate90.errors = [{ instancePath: instancePath + "/healthy_links", schemaPath: "#/definitions/LinkHealthResponse/properties/healthy_links/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; + validate91.errors = [{ instancePath: instancePath + "/healthy_links", schemaPath: "#/definitions/LinkHealthResponse/properties/healthy_links/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; return false; } } @@ -11104,7 +11140,7 @@ function validate90(data, { instancePath = "", parentData, parentDataProperty, r for (let i2 = 0; i2 < len2; i2++) { const _errs18 = errors; if (typeof data6[i2] !== "string") { - validate90.errors = [{ instancePath: instancePath + "/orphaned_links/" + i2, schemaPath: "#/definitions/LinkHealthResponse/properties/orphaned_links/items/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate91.errors = [{ instancePath: instancePath + "/orphaned_links/" + i2, schemaPath: "#/definitions/LinkHealthResponse/properties/orphaned_links/items/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid5 = _errs18 === errors; @@ -11113,7 +11149,7 @@ function validate90(data, { instancePath = "", parentData, parentDataProperty, r } } } else { - validate90.errors = [{ instancePath: instancePath + "/orphaned_links", schemaPath: "#/definitions/LinkHealthResponse/properties/orphaned_links/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; + validate91.errors = [{ instancePath: instancePath + "/orphaned_links", schemaPath: "#/definitions/LinkHealthResponse/properties/orphaned_links/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; return false; } } @@ -11126,11 +11162,11 @@ function validate90(data, { instancePath = "", parentData, parentDataProperty, r let data8 = data.status; const _errs20 = errors; if (typeof data8 !== "string") { - validate90.errors = [{ instancePath: instancePath + "/status", schemaPath: "#/definitions/LinkHealthResponse/properties/status/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate91.errors = [{ instancePath: instancePath + "/status", schemaPath: "#/definitions/LinkHealthResponse/properties/status/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } if (!(data8 === "healthy" || data8 === "degraded")) { - validate90.errors = [{ instancePath: instancePath + "/status", schemaPath: "#/definitions/LinkHealthResponse/properties/status/enum", keyword: "enum", params: { allowedValues: schema97.properties.status.enum }, message: "must be equal to one of the allowed values" }]; + validate91.errors = [{ instancePath: instancePath + "/status", schemaPath: "#/definitions/LinkHealthResponse/properties/status/enum", keyword: "enum", params: { allowedValues: schema98.properties.status.enum }, message: "must be equal to one of the allowed values" }]; return false; } var valid2 = _errs20 === errors; @@ -11142,11 +11178,11 @@ function validate90(data, { instancePath = "", parentData, parentDataProperty, r let data9 = data.success; const _errs22 = errors; if (typeof data9 !== "boolean") { - validate90.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/definitions/LinkHealthResponse/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; + validate91.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/definitions/LinkHealthResponse/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; return false; } if (true !== data9) { - validate90.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/definitions/LinkHealthResponse/properties/success/const", keyword: "const", params: { allowedValue: true }, message: "must be equal to constant" }]; + validate91.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/definitions/LinkHealthResponse/properties/success/const", keyword: "const", params: { allowedValue: true }, message: "must be equal to constant" }]; return false; } var valid2 = _errs22 === errors; @@ -11158,17 +11194,17 @@ function validate90(data, { instancePath = "", parentData, parentDataProperty, r let data10 = data.total_links; const _errs24 = errors; if (!(typeof data10 == "number" && (!(data10 % 1) && !isNaN(data10)) && isFinite(data10))) { - validate90.errors = [{ instancePath: instancePath + "/total_links", schemaPath: "#/definitions/LinkHealthResponse/properties/total_links/type", keyword: "type", params: { type: "integer" }, message: "must be integer" }]; + validate91.errors = [{ instancePath: instancePath + "/total_links", schemaPath: "#/definitions/LinkHealthResponse/properties/total_links/type", keyword: "type", params: { type: "integer" }, message: "must be integer" }]; return false; } if (errors === _errs24) { if (typeof data10 == "number" && isFinite(data10)) { if (data10 > 9007199254740991 || isNaN(data10)) { - validate90.errors = [{ instancePath: instancePath + "/total_links", schemaPath: "#/definitions/LinkHealthResponse/properties/total_links/maximum", keyword: "maximum", params: { comparison: "<=", limit: 9007199254740991 }, message: "must be <= 9007199254740991" }]; + validate91.errors = [{ instancePath: instancePath + "/total_links", schemaPath: "#/definitions/LinkHealthResponse/properties/total_links/maximum", keyword: "maximum", params: { comparison: "<=", limit: 9007199254740991 }, message: "must be <= 9007199254740991" }]; return false; } else { if (data10 < 0 || isNaN(data10)) { - validate90.errors = [{ instancePath: instancePath + "/total_links", schemaPath: "#/definitions/LinkHealthResponse/properties/total_links/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; + validate91.errors = [{ instancePath: instancePath + "/total_links", schemaPath: "#/definitions/LinkHealthResponse/properties/total_links/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; return false; } } @@ -11189,7 +11225,7 @@ function validate90(data, { instancePath = "", parentData, parentDataProperty, r for (let i3 = 0; i3 < len3; i3++) { const _errs28 = errors; if (typeof data11[i3] !== "string") { - validate90.errors = [{ instancePath: instancePath + "/warnings/" + i3, schemaPath: "#/definitions/LinkHealthResponse/properties/warnings/items/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate91.errors = [{ instancePath: instancePath + "/warnings/" + i3, schemaPath: "#/definitions/LinkHealthResponse/properties/warnings/items/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid6 = _errs28 === errors; @@ -11198,7 +11234,7 @@ function validate90(data, { instancePath = "", parentData, parentDataProperty, r } } } else { - validate90.errors = [{ instancePath: instancePath + "/warnings", schemaPath: "#/definitions/LinkHealthResponse/properties/warnings/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; + validate91.errors = [{ instancePath: instancePath + "/warnings", schemaPath: "#/definitions/LinkHealthResponse/properties/warnings/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; return false; } } @@ -11208,7 +11244,7 @@ function validate90(data, { instancePath = "", parentData, parentDataProperty, r } if (valid2) { if (!Array.isArray(data.broken_links) || data.healthy_links + data.broken_links.length !== data.total_links || data.status === "healthy" !== (data.broken_links.length === 0)) { - validate90.errors = [{ instancePath, schemaPath: "#/definitions/LinkHealthResponse/pumasLinkHealth", keyword: "pumasLinkHealth", params: {}, message: 'must pass "pumasLinkHealth" keyword validation' }]; + validate91.errors = [{ instancePath, schemaPath: "#/definitions/LinkHealthResponse/pumasLinkHealth", keyword: "pumasLinkHealth", params: {}, message: 'must pass "pumasLinkHealth" keyword validation' }]; return false; } } @@ -11223,36 +11259,36 @@ function validate90(data, { instancePath = "", parentData, parentDataProperty, r } } } else { - validate90.errors = [{ instancePath, schemaPath: "#/definitions/LinkHealthResponse/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate91.errors = [{ instancePath, schemaPath: "#/definitions/LinkHealthResponse/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { if (!Array.isArray(data.broken_links) || data.healthy_links + data.broken_links.length !== data.total_links || data.status === "healthy" !== (data.broken_links.length === 0)) { - validate90.errors = [{ instancePath, schemaPath: "#/pumasLinkHealth", keyword: "pumasLinkHealth", params: {}, message: 'must pass "pumasLinkHealth" keyword validation' }]; + validate91.errors = [{ instancePath, schemaPath: "#/pumasLinkHealth", keyword: "pumasLinkHealth", params: {}, message: 'must pass "pumasLinkHealth" keyword validation' }]; return false; } } } - validate90.errors = vErrors; + validate91.errors = vErrors; return errors === 0; } -var validateModelIndexRefreshOutcome = validate91; -function validate91(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateModelIndexRefreshOutcome = validate92; +function validate92(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.success === void 0 && (missing0 = "success") || data.indexed_count === void 0 && (missing0 = "indexed_count")) { - validate91.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate92.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "indexed_count" || key0 === "success")) { - validate91.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate92.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -11262,17 +11298,17 @@ function validate91(data, { instancePath = "", parentData, parentDataProperty, r let data0 = data.indexed_count; const _errs2 = errors; if (!(typeof data0 == "number" && (!(data0 % 1) && !isNaN(data0)) && isFinite(data0))) { - validate91.errors = [{ instancePath: instancePath + "/indexed_count", schemaPath: "#/properties/indexed_count/type", keyword: "type", params: { type: "integer" }, message: "must be integer" }]; + validate92.errors = [{ instancePath: instancePath + "/indexed_count", schemaPath: "#/properties/indexed_count/type", keyword: "type", params: { type: "integer" }, message: "must be integer" }]; return false; } if (errors === _errs2) { if (typeof data0 == "number" && isFinite(data0)) { if (data0 > 4294967295 || isNaN(data0)) { - validate91.errors = [{ instancePath: instancePath + "/indexed_count", schemaPath: "#/properties/indexed_count/maximum", keyword: "maximum", params: { comparison: "<=", limit: 4294967295 }, message: "must be <= 4294967295" }]; + validate92.errors = [{ instancePath: instancePath + "/indexed_count", schemaPath: "#/properties/indexed_count/maximum", keyword: "maximum", params: { comparison: "<=", limit: 4294967295 }, message: "must be <= 4294967295" }]; return false; } else { if (data0 < 0 || isNaN(data0)) { - validate91.errors = [{ instancePath: instancePath + "/indexed_count", schemaPath: "#/properties/indexed_count/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; + validate92.errors = [{ instancePath: instancePath + "/indexed_count", schemaPath: "#/properties/indexed_count/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; return false; } } @@ -11287,11 +11323,11 @@ function validate91(data, { instancePath = "", parentData, parentDataProperty, r let data1 = data.success; const _errs4 = errors; if (typeof data1 !== "boolean") { - validate91.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; + validate92.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; return false; } if (true !== data1) { - validate91.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/const", keyword: "const", params: { allowedValue: true }, message: "must be equal to constant" }]; + validate92.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/const", keyword: "const", params: { allowedValue: true }, message: "must be equal to constant" }]; return false; } var valid0 = _errs4 === errors; @@ -11302,20 +11338,20 @@ function validate91(data, { instancePath = "", parentData, parentDataProperty, r } } } else { - validate91.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate92.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate91.errors = vErrors; + validate92.errors = vErrors; return errors === 0; } -var validateModelsOutcome = validate92; -var schema100 = { "additionalProperties": false, "properties": { "artifact": { "$ref": "#/definitions/CatalogArtifactState" }, "dependencyCount": { "maximum": 512, "minimum": 0, "type": "integer" }, "displayDate": { "minLength": 1, "pumasCanonicalText": true, "pumasUtf8Max": 4096, "type": "string" }, "displayName": { "minLength": 1, "pumasCanonicalText": true, "pumasUtf8Max": 4096, "type": "string" }, "format": { "minLength": 1, "pumasCanonicalText": true, "pumasUtf8Max": 4096, "type": "string" }, "id": { "minLength": 1, "pumasCanonicalText": true, "pumasUtf8Max": 4096, "type": "string" }, "integrity": { "$ref": "#/definitions/CatalogIntegrityState" }, "modelDir": { "minLength": 1, "pumasCanonicalText": true, "pumasUtf8Max": 4096, "type": "string" }, "modelType": { "minLength": 1, "pumasCanonicalText": true, "pumasUtf8Max": 4096, "type": "string" }, "quantization": { "minLength": 1, "pumasCanonicalText": true, "pumasUtf8Max": 4096, "type": "string" }, "relatedAvailable": { "type": "boolean" }, "sizeBytes": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" } }, "pumasCatalogRow": true, "required": ["id", "modelDir", "displayName", "modelType", "dependencyCount", "relatedAvailable", "artifact", "integrity"], "type": "object" }; -var schema102 = { "enum": ["part_file_present", "expected_files_missing"], "type": "string" }; +var validateModelsOutcome = validate93; +var schema101 = { "additionalProperties": false, "properties": { "artifact": { "$ref": "#/definitions/CatalogArtifactState" }, "dependencyCount": { "maximum": 512, "minimum": 0, "type": "integer" }, "displayDate": { "minLength": 1, "pumasCanonicalText": true, "pumasUtf8Max": 4096, "type": "string" }, "displayName": { "minLength": 1, "pumasCanonicalText": true, "pumasUtf8Max": 4096, "type": "string" }, "format": { "minLength": 1, "pumasCanonicalText": true, "pumasUtf8Max": 4096, "type": "string" }, "id": { "minLength": 1, "pumasCanonicalText": true, "pumasUtf8Max": 4096, "type": "string" }, "integrity": { "$ref": "#/definitions/CatalogIntegrityState" }, "modelDir": { "minLength": 1, "pumasCanonicalText": true, "pumasUtf8Max": 4096, "type": "string" }, "modelType": { "minLength": 1, "pumasCanonicalText": true, "pumasUtf8Max": 4096, "type": "string" }, "quantization": { "minLength": 1, "pumasCanonicalText": true, "pumasUtf8Max": 4096, "type": "string" }, "relatedAvailable": { "type": "boolean" }, "sizeBytes": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" } }, "pumasCatalogRow": true, "required": ["id", "modelDir", "displayName", "modelType", "dependencyCount", "relatedAvailable", "artifact", "integrity"], "type": "object" }; +var schema103 = { "enum": ["part_file_present", "expected_files_missing"], "type": "string" }; var pattern17 = new RegExp("^\\p{White_Space}|\\p{White_Space}$", "u"); var pattern18 = new RegExp("^\\p{White_Space}|\\p{White_Space}$", "u"); var pattern19 = new RegExp("^\\p{White_Space}|\\p{White_Space}$", "u"); -function validate94(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +function validate95(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; const _errs0 = errors; @@ -11500,7 +11536,7 @@ function validate94(data, { instancePath = "", parentData, parentDataProperty, r errors++; } if (!(data3 === "part_file_present" || data3 === "expected_files_missing")) { - const err14 = { instancePath: instancePath + "/reasons/" + i0, schemaPath: "#/definitions/CatalogPartialReason/enum", keyword: "enum", params: { allowedValues: schema102.enum }, message: "must be equal to one of the allowed values" }; + const err14 = { instancePath: instancePath + "/reasons/" + i0, schemaPath: "#/definitions/CatalogPartialReason/enum", keyword: "enum", params: { allowedValues: schema103.enum }, message: "must be equal to one of the allowed values" }; if (vErrors === null) { vErrors = [err14]; } else { @@ -11933,7 +11969,7 @@ function validate94(data, { instancePath = "", parentData, parentDataProperty, r vErrors.push(err43); } errors++; - validate94.errors = vErrors; + validate95.errors = vErrors; return false; } else { errors = _errs0; @@ -11945,7 +11981,7 @@ function validate94(data, { instancePath = "", parentData, parentDataProperty, r } } } - validate94.errors = vErrors; + validate95.errors = vErrors; return errors === 0; } var pattern20 = new RegExp("^\\p{White_Space}|\\p{White_Space}$", "u"); @@ -11955,20 +11991,20 @@ var pattern23 = new RegExp("^\\p{White_Space}|\\p{White_Space}$", "u"); var pattern24 = new RegExp("^\\p{White_Space}|\\p{White_Space}$", "u"); var pattern25 = new RegExp("^\\p{White_Space}|\\p{White_Space}$", "u"); var pattern26 = new RegExp("^\\p{White_Space}|\\p{White_Space}$", "u"); -function validate93(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +function validate94(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.id === void 0 && (missing0 = "id") || data.modelDir === void 0 && (missing0 = "modelDir") || data.displayName === void 0 && (missing0 = "displayName") || data.modelType === void 0 && (missing0 = "modelType") || data.dependencyCount === void 0 && (missing0 = "dependencyCount") || data.relatedAvailable === void 0 && (missing0 = "relatedAvailable") || data.artifact === void 0 && (missing0 = "artifact") || data.integrity === void 0 && (missing0 = "integrity")) { - validate93.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate94.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { - if (!func2.call(schema100.properties, key0)) { - validate93.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + if (!func2.call(schema101.properties, key0)) { + validate94.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -11976,8 +12012,8 @@ function validate93(data, { instancePath = "", parentData, parentDataProperty, r if (_errs1 === errors) { if (data.artifact !== void 0) { const _errs2 = errors; - if (!validate94(data.artifact, { instancePath: instancePath + "/artifact", parentData: data, parentDataProperty: "artifact", rootData })) { - vErrors = vErrors === null ? validate94.errors : vErrors.concat(validate94.errors); + if (!validate95(data.artifact, { instancePath: instancePath + "/artifact", parentData: data, parentDataProperty: "artifact", rootData })) { + vErrors = vErrors === null ? validate95.errors : vErrors.concat(validate95.errors); errors = vErrors.length; } var valid0 = _errs2 === errors; @@ -11989,17 +12025,17 @@ function validate93(data, { instancePath = "", parentData, parentDataProperty, r let data1 = data.dependencyCount; const _errs3 = errors; if (!(typeof data1 == "number" && (!(data1 % 1) && !isNaN(data1)) && isFinite(data1))) { - validate93.errors = [{ instancePath: instancePath + "/dependencyCount", schemaPath: "#/properties/dependencyCount/type", keyword: "type", params: { type: "integer" }, message: "must be integer" }]; + validate94.errors = [{ instancePath: instancePath + "/dependencyCount", schemaPath: "#/properties/dependencyCount/type", keyword: "type", params: { type: "integer" }, message: "must be integer" }]; return false; } if (errors === _errs3) { if (typeof data1 == "number" && isFinite(data1)) { if (data1 > 512 || isNaN(data1)) { - validate93.errors = [{ instancePath: instancePath + "/dependencyCount", schemaPath: "#/properties/dependencyCount/maximum", keyword: "maximum", params: { comparison: "<=", limit: 512 }, message: "must be <= 512" }]; + validate94.errors = [{ instancePath: instancePath + "/dependencyCount", schemaPath: "#/properties/dependencyCount/maximum", keyword: "maximum", params: { comparison: "<=", limit: 512 }, message: "must be <= 512" }]; return false; } else { if (data1 < 0 || isNaN(data1)) { - validate93.errors = [{ instancePath: instancePath + "/dependencyCount", schemaPath: "#/properties/dependencyCount/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; + validate94.errors = [{ instancePath: instancePath + "/dependencyCount", schemaPath: "#/properties/dependencyCount/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; return false; } } @@ -12016,21 +12052,21 @@ function validate93(data, { instancePath = "", parentData, parentDataProperty, r if (errors === _errs5) { if (typeof data2 === "string") { if (func5(data2) < 1) { - validate93.errors = [{ instancePath: instancePath + "/displayDate", schemaPath: "#/properties/displayDate/minLength", keyword: "minLength", params: { limit: 1 }, message: "must NOT have fewer than 1 characters" }]; + validate94.errors = [{ instancePath: instancePath + "/displayDate", schemaPath: "#/properties/displayDate/minLength", keyword: "minLength", params: { limit: 1 }, message: "must NOT have fewer than 1 characters" }]; return false; } else { if (data2.length === 0 || pattern20.test(data2)) { - validate93.errors = [{ instancePath: instancePath + "/displayDate", schemaPath: "#/properties/displayDate/pumasCanonicalText", keyword: "pumasCanonicalText", params: {}, message: 'must pass "pumasCanonicalText" keyword validation' }]; + validate94.errors = [{ instancePath: instancePath + "/displayDate", schemaPath: "#/properties/displayDate/pumasCanonicalText", keyword: "pumasCanonicalText", params: {}, message: 'must pass "pumasCanonicalText" keyword validation' }]; return false; } else { if (encodeURIComponent(data2).replace(/%[0-9A-F]{2}/g, "x").length > 4096) { - validate93.errors = [{ instancePath: instancePath + "/displayDate", schemaPath: "#/properties/displayDate/pumasUtf8Max", keyword: "pumasUtf8Max", params: {}, message: 'must pass "pumasUtf8Max" keyword validation' }]; + validate94.errors = [{ instancePath: instancePath + "/displayDate", schemaPath: "#/properties/displayDate/pumasUtf8Max", keyword: "pumasUtf8Max", params: {}, message: 'must pass "pumasUtf8Max" keyword validation' }]; return false; } } } } else { - validate93.errors = [{ instancePath: instancePath + "/displayDate", schemaPath: "#/properties/displayDate/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate94.errors = [{ instancePath: instancePath + "/displayDate", schemaPath: "#/properties/displayDate/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } } @@ -12045,21 +12081,21 @@ function validate93(data, { instancePath = "", parentData, parentDataProperty, r if (errors === _errs7) { if (typeof data3 === "string") { if (func5(data3) < 1) { - validate93.errors = [{ instancePath: instancePath + "/displayName", schemaPath: "#/properties/displayName/minLength", keyword: "minLength", params: { limit: 1 }, message: "must NOT have fewer than 1 characters" }]; + validate94.errors = [{ instancePath: instancePath + "/displayName", schemaPath: "#/properties/displayName/minLength", keyword: "minLength", params: { limit: 1 }, message: "must NOT have fewer than 1 characters" }]; return false; } else { if (data3.length === 0 || pattern21.test(data3)) { - validate93.errors = [{ instancePath: instancePath + "/displayName", schemaPath: "#/properties/displayName/pumasCanonicalText", keyword: "pumasCanonicalText", params: {}, message: 'must pass "pumasCanonicalText" keyword validation' }]; + validate94.errors = [{ instancePath: instancePath + "/displayName", schemaPath: "#/properties/displayName/pumasCanonicalText", keyword: "pumasCanonicalText", params: {}, message: 'must pass "pumasCanonicalText" keyword validation' }]; return false; } else { if (encodeURIComponent(data3).replace(/%[0-9A-F]{2}/g, "x").length > 4096) { - validate93.errors = [{ instancePath: instancePath + "/displayName", schemaPath: "#/properties/displayName/pumasUtf8Max", keyword: "pumasUtf8Max", params: {}, message: 'must pass "pumasUtf8Max" keyword validation' }]; + validate94.errors = [{ instancePath: instancePath + "/displayName", schemaPath: "#/properties/displayName/pumasUtf8Max", keyword: "pumasUtf8Max", params: {}, message: 'must pass "pumasUtf8Max" keyword validation' }]; return false; } } } } else { - validate93.errors = [{ instancePath: instancePath + "/displayName", schemaPath: "#/properties/displayName/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate94.errors = [{ instancePath: instancePath + "/displayName", schemaPath: "#/properties/displayName/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } } @@ -12074,21 +12110,21 @@ function validate93(data, { instancePath = "", parentData, parentDataProperty, r if (errors === _errs9) { if (typeof data4 === "string") { if (func5(data4) < 1) { - validate93.errors = [{ instancePath: instancePath + "/format", schemaPath: "#/properties/format/minLength", keyword: "minLength", params: { limit: 1 }, message: "must NOT have fewer than 1 characters" }]; + validate94.errors = [{ instancePath: instancePath + "/format", schemaPath: "#/properties/format/minLength", keyword: "minLength", params: { limit: 1 }, message: "must NOT have fewer than 1 characters" }]; return false; } else { if (data4.length === 0 || pattern22.test(data4)) { - validate93.errors = [{ instancePath: instancePath + "/format", schemaPath: "#/properties/format/pumasCanonicalText", keyword: "pumasCanonicalText", params: {}, message: 'must pass "pumasCanonicalText" keyword validation' }]; + validate94.errors = [{ instancePath: instancePath + "/format", schemaPath: "#/properties/format/pumasCanonicalText", keyword: "pumasCanonicalText", params: {}, message: 'must pass "pumasCanonicalText" keyword validation' }]; return false; } else { if (encodeURIComponent(data4).replace(/%[0-9A-F]{2}/g, "x").length > 4096) { - validate93.errors = [{ instancePath: instancePath + "/format", schemaPath: "#/properties/format/pumasUtf8Max", keyword: "pumasUtf8Max", params: {}, message: 'must pass "pumasUtf8Max" keyword validation' }]; + validate94.errors = [{ instancePath: instancePath + "/format", schemaPath: "#/properties/format/pumasUtf8Max", keyword: "pumasUtf8Max", params: {}, message: 'must pass "pumasUtf8Max" keyword validation' }]; return false; } } } } else { - validate93.errors = [{ instancePath: instancePath + "/format", schemaPath: "#/properties/format/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate94.errors = [{ instancePath: instancePath + "/format", schemaPath: "#/properties/format/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } } @@ -12103,21 +12139,21 @@ function validate93(data, { instancePath = "", parentData, parentDataProperty, r if (errors === _errs11) { if (typeof data5 === "string") { if (func5(data5) < 1) { - validate93.errors = [{ instancePath: instancePath + "/id", schemaPath: "#/properties/id/minLength", keyword: "minLength", params: { limit: 1 }, message: "must NOT have fewer than 1 characters" }]; + validate94.errors = [{ instancePath: instancePath + "/id", schemaPath: "#/properties/id/minLength", keyword: "minLength", params: { limit: 1 }, message: "must NOT have fewer than 1 characters" }]; return false; } else { if (data5.length === 0 || pattern23.test(data5)) { - validate93.errors = [{ instancePath: instancePath + "/id", schemaPath: "#/properties/id/pumasCanonicalText", keyword: "pumasCanonicalText", params: {}, message: 'must pass "pumasCanonicalText" keyword validation' }]; + validate94.errors = [{ instancePath: instancePath + "/id", schemaPath: "#/properties/id/pumasCanonicalText", keyword: "pumasCanonicalText", params: {}, message: 'must pass "pumasCanonicalText" keyword validation' }]; return false; } else { if (encodeURIComponent(data5).replace(/%[0-9A-F]{2}/g, "x").length > 4096) { - validate93.errors = [{ instancePath: instancePath + "/id", schemaPath: "#/properties/id/pumasUtf8Max", keyword: "pumasUtf8Max", params: {}, message: 'must pass "pumasUtf8Max" keyword validation' }]; + validate94.errors = [{ instancePath: instancePath + "/id", schemaPath: "#/properties/id/pumasUtf8Max", keyword: "pumasUtf8Max", params: {}, message: 'must pass "pumasUtf8Max" keyword validation' }]; return false; } } } } else { - validate93.errors = [{ instancePath: instancePath + "/id", schemaPath: "#/properties/id/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate94.errors = [{ instancePath: instancePath + "/id", schemaPath: "#/properties/id/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } } @@ -12359,7 +12395,7 @@ function validate93(data, { instancePath = "", parentData, parentDataProperty, r vErrors.push(err15); } errors++; - validate93.errors = vErrors; + validate94.errors = vErrors; return false; } else { errors = _errs15; @@ -12382,21 +12418,21 @@ function validate93(data, { instancePath = "", parentData, parentDataProperty, r if (errors === _errs32) { if (typeof data12 === "string") { if (func5(data12) < 1) { - validate93.errors = [{ instancePath: instancePath + "/modelDir", schemaPath: "#/properties/modelDir/minLength", keyword: "minLength", params: { limit: 1 }, message: "must NOT have fewer than 1 characters" }]; + validate94.errors = [{ instancePath: instancePath + "/modelDir", schemaPath: "#/properties/modelDir/minLength", keyword: "minLength", params: { limit: 1 }, message: "must NOT have fewer than 1 characters" }]; return false; } else { if (data12.length === 0 || pattern24.test(data12)) { - validate93.errors = [{ instancePath: instancePath + "/modelDir", schemaPath: "#/properties/modelDir/pumasCanonicalText", keyword: "pumasCanonicalText", params: {}, message: 'must pass "pumasCanonicalText" keyword validation' }]; + validate94.errors = [{ instancePath: instancePath + "/modelDir", schemaPath: "#/properties/modelDir/pumasCanonicalText", keyword: "pumasCanonicalText", params: {}, message: 'must pass "pumasCanonicalText" keyword validation' }]; return false; } else { if (encodeURIComponent(data12).replace(/%[0-9A-F]{2}/g, "x").length > 4096) { - validate93.errors = [{ instancePath: instancePath + "/modelDir", schemaPath: "#/properties/modelDir/pumasUtf8Max", keyword: "pumasUtf8Max", params: {}, message: 'must pass "pumasUtf8Max" keyword validation' }]; + validate94.errors = [{ instancePath: instancePath + "/modelDir", schemaPath: "#/properties/modelDir/pumasUtf8Max", keyword: "pumasUtf8Max", params: {}, message: 'must pass "pumasUtf8Max" keyword validation' }]; return false; } } } } else { - validate93.errors = [{ instancePath: instancePath + "/modelDir", schemaPath: "#/properties/modelDir/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate94.errors = [{ instancePath: instancePath + "/modelDir", schemaPath: "#/properties/modelDir/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } } @@ -12411,21 +12447,21 @@ function validate93(data, { instancePath = "", parentData, parentDataProperty, r if (errors === _errs34) { if (typeof data13 === "string") { if (func5(data13) < 1) { - validate93.errors = [{ instancePath: instancePath + "/modelType", schemaPath: "#/properties/modelType/minLength", keyword: "minLength", params: { limit: 1 }, message: "must NOT have fewer than 1 characters" }]; + validate94.errors = [{ instancePath: instancePath + "/modelType", schemaPath: "#/properties/modelType/minLength", keyword: "minLength", params: { limit: 1 }, message: "must NOT have fewer than 1 characters" }]; return false; } else { if (data13.length === 0 || pattern25.test(data13)) { - validate93.errors = [{ instancePath: instancePath + "/modelType", schemaPath: "#/properties/modelType/pumasCanonicalText", keyword: "pumasCanonicalText", params: {}, message: 'must pass "pumasCanonicalText" keyword validation' }]; + validate94.errors = [{ instancePath: instancePath + "/modelType", schemaPath: "#/properties/modelType/pumasCanonicalText", keyword: "pumasCanonicalText", params: {}, message: 'must pass "pumasCanonicalText" keyword validation' }]; return false; } else { if (encodeURIComponent(data13).replace(/%[0-9A-F]{2}/g, "x").length > 4096) { - validate93.errors = [{ instancePath: instancePath + "/modelType", schemaPath: "#/properties/modelType/pumasUtf8Max", keyword: "pumasUtf8Max", params: {}, message: 'must pass "pumasUtf8Max" keyword validation' }]; + validate94.errors = [{ instancePath: instancePath + "/modelType", schemaPath: "#/properties/modelType/pumasUtf8Max", keyword: "pumasUtf8Max", params: {}, message: 'must pass "pumasUtf8Max" keyword validation' }]; return false; } } } } else { - validate93.errors = [{ instancePath: instancePath + "/modelType", schemaPath: "#/properties/modelType/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate94.errors = [{ instancePath: instancePath + "/modelType", schemaPath: "#/properties/modelType/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } } @@ -12440,21 +12476,21 @@ function validate93(data, { instancePath = "", parentData, parentDataProperty, r if (errors === _errs36) { if (typeof data14 === "string") { if (func5(data14) < 1) { - validate93.errors = [{ instancePath: instancePath + "/quantization", schemaPath: "#/properties/quantization/minLength", keyword: "minLength", params: { limit: 1 }, message: "must NOT have fewer than 1 characters" }]; + validate94.errors = [{ instancePath: instancePath + "/quantization", schemaPath: "#/properties/quantization/minLength", keyword: "minLength", params: { limit: 1 }, message: "must NOT have fewer than 1 characters" }]; return false; } else { if (data14.length === 0 || pattern26.test(data14)) { - validate93.errors = [{ instancePath: instancePath + "/quantization", schemaPath: "#/properties/quantization/pumasCanonicalText", keyword: "pumasCanonicalText", params: {}, message: 'must pass "pumasCanonicalText" keyword validation' }]; + validate94.errors = [{ instancePath: instancePath + "/quantization", schemaPath: "#/properties/quantization/pumasCanonicalText", keyword: "pumasCanonicalText", params: {}, message: 'must pass "pumasCanonicalText" keyword validation' }]; return false; } else { if (encodeURIComponent(data14).replace(/%[0-9A-F]{2}/g, "x").length > 4096) { - validate93.errors = [{ instancePath: instancePath + "/quantization", schemaPath: "#/properties/quantization/pumasUtf8Max", keyword: "pumasUtf8Max", params: {}, message: 'must pass "pumasUtf8Max" keyword validation' }]; + validate94.errors = [{ instancePath: instancePath + "/quantization", schemaPath: "#/properties/quantization/pumasUtf8Max", keyword: "pumasUtf8Max", params: {}, message: 'must pass "pumasUtf8Max" keyword validation' }]; return false; } } } } else { - validate93.errors = [{ instancePath: instancePath + "/quantization", schemaPath: "#/properties/quantization/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate94.errors = [{ instancePath: instancePath + "/quantization", schemaPath: "#/properties/quantization/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } } @@ -12466,7 +12502,7 @@ function validate93(data, { instancePath = "", parentData, parentDataProperty, r if (data.relatedAvailable !== void 0) { const _errs38 = errors; if (typeof data.relatedAvailable !== "boolean") { - validate93.errors = [{ instancePath: instancePath + "/relatedAvailable", schemaPath: "#/properties/relatedAvailable/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; + validate94.errors = [{ instancePath: instancePath + "/relatedAvailable", schemaPath: "#/properties/relatedAvailable/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; return false; } var valid0 = _errs38 === errors; @@ -12478,17 +12514,17 @@ function validate93(data, { instancePath = "", parentData, parentDataProperty, r let data16 = data.sizeBytes; const _errs40 = errors; if (!(typeof data16 == "number" && (!(data16 % 1) && !isNaN(data16)) && isFinite(data16))) { - validate93.errors = [{ instancePath: instancePath + "/sizeBytes", schemaPath: "#/properties/sizeBytes/type", keyword: "type", params: { type: "integer" }, message: "must be integer" }]; + validate94.errors = [{ instancePath: instancePath + "/sizeBytes", schemaPath: "#/properties/sizeBytes/type", keyword: "type", params: { type: "integer" }, message: "must be integer" }]; return false; } if (errors === _errs40) { if (typeof data16 == "number" && isFinite(data16)) { if (data16 > 9007199254740991 || isNaN(data16)) { - validate93.errors = [{ instancePath: instancePath + "/sizeBytes", schemaPath: "#/properties/sizeBytes/maximum", keyword: "maximum", params: { comparison: "<=", limit: 9007199254740991 }, message: "must be <= 9007199254740991" }]; + validate94.errors = [{ instancePath: instancePath + "/sizeBytes", schemaPath: "#/properties/sizeBytes/maximum", keyword: "maximum", params: { comparison: "<=", limit: 9007199254740991 }, message: "must be <= 9007199254740991" }]; return false; } else { if (data16 < 0 || isNaN(data16)) { - validate93.errors = [{ instancePath: instancePath + "/sizeBytes", schemaPath: "#/properties/sizeBytes/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; + validate94.errors = [{ instancePath: instancePath + "/sizeBytes", schemaPath: "#/properties/sizeBytes/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; return false; } } @@ -12500,7 +12536,7 @@ function validate93(data, { instancePath = "", parentData, parentDataProperty, r } if (valid0) { if (data.integrity?.state === "duplicate" && (!Array.isArray(data.integrity.otherModelIds) || data.integrity.count !== data.integrity.otherModelIds.length + 1 || data.integrity.count < 2 || data.integrity.otherModelIds.includes(data.id) || new Set(data.integrity.otherModelIds).size !== data.integrity.otherModelIds.length)) { - validate93.errors = [{ instancePath, schemaPath: "#/pumasCatalogRow", keyword: "pumasCatalogRow", params: {}, message: 'must pass "pumasCatalogRow" keyword validation' }]; + validate94.errors = [{ instancePath, schemaPath: "#/pumasCatalogRow", keyword: "pumasCatalogRow", params: {}, message: 'must pass "pumasCatalogRow" keyword validation' }]; return false; } } @@ -12518,27 +12554,27 @@ function validate93(data, { instancePath = "", parentData, parentDataProperty, r } } } else { - validate93.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate94.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate93.errors = vErrors; + validate94.errors = vErrors; return errors === 0; } -function validate92(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +function validate93(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.success === void 0 && (missing0 = "success") || data.models === void 0 && (missing0 = "models")) { - validate92.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate93.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "models" || key0 === "success")) { - validate92.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate93.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -12552,8 +12588,8 @@ function validate92(data, { instancePath = "", parentData, parentDataProperty, r const _errs4 = errors; for (const key1 in data0) { const _errs5 = errors; - if (!validate93(data0[key1], { instancePath: instancePath + "/models/" + key1.replace(/~/g, "~0").replace(/\//g, "~1"), parentData: data0, parentDataProperty: key1, rootData })) { - vErrors = vErrors === null ? validate93.errors : vErrors.concat(validate93.errors); + if (!validate94(data0[key1], { instancePath: instancePath + "/models/" + key1.replace(/~/g, "~0").replace(/\//g, "~1"), parentData: data0, parentDataProperty: key1, rootData })) { + vErrors = vErrors === null ? validate94.errors : vErrors.concat(validate94.errors); errors = vErrors.length; } var valid1 = _errs5 === errors; @@ -12563,12 +12599,12 @@ function validate92(data, { instancePath = "", parentData, parentDataProperty, r } if (_errs4 === errors) { if (Object.entries(data0).some(([key, value]) => value === null || typeof value !== "object" || key !== value.id)) { - validate92.errors = [{ instancePath: instancePath + "/models", schemaPath: "#/properties/models/pumasCatalogMap", keyword: "pumasCatalogMap", params: {}, message: 'must pass "pumasCatalogMap" keyword validation' }]; + validate93.errors = [{ instancePath: instancePath + "/models", schemaPath: "#/properties/models/pumasCatalogMap", keyword: "pumasCatalogMap", params: {}, message: 'must pass "pumasCatalogMap" keyword validation' }]; return false; } } } else { - validate92.errors = [{ instancePath: instancePath + "/models", schemaPath: "#/properties/models/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate93.errors = [{ instancePath: instancePath + "/models", schemaPath: "#/properties/models/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } @@ -12581,11 +12617,11 @@ function validate92(data, { instancePath = "", parentData, parentDataProperty, r let data2 = data.success; const _errs6 = errors; if (typeof data2 !== "boolean") { - validate92.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; + validate93.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; return false; } if (true !== data2) { - validate92.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/const", keyword: "const", params: { allowedValue: true }, message: "must be equal to constant" }]; + validate93.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/const", keyword: "const", params: { allowedValue: true }, message: "must be equal to constant" }]; return false; } var valid0 = _errs6 === errors; @@ -12596,32 +12632,32 @@ function validate92(data, { instancePath = "", parentData, parentDataProperty, r } } } else { - validate92.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate93.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate92.errors = vErrors; + validate93.errors = vErrors; return errors === 0; } -var validatePartialDownloadOutcome = validate97; -var schema105 = { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "definitions": { "DownloadStatus": { "description": "Model download status.", "enum": ["queued", "downloading", "pausing", "paused", "cancelling", "completed", "cancelled", "error"], "type": "string" }, "PartialDownloadActionName": { "enum": ["resume", "recover", "attach", "none"], "type": "string" }, "PartialDownloadReason": { "enum": ["hf_client_unavailable", "download_root_busy", "model_not_found", "model_not_partial", "recovery_unavailable", "recovery_context_stale", "resume_rejected", "already_completed", "already_cancelled", "invalid_repo_id", "repo_not_found", "rate_limited", "permission_denied", "network_error", "recover_failed"], "type": "string" } }, "properties": { "action": { "$ref": "#/definitions/PartialDownloadActionName" }, "download_id": { "type": ["string", "null"] }, "error": { "type": ["string", "null"] }, "reason_code": { "anyOf": [{ "$ref": "#/definitions/PartialDownloadReason" }, { "type": "null" }] }, "status": { "anyOf": [{ "$ref": "#/definitions/DownloadStatus" }, { "type": "null" }] }, "success": { "type": "boolean" } }, "pumasPartialOutcome": true, "required": ["success", "action", "download_id", "status", "reason_code", "error"], "title": "PartialDownloadOutcome", "type": "object" }; -var schema106 = { "enum": ["resume", "recover", "attach", "none"], "type": "string" }; -var schema107 = { "enum": ["hf_client_unavailable", "download_root_busy", "model_not_found", "model_not_partial", "recovery_unavailable", "recovery_context_stale", "resume_rejected", "already_completed", "already_cancelled", "invalid_repo_id", "repo_not_found", "rate_limited", "permission_denied", "network_error", "recover_failed"], "type": "string" }; -var schema108 = { "description": "Model download status.", "enum": ["queued", "downloading", "pausing", "paused", "cancelling", "completed", "cancelled", "error"], "type": "string" }; -function validate97(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validatePartialDownloadOutcome = validate98; +var schema106 = { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "definitions": { "DownloadStatus": { "description": "Model download status.", "enum": ["queued", "downloading", "pausing", "paused", "cancelling", "completed", "cancelled", "error"], "type": "string" }, "PartialDownloadActionName": { "enum": ["resume", "recover", "attach", "none"], "type": "string" }, "PartialDownloadReason": { "enum": ["hf_client_unavailable", "download_root_busy", "model_not_found", "model_not_partial", "recovery_unavailable", "recovery_context_stale", "resume_rejected", "already_completed", "already_cancelled", "invalid_repo_id", "repo_not_found", "rate_limited", "permission_denied", "network_error", "recover_failed"], "type": "string" } }, "properties": { "action": { "$ref": "#/definitions/PartialDownloadActionName" }, "download_id": { "type": ["string", "null"] }, "error": { "type": ["string", "null"] }, "reason_code": { "anyOf": [{ "$ref": "#/definitions/PartialDownloadReason" }, { "type": "null" }] }, "status": { "anyOf": [{ "$ref": "#/definitions/DownloadStatus" }, { "type": "null" }] }, "success": { "type": "boolean" } }, "pumasPartialOutcome": true, "required": ["success", "action", "download_id", "status", "reason_code", "error"], "title": "PartialDownloadOutcome", "type": "object" }; +var schema107 = { "enum": ["resume", "recover", "attach", "none"], "type": "string" }; +var schema108 = { "enum": ["hf_client_unavailable", "download_root_busy", "model_not_found", "model_not_partial", "recovery_unavailable", "recovery_context_stale", "resume_rejected", "already_completed", "already_cancelled", "invalid_repo_id", "repo_not_found", "rate_limited", "permission_denied", "network_error", "recover_failed"], "type": "string" }; +var schema109 = { "description": "Model download status.", "enum": ["queued", "downloading", "pausing", "paused", "cancelling", "completed", "cancelled", "error"], "type": "string" }; +function validate98(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.success === void 0 && (missing0 = "success") || data.action === void 0 && (missing0 = "action") || data.download_id === void 0 && (missing0 = "download_id") || data.status === void 0 && (missing0 = "status") || data.reason_code === void 0 && (missing0 = "reason_code") || data.error === void 0 && (missing0 = "error")) { - validate97.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate98.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "action" || key0 === "download_id" || key0 === "error" || key0 === "reason_code" || key0 === "status" || key0 === "success")) { - validate97.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate98.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -12631,11 +12667,11 @@ function validate97(data, { instancePath = "", parentData, parentDataProperty, r let data0 = data.action; const _errs2 = errors; if (typeof data0 !== "string") { - validate97.errors = [{ instancePath: instancePath + "/action", schemaPath: "#/definitions/PartialDownloadActionName/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate98.errors = [{ instancePath: instancePath + "/action", schemaPath: "#/definitions/PartialDownloadActionName/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } if (!(data0 === "resume" || data0 === "recover" || data0 === "attach" || data0 === "none")) { - validate97.errors = [{ instancePath: instancePath + "/action", schemaPath: "#/definitions/PartialDownloadActionName/enum", keyword: "enum", params: { allowedValues: schema106.enum }, message: "must be equal to one of the allowed values" }]; + validate98.errors = [{ instancePath: instancePath + "/action", schemaPath: "#/definitions/PartialDownloadActionName/enum", keyword: "enum", params: { allowedValues: schema107.enum }, message: "must be equal to one of the allowed values" }]; return false; } var valid0 = _errs2 === errors; @@ -12647,7 +12683,7 @@ function validate97(data, { instancePath = "", parentData, parentDataProperty, r let data1 = data.download_id; const _errs5 = errors; if (typeof data1 !== "string" && data1 !== null) { - validate97.errors = [{ instancePath: instancePath + "/download_id", schemaPath: "#/properties/download_id/type", keyword: "type", params: { type: schema105.properties.download_id.type }, message: "must be string,null" }]; + validate98.errors = [{ instancePath: instancePath + "/download_id", schemaPath: "#/properties/download_id/type", keyword: "type", params: { type: schema106.properties.download_id.type }, message: "must be string,null" }]; return false; } var valid0 = _errs5 === errors; @@ -12659,7 +12695,7 @@ function validate97(data, { instancePath = "", parentData, parentDataProperty, r let data2 = data.error; const _errs7 = errors; if (typeof data2 !== "string" && data2 !== null) { - validate97.errors = [{ instancePath: instancePath + "/error", schemaPath: "#/properties/error/type", keyword: "type", params: { type: schema105.properties.error.type }, message: "must be string,null" }]; + validate98.errors = [{ instancePath: instancePath + "/error", schemaPath: "#/properties/error/type", keyword: "type", params: { type: schema106.properties.error.type }, message: "must be string,null" }]; return false; } var valid0 = _errs7 === errors; @@ -12683,7 +12719,7 @@ function validate97(data, { instancePath = "", parentData, parentDataProperty, r errors++; } if (!(data3 === "hf_client_unavailable" || data3 === "download_root_busy" || data3 === "model_not_found" || data3 === "model_not_partial" || data3 === "recovery_unavailable" || data3 === "recovery_context_stale" || data3 === "resume_rejected" || data3 === "already_completed" || data3 === "already_cancelled" || data3 === "invalid_repo_id" || data3 === "repo_not_found" || data3 === "rate_limited" || data3 === "permission_denied" || data3 === "network_error" || data3 === "recover_failed")) { - const err1 = { instancePath: instancePath + "/reason_code", schemaPath: "#/definitions/PartialDownloadReason/enum", keyword: "enum", params: { allowedValues: schema107.enum }, message: "must be equal to one of the allowed values" }; + const err1 = { instancePath: instancePath + "/reason_code", schemaPath: "#/definitions/PartialDownloadReason/enum", keyword: "enum", params: { allowedValues: schema108.enum }, message: "must be equal to one of the allowed values" }; if (vErrors === null) { vErrors = [err1]; } else { @@ -12715,7 +12751,7 @@ function validate97(data, { instancePath = "", parentData, parentDataProperty, r vErrors.push(err3); } errors++; - validate97.errors = vErrors; + validate98.errors = vErrors; return false; } else { errors = _errs10; @@ -12748,7 +12784,7 @@ function validate97(data, { instancePath = "", parentData, parentDataProperty, r errors++; } if (!(data4 === "queued" || data4 === "downloading" || data4 === "pausing" || data4 === "paused" || data4 === "cancelling" || data4 === "completed" || data4 === "cancelled" || data4 === "error")) { - const err5 = { instancePath: instancePath + "/status", schemaPath: "#/definitions/DownloadStatus/enum", keyword: "enum", params: { allowedValues: schema108.enum }, message: "must be equal to one of the allowed values" }; + const err5 = { instancePath: instancePath + "/status", schemaPath: "#/definitions/DownloadStatus/enum", keyword: "enum", params: { allowedValues: schema109.enum }, message: "must be equal to one of the allowed values" }; if (vErrors === null) { vErrors = [err5]; } else { @@ -12780,7 +12816,7 @@ function validate97(data, { instancePath = "", parentData, parentDataProperty, r vErrors.push(err7); } errors++; - validate97.errors = vErrors; + validate98.errors = vErrors; return false; } else { errors = _errs17; @@ -12800,7 +12836,7 @@ function validate97(data, { instancePath = "", parentData, parentDataProperty, r if (data.success !== void 0) { const _errs23 = errors; if (typeof data.success !== "boolean") { - validate97.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; + validate98.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; return false; } var valid0 = _errs23 === errors; @@ -12809,7 +12845,7 @@ function validate97(data, { instancePath = "", parentData, parentDataProperty, r } if (valid0) { if (!((data.action === "resume" || data.action === "recover") && data.success === true && typeof data.download_id === "string" && data.download_id.length > 0 && data.status === "queued" && data.reason_code === null && data.error === null || data.action === "attach" && data.success === true && typeof data.download_id === "string" && data.download_id.length > 0 && ["queued", "downloading", "pausing", "cancelling"].includes(data.status) && data.reason_code === null && data.error === null || data.action === "none" && data.success === false && typeof data.error === "string" && (data.download_id === null && data.status === null && !["already_completed", "already_cancelled", "resume_rejected"].includes(data.reason_code) && data.reason_code !== null || typeof data.download_id === "string" && data.download_id.length > 0 && (data.status === "completed" && data.reason_code === "already_completed" || data.status === "cancelled" && data.reason_code === "already_cancelled" || ["paused", "error"].includes(data.status) && data.reason_code === "resume_rejected")))) { - validate97.errors = [{ instancePath, schemaPath: "#/pumasPartialOutcome", keyword: "pumasPartialOutcome", params: {}, message: 'must pass "pumasPartialOutcome" keyword validation' }]; + validate98.errors = [{ instancePath, schemaPath: "#/pumasPartialOutcome", keyword: "pumasPartialOutcome", params: {}, message: 'must pass "pumasPartialOutcome" keyword validation' }]; return false; } } @@ -12821,28 +12857,28 @@ function validate97(data, { instancePath = "", parentData, parentDataProperty, r } } } else { - validate97.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate98.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate97.errors = vErrors; + validate98.errors = vErrors; return errors === 0; } -var validatePreviewTorchRuntimeParams = validate98; -function validate98(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validatePreviewTorchRuntimeParams = validate99; +function validate99(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.tag === void 0 && (missing0 = "tag") || data.build === void 0 && (missing0 = "build") || data.python === void 0 && (missing0 = "python")) { - validate98.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate99.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "adapter" || key0 === "build" || key0 === "python" || key0 === "tag")) { - validate98.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate99.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -12851,7 +12887,7 @@ function validate98(data, { instancePath = "", parentData, parentDataProperty, r if (data.adapter !== void 0) { const _errs2 = errors; if (typeof data.adapter !== "string") { - validate98.errors = [{ instancePath: instancePath + "/adapter", schemaPath: "#/properties/adapter/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate99.errors = [{ instancePath: instancePath + "/adapter", schemaPath: "#/properties/adapter/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs2 === errors; @@ -12862,7 +12898,7 @@ function validate98(data, { instancePath = "", parentData, parentDataProperty, r if (data.build !== void 0) { const _errs4 = errors; if (typeof data.build !== "string") { - validate98.errors = [{ instancePath: instancePath + "/build", schemaPath: "#/properties/build/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate99.errors = [{ instancePath: instancePath + "/build", schemaPath: "#/properties/build/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs4 === errors; @@ -12873,7 +12909,7 @@ function validate98(data, { instancePath = "", parentData, parentDataProperty, r if (data.python !== void 0) { const _errs6 = errors; if (typeof data.python !== "string") { - validate98.errors = [{ instancePath: instancePath + "/python", schemaPath: "#/properties/python/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate99.errors = [{ instancePath: instancePath + "/python", schemaPath: "#/properties/python/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs6 === errors; @@ -12884,7 +12920,7 @@ function validate98(data, { instancePath = "", parentData, parentDataProperty, r if (data.tag !== void 0) { const _errs8 = errors; if (typeof data.tag !== "string") { - validate98.errors = [{ instancePath: instancePath + "/tag", schemaPath: "#/properties/tag/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate99.errors = [{ instancePath: instancePath + "/tag", schemaPath: "#/properties/tag/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs8 === errors; @@ -12897,29 +12933,29 @@ function validate98(data, { instancePath = "", parentData, parentDataProperty, r } } } else { - validate98.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate99.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate98.errors = vErrors; + validate99.errors = vErrors; return errors === 0; } -var validatePublicError = validate99; -var schema111 = { "description": "Stable public failure categories shared by RPC transports.", "enum": ["invalid_request", "not_found", "conflict", "cancelled", "unavailable", "operation_failed", "internal"], "type": "string" }; -function validate99(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validatePublicError = validate100; +var schema112 = { "description": "Stable public failure categories shared by RPC transports.", "enum": ["invalid_request", "not_found", "conflict", "cancelled", "unavailable", "operation_failed", "internal"], "type": "string" }; +function validate100(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.code === void 0 && (missing0 = "code") || data.class === void 0 && (missing0 = "class") || data.message === void 0 && (missing0 = "message")) { - validate99.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate100.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "class" || key0 === "code" || key0 === "message")) { - validate99.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate100.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -12929,11 +12965,11 @@ function validate99(data, { instancePath = "", parentData, parentDataProperty, r let data0 = data.class; const _errs2 = errors; if (typeof data0 !== "string") { - validate99.errors = [{ instancePath: instancePath + "/class", schemaPath: "#/definitions/PublicErrorClass/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate100.errors = [{ instancePath: instancePath + "/class", schemaPath: "#/definitions/PublicErrorClass/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } if (!(data0 === "invalid_request" || data0 === "not_found" || data0 === "conflict" || data0 === "cancelled" || data0 === "unavailable" || data0 === "operation_failed" || data0 === "internal")) { - validate99.errors = [{ instancePath: instancePath + "/class", schemaPath: "#/definitions/PublicErrorClass/enum", keyword: "enum", params: { allowedValues: schema111.enum }, message: "must be equal to one of the allowed values" }]; + validate100.errors = [{ instancePath: instancePath + "/class", schemaPath: "#/definitions/PublicErrorClass/enum", keyword: "enum", params: { allowedValues: schema112.enum }, message: "must be equal to one of the allowed values" }]; return false; } var valid0 = _errs2 === errors; @@ -12945,17 +12981,17 @@ function validate99(data, { instancePath = "", parentData, parentDataProperty, r let data1 = data.code; const _errs5 = errors; if (!(typeof data1 == "number" && (!(data1 % 1) && !isNaN(data1)) && isFinite(data1))) { - validate99.errors = [{ instancePath: instancePath + "/code", schemaPath: "#/properties/code/type", keyword: "type", params: { type: "integer" }, message: "must be integer" }]; + validate100.errors = [{ instancePath: instancePath + "/code", schemaPath: "#/properties/code/type", keyword: "type", params: { type: "integer" }, message: "must be integer" }]; return false; } if (errors === _errs5) { if (typeof data1 == "number" && isFinite(data1)) { if (data1 > 2147483647 || isNaN(data1)) { - validate99.errors = [{ instancePath: instancePath + "/code", schemaPath: "#/properties/code/maximum", keyword: "maximum", params: { comparison: "<=", limit: 2147483647 }, message: "must be <= 2147483647" }]; + validate100.errors = [{ instancePath: instancePath + "/code", schemaPath: "#/properties/code/maximum", keyword: "maximum", params: { comparison: "<=", limit: 2147483647 }, message: "must be <= 2147483647" }]; return false; } else { if (data1 < -2147483648 || isNaN(data1)) { - validate99.errors = [{ instancePath: instancePath + "/code", schemaPath: "#/properties/code/minimum", keyword: "minimum", params: { comparison: ">=", limit: -2147483648 }, message: "must be >= -2147483648" }]; + validate100.errors = [{ instancePath: instancePath + "/code", schemaPath: "#/properties/code/minimum", keyword: "minimum", params: { comparison: ">=", limit: -2147483648 }, message: "must be >= -2147483648" }]; return false; } } @@ -12969,7 +13005,7 @@ function validate99(data, { instancePath = "", parentData, parentDataProperty, r if (data.message !== void 0) { const _errs7 = errors; if (typeof data.message !== "string") { - validate99.errors = [{ instancePath: instancePath + "/message", schemaPath: "#/properties/message/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate100.errors = [{ instancePath: instancePath + "/message", schemaPath: "#/properties/message/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs7 === errors; @@ -12981,28 +13017,28 @@ function validate99(data, { instancePath = "", parentData, parentDataProperty, r } } } else { - validate99.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate100.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate99.errors = vErrors; + validate100.errors = vErrors; return errors === 0; } -var validateRecoverDownloadParams = validate100; -function validate100(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateRecoverDownloadParams = validate101; +function validate101(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.modelId === void 0 && (missing0 = "modelId") || data.recoveryToken === void 0 && (missing0 = "recoveryToken")) { - validate100.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate101.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "modelId" || key0 === "recoveryToken")) { - validate100.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate101.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -13017,16 +13053,16 @@ function validate100(data, { instancePath = "", parentData, parentDataProperty, const stem = component.split(".")[0].replace(/[a-z]/g, (letter) => letter.toUpperCase()); return component.length === 0 || component === "." || component === ".." || /[. ]$/.test(component) || encodeURIComponent(component).replace(/%[0-9A-F]{2}/g, "x").length > 255 || ["CON", "PRN", "AUX", "NUL", "CONIN$", "CONOUT$"].includes(stem) || /^(COM|LPT)[1-9]$/.test(stem); })) { - validate100.errors = [{ instancePath: instancePath + "/modelId", schemaPath: "#/properties/modelId/pumasPortablePath", keyword: "pumasPortablePath", params: {}, message: 'must pass "pumasPortablePath" keyword validation' }]; + validate101.errors = [{ instancePath: instancePath + "/modelId", schemaPath: "#/properties/modelId/pumasPortablePath", keyword: "pumasPortablePath", params: {}, message: 'must pass "pumasPortablePath" keyword validation' }]; return false; } else { if (encodeURIComponent(data0).replace(/%[0-9A-F]{2}/g, "x").length > 4096) { - validate100.errors = [{ instancePath: instancePath + "/modelId", schemaPath: "#/properties/modelId/pumasUtf8Max", keyword: "pumasUtf8Max", params: {}, message: 'must pass "pumasUtf8Max" keyword validation' }]; + validate101.errors = [{ instancePath: instancePath + "/modelId", schemaPath: "#/properties/modelId/pumasUtf8Max", keyword: "pumasUtf8Max", params: {}, message: 'must pass "pumasUtf8Max" keyword validation' }]; return false; } } } else { - validate100.errors = [{ instancePath: instancePath + "/modelId", schemaPath: "#/properties/modelId/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate101.errors = [{ instancePath: instancePath + "/modelId", schemaPath: "#/properties/modelId/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } } @@ -13041,11 +13077,11 @@ function validate100(data, { instancePath = "", parentData, parentDataProperty, if (errors === _errs4) { if (typeof data1 === "string") { if (!pattern0.test(data1)) { - validate100.errors = [{ instancePath: instancePath + "/recoveryToken", schemaPath: "#/properties/recoveryToken/pattern", keyword: "pattern", params: { pattern: "^v1:[0-9a-f]{64}$" }, message: 'must match pattern "^v1:[0-9a-f]{64}$"' }]; + validate101.errors = [{ instancePath: instancePath + "/recoveryToken", schemaPath: "#/properties/recoveryToken/pattern", keyword: "pattern", params: { pattern: "^v1:[0-9a-f]{64}$" }, message: 'must match pattern "^v1:[0-9a-f]{64}$"' }]; return false; } } else { - validate100.errors = [{ instancePath: instancePath + "/recoveryToken", schemaPath: "#/properties/recoveryToken/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate101.errors = [{ instancePath: instancePath + "/recoveryToken", schemaPath: "#/properties/recoveryToken/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } } @@ -13057,28 +13093,28 @@ function validate100(data, { instancePath = "", parentData, parentDataProperty, } } } else { - validate100.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate101.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate100.errors = vErrors; + validate101.errors = vErrors; return errors === 0; } -var validateRemoveVersionOutcome = validate101; -function validate101(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateRemoveVersionOutcome = validate102; +function validate102(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.success === void 0 && (missing0 = "success")) { - validate101.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate102.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "success")) { - validate101.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate102.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -13086,24 +13122,24 @@ function validate101(data, { instancePath = "", parentData, parentDataProperty, if (_errs1 === errors) { if (data.success !== void 0) { if (typeof data.success !== "boolean") { - validate101.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; + validate102.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; return false; } } } } } else { - validate101.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate102.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate101.errors = vErrors; + validate102.errors = vErrors; return errors === 0; } -var validateRouterProfileSyncStatus = validate102; -var schema114 = { "definitions": { "RouterCatalogState": { "enum": ["current", "pending", "uncertain"], "type": "string" }, "RouterObservationState": { "enum": ["connecting", "current", "unavailable"], "type": "string" } }, "oneOf": [{ "additionalProperties": false, "properties": { "catalog_state": { "enum": ["current", "pending"], "type": "string" }, "generation": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "last_error": { "type": ["string", "null"] }, "observation_state": { "$ref": "#/definitions/RouterObservationState" }, "pending_model_ids": { "items": { "type": "string" }, "type": "array" }, "profile_id": { "type": "string" } }, "required": ["profile_id", "generation", "observation_state", "catalog_state", "pending_model_ids", "last_error"], "type": "object" }, { "additionalProperties": false, "properties": { "catalog_state": { "enum": ["uncertain"], "type": "string" }, "generation": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "last_error": { "type": ["string", "null"] }, "observation_state": { "enum": ["unavailable"], "type": "string" }, "pending_model_ids": { "items": { "type": "string" }, "type": "array" }, "profile_id": { "type": "string" } }, "required": ["profile_id", "generation", "observation_state", "catalog_state", "pending_model_ids", "last_error"], "type": "object" }] }; -var schema115 = { "enum": ["connecting", "current", "unavailable"], "type": "string" }; -function validate102(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateRouterProfileSyncStatus = validate103; +var schema115 = { "definitions": { "RouterCatalogState": { "enum": ["current", "pending", "uncertain"], "type": "string" }, "RouterObservationState": { "enum": ["connecting", "current", "unavailable"], "type": "string" } }, "oneOf": [{ "additionalProperties": false, "properties": { "catalog_state": { "enum": ["current", "pending"], "type": "string" }, "generation": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "last_error": { "type": ["string", "null"] }, "observation_state": { "$ref": "#/definitions/RouterObservationState" }, "pending_model_ids": { "items": { "type": "string" }, "type": "array" }, "profile_id": { "type": "string" } }, "required": ["profile_id", "generation", "observation_state", "catalog_state", "pending_model_ids", "last_error"], "type": "object" }, { "additionalProperties": false, "properties": { "catalog_state": { "enum": ["uncertain"], "type": "string" }, "generation": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "last_error": { "type": ["string", "null"] }, "observation_state": { "enum": ["unavailable"], "type": "string" }, "pending_model_ids": { "items": { "type": "string" }, "type": "array" }, "profile_id": { "type": "string" } }, "required": ["profile_id", "generation", "observation_state", "catalog_state", "pending_model_ids", "last_error"], "type": "object" }] }; +var schema116 = { "enum": ["connecting", "current", "unavailable"], "type": "string" }; +function validate103(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; const _errs0 = errors; @@ -13149,7 +13185,7 @@ function validate102(data, { instancePath = "", parentData, parentDataProperty, errors++; } if (!(data0 === "current" || data0 === "pending")) { - const err3 = { instancePath: instancePath + "/catalog_state", schemaPath: "#/oneOf/0/properties/catalog_state/enum", keyword: "enum", params: { allowedValues: schema114.oneOf[0].properties.catalog_state.enum }, message: "must be equal to one of the allowed values" }; + const err3 = { instancePath: instancePath + "/catalog_state", schemaPath: "#/oneOf/0/properties/catalog_state/enum", keyword: "enum", params: { allowedValues: schema115.oneOf[0].properties.catalog_state.enum }, message: "must be equal to one of the allowed values" }; if (vErrors === null) { vErrors = [err3]; } else { @@ -13206,7 +13242,7 @@ function validate102(data, { instancePath = "", parentData, parentDataProperty, let data2 = data.last_error; const _errs8 = errors; if (typeof data2 !== "string" && data2 !== null) { - const err7 = { instancePath: instancePath + "/last_error", schemaPath: "#/oneOf/0/properties/last_error/type", keyword: "type", params: { type: schema114.oneOf[0].properties.last_error.type }, message: "must be string,null" }; + const err7 = { instancePath: instancePath + "/last_error", schemaPath: "#/oneOf/0/properties/last_error/type", keyword: "type", params: { type: schema115.oneOf[0].properties.last_error.type }, message: "must be string,null" }; if (vErrors === null) { vErrors = [err7]; } else { @@ -13232,7 +13268,7 @@ function validate102(data, { instancePath = "", parentData, parentDataProperty, errors++; } if (!(data3 === "connecting" || data3 === "current" || data3 === "unavailable")) { - const err9 = { instancePath: instancePath + "/observation_state", schemaPath: "#/definitions/RouterObservationState/enum", keyword: "enum", params: { allowedValues: schema115.enum }, message: "must be equal to one of the allowed values" }; + const err9 = { instancePath: instancePath + "/observation_state", schemaPath: "#/definitions/RouterObservationState/enum", keyword: "enum", params: { allowedValues: schema116.enum }, message: "must be equal to one of the allowed values" }; if (vErrors === null) { vErrors = [err9]; } else { @@ -13360,7 +13396,7 @@ function validate102(data, { instancePath = "", parentData, parentDataProperty, errors++; } if (!(data7 === "uncertain")) { - const err17 = { instancePath: instancePath + "/catalog_state", schemaPath: "#/oneOf/1/properties/catalog_state/enum", keyword: "enum", params: { allowedValues: schema114.oneOf[1].properties.catalog_state.enum }, message: "must be equal to one of the allowed values" }; + const err17 = { instancePath: instancePath + "/catalog_state", schemaPath: "#/oneOf/1/properties/catalog_state/enum", keyword: "enum", params: { allowedValues: schema115.oneOf[1].properties.catalog_state.enum }, message: "must be equal to one of the allowed values" }; if (vErrors === null) { vErrors = [err17]; } else { @@ -13417,7 +13453,7 @@ function validate102(data, { instancePath = "", parentData, parentDataProperty, let data9 = data.last_error; const _errs26 = errors; if (typeof data9 !== "string" && data9 !== null) { - const err21 = { instancePath: instancePath + "/last_error", schemaPath: "#/oneOf/1/properties/last_error/type", keyword: "type", params: { type: schema114.oneOf[1].properties.last_error.type }, message: "must be string,null" }; + const err21 = { instancePath: instancePath + "/last_error", schemaPath: "#/oneOf/1/properties/last_error/type", keyword: "type", params: { type: schema115.oneOf[1].properties.last_error.type }, message: "must be string,null" }; if (vErrors === null) { vErrors = [err21]; } else { @@ -13443,7 +13479,7 @@ function validate102(data, { instancePath = "", parentData, parentDataProperty, errors++; } if (!(data10 === "unavailable")) { - const err23 = { instancePath: instancePath + "/observation_state", schemaPath: "#/oneOf/1/properties/observation_state/enum", keyword: "enum", params: { allowedValues: schema114.oneOf[1].properties.observation_state.enum }, message: "must be equal to one of the allowed values" }; + const err23 = { instancePath: instancePath + "/observation_state", schemaPath: "#/oneOf/1/properties/observation_state/enum", keyword: "enum", params: { allowedValues: schema115.oneOf[1].properties.observation_state.enum }, message: "must be equal to one of the allowed values" }; if (vErrors === null) { vErrors = [err23]; } else { @@ -13544,7 +13580,7 @@ function validate102(data, { instancePath = "", parentData, parentDataProperty, vErrors.push(err28); } errors++; - validate102.errors = vErrors; + validate103.errors = vErrors; return false; } else { errors = _errs0; @@ -13556,24 +13592,24 @@ function validate102(data, { instancePath = "", parentData, parentDataProperty, } } } - validate102.errors = vErrors; + validate103.errors = vErrors; return errors === 0; } -var validateRuntimeLaunchOutcome = validate103; -function validate103(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateRuntimeLaunchOutcome = validate104; +function validate104(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.success === void 0 && (missing0 = "success")) { - validate103.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate104.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "error" || key0 === "log_path" || key0 === "ready" || key0 === "success")) { - validate103.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate104.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -13582,7 +13618,7 @@ function validate103(data, { instancePath = "", parentData, parentDataProperty, if (data.error !== void 0) { const _errs2 = errors; if (typeof data.error !== "string") { - validate103.errors = [{ instancePath: instancePath + "/error", schemaPath: "#/properties/error/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate104.errors = [{ instancePath: instancePath + "/error", schemaPath: "#/properties/error/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs2 === errors; @@ -13593,7 +13629,7 @@ function validate103(data, { instancePath = "", parentData, parentDataProperty, if (data.log_path !== void 0) { const _errs4 = errors; if (typeof data.log_path !== "string") { - validate103.errors = [{ instancePath: instancePath + "/log_path", schemaPath: "#/properties/log_path/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate104.errors = [{ instancePath: instancePath + "/log_path", schemaPath: "#/properties/log_path/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs4 === errors; @@ -13604,7 +13640,7 @@ function validate103(data, { instancePath = "", parentData, parentDataProperty, if (data.ready !== void 0) { const _errs6 = errors; if (typeof data.ready !== "boolean") { - validate103.errors = [{ instancePath: instancePath + "/ready", schemaPath: "#/properties/ready/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; + validate104.errors = [{ instancePath: instancePath + "/ready", schemaPath: "#/properties/ready/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; return false; } var valid0 = _errs6 === errors; @@ -13615,7 +13651,7 @@ function validate103(data, { instancePath = "", parentData, parentDataProperty, if (data.success !== void 0) { const _errs8 = errors; if (typeof data.success !== "boolean") { - validate103.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; + validate104.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; return false; } var valid0 = _errs8 === errors; @@ -13628,58 +13664,58 @@ function validate103(data, { instancePath = "", parentData, parentDataProperty, } } } else { - validate103.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate104.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate103.errors = vErrors; + validate104.errors = vErrors; return errors === 0; } -var validateRuntimeLaunchParams = validate104; -function validate104(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateRuntimeLaunchParams = validate105; +function validate105(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { for (const key0 in data) { - validate104.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate105.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } } else { - validate104.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate105.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate104.errors = vErrors; + validate105.errors = vErrors; return errors === 0; } -var validateRuntimeRunningOutcome = validate105; -function validate105(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateRuntimeRunningOutcome = validate106; +function validate106(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (typeof data !== "boolean") { - validate105.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; + validate106.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; return false; } - validate105.errors = vErrors; + validate106.errors = vErrors; return errors === 0; } -var validateRuntimeStopOutcome = validate106; -function validate106(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateRuntimeStopOutcome = validate107; +function validate107(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.success === void 0 && (missing0 = "success")) { - validate106.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate107.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "success")) { - validate106.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate107.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -13687,36 +13723,36 @@ function validate106(data, { instancePath = "", parentData, parentDataProperty, if (_errs1 === errors) { if (data.success !== void 0) { if (typeof data.success !== "boolean") { - validate106.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; + validate107.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; return false; } } } } } else { - validate106.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate107.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate106.errors = vErrors; + validate107.errors = vErrors; return errors === 0; } -var validateSearchCatalogParams = validate107; -var schema120 = { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "limit": { "maximum": 512, "minimum": 1, "type": ["integer", "null"] }, "offset": { "maximum": 4294967295, "minimum": 0, "type": ["integer", "null"] }, "query": { "pumasUtf8Max": 4096, "type": "string" } }, "required": ["query"], "title": "SearchCatalogParams", "type": "object" }; -function validate107(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateSearchCatalogParams = validate108; +var schema121 = { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "limit": { "maximum": 512, "minimum": 1, "type": ["integer", "null"] }, "offset": { "maximum": 4294967295, "minimum": 0, "type": ["integer", "null"] }, "query": { "pumasUtf8Max": 4096, "type": "string" } }, "required": ["query"], "title": "SearchCatalogParams", "type": "object" }; +function validate108(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.query === void 0 && (missing0 = "query")) { - validate107.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate108.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "limit" || key0 === "offset" || key0 === "query")) { - validate107.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate108.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -13726,17 +13762,17 @@ function validate107(data, { instancePath = "", parentData, parentDataProperty, let data0 = data.limit; const _errs2 = errors; if (!(typeof data0 == "number" && (!(data0 % 1) && !isNaN(data0)) && isFinite(data0)) && data0 !== null) { - validate107.errors = [{ instancePath: instancePath + "/limit", schemaPath: "#/properties/limit/type", keyword: "type", params: { type: schema120.properties.limit.type }, message: "must be integer,null" }]; + validate108.errors = [{ instancePath: instancePath + "/limit", schemaPath: "#/properties/limit/type", keyword: "type", params: { type: schema121.properties.limit.type }, message: "must be integer,null" }]; return false; } if (errors === _errs2) { if (typeof data0 == "number" && isFinite(data0)) { if (data0 > 512 || isNaN(data0)) { - validate107.errors = [{ instancePath: instancePath + "/limit", schemaPath: "#/properties/limit/maximum", keyword: "maximum", params: { comparison: "<=", limit: 512 }, message: "must be <= 512" }]; + validate108.errors = [{ instancePath: instancePath + "/limit", schemaPath: "#/properties/limit/maximum", keyword: "maximum", params: { comparison: "<=", limit: 512 }, message: "must be <= 512" }]; return false; } else { if (data0 < 1 || isNaN(data0)) { - validate107.errors = [{ instancePath: instancePath + "/limit", schemaPath: "#/properties/limit/minimum", keyword: "minimum", params: { comparison: ">=", limit: 1 }, message: "must be >= 1" }]; + validate108.errors = [{ instancePath: instancePath + "/limit", schemaPath: "#/properties/limit/minimum", keyword: "minimum", params: { comparison: ">=", limit: 1 }, message: "must be >= 1" }]; return false; } } @@ -13751,17 +13787,17 @@ function validate107(data, { instancePath = "", parentData, parentDataProperty, let data1 = data.offset; const _errs4 = errors; if (!(typeof data1 == "number" && (!(data1 % 1) && !isNaN(data1)) && isFinite(data1)) && data1 !== null) { - validate107.errors = [{ instancePath: instancePath + "/offset", schemaPath: "#/properties/offset/type", keyword: "type", params: { type: schema120.properties.offset.type }, message: "must be integer,null" }]; + validate108.errors = [{ instancePath: instancePath + "/offset", schemaPath: "#/properties/offset/type", keyword: "type", params: { type: schema121.properties.offset.type }, message: "must be integer,null" }]; return false; } if (errors === _errs4) { if (typeof data1 == "number" && isFinite(data1)) { if (data1 > 4294967295 || isNaN(data1)) { - validate107.errors = [{ instancePath: instancePath + "/offset", schemaPath: "#/properties/offset/maximum", keyword: "maximum", params: { comparison: "<=", limit: 4294967295 }, message: "must be <= 4294967295" }]; + validate108.errors = [{ instancePath: instancePath + "/offset", schemaPath: "#/properties/offset/maximum", keyword: "maximum", params: { comparison: "<=", limit: 4294967295 }, message: "must be <= 4294967295" }]; return false; } else { if (data1 < 0 || isNaN(data1)) { - validate107.errors = [{ instancePath: instancePath + "/offset", schemaPath: "#/properties/offset/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; + validate108.errors = [{ instancePath: instancePath + "/offset", schemaPath: "#/properties/offset/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; return false; } } @@ -13778,11 +13814,11 @@ function validate107(data, { instancePath = "", parentData, parentDataProperty, if (errors === _errs6) { if (typeof data2 === "string") { if (encodeURIComponent(data2).replace(/%[0-9A-F]{2}/g, "x").length > 4096) { - validate107.errors = [{ instancePath: instancePath + "/query", schemaPath: "#/properties/query/pumasUtf8Max", keyword: "pumasUtf8Max", params: {}, message: 'must pass "pumasUtf8Max" keyword validation' }]; + validate108.errors = [{ instancePath: instancePath + "/query", schemaPath: "#/properties/query/pumasUtf8Max", keyword: "pumasUtf8Max", params: {}, message: 'must pass "pumasUtf8Max" keyword validation' }]; return false; } } else { - validate107.errors = [{ instancePath: instancePath + "/query", schemaPath: "#/properties/query/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate108.errors = [{ instancePath: instancePath + "/query", schemaPath: "#/properties/query/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } } @@ -13795,28 +13831,28 @@ function validate107(data, { instancePath = "", parentData, parentDataProperty, } } } else { - validate107.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate108.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate107.errors = vErrors; + validate108.errors = vErrors; return errors === 0; } -var validateSelectedVersionOutcome = validate108; -function validate108(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateSelectedVersionOutcome = validate109; +function validate109(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.success === void 0 && (missing0 = "success") || data.version === void 0 && (missing0 = "version")) { - validate108.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate109.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "success" || key0 === "version")) { - validate108.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate109.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -13826,11 +13862,11 @@ function validate108(data, { instancePath = "", parentData, parentDataProperty, let data0 = data.success; const _errs2 = errors; if (typeof data0 !== "boolean") { - validate108.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; + validate109.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; return false; } if (true !== data0) { - validate108.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/const", keyword: "const", params: { allowedValue: true }, message: "must be equal to constant" }]; + validate109.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/const", keyword: "const", params: { allowedValue: true }, message: "must be equal to constant" }]; return false; } var valid0 = _errs2 === errors; @@ -13841,7 +13877,7 @@ function validate108(data, { instancePath = "", parentData, parentDataProperty, if (data.version !== void 0) { const _errs4 = errors; if (typeof data.version !== "string") { - validate108.errors = [{ instancePath: instancePath + "/version", schemaPath: "#/properties/version/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate109.errors = [{ instancePath: instancePath + "/version", schemaPath: "#/properties/version/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs4 === errors; @@ -13852,28 +13888,28 @@ function validate108(data, { instancePath = "", parentData, parentDataProperty, } } } else { - validate108.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate109.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate108.errors = vErrors; + validate109.errors = vErrors; return errors === 0; } -var validateSetDefaultVersionOutcome = validate109; -function validate109(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateSetDefaultVersionOutcome = validate110; +function validate110(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.success === void 0 && (missing0 = "success")) { - validate109.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate110.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "success")) { - validate109.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate110.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -13881,23 +13917,23 @@ function validate109(data, { instancePath = "", parentData, parentDataProperty, if (_errs1 === errors) { if (data.success !== void 0) { if (typeof data.success !== "boolean") { - validate109.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; + validate110.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; return false; } } } } } else { - validate109.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate110.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate109.errors = vErrors; + validate110.errors = vErrors; return errors === 0; } -var validateSetDefaultVersionParams = validate110; -var schema123 = { "anyOf": [{ "additionalProperties": false, "properties": { "app_id": { "type": "string" }, "tag": { "default": null, "type": ["string", "null"] } }, "required": ["app_id"], "type": "object" }, { "additionalProperties": false, "properties": { "appId": { "type": "string" }, "tag": { "default": null, "type": ["string", "null"] } }, "required": ["appId"], "type": "object" }] }; -function validate110(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateSetDefaultVersionParams = validate111; +var schema124 = { "anyOf": [{ "additionalProperties": false, "properties": { "app_id": { "type": "string" }, "tag": { "default": null, "type": ["string", "null"] } }, "required": ["app_id"], "type": "object" }, { "additionalProperties": false, "properties": { "appId": { "type": "string" }, "tag": { "default": null, "type": ["string", "null"] } }, "required": ["appId"], "type": "object" }] }; +function validate111(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; const _errs0 = errors; @@ -13949,7 +13985,7 @@ function validate110(data, { instancePath = "", parentData, parentDataProperty, let data1 = data.tag; const _errs6 = errors; if (typeof data1 !== "string" && data1 !== null) { - const err3 = { instancePath: instancePath + "/tag", schemaPath: "#/anyOf/0/properties/tag/type", keyword: "type", params: { type: schema123.anyOf[0].properties.tag.type }, message: "must be string,null" }; + const err3 = { instancePath: instancePath + "/tag", schemaPath: "#/anyOf/0/properties/tag/type", keyword: "type", params: { type: schema124.anyOf[0].properties.tag.type }, message: "must be string,null" }; if (vErrors === null) { vErrors = [err3]; } else { @@ -14024,7 +14060,7 @@ function validate110(data, { instancePath = "", parentData, parentDataProperty, let data3 = data.tag; const _errs13 = errors; if (typeof data3 !== "string" && data3 !== null) { - const err8 = { instancePath: instancePath + "/tag", schemaPath: "#/anyOf/1/properties/tag/type", keyword: "type", params: { type: schema123.anyOf[1].properties.tag.type }, message: "must be string,null" }; + const err8 = { instancePath: instancePath + "/tag", schemaPath: "#/anyOf/1/properties/tag/type", keyword: "type", params: { type: schema124.anyOf[1].properties.tag.type }, message: "must be string,null" }; if (vErrors === null) { vErrors = [err8]; } else { @@ -14060,7 +14096,7 @@ function validate110(data, { instancePath = "", parentData, parentDataProperty, vErrors.push(err10); } errors++; - validate110.errors = vErrors; + validate111.errors = vErrors; return false; } else { errors = _errs0; @@ -14072,25 +14108,25 @@ function validate110(data, { instancePath = "", parentData, parentDataProperty, } } } - validate110.errors = vErrors; + validate111.errors = vErrors; return errors === 0; } -var validateStartBackendSetupParams = validate111; -var schema124 = { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "definitions": { "QuantBackend": { "description": "Identifies which quantization backend provides a capability.", "oneOf": [{ "const": "python_conversion", "description": "Existing Python-based safetensors \u2194 GGUF F16 conversion.", "type": "string" }, { "const": "llama_cpp", "description": "llama.cpp native quantization (llama-quantize, llama-imatrix).", "type": "string" }, { "const": "nvfp4", "description": "NVIDIA NVFP4 via TensorRT-LLM / nvidia-modelopt (Phase 2).", "type": "string" }, { "const": "fp8", "description": "CPU conversion to Transformers block-scaled FP8 Safetensors.", "type": "string" }, { "const": "sherry", "description": "Sherry / AngelSlim quantization-aware training (Phase 3).", "type": "string" }] } }, "properties": { "backend": { "$ref": "#/definitions/QuantBackend" }, "expected_previous_operation_id": { "default": null, "maxLength": 36, "minLength": 36, "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$", "type": ["string", "null"] } }, "required": ["backend"], "title": "StartBackendSetupParams", "type": "object" }; -function validate111(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateStartBackendSetupParams = validate112; +var schema125 = { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "definitions": { "QuantBackend": { "description": "Identifies which quantization backend provides a capability.", "oneOf": [{ "const": "python_conversion", "description": "Existing Python-based safetensors \u2194 GGUF F16 conversion.", "type": "string" }, { "const": "llama_cpp", "description": "llama.cpp native quantization (llama-quantize, llama-imatrix).", "type": "string" }, { "const": "nvfp4", "description": "NVIDIA NVFP4 via TensorRT-LLM / nvidia-modelopt (Phase 2).", "type": "string" }, { "const": "fp8", "description": "CPU conversion to Transformers block-scaled FP8 Safetensors.", "type": "string" }, { "const": "sherry", "description": "Sherry / AngelSlim quantization-aware training (Phase 3).", "type": "string" }] } }, "properties": { "backend": { "$ref": "#/definitions/QuantBackend" }, "expected_previous_operation_id": { "default": null, "maxLength": 36, "minLength": 36, "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$", "type": ["string", "null"] } }, "required": ["backend"], "title": "StartBackendSetupParams", "type": "object" }; +function validate112(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.backend === void 0 && (missing0 = "backend")) { - validate111.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate112.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "backend" || key0 === "expected_previous_operation_id")) { - validate111.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate112.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -14250,7 +14286,7 @@ function validate111(data, { instancePath = "", parentData, parentDataProperty, vErrors.push(err10); } errors++; - validate111.errors = vErrors; + validate112.errors = vErrors; return false; } else { errors = _errs4; @@ -14271,21 +14307,21 @@ function validate111(data, { instancePath = "", parentData, parentDataProperty, let data1 = data.expected_previous_operation_id; const _errs15 = errors; if (typeof data1 !== "string" && data1 !== null) { - validate111.errors = [{ instancePath: instancePath + "/expected_previous_operation_id", schemaPath: "#/properties/expected_previous_operation_id/type", keyword: "type", params: { type: schema124.properties.expected_previous_operation_id.type }, message: "must be string,null" }]; + validate112.errors = [{ instancePath: instancePath + "/expected_previous_operation_id", schemaPath: "#/properties/expected_previous_operation_id/type", keyword: "type", params: { type: schema125.properties.expected_previous_operation_id.type }, message: "must be string,null" }]; return false; } if (errors === _errs15) { if (typeof data1 === "string") { if (func5(data1) > 36) { - validate111.errors = [{ instancePath: instancePath + "/expected_previous_operation_id", schemaPath: "#/properties/expected_previous_operation_id/maxLength", keyword: "maxLength", params: { limit: 36 }, message: "must NOT have more than 36 characters" }]; + validate112.errors = [{ instancePath: instancePath + "/expected_previous_operation_id", schemaPath: "#/properties/expected_previous_operation_id/maxLength", keyword: "maxLength", params: { limit: 36 }, message: "must NOT have more than 36 characters" }]; return false; } else { if (func5(data1) < 36) { - validate111.errors = [{ instancePath: instancePath + "/expected_previous_operation_id", schemaPath: "#/properties/expected_previous_operation_id/minLength", keyword: "minLength", params: { limit: 36 }, message: "must NOT have fewer than 36 characters" }]; + validate112.errors = [{ instancePath: instancePath + "/expected_previous_operation_id", schemaPath: "#/properties/expected_previous_operation_id/minLength", keyword: "minLength", params: { limit: 36 }, message: "must NOT have fewer than 36 characters" }]; return false; } else { if (!pattern12.test(data1)) { - validate111.errors = [{ instancePath: instancePath + "/expected_previous_operation_id", schemaPath: "#/properties/expected_previous_operation_id/pattern", keyword: "pattern", params: { pattern: "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$" }, message: 'must match pattern "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"' }]; + validate112.errors = [{ instancePath: instancePath + "/expected_previous_operation_id", schemaPath: "#/properties/expected_previous_operation_id/pattern", keyword: "pattern", params: { pattern: "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$" }, message: 'must match pattern "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"' }]; return false; } } @@ -14300,16 +14336,16 @@ function validate111(data, { instancePath = "", parentData, parentDataProperty, } } } else { - validate111.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate112.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate111.errors = vErrors; + validate112.errors = vErrors; return errors === 0; } -var validateStartConversionSetupParams = validate112; -var schema126 = { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "expected_previous_operation_id": { "default": null, "maxLength": 36, "minLength": 36, "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$", "type": ["string", "null"] } }, "title": "StartConversionSetupParams", "type": "object" }; -function validate112(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateStartConversionSetupParams = validate113; +var schema127 = { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "expected_previous_operation_id": { "default": null, "maxLength": 36, "minLength": 36, "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$", "type": ["string", "null"] } }, "title": "StartConversionSetupParams", "type": "object" }; +function validate113(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { @@ -14317,7 +14353,7 @@ function validate112(data, { instancePath = "", parentData, parentDataProperty, const _errs1 = errors; for (const key0 in data) { if (!(key0 === "expected_previous_operation_id")) { - validate112.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate113.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -14327,21 +14363,21 @@ function validate112(data, { instancePath = "", parentData, parentDataProperty, let data0 = data.expected_previous_operation_id; const _errs2 = errors; if (typeof data0 !== "string" && data0 !== null) { - validate112.errors = [{ instancePath: instancePath + "/expected_previous_operation_id", schemaPath: "#/properties/expected_previous_operation_id/type", keyword: "type", params: { type: schema126.properties.expected_previous_operation_id.type }, message: "must be string,null" }]; + validate113.errors = [{ instancePath: instancePath + "/expected_previous_operation_id", schemaPath: "#/properties/expected_previous_operation_id/type", keyword: "type", params: { type: schema127.properties.expected_previous_operation_id.type }, message: "must be string,null" }]; return false; } if (errors === _errs2) { if (typeof data0 === "string") { if (func5(data0) > 36) { - validate112.errors = [{ instancePath: instancePath + "/expected_previous_operation_id", schemaPath: "#/properties/expected_previous_operation_id/maxLength", keyword: "maxLength", params: { limit: 36 }, message: "must NOT have more than 36 characters" }]; + validate113.errors = [{ instancePath: instancePath + "/expected_previous_operation_id", schemaPath: "#/properties/expected_previous_operation_id/maxLength", keyword: "maxLength", params: { limit: 36 }, message: "must NOT have more than 36 characters" }]; return false; } else { if (func5(data0) < 36) { - validate112.errors = [{ instancePath: instancePath + "/expected_previous_operation_id", schemaPath: "#/properties/expected_previous_operation_id/minLength", keyword: "minLength", params: { limit: 36 }, message: "must NOT have fewer than 36 characters" }]; + validate113.errors = [{ instancePath: instancePath + "/expected_previous_operation_id", schemaPath: "#/properties/expected_previous_operation_id/minLength", keyword: "minLength", params: { limit: 36 }, message: "must NOT have fewer than 36 characters" }]; return false; } else { if (!pattern12.test(data0)) { - validate112.errors = [{ instancePath: instancePath + "/expected_previous_operation_id", schemaPath: "#/properties/expected_previous_operation_id/pattern", keyword: "pattern", params: { pattern: "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$" }, message: 'must match pattern "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"' }]; + validate113.errors = [{ instancePath: instancePath + "/expected_previous_operation_id", schemaPath: "#/properties/expected_previous_operation_id/pattern", keyword: "pattern", params: { pattern: "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$" }, message: 'must match pattern "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"' }]; return false; } } @@ -14351,28 +14387,28 @@ function validate112(data, { instancePath = "", parentData, parentDataProperty, } } } else { - validate112.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate113.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate112.errors = vErrors; + validate113.errors = vErrors; return errors === 0; } -var validateStopRuntimeProfileGenerationOutcome = validate113; -function validate113(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateStopRuntimeProfileGenerationOutcome = validate114; +function validate114(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.success === void 0 && (missing0 = "success") || data.stopped === void 0 && (missing0 = "stopped")) { - validate113.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate114.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "stopped" || key0 === "success")) { - validate113.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate114.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -14381,7 +14417,7 @@ function validate113(data, { instancePath = "", parentData, parentDataProperty, if (data.stopped !== void 0) { const _errs2 = errors; if (typeof data.stopped !== "boolean") { - validate113.errors = [{ instancePath: instancePath + "/stopped", schemaPath: "#/properties/stopped/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; + validate114.errors = [{ instancePath: instancePath + "/stopped", schemaPath: "#/properties/stopped/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; return false; } var valid0 = _errs2 === errors; @@ -14392,7 +14428,7 @@ function validate113(data, { instancePath = "", parentData, parentDataProperty, if (data.success !== void 0) { const _errs4 = errors; if (typeof data.success !== "boolean") { - validate113.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; + validate114.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; return false; } var valid0 = _errs4 === errors; @@ -14403,15 +14439,15 @@ function validate113(data, { instancePath = "", parentData, parentDataProperty, } } } else { - validate113.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate114.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate113.errors = vErrors; + validate114.errors = vErrors; return errors === 0; } -var validateStopRuntimeProfileGenerationParams = validate114; -function validate114(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateStopRuntimeProfileGenerationParams = validate115; +function validate115(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; const _errs0 = errors; @@ -14572,7 +14608,7 @@ function validate114(data, { instancePath = "", parentData, parentDataProperty, vErrors.push(err10); } errors++; - validate114.errors = vErrors; + validate115.errors = vErrors; return false; } else { errors = _errs0; @@ -14584,24 +14620,24 @@ function validate114(data, { instancePath = "", parentData, parentDataProperty, } } } - validate114.errors = vErrors; + validate115.errors = vErrors; return errors === 0; } -var validateSuccessOutcome = validate115; -function validate115(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateSuccessOutcome = validate116; +function validate116(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.success === void 0 && (missing0 = "success")) { - validate115.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate116.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "success")) { - validate115.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate116.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -14610,39 +14646,39 @@ function validate115(data, { instancePath = "", parentData, parentDataProperty, if (data.success !== void 0) { let data0 = data.success; if (typeof data0 !== "boolean") { - validate115.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; + validate116.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; return false; } if (true !== data0) { - validate115.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/const", keyword: "const", params: { allowedValue: true }, message: "must be equal to constant" }]; + validate116.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/const", keyword: "const", params: { allowedValue: true }, message: "must be equal to constant" }]; return false; } } } } } else { - validate115.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate116.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate115.errors = vErrors; + validate116.errors = vErrors; return errors === 0; } -var validateSupportedQuantTypesOutcome = validate116; -function validate117(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateSupportedQuantTypesOutcome = validate117; +function validate118(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.name === void 0 && (missing0 = "name") || data.description === void 0 && (missing0 = "description") || data.bitsPerWeight === void 0 && (missing0 = "bitsPerWeight") || data.recommended === void 0 && (missing0 = "recommended") || data.backend === void 0 && (missing0 = "backend") || data.imatrixRecommended === void 0 && (missing0 = "imatrixRecommended")) { - validate117.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate118.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "backend" || key0 === "bitsPerWeight" || key0 === "description" || key0 === "imatrixRecommended" || key0 === "name" || key0 === "recommended")) { - validate117.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate118.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -14839,7 +14875,7 @@ function validate117(data, { instancePath = "", parentData, parentDataProperty, vErrors.push(err12); } errors++; - validate117.errors = vErrors; + validate118.errors = vErrors; return false; } else { errors = _errs3; @@ -14862,16 +14898,16 @@ function validate117(data, { instancePath = "", parentData, parentDataProperty, if (errors === _errs19) { if (typeof data1 == "number" && isFinite(data1)) { if (data1 > 34028234663852886e22 || isNaN(data1)) { - validate117.errors = [{ instancePath: instancePath + "/bitsPerWeight", schemaPath: "#/properties/bitsPerWeight/maximum", keyword: "maximum", params: { comparison: "<=", limit: 34028234663852886e22 }, message: "must be <= 3.4028234663852886e+38" }]; + validate118.errors = [{ instancePath: instancePath + "/bitsPerWeight", schemaPath: "#/properties/bitsPerWeight/maximum", keyword: "maximum", params: { comparison: "<=", limit: 34028234663852886e22 }, message: "must be <= 3.4028234663852886e+38" }]; return false; } else { if (data1 < 0 || isNaN(data1)) { - validate117.errors = [{ instancePath: instancePath + "/bitsPerWeight", schemaPath: "#/properties/bitsPerWeight/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; + validate118.errors = [{ instancePath: instancePath + "/bitsPerWeight", schemaPath: "#/properties/bitsPerWeight/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; return false; } } } else { - validate117.errors = [{ instancePath: instancePath + "/bitsPerWeight", schemaPath: "#/properties/bitsPerWeight/type", keyword: "type", params: { type: "number" }, message: "must be number" }]; + validate118.errors = [{ instancePath: instancePath + "/bitsPerWeight", schemaPath: "#/properties/bitsPerWeight/type", keyword: "type", params: { type: "number" }, message: "must be number" }]; return false; } } @@ -14883,7 +14919,7 @@ function validate117(data, { instancePath = "", parentData, parentDataProperty, if (data.description !== void 0) { const _errs21 = errors; if (typeof data.description !== "string") { - validate117.errors = [{ instancePath: instancePath + "/description", schemaPath: "#/properties/description/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate118.errors = [{ instancePath: instancePath + "/description", schemaPath: "#/properties/description/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs21 === errors; @@ -14894,7 +14930,7 @@ function validate117(data, { instancePath = "", parentData, parentDataProperty, if (data.imatrixRecommended !== void 0) { const _errs23 = errors; if (typeof data.imatrixRecommended !== "boolean") { - validate117.errors = [{ instancePath: instancePath + "/imatrixRecommended", schemaPath: "#/properties/imatrixRecommended/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; + validate118.errors = [{ instancePath: instancePath + "/imatrixRecommended", schemaPath: "#/properties/imatrixRecommended/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; return false; } var valid0 = _errs23 === errors; @@ -14905,7 +14941,7 @@ function validate117(data, { instancePath = "", parentData, parentDataProperty, if (data.name !== void 0) { const _errs25 = errors; if (typeof data.name !== "string") { - validate117.errors = [{ instancePath: instancePath + "/name", schemaPath: "#/properties/name/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate118.errors = [{ instancePath: instancePath + "/name", schemaPath: "#/properties/name/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs25 === errors; @@ -14916,7 +14952,7 @@ function validate117(data, { instancePath = "", parentData, parentDataProperty, if (data.recommended !== void 0) { const _errs27 = errors; if (typeof data.recommended !== "boolean") { - validate117.errors = [{ instancePath: instancePath + "/recommended", schemaPath: "#/properties/recommended/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; + validate118.errors = [{ instancePath: instancePath + "/recommended", schemaPath: "#/properties/recommended/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; return false; } var valid0 = _errs27 === errors; @@ -14931,27 +14967,27 @@ function validate117(data, { instancePath = "", parentData, parentDataProperty, } } } else { - validate117.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate118.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate117.errors = vErrors; + validate118.errors = vErrors; return errors === 0; } -function validate116(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +function validate117(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.success === void 0 && (missing0 = "success") || data.quant_types === void 0 && (missing0 = "quant_types")) { - validate116.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate117.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "quant_types" || key0 === "success")) { - validate116.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate117.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -14966,8 +15002,8 @@ function validate116(data, { instancePath = "", parentData, parentDataProperty, const len0 = data0.length; for (let i0 = 0; i0 < len0; i0++) { const _errs4 = errors; - if (!validate117(data0[i0], { instancePath: instancePath + "/quant_types/" + i0, parentData: data0, parentDataProperty: i0, rootData })) { - vErrors = vErrors === null ? validate117.errors : vErrors.concat(validate117.errors); + if (!validate118(data0[i0], { instancePath: instancePath + "/quant_types/" + i0, parentData: data0, parentDataProperty: i0, rootData })) { + vErrors = vErrors === null ? validate118.errors : vErrors.concat(validate118.errors); errors = vErrors.length; } var valid1 = _errs4 === errors; @@ -14976,7 +15012,7 @@ function validate116(data, { instancePath = "", parentData, parentDataProperty, } } } else { - validate116.errors = [{ instancePath: instancePath + "/quant_types", schemaPath: "#/properties/quant_types/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; + validate117.errors = [{ instancePath: instancePath + "/quant_types", schemaPath: "#/properties/quant_types/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; return false; } } @@ -14989,11 +15025,11 @@ function validate116(data, { instancePath = "", parentData, parentDataProperty, let data2 = data.success; const _errs5 = errors; if (typeof data2 !== "boolean") { - validate116.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; + validate117.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; return false; } if (true !== data2) { - validate116.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/const", keyword: "const", params: { allowedValue: true }, message: "must be equal to constant" }]; + validate117.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/const", keyword: "const", params: { allowedValue: true }, message: "must be equal to constant" }]; return false; } var valid0 = _errs5 === errors; @@ -15004,242 +15040,951 @@ function validate116(data, { instancePath = "", parentData, parentDataProperty, } } } else { - validate116.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate117.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + return false; + } + } + validate117.errors = vErrors; + return errors === 0; +} +var validateSwitchVersionOutcome = validate120; +function validate120(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { + let vErrors = null; + let errors = 0; + if (errors === 0) { + if (data && typeof data == "object" && !Array.isArray(data)) { + let missing0; + if (data.success === void 0 && (missing0 = "success")) { + validate120.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + return false; + } else { + const _errs1 = errors; + for (const key0 in data) { + if (!(key0 === "success")) { + validate120.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + return false; + break; + } + } + if (_errs1 === errors) { + if (data.success !== void 0) { + if (typeof data.success !== "boolean") { + validate120.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; + return false; + } + } + } + } + } else { + validate120.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + return false; + } + } + validate120.errors = vErrors; + return errors === 0; +} +var validateSwitchVersionParams = validate121; +function validate121(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { + let vErrors = null; + let errors = 0; + const _errs0 = errors; + let valid0 = false; + const _errs1 = errors; + if (errors === _errs1) { + if (data && typeof data == "object" && !Array.isArray(data)) { + let missing0; + if (data.app_id === void 0 && (missing0 = "app_id") || data.tag === void 0 && (missing0 = "tag")) { + const err0 = { instancePath, schemaPath: "#/anyOf/0/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }; + if (vErrors === null) { + vErrors = [err0]; + } else { + vErrors.push(err0); + } + errors++; + } else { + const _errs3 = errors; + for (const key0 in data) { + if (!(key0 === "app_id" || key0 === "tag")) { + const err1 = { instancePath, schemaPath: "#/anyOf/0/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }; + if (vErrors === null) { + vErrors = [err1]; + } else { + vErrors.push(err1); + } + errors++; + break; + } + } + if (_errs3 === errors) { + if (data.app_id !== void 0) { + const _errs4 = errors; + if (typeof data.app_id !== "string") { + const err2 = { instancePath: instancePath + "/app_id", schemaPath: "#/anyOf/0/properties/app_id/type", keyword: "type", params: { type: "string" }, message: "must be string" }; + if (vErrors === null) { + vErrors = [err2]; + } else { + vErrors.push(err2); + } + errors++; + } + var valid1 = _errs4 === errors; + } else { + var valid1 = true; + } + if (valid1) { + if (data.tag !== void 0) { + const _errs6 = errors; + if (typeof data.tag !== "string") { + const err3 = { instancePath: instancePath + "/tag", schemaPath: "#/anyOf/0/properties/tag/type", keyword: "type", params: { type: "string" }, message: "must be string" }; + if (vErrors === null) { + vErrors = [err3]; + } else { + vErrors.push(err3); + } + errors++; + } + var valid1 = _errs6 === errors; + } else { + var valid1 = true; + } + } + } + } + } else { + const err4 = { instancePath, schemaPath: "#/anyOf/0/type", keyword: "type", params: { type: "object" }, message: "must be object" }; + if (vErrors === null) { + vErrors = [err4]; + } else { + vErrors.push(err4); + } + errors++; + } + } + var _valid0 = _errs1 === errors; + valid0 = valid0 || _valid0; + if (!valid0) { + const _errs8 = errors; + if (errors === _errs8) { + if (data && typeof data == "object" && !Array.isArray(data)) { + let missing1; + if (data.appId === void 0 && (missing1 = "appId") || data.tag === void 0 && (missing1 = "tag")) { + const err5 = { instancePath, schemaPath: "#/anyOf/1/required", keyword: "required", params: { missingProperty: missing1 }, message: "must have required property '" + missing1 + "'" }; + if (vErrors === null) { + vErrors = [err5]; + } else { + vErrors.push(err5); + } + errors++; + } else { + const _errs10 = errors; + for (const key1 in data) { + if (!(key1 === "appId" || key1 === "tag")) { + const err6 = { instancePath, schemaPath: "#/anyOf/1/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key1 }, message: "must NOT have additional properties" }; + if (vErrors === null) { + vErrors = [err6]; + } else { + vErrors.push(err6); + } + errors++; + break; + } + } + if (_errs10 === errors) { + if (data.appId !== void 0) { + const _errs11 = errors; + if (typeof data.appId !== "string") { + const err7 = { instancePath: instancePath + "/appId", schemaPath: "#/anyOf/1/properties/appId/type", keyword: "type", params: { type: "string" }, message: "must be string" }; + if (vErrors === null) { + vErrors = [err7]; + } else { + vErrors.push(err7); + } + errors++; + } + var valid2 = _errs11 === errors; + } else { + var valid2 = true; + } + if (valid2) { + if (data.tag !== void 0) { + const _errs13 = errors; + if (typeof data.tag !== "string") { + const err8 = { instancePath: instancePath + "/tag", schemaPath: "#/anyOf/1/properties/tag/type", keyword: "type", params: { type: "string" }, message: "must be string" }; + if (vErrors === null) { + vErrors = [err8]; + } else { + vErrors.push(err8); + } + errors++; + } + var valid2 = _errs13 === errors; + } else { + var valid2 = true; + } + } + } + } + } else { + const err9 = { instancePath, schemaPath: "#/anyOf/1/type", keyword: "type", params: { type: "object" }, message: "must be object" }; + if (vErrors === null) { + vErrors = [err9]; + } else { + vErrors.push(err9); + } + errors++; + } + } + var _valid0 = _errs8 === errors; + valid0 = valid0 || _valid0; + } + if (!valid0) { + const err10 = { instancePath, schemaPath: "#/anyOf", keyword: "anyOf", params: {}, message: "must match a schema in anyOf" }; + if (vErrors === null) { + vErrors = [err10]; + } else { + vErrors.push(err10); + } + errors++; + validate121.errors = vErrors; + return false; + } else { + errors = _errs0; + if (vErrors !== null) { + if (_errs0) { + vErrors.length = _errs0; + } else { + vErrors = null; + } + } + } + validate121.errors = vErrors; + return errors === 0; +} +var validateTorchDriverAvailability = validate122; +var schema136 = { "$schema": "http://json-schema.org/draft-07/schema#", "enum": ["available", "unavailable", "not_present", "unknown"], "title": "TorchDriverAvailability", "type": "string" }; +function validate122(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { + let vErrors = null; + let errors = 0; + if (typeof data !== "string") { + validate122.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + return false; + } + if (!(data === "available" || data === "unavailable" || data === "not_present" || data === "unknown")) { + validate122.errors = [{ instancePath, schemaPath: "#/enum", keyword: "enum", params: { allowedValues: schema136.enum }, message: "must be equal to one of the allowed values" }]; + return false; + } + validate122.errors = vErrors; + return errors === 0; +} +var validateTorchGpuVendor = validate123; +var schema137 = { "$schema": "http://json-schema.org/draft-07/schema#", "enum": ["nvidia", "amd", "intel"], "title": "TorchGpuVendor", "type": "string" }; +function validate123(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { + let vErrors = null; + let errors = 0; + if (typeof data !== "string") { + validate123.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + return false; + } + if (!(data === "nvidia" || data === "amd" || data === "intel")) { + validate123.errors = [{ instancePath, schemaPath: "#/enum", keyword: "enum", params: { allowedValues: schema137.enum }, message: "must be equal to one of the allowed values" }]; + return false; + } + validate123.errors = vErrors; + return errors === 0; +} +var validateTorchReleaseCombination = validate124; +var schema138 = { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "build": { "type": "string" }, "python": { "type": "string" }, "sha256": { "type": ["string", "null"] }, "wheelUrl": { "type": "string" } }, "required": ["build", "python", "wheelUrl"], "title": "TorchReleaseCombination", "type": "object" }; +function validate124(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { + let vErrors = null; + let errors = 0; + if (errors === 0) { + if (data && typeof data == "object" && !Array.isArray(data)) { + let missing0; + if (data.build === void 0 && (missing0 = "build") || data.python === void 0 && (missing0 = "python") || data.wheelUrl === void 0 && (missing0 = "wheelUrl")) { + validate124.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + return false; + } else { + const _errs1 = errors; + for (const key0 in data) { + if (!(key0 === "build" || key0 === "python" || key0 === "sha256" || key0 === "wheelUrl")) { + validate124.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + return false; + break; + } + } + if (_errs1 === errors) { + if (data.build !== void 0) { + const _errs2 = errors; + if (typeof data.build !== "string") { + validate124.errors = [{ instancePath: instancePath + "/build", schemaPath: "#/properties/build/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + return false; + } + var valid0 = _errs2 === errors; + } else { + var valid0 = true; + } + if (valid0) { + if (data.python !== void 0) { + const _errs4 = errors; + if (typeof data.python !== "string") { + validate124.errors = [{ instancePath: instancePath + "/python", schemaPath: "#/properties/python/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + return false; + } + var valid0 = _errs4 === errors; + } else { + var valid0 = true; + } + if (valid0) { + if (data.sha256 !== void 0) { + let data2 = data.sha256; + const _errs6 = errors; + if (typeof data2 !== "string" && data2 !== null) { + validate124.errors = [{ instancePath: instancePath + "/sha256", schemaPath: "#/properties/sha256/type", keyword: "type", params: { type: schema138.properties.sha256.type }, message: "must be string,null" }]; + return false; + } + var valid0 = _errs6 === errors; + } else { + var valid0 = true; + } + if (valid0) { + if (data.wheelUrl !== void 0) { + const _errs8 = errors; + if (typeof data.wheelUrl !== "string") { + validate124.errors = [{ instancePath: instancePath + "/wheelUrl", schemaPath: "#/properties/wheelUrl/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + return false; + } + var valid0 = _errs8 === errors; + } else { + var valid0 = true; + } + } + } + } + } + } + } else { + validate124.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + return false; + } + } + validate124.errors = vErrors; + return errors === 0; +} +var validateTorchReleaseDriverStatus = validate125; +var schema140 = { "enum": ["available", "unavailable", "not_present", "unknown"], "type": "string" }; +function validate125(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { + let vErrors = null; + let errors = 0; + if (errors === 0) { + if (data && typeof data == "object" && !Array.isArray(data)) { + let missing0; + if (data.nvidia === void 0 && (missing0 = "nvidia") || data.amd === void 0 && (missing0 = "amd")) { + validate125.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + return false; + } else { + const _errs1 = errors; + for (const key0 in data) { + if (!(key0 === "amd" || key0 === "nvidia")) { + validate125.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + return false; + break; + } + } + if (_errs1 === errors) { + if (data.amd !== void 0) { + let data0 = data.amd; + const _errs2 = errors; + if (typeof data0 !== "string") { + validate125.errors = [{ instancePath: instancePath + "/amd", schemaPath: "#/definitions/TorchDriverAvailability/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + return false; + } + if (!(data0 === "available" || data0 === "unavailable" || data0 === "not_present" || data0 === "unknown")) { + validate125.errors = [{ instancePath: instancePath + "/amd", schemaPath: "#/definitions/TorchDriverAvailability/enum", keyword: "enum", params: { allowedValues: schema140.enum }, message: "must be equal to one of the allowed values" }]; + return false; + } + var valid0 = _errs2 === errors; + } else { + var valid0 = true; + } + if (valid0) { + if (data.nvidia !== void 0) { + let data1 = data.nvidia; + const _errs5 = errors; + if (typeof data1 !== "string") { + validate125.errors = [{ instancePath: instancePath + "/nvidia", schemaPath: "#/definitions/TorchDriverAvailability/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + return false; + } + if (!(data1 === "available" || data1 === "unavailable" || data1 === "not_present" || data1 === "unknown")) { + validate125.errors = [{ instancePath: instancePath + "/nvidia", schemaPath: "#/definitions/TorchDriverAvailability/enum", keyword: "enum", params: { allowedValues: schema140.enum }, message: "must be equal to one of the allowed values" }]; + return false; + } + var valid0 = _errs5 === errors; + } else { + var valid0 = true; + } + } + } + } + } else { + validate125.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + return false; + } + } + validate125.errors = vErrors; + return errors === 0; +} +var validateTorchReleaseOptionsOutcome = validate126; +var schema142 = { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "definitions": { "TorchDriverAvailability": { "enum": ["available", "unavailable", "not_present", "unknown"], "type": "string" }, "TorchGpuVendor": { "enum": ["nvidia", "amd", "intel"], "type": "string" }, "TorchReleaseCombination": { "additionalProperties": false, "properties": { "build": { "type": "string" }, "python": { "type": "string" }, "sha256": { "type": ["string", "null"] }, "wheelUrl": { "type": "string" } }, "required": ["build", "python", "wheelUrl"], "type": "object" }, "TorchReleaseDriverStatus": { "additionalProperties": false, "properties": { "amd": { "$ref": "#/definitions/TorchDriverAvailability" }, "nvidia": { "$ref": "#/definitions/TorchDriverAvailability" } }, "required": ["nvidia", "amd"], "type": "object" }, "TorchReleaseOptionsStatus": { "enum": ["matches", "none", "inconclusive"], "type": "string" }, "TorchReleaseRecommendation": { "additionalProperties": false, "properties": { "build": { "type": "string" }, "python": { "type": "string" } }, "required": ["build", "python"], "type": "object" } }, "properties": { "checkedChannels": { "items": { "type": "string" }, "type": "array" }, "combinations": { "items": { "$ref": "#/definitions/TorchReleaseCombination" }, "type": "array" }, "completeScan": { "type": "boolean" }, "detectedGpuVendors": { "items": { "$ref": "#/definitions/TorchGpuVendor" }, "type": "array" }, "driverStatus": { "$ref": "#/definitions/TorchReleaseDriverStatus" }, "issues": { "items": { "type": "string" }, "type": "array" }, "recommendationNote": { "type": ["string", "null"] }, "recommended": { "anyOf": [{ "$ref": "#/definitions/TorchReleaseRecommendation" }, { "type": "null" }] }, "status": { "$ref": "#/definitions/TorchReleaseOptionsStatus" }, "tag": { "type": "string" } }, "required": ["tag", "status", "completeScan", "checkedChannels", "combinations", "issues", "detectedGpuVendors", "driverStatus", "recommended", "recommendationNote"], "title": "TorchReleaseOptionsOutcome", "type": "object" }; +var schema143 = { "additionalProperties": false, "properties": { "build": { "type": "string" }, "python": { "type": "string" }, "sha256": { "type": ["string", "null"] }, "wheelUrl": { "type": "string" } }, "required": ["build", "python", "wheelUrl"], "type": "object" }; +var schema144 = { "enum": ["nvidia", "amd", "intel"], "type": "string" }; +var schema149 = { "enum": ["matches", "none", "inconclusive"], "type": "string" }; +var schema146 = { "enum": ["available", "unavailable", "not_present", "unknown"], "type": "string" }; +function validate127(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { + let vErrors = null; + let errors = 0; + if (errors === 0) { + if (data && typeof data == "object" && !Array.isArray(data)) { + let missing0; + if (data.nvidia === void 0 && (missing0 = "nvidia") || data.amd === void 0 && (missing0 = "amd")) { + validate127.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + return false; + } else { + const _errs1 = errors; + for (const key0 in data) { + if (!(key0 === "amd" || key0 === "nvidia")) { + validate127.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + return false; + break; + } + } + if (_errs1 === errors) { + if (data.amd !== void 0) { + let data0 = data.amd; + const _errs2 = errors; + if (typeof data0 !== "string") { + validate127.errors = [{ instancePath: instancePath + "/amd", schemaPath: "#/definitions/TorchDriverAvailability/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + return false; + } + if (!(data0 === "available" || data0 === "unavailable" || data0 === "not_present" || data0 === "unknown")) { + validate127.errors = [{ instancePath: instancePath + "/amd", schemaPath: "#/definitions/TorchDriverAvailability/enum", keyword: "enum", params: { allowedValues: schema146.enum }, message: "must be equal to one of the allowed values" }]; + return false; + } + var valid0 = _errs2 === errors; + } else { + var valid0 = true; + } + if (valid0) { + if (data.nvidia !== void 0) { + let data1 = data.nvidia; + const _errs5 = errors; + if (typeof data1 !== "string") { + validate127.errors = [{ instancePath: instancePath + "/nvidia", schemaPath: "#/definitions/TorchDriverAvailability/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + return false; + } + if (!(data1 === "available" || data1 === "unavailable" || data1 === "not_present" || data1 === "unknown")) { + validate127.errors = [{ instancePath: instancePath + "/nvidia", schemaPath: "#/definitions/TorchDriverAvailability/enum", keyword: "enum", params: { allowedValues: schema146.enum }, message: "must be equal to one of the allowed values" }]; + return false; + } + var valid0 = _errs5 === errors; + } else { + var valid0 = true; + } + } + } + } + } else { + validate127.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + return false; + } + } + validate127.errors = vErrors; + return errors === 0; +} +function validate126(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { + let vErrors = null; + let errors = 0; + if (errors === 0) { + if (data && typeof data == "object" && !Array.isArray(data)) { + let missing0; + if (data.tag === void 0 && (missing0 = "tag") || data.status === void 0 && (missing0 = "status") || data.completeScan === void 0 && (missing0 = "completeScan") || data.checkedChannels === void 0 && (missing0 = "checkedChannels") || data.combinations === void 0 && (missing0 = "combinations") || data.issues === void 0 && (missing0 = "issues") || data.detectedGpuVendors === void 0 && (missing0 = "detectedGpuVendors") || data.driverStatus === void 0 && (missing0 = "driverStatus") || data.recommended === void 0 && (missing0 = "recommended") || data.recommendationNote === void 0 && (missing0 = "recommendationNote")) { + validate126.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + return false; + } else { + const _errs1 = errors; + for (const key0 in data) { + if (!func2.call(schema142.properties, key0)) { + validate126.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + return false; + break; + } + } + if (_errs1 === errors) { + if (data.checkedChannels !== void 0) { + let data0 = data.checkedChannels; + const _errs2 = errors; + if (errors === _errs2) { + if (Array.isArray(data0)) { + var valid1 = true; + const len0 = data0.length; + for (let i0 = 0; i0 < len0; i0++) { + const _errs4 = errors; + if (typeof data0[i0] !== "string") { + validate126.errors = [{ instancePath: instancePath + "/checkedChannels/" + i0, schemaPath: "#/properties/checkedChannels/items/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + return false; + } + var valid1 = _errs4 === errors; + if (!valid1) { + break; + } + } + } else { + validate126.errors = [{ instancePath: instancePath + "/checkedChannels", schemaPath: "#/properties/checkedChannels/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; + return false; + } + } + var valid0 = _errs2 === errors; + } else { + var valid0 = true; + } + if (valid0) { + if (data.combinations !== void 0) { + let data2 = data.combinations; + const _errs6 = errors; + if (errors === _errs6) { + if (Array.isArray(data2)) { + var valid2 = true; + const len1 = data2.length; + for (let i1 = 0; i1 < len1; i1++) { + let data3 = data2[i1]; + const _errs8 = errors; + const _errs9 = errors; + if (errors === _errs9) { + if (data3 && typeof data3 == "object" && !Array.isArray(data3)) { + let missing1; + if (data3.build === void 0 && (missing1 = "build") || data3.python === void 0 && (missing1 = "python") || data3.wheelUrl === void 0 && (missing1 = "wheelUrl")) { + validate126.errors = [{ instancePath: instancePath + "/combinations/" + i1, schemaPath: "#/definitions/TorchReleaseCombination/required", keyword: "required", params: { missingProperty: missing1 }, message: "must have required property '" + missing1 + "'" }]; + return false; + } else { + const _errs11 = errors; + for (const key1 in data3) { + if (!(key1 === "build" || key1 === "python" || key1 === "sha256" || key1 === "wheelUrl")) { + validate126.errors = [{ instancePath: instancePath + "/combinations/" + i1, schemaPath: "#/definitions/TorchReleaseCombination/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key1 }, message: "must NOT have additional properties" }]; + return false; + break; + } + } + if (_errs11 === errors) { + if (data3.build !== void 0) { + const _errs12 = errors; + if (typeof data3.build !== "string") { + validate126.errors = [{ instancePath: instancePath + "/combinations/" + i1 + "/build", schemaPath: "#/definitions/TorchReleaseCombination/properties/build/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + return false; + } + var valid4 = _errs12 === errors; + } else { + var valid4 = true; + } + if (valid4) { + if (data3.python !== void 0) { + const _errs14 = errors; + if (typeof data3.python !== "string") { + validate126.errors = [{ instancePath: instancePath + "/combinations/" + i1 + "/python", schemaPath: "#/definitions/TorchReleaseCombination/properties/python/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + return false; + } + var valid4 = _errs14 === errors; + } else { + var valid4 = true; + } + if (valid4) { + if (data3.sha256 !== void 0) { + let data6 = data3.sha256; + const _errs16 = errors; + if (typeof data6 !== "string" && data6 !== null) { + validate126.errors = [{ instancePath: instancePath + "/combinations/" + i1 + "/sha256", schemaPath: "#/definitions/TorchReleaseCombination/properties/sha256/type", keyword: "type", params: { type: schema143.properties.sha256.type }, message: "must be string,null" }]; + return false; + } + var valid4 = _errs16 === errors; + } else { + var valid4 = true; + } + if (valid4) { + if (data3.wheelUrl !== void 0) { + const _errs18 = errors; + if (typeof data3.wheelUrl !== "string") { + validate126.errors = [{ instancePath: instancePath + "/combinations/" + i1 + "/wheelUrl", schemaPath: "#/definitions/TorchReleaseCombination/properties/wheelUrl/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + return false; + } + var valid4 = _errs18 === errors; + } else { + var valid4 = true; + } + } + } + } + } + } + } else { + validate126.errors = [{ instancePath: instancePath + "/combinations/" + i1, schemaPath: "#/definitions/TorchReleaseCombination/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + return false; + } + } + var valid2 = _errs8 === errors; + if (!valid2) { + break; + } + } + } else { + validate126.errors = [{ instancePath: instancePath + "/combinations", schemaPath: "#/properties/combinations/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; + return false; + } + } + var valid0 = _errs6 === errors; + } else { + var valid0 = true; + } + if (valid0) { + if (data.completeScan !== void 0) { + const _errs20 = errors; + if (typeof data.completeScan !== "boolean") { + validate126.errors = [{ instancePath: instancePath + "/completeScan", schemaPath: "#/properties/completeScan/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; + return false; + } + var valid0 = _errs20 === errors; + } else { + var valid0 = true; + } + if (valid0) { + if (data.detectedGpuVendors !== void 0) { + let data9 = data.detectedGpuVendors; + const _errs22 = errors; + if (errors === _errs22) { + if (Array.isArray(data9)) { + var valid5 = true; + const len2 = data9.length; + for (let i2 = 0; i2 < len2; i2++) { + let data10 = data9[i2]; + const _errs24 = errors; + if (typeof data10 !== "string") { + validate126.errors = [{ instancePath: instancePath + "/detectedGpuVendors/" + i2, schemaPath: "#/definitions/TorchGpuVendor/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + return false; + } + if (!(data10 === "nvidia" || data10 === "amd" || data10 === "intel")) { + validate126.errors = [{ instancePath: instancePath + "/detectedGpuVendors/" + i2, schemaPath: "#/definitions/TorchGpuVendor/enum", keyword: "enum", params: { allowedValues: schema144.enum }, message: "must be equal to one of the allowed values" }]; + return false; + } + var valid5 = _errs24 === errors; + if (!valid5) { + break; + } + } + } else { + validate126.errors = [{ instancePath: instancePath + "/detectedGpuVendors", schemaPath: "#/properties/detectedGpuVendors/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; + return false; + } + } + var valid0 = _errs22 === errors; + } else { + var valid0 = true; + } + if (valid0) { + if (data.driverStatus !== void 0) { + const _errs27 = errors; + if (!validate127(data.driverStatus, { instancePath: instancePath + "/driverStatus", parentData: data, parentDataProperty: "driverStatus", rootData })) { + vErrors = vErrors === null ? validate127.errors : vErrors.concat(validate127.errors); + errors = vErrors.length; + } + var valid0 = _errs27 === errors; + } else { + var valid0 = true; + } + if (valid0) { + if (data.issues !== void 0) { + let data12 = data.issues; + const _errs28 = errors; + if (errors === _errs28) { + if (Array.isArray(data12)) { + var valid7 = true; + const len3 = data12.length; + for (let i3 = 0; i3 < len3; i3++) { + const _errs30 = errors; + if (typeof data12[i3] !== "string") { + validate126.errors = [{ instancePath: instancePath + "/issues/" + i3, schemaPath: "#/properties/issues/items/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + return false; + } + var valid7 = _errs30 === errors; + if (!valid7) { + break; + } + } + } else { + validate126.errors = [{ instancePath: instancePath + "/issues", schemaPath: "#/properties/issues/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; + return false; + } + } + var valid0 = _errs28 === errors; + } else { + var valid0 = true; + } + if (valid0) { + if (data.recommendationNote !== void 0) { + let data14 = data.recommendationNote; + const _errs32 = errors; + if (typeof data14 !== "string" && data14 !== null) { + validate126.errors = [{ instancePath: instancePath + "/recommendationNote", schemaPath: "#/properties/recommendationNote/type", keyword: "type", params: { type: schema142.properties.recommendationNote.type }, message: "must be string,null" }]; + return false; + } + var valid0 = _errs32 === errors; + } else { + var valid0 = true; + } + if (valid0) { + if (data.recommended !== void 0) { + let data15 = data.recommended; + const _errs34 = errors; + const _errs35 = errors; + let valid8 = false; + const _errs36 = errors; + const _errs37 = errors; + if (errors === _errs37) { + if (data15 && typeof data15 == "object" && !Array.isArray(data15)) { + let missing2; + if (data15.build === void 0 && (missing2 = "build") || data15.python === void 0 && (missing2 = "python")) { + const err0 = { instancePath: instancePath + "/recommended", schemaPath: "#/definitions/TorchReleaseRecommendation/required", keyword: "required", params: { missingProperty: missing2 }, message: "must have required property '" + missing2 + "'" }; + if (vErrors === null) { + vErrors = [err0]; + } else { + vErrors.push(err0); + } + errors++; + } else { + const _errs39 = errors; + for (const key2 in data15) { + if (!(key2 === "build" || key2 === "python")) { + const err1 = { instancePath: instancePath + "/recommended", schemaPath: "#/definitions/TorchReleaseRecommendation/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key2 }, message: "must NOT have additional properties" }; + if (vErrors === null) { + vErrors = [err1]; + } else { + vErrors.push(err1); + } + errors++; + break; + } + } + if (_errs39 === errors) { + if (data15.build !== void 0) { + const _errs40 = errors; + if (typeof data15.build !== "string") { + const err2 = { instancePath: instancePath + "/recommended/build", schemaPath: "#/definitions/TorchReleaseRecommendation/properties/build/type", keyword: "type", params: { type: "string" }, message: "must be string" }; + if (vErrors === null) { + vErrors = [err2]; + } else { + vErrors.push(err2); + } + errors++; + } + var valid10 = _errs40 === errors; + } else { + var valid10 = true; + } + if (valid10) { + if (data15.python !== void 0) { + const _errs42 = errors; + if (typeof data15.python !== "string") { + const err3 = { instancePath: instancePath + "/recommended/python", schemaPath: "#/definitions/TorchReleaseRecommendation/properties/python/type", keyword: "type", params: { type: "string" }, message: "must be string" }; + if (vErrors === null) { + vErrors = [err3]; + } else { + vErrors.push(err3); + } + errors++; + } + var valid10 = _errs42 === errors; + } else { + var valid10 = true; + } + } + } + } + } else { + const err4 = { instancePath: instancePath + "/recommended", schemaPath: "#/definitions/TorchReleaseRecommendation/type", keyword: "type", params: { type: "object" }, message: "must be object" }; + if (vErrors === null) { + vErrors = [err4]; + } else { + vErrors.push(err4); + } + errors++; + } + } + var _valid0 = _errs36 === errors; + valid8 = valid8 || _valid0; + if (!valid8) { + const _errs44 = errors; + if (data15 !== null) { + const err5 = { instancePath: instancePath + "/recommended", schemaPath: "#/properties/recommended/anyOf/1/type", keyword: "type", params: { type: "null" }, message: "must be null" }; + if (vErrors === null) { + vErrors = [err5]; + } else { + vErrors.push(err5); + } + errors++; + } + var _valid0 = _errs44 === errors; + valid8 = valid8 || _valid0; + } + if (!valid8) { + const err6 = { instancePath: instancePath + "/recommended", schemaPath: "#/properties/recommended/anyOf", keyword: "anyOf", params: {}, message: "must match a schema in anyOf" }; + if (vErrors === null) { + vErrors = [err6]; + } else { + vErrors.push(err6); + } + errors++; + validate126.errors = vErrors; + return false; + } else { + errors = _errs35; + if (vErrors !== null) { + if (_errs35) { + vErrors.length = _errs35; + } else { + vErrors = null; + } + } + } + var valid0 = _errs34 === errors; + } else { + var valid0 = true; + } + if (valid0) { + if (data.status !== void 0) { + let data18 = data.status; + const _errs46 = errors; + if (typeof data18 !== "string") { + validate126.errors = [{ instancePath: instancePath + "/status", schemaPath: "#/definitions/TorchReleaseOptionsStatus/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + return false; + } + if (!(data18 === "matches" || data18 === "none" || data18 === "inconclusive")) { + validate126.errors = [{ instancePath: instancePath + "/status", schemaPath: "#/definitions/TorchReleaseOptionsStatus/enum", keyword: "enum", params: { allowedValues: schema149.enum }, message: "must be equal to one of the allowed values" }]; + return false; + } + var valid0 = _errs46 === errors; + } else { + var valid0 = true; + } + if (valid0) { + if (data.tag !== void 0) { + const _errs49 = errors; + if (typeof data.tag !== "string") { + validate126.errors = [{ instancePath: instancePath + "/tag", schemaPath: "#/properties/tag/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + return false; + } + var valid0 = _errs49 === errors; + } else { + var valid0 = true; + } + } + } + } + } + } + } + } + } + } + } + } + } else { + validate126.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate116.errors = vErrors; + validate126.errors = vErrors; + return errors === 0; +} +var validateTorchReleaseOptionsStatus = validate129; +var schema150 = { "$schema": "http://json-schema.org/draft-07/schema#", "enum": ["matches", "none", "inconclusive"], "title": "TorchReleaseOptionsStatus", "type": "string" }; +function validate129(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { + let vErrors = null; + let errors = 0; + if (typeof data !== "string") { + validate129.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + return false; + } + if (!(data === "matches" || data === "none" || data === "inconclusive")) { + validate129.errors = [{ instancePath, schemaPath: "#/enum", keyword: "enum", params: { allowedValues: schema150.enum }, message: "must be equal to one of the allowed values" }]; + return false; + } + validate129.errors = vErrors; return errors === 0; } -var validateSwitchVersionOutcome = validate119; -function validate119(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateTorchReleaseRecommendation = validate130; +function validate130(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; - if (data.success === void 0 && (missing0 = "success")) { - validate119.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + if (data.build === void 0 && (missing0 = "build") || data.python === void 0 && (missing0 = "python")) { + validate130.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { - if (!(key0 === "success")) { - validate119.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + if (!(key0 === "build" || key0 === "python")) { + validate130.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } } if (_errs1 === errors) { - if (data.success !== void 0) { - if (typeof data.success !== "boolean") { - validate119.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; + if (data.build !== void 0) { + const _errs2 = errors; + if (typeof data.build !== "string") { + validate130.errors = [{ instancePath: instancePath + "/build", schemaPath: "#/properties/build/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } - } - } - } - } else { - validate119.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; - return false; - } - } - validate119.errors = vErrors; - return errors === 0; -} -var validateSwitchVersionParams = validate120; -function validate120(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { - let vErrors = null; - let errors = 0; - const _errs0 = errors; - let valid0 = false; - const _errs1 = errors; - if (errors === _errs1) { - if (data && typeof data == "object" && !Array.isArray(data)) { - let missing0; - if (data.app_id === void 0 && (missing0 = "app_id") || data.tag === void 0 && (missing0 = "tag")) { - const err0 = { instancePath, schemaPath: "#/anyOf/0/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }; - if (vErrors === null) { - vErrors = [err0]; - } else { - vErrors.push(err0); - } - errors++; - } else { - const _errs3 = errors; - for (const key0 in data) { - if (!(key0 === "app_id" || key0 === "tag")) { - const err1 = { instancePath, schemaPath: "#/anyOf/0/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }; - if (vErrors === null) { - vErrors = [err1]; - } else { - vErrors.push(err1); - } - errors++; - break; - } - } - if (_errs3 === errors) { - if (data.app_id !== void 0) { - const _errs4 = errors; - if (typeof data.app_id !== "string") { - const err2 = { instancePath: instancePath + "/app_id", schemaPath: "#/anyOf/0/properties/app_id/type", keyword: "type", params: { type: "string" }, message: "must be string" }; - if (vErrors === null) { - vErrors = [err2]; - } else { - vErrors.push(err2); - } - errors++; - } - var valid1 = _errs4 === errors; - } else { - var valid1 = true; - } - if (valid1) { - if (data.tag !== void 0) { - const _errs6 = errors; - if (typeof data.tag !== "string") { - const err3 = { instancePath: instancePath + "/tag", schemaPath: "#/anyOf/0/properties/tag/type", keyword: "type", params: { type: "string" }, message: "must be string" }; - if (vErrors === null) { - vErrors = [err3]; - } else { - vErrors.push(err3); - } - errors++; - } - var valid1 = _errs6 === errors; - } else { - var valid1 = true; - } - } - } - } - } else { - const err4 = { instancePath, schemaPath: "#/anyOf/0/type", keyword: "type", params: { type: "object" }, message: "must be object" }; - if (vErrors === null) { - vErrors = [err4]; - } else { - vErrors.push(err4); - } - errors++; - } - } - var _valid0 = _errs1 === errors; - valid0 = valid0 || _valid0; - if (!valid0) { - const _errs8 = errors; - if (errors === _errs8) { - if (data && typeof data == "object" && !Array.isArray(data)) { - let missing1; - if (data.appId === void 0 && (missing1 = "appId") || data.tag === void 0 && (missing1 = "tag")) { - const err5 = { instancePath, schemaPath: "#/anyOf/1/required", keyword: "required", params: { missingProperty: missing1 }, message: "must have required property '" + missing1 + "'" }; - if (vErrors === null) { - vErrors = [err5]; + var valid0 = _errs2 === errors; } else { - vErrors.push(err5); - } - errors++; - } else { - const _errs10 = errors; - for (const key1 in data) { - if (!(key1 === "appId" || key1 === "tag")) { - const err6 = { instancePath, schemaPath: "#/anyOf/1/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key1 }, message: "must NOT have additional properties" }; - if (vErrors === null) { - vErrors = [err6]; - } else { - vErrors.push(err6); - } - errors++; - break; - } + var valid0 = true; } - if (_errs10 === errors) { - if (data.appId !== void 0) { - const _errs11 = errors; - if (typeof data.appId !== "string") { - const err7 = { instancePath: instancePath + "/appId", schemaPath: "#/anyOf/1/properties/appId/type", keyword: "type", params: { type: "string" }, message: "must be string" }; - if (vErrors === null) { - vErrors = [err7]; - } else { - vErrors.push(err7); - } - errors++; + if (valid0) { + if (data.python !== void 0) { + const _errs4 = errors; + if (typeof data.python !== "string") { + validate130.errors = [{ instancePath: instancePath + "/python", schemaPath: "#/properties/python/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + return false; } - var valid2 = _errs11 === errors; + var valid0 = _errs4 === errors; } else { - var valid2 = true; - } - if (valid2) { - if (data.tag !== void 0) { - const _errs13 = errors; - if (typeof data.tag !== "string") { - const err8 = { instancePath: instancePath + "/tag", schemaPath: "#/anyOf/1/properties/tag/type", keyword: "type", params: { type: "string" }, message: "must be string" }; - if (vErrors === null) { - vErrors = [err8]; - } else { - vErrors.push(err8); - } - errors++; - } - var valid2 = _errs13 === errors; - } else { - var valid2 = true; - } + var valid0 = true; } } } - } else { - const err9 = { instancePath, schemaPath: "#/anyOf/1/type", keyword: "type", params: { type: "object" }, message: "must be object" }; - if (vErrors === null) { - vErrors = [err9]; - } else { - vErrors.push(err9); - } - errors++; } - } - var _valid0 = _errs8 === errors; - valid0 = valid0 || _valid0; - } - if (!valid0) { - const err10 = { instancePath, schemaPath: "#/anyOf", keyword: "anyOf", params: {}, message: "must match a schema in anyOf" }; - if (vErrors === null) { - vErrors = [err10]; } else { - vErrors.push(err10); - } - errors++; - validate120.errors = vErrors; - return false; - } else { - errors = _errs0; - if (vErrors !== null) { - if (_errs0) { - vErrors.length = _errs0; - } else { - vErrors = null; - } + validate130.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + return false; } } - validate120.errors = vErrors; + validate130.errors = vErrors; return errors === 0; } -var validateTorchRuntimePreview = validate121; -var schema137 = { "enum": ["qualified", "unverified"], "type": "string" }; -function validate121(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateTorchRuntimePreview = validate131; +var schema154 = { "enum": ["qualified", "unverified"], "type": "string" }; +function validate131(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.previewId === void 0 && (missing0 = "previewId") || data.tag === void 0 && (missing0 = "tag") || data.build === void 0 && (missing0 = "build") || data.python === void 0 && (missing0 = "python") || data.adapter === void 0 && (missing0 = "adapter") || data.artifacts === void 0 && (missing0 = "artifacts") || data.qualification === void 0 && (missing0 = "qualification") || data.expiresInSeconds === void 0 && (missing0 = "expiresInSeconds")) { - validate121.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate131.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "adapter" || key0 === "artifacts" || key0 === "build" || key0 === "expiresInSeconds" || key0 === "previewId" || key0 === "python" || key0 === "qualification" || key0 === "tag")) { - validate121.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate131.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -15248,7 +15993,7 @@ function validate121(data, { instancePath = "", parentData, parentDataProperty, if (data.adapter !== void 0) { const _errs2 = errors; if (typeof data.adapter !== "string") { - validate121.errors = [{ instancePath: instancePath + "/adapter", schemaPath: "#/properties/adapter/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate131.errors = [{ instancePath: instancePath + "/adapter", schemaPath: "#/properties/adapter/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs2 === errors; @@ -15271,13 +16016,13 @@ function validate121(data, { instancePath = "", parentData, parentDataProperty, if (data2 && typeof data2 == "object" && !Array.isArray(data2)) { let missing1; if (data2.name === void 0 && (missing1 = "name") || data2.version === void 0 && (missing1 = "version") || data2.url === void 0 && (missing1 = "url") || data2.sha256 === void 0 && (missing1 = "sha256")) { - validate121.errors = [{ instancePath: instancePath + "/artifacts/" + i0, schemaPath: "#/definitions/TorchRuntimePreviewArtifact/required", keyword: "required", params: { missingProperty: missing1 }, message: "must have required property '" + missing1 + "'" }]; + validate131.errors = [{ instancePath: instancePath + "/artifacts/" + i0, schemaPath: "#/definitions/TorchRuntimePreviewArtifact/required", keyword: "required", params: { missingProperty: missing1 }, message: "must have required property '" + missing1 + "'" }]; return false; } else { const _errs9 = errors; for (const key1 in data2) { if (!(key1 === "name" || key1 === "sha256" || key1 === "url" || key1 === "version")) { - validate121.errors = [{ instancePath: instancePath + "/artifacts/" + i0, schemaPath: "#/definitions/TorchRuntimePreviewArtifact/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key1 }, message: "must NOT have additional properties" }]; + validate131.errors = [{ instancePath: instancePath + "/artifacts/" + i0, schemaPath: "#/definitions/TorchRuntimePreviewArtifact/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key1 }, message: "must NOT have additional properties" }]; return false; break; } @@ -15286,7 +16031,7 @@ function validate121(data, { instancePath = "", parentData, parentDataProperty, if (data2.name !== void 0) { const _errs10 = errors; if (typeof data2.name !== "string") { - validate121.errors = [{ instancePath: instancePath + "/artifacts/" + i0 + "/name", schemaPath: "#/definitions/TorchRuntimePreviewArtifact/properties/name/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate131.errors = [{ instancePath: instancePath + "/artifacts/" + i0 + "/name", schemaPath: "#/definitions/TorchRuntimePreviewArtifact/properties/name/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid3 = _errs10 === errors; @@ -15297,7 +16042,7 @@ function validate121(data, { instancePath = "", parentData, parentDataProperty, if (data2.sha256 !== void 0) { const _errs12 = errors; if (typeof data2.sha256 !== "string") { - validate121.errors = [{ instancePath: instancePath + "/artifacts/" + i0 + "/sha256", schemaPath: "#/definitions/TorchRuntimePreviewArtifact/properties/sha256/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate131.errors = [{ instancePath: instancePath + "/artifacts/" + i0 + "/sha256", schemaPath: "#/definitions/TorchRuntimePreviewArtifact/properties/sha256/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid3 = _errs12 === errors; @@ -15308,7 +16053,7 @@ function validate121(data, { instancePath = "", parentData, parentDataProperty, if (data2.url !== void 0) { const _errs14 = errors; if (typeof data2.url !== "string") { - validate121.errors = [{ instancePath: instancePath + "/artifacts/" + i0 + "/url", schemaPath: "#/definitions/TorchRuntimePreviewArtifact/properties/url/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate131.errors = [{ instancePath: instancePath + "/artifacts/" + i0 + "/url", schemaPath: "#/definitions/TorchRuntimePreviewArtifact/properties/url/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid3 = _errs14 === errors; @@ -15319,7 +16064,7 @@ function validate121(data, { instancePath = "", parentData, parentDataProperty, if (data2.version !== void 0) { const _errs16 = errors; if (typeof data2.version !== "string") { - validate121.errors = [{ instancePath: instancePath + "/artifacts/" + i0 + "/version", schemaPath: "#/definitions/TorchRuntimePreviewArtifact/properties/version/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate131.errors = [{ instancePath: instancePath + "/artifacts/" + i0 + "/version", schemaPath: "#/definitions/TorchRuntimePreviewArtifact/properties/version/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid3 = _errs16 === errors; @@ -15332,7 +16077,7 @@ function validate121(data, { instancePath = "", parentData, parentDataProperty, } } } else { - validate121.errors = [{ instancePath: instancePath + "/artifacts/" + i0, schemaPath: "#/definitions/TorchRuntimePreviewArtifact/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate131.errors = [{ instancePath: instancePath + "/artifacts/" + i0, schemaPath: "#/definitions/TorchRuntimePreviewArtifact/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } @@ -15342,7 +16087,7 @@ function validate121(data, { instancePath = "", parentData, parentDataProperty, } } } else { - validate121.errors = [{ instancePath: instancePath + "/artifacts", schemaPath: "#/properties/artifacts/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; + validate131.errors = [{ instancePath: instancePath + "/artifacts", schemaPath: "#/properties/artifacts/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; return false; } } @@ -15354,7 +16099,7 @@ function validate121(data, { instancePath = "", parentData, parentDataProperty, if (data.build !== void 0) { const _errs18 = errors; if (typeof data.build !== "string") { - validate121.errors = [{ instancePath: instancePath + "/build", schemaPath: "#/properties/build/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate131.errors = [{ instancePath: instancePath + "/build", schemaPath: "#/properties/build/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs18 === errors; @@ -15366,17 +16111,17 @@ function validate121(data, { instancePath = "", parentData, parentDataProperty, let data8 = data.expiresInSeconds; const _errs20 = errors; if (!(typeof data8 == "number" && (!(data8 % 1) && !isNaN(data8)) && isFinite(data8))) { - validate121.errors = [{ instancePath: instancePath + "/expiresInSeconds", schemaPath: "#/properties/expiresInSeconds/type", keyword: "type", params: { type: "integer" }, message: "must be integer" }]; + validate131.errors = [{ instancePath: instancePath + "/expiresInSeconds", schemaPath: "#/properties/expiresInSeconds/type", keyword: "type", params: { type: "integer" }, message: "must be integer" }]; return false; } if (errors === _errs20) { if (typeof data8 == "number" && isFinite(data8)) { if (data8 > 9007199254740991 || isNaN(data8)) { - validate121.errors = [{ instancePath: instancePath + "/expiresInSeconds", schemaPath: "#/properties/expiresInSeconds/maximum", keyword: "maximum", params: { comparison: "<=", limit: 9007199254740991 }, message: "must be <= 9007199254740991" }]; + validate131.errors = [{ instancePath: instancePath + "/expiresInSeconds", schemaPath: "#/properties/expiresInSeconds/maximum", keyword: "maximum", params: { comparison: "<=", limit: 9007199254740991 }, message: "must be <= 9007199254740991" }]; return false; } else { if (data8 < 0 || isNaN(data8)) { - validate121.errors = [{ instancePath: instancePath + "/expiresInSeconds", schemaPath: "#/properties/expiresInSeconds/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; + validate131.errors = [{ instancePath: instancePath + "/expiresInSeconds", schemaPath: "#/properties/expiresInSeconds/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; return false; } } @@ -15390,7 +16135,7 @@ function validate121(data, { instancePath = "", parentData, parentDataProperty, if (data.previewId !== void 0) { const _errs22 = errors; if (typeof data.previewId !== "string") { - validate121.errors = [{ instancePath: instancePath + "/previewId", schemaPath: "#/properties/previewId/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate131.errors = [{ instancePath: instancePath + "/previewId", schemaPath: "#/properties/previewId/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs22 === errors; @@ -15401,7 +16146,7 @@ function validate121(data, { instancePath = "", parentData, parentDataProperty, if (data.python !== void 0) { const _errs24 = errors; if (typeof data.python !== "string") { - validate121.errors = [{ instancePath: instancePath + "/python", schemaPath: "#/properties/python/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate131.errors = [{ instancePath: instancePath + "/python", schemaPath: "#/properties/python/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs24 === errors; @@ -15413,11 +16158,11 @@ function validate121(data, { instancePath = "", parentData, parentDataProperty, let data11 = data.qualification; const _errs26 = errors; if (typeof data11 !== "string") { - validate121.errors = [{ instancePath: instancePath + "/qualification", schemaPath: "#/definitions/TorchRuntimePreviewQualification/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate131.errors = [{ instancePath: instancePath + "/qualification", schemaPath: "#/definitions/TorchRuntimePreviewQualification/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } if (!(data11 === "qualified" || data11 === "unverified")) { - validate121.errors = [{ instancePath: instancePath + "/qualification", schemaPath: "#/definitions/TorchRuntimePreviewQualification/enum", keyword: "enum", params: { allowedValues: schema137.enum }, message: "must be equal to one of the allowed values" }]; + validate131.errors = [{ instancePath: instancePath + "/qualification", schemaPath: "#/definitions/TorchRuntimePreviewQualification/enum", keyword: "enum", params: { allowedValues: schema154.enum }, message: "must be equal to one of the allowed values" }]; return false; } var valid0 = _errs26 === errors; @@ -15428,7 +16173,7 @@ function validate121(data, { instancePath = "", parentData, parentDataProperty, if (data.tag !== void 0) { const _errs29 = errors; if (typeof data.tag !== "string") { - validate121.errors = [{ instancePath: instancePath + "/tag", schemaPath: "#/properties/tag/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate131.errors = [{ instancePath: instancePath + "/tag", schemaPath: "#/properties/tag/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs29 === errors; @@ -15445,28 +16190,28 @@ function validate121(data, { instancePath = "", parentData, parentDataProperty, } } } else { - validate121.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate131.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate121.errors = vErrors; + validate131.errors = vErrors; return errors === 0; } -var validateTorchRuntimePreviewArtifact = validate122; -function validate122(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateTorchRuntimePreviewArtifact = validate132; +function validate132(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.name === void 0 && (missing0 = "name") || data.version === void 0 && (missing0 = "version") || data.url === void 0 && (missing0 = "url") || data.sha256 === void 0 && (missing0 = "sha256")) { - validate122.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate132.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "name" || key0 === "sha256" || key0 === "url" || key0 === "version")) { - validate122.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate132.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -15475,7 +16220,7 @@ function validate122(data, { instancePath = "", parentData, parentDataProperty, if (data.name !== void 0) { const _errs2 = errors; if (typeof data.name !== "string") { - validate122.errors = [{ instancePath: instancePath + "/name", schemaPath: "#/properties/name/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate132.errors = [{ instancePath: instancePath + "/name", schemaPath: "#/properties/name/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs2 === errors; @@ -15486,7 +16231,7 @@ function validate122(data, { instancePath = "", parentData, parentDataProperty, if (data.sha256 !== void 0) { const _errs4 = errors; if (typeof data.sha256 !== "string") { - validate122.errors = [{ instancePath: instancePath + "/sha256", schemaPath: "#/properties/sha256/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate132.errors = [{ instancePath: instancePath + "/sha256", schemaPath: "#/properties/sha256/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs4 === errors; @@ -15497,7 +16242,7 @@ function validate122(data, { instancePath = "", parentData, parentDataProperty, if (data.url !== void 0) { const _errs6 = errors; if (typeof data.url !== "string") { - validate122.errors = [{ instancePath: instancePath + "/url", schemaPath: "#/properties/url/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate132.errors = [{ instancePath: instancePath + "/url", schemaPath: "#/properties/url/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs6 === errors; @@ -15508,7 +16253,7 @@ function validate122(data, { instancePath = "", parentData, parentDataProperty, if (data.version !== void 0) { const _errs8 = errors; if (typeof data.version !== "string") { - validate122.errors = [{ instancePath: instancePath + "/version", schemaPath: "#/properties/version/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate132.errors = [{ instancePath: instancePath + "/version", schemaPath: "#/properties/version/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs8 === errors; @@ -15521,30 +16266,30 @@ function validate122(data, { instancePath = "", parentData, parentDataProperty, } } } else { - validate122.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate132.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate122.errors = vErrors; + validate132.errors = vErrors; return errors === 0; } -var validateTorchRuntimePreviewOutcome = validate123; -var schema143 = { "enum": ["unsupported", "validation_failed", "network_inconclusive", "inconclusive"], "type": "string" }; -var schema142 = { "enum": ["qualified", "unverified"], "type": "string" }; -function validate124(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateTorchRuntimePreviewOutcome = validate133; +var schema160 = { "enum": ["unsupported", "validation_failed", "network_inconclusive", "inconclusive"], "type": "string" }; +var schema159 = { "enum": ["qualified", "unverified"], "type": "string" }; +function validate134(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.previewId === void 0 && (missing0 = "previewId") || data.tag === void 0 && (missing0 = "tag") || data.build === void 0 && (missing0 = "build") || data.python === void 0 && (missing0 = "python") || data.adapter === void 0 && (missing0 = "adapter") || data.artifacts === void 0 && (missing0 = "artifacts") || data.qualification === void 0 && (missing0 = "qualification") || data.expiresInSeconds === void 0 && (missing0 = "expiresInSeconds")) { - validate124.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate134.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "adapter" || key0 === "artifacts" || key0 === "build" || key0 === "expiresInSeconds" || key0 === "previewId" || key0 === "python" || key0 === "qualification" || key0 === "tag")) { - validate124.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate134.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -15553,7 +16298,7 @@ function validate124(data, { instancePath = "", parentData, parentDataProperty, if (data.adapter !== void 0) { const _errs2 = errors; if (typeof data.adapter !== "string") { - validate124.errors = [{ instancePath: instancePath + "/adapter", schemaPath: "#/properties/adapter/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate134.errors = [{ instancePath: instancePath + "/adapter", schemaPath: "#/properties/adapter/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs2 === errors; @@ -15576,13 +16321,13 @@ function validate124(data, { instancePath = "", parentData, parentDataProperty, if (data2 && typeof data2 == "object" && !Array.isArray(data2)) { let missing1; if (data2.name === void 0 && (missing1 = "name") || data2.version === void 0 && (missing1 = "version") || data2.url === void 0 && (missing1 = "url") || data2.sha256 === void 0 && (missing1 = "sha256")) { - validate124.errors = [{ instancePath: instancePath + "/artifacts/" + i0, schemaPath: "#/definitions/TorchRuntimePreviewArtifact/required", keyword: "required", params: { missingProperty: missing1 }, message: "must have required property '" + missing1 + "'" }]; + validate134.errors = [{ instancePath: instancePath + "/artifacts/" + i0, schemaPath: "#/definitions/TorchRuntimePreviewArtifact/required", keyword: "required", params: { missingProperty: missing1 }, message: "must have required property '" + missing1 + "'" }]; return false; } else { const _errs9 = errors; for (const key1 in data2) { if (!(key1 === "name" || key1 === "sha256" || key1 === "url" || key1 === "version")) { - validate124.errors = [{ instancePath: instancePath + "/artifacts/" + i0, schemaPath: "#/definitions/TorchRuntimePreviewArtifact/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key1 }, message: "must NOT have additional properties" }]; + validate134.errors = [{ instancePath: instancePath + "/artifacts/" + i0, schemaPath: "#/definitions/TorchRuntimePreviewArtifact/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key1 }, message: "must NOT have additional properties" }]; return false; break; } @@ -15591,7 +16336,7 @@ function validate124(data, { instancePath = "", parentData, parentDataProperty, if (data2.name !== void 0) { const _errs10 = errors; if (typeof data2.name !== "string") { - validate124.errors = [{ instancePath: instancePath + "/artifacts/" + i0 + "/name", schemaPath: "#/definitions/TorchRuntimePreviewArtifact/properties/name/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate134.errors = [{ instancePath: instancePath + "/artifacts/" + i0 + "/name", schemaPath: "#/definitions/TorchRuntimePreviewArtifact/properties/name/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid3 = _errs10 === errors; @@ -15602,7 +16347,7 @@ function validate124(data, { instancePath = "", parentData, parentDataProperty, if (data2.sha256 !== void 0) { const _errs12 = errors; if (typeof data2.sha256 !== "string") { - validate124.errors = [{ instancePath: instancePath + "/artifacts/" + i0 + "/sha256", schemaPath: "#/definitions/TorchRuntimePreviewArtifact/properties/sha256/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate134.errors = [{ instancePath: instancePath + "/artifacts/" + i0 + "/sha256", schemaPath: "#/definitions/TorchRuntimePreviewArtifact/properties/sha256/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid3 = _errs12 === errors; @@ -15613,7 +16358,7 @@ function validate124(data, { instancePath = "", parentData, parentDataProperty, if (data2.url !== void 0) { const _errs14 = errors; if (typeof data2.url !== "string") { - validate124.errors = [{ instancePath: instancePath + "/artifacts/" + i0 + "/url", schemaPath: "#/definitions/TorchRuntimePreviewArtifact/properties/url/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate134.errors = [{ instancePath: instancePath + "/artifacts/" + i0 + "/url", schemaPath: "#/definitions/TorchRuntimePreviewArtifact/properties/url/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid3 = _errs14 === errors; @@ -15624,7 +16369,7 @@ function validate124(data, { instancePath = "", parentData, parentDataProperty, if (data2.version !== void 0) { const _errs16 = errors; if (typeof data2.version !== "string") { - validate124.errors = [{ instancePath: instancePath + "/artifacts/" + i0 + "/version", schemaPath: "#/definitions/TorchRuntimePreviewArtifact/properties/version/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate134.errors = [{ instancePath: instancePath + "/artifacts/" + i0 + "/version", schemaPath: "#/definitions/TorchRuntimePreviewArtifact/properties/version/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid3 = _errs16 === errors; @@ -15637,7 +16382,7 @@ function validate124(data, { instancePath = "", parentData, parentDataProperty, } } } else { - validate124.errors = [{ instancePath: instancePath + "/artifacts/" + i0, schemaPath: "#/definitions/TorchRuntimePreviewArtifact/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate134.errors = [{ instancePath: instancePath + "/artifacts/" + i0, schemaPath: "#/definitions/TorchRuntimePreviewArtifact/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } @@ -15647,7 +16392,7 @@ function validate124(data, { instancePath = "", parentData, parentDataProperty, } } } else { - validate124.errors = [{ instancePath: instancePath + "/artifacts", schemaPath: "#/properties/artifacts/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; + validate134.errors = [{ instancePath: instancePath + "/artifacts", schemaPath: "#/properties/artifacts/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; return false; } } @@ -15659,7 +16404,7 @@ function validate124(data, { instancePath = "", parentData, parentDataProperty, if (data.build !== void 0) { const _errs18 = errors; if (typeof data.build !== "string") { - validate124.errors = [{ instancePath: instancePath + "/build", schemaPath: "#/properties/build/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate134.errors = [{ instancePath: instancePath + "/build", schemaPath: "#/properties/build/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs18 === errors; @@ -15671,17 +16416,17 @@ function validate124(data, { instancePath = "", parentData, parentDataProperty, let data8 = data.expiresInSeconds; const _errs20 = errors; if (!(typeof data8 == "number" && (!(data8 % 1) && !isNaN(data8)) && isFinite(data8))) { - validate124.errors = [{ instancePath: instancePath + "/expiresInSeconds", schemaPath: "#/properties/expiresInSeconds/type", keyword: "type", params: { type: "integer" }, message: "must be integer" }]; + validate134.errors = [{ instancePath: instancePath + "/expiresInSeconds", schemaPath: "#/properties/expiresInSeconds/type", keyword: "type", params: { type: "integer" }, message: "must be integer" }]; return false; } if (errors === _errs20) { if (typeof data8 == "number" && isFinite(data8)) { if (data8 > 9007199254740991 || isNaN(data8)) { - validate124.errors = [{ instancePath: instancePath + "/expiresInSeconds", schemaPath: "#/properties/expiresInSeconds/maximum", keyword: "maximum", params: { comparison: "<=", limit: 9007199254740991 }, message: "must be <= 9007199254740991" }]; + validate134.errors = [{ instancePath: instancePath + "/expiresInSeconds", schemaPath: "#/properties/expiresInSeconds/maximum", keyword: "maximum", params: { comparison: "<=", limit: 9007199254740991 }, message: "must be <= 9007199254740991" }]; return false; } else { if (data8 < 0 || isNaN(data8)) { - validate124.errors = [{ instancePath: instancePath + "/expiresInSeconds", schemaPath: "#/properties/expiresInSeconds/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; + validate134.errors = [{ instancePath: instancePath + "/expiresInSeconds", schemaPath: "#/properties/expiresInSeconds/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; return false; } } @@ -15695,7 +16440,7 @@ function validate124(data, { instancePath = "", parentData, parentDataProperty, if (data.previewId !== void 0) { const _errs22 = errors; if (typeof data.previewId !== "string") { - validate124.errors = [{ instancePath: instancePath + "/previewId", schemaPath: "#/properties/previewId/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate134.errors = [{ instancePath: instancePath + "/previewId", schemaPath: "#/properties/previewId/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs22 === errors; @@ -15706,7 +16451,7 @@ function validate124(data, { instancePath = "", parentData, parentDataProperty, if (data.python !== void 0) { const _errs24 = errors; if (typeof data.python !== "string") { - validate124.errors = [{ instancePath: instancePath + "/python", schemaPath: "#/properties/python/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate134.errors = [{ instancePath: instancePath + "/python", schemaPath: "#/properties/python/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs24 === errors; @@ -15718,11 +16463,11 @@ function validate124(data, { instancePath = "", parentData, parentDataProperty, let data11 = data.qualification; const _errs26 = errors; if (typeof data11 !== "string") { - validate124.errors = [{ instancePath: instancePath + "/qualification", schemaPath: "#/definitions/TorchRuntimePreviewQualification/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate134.errors = [{ instancePath: instancePath + "/qualification", schemaPath: "#/definitions/TorchRuntimePreviewQualification/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } if (!(data11 === "qualified" || data11 === "unverified")) { - validate124.errors = [{ instancePath: instancePath + "/qualification", schemaPath: "#/definitions/TorchRuntimePreviewQualification/enum", keyword: "enum", params: { allowedValues: schema142.enum }, message: "must be equal to one of the allowed values" }]; + validate134.errors = [{ instancePath: instancePath + "/qualification", schemaPath: "#/definitions/TorchRuntimePreviewQualification/enum", keyword: "enum", params: { allowedValues: schema159.enum }, message: "must be equal to one of the allowed values" }]; return false; } var valid0 = _errs26 === errors; @@ -15733,7 +16478,7 @@ function validate124(data, { instancePath = "", parentData, parentDataProperty, if (data.tag !== void 0) { const _errs29 = errors; if (typeof data.tag !== "string") { - validate124.errors = [{ instancePath: instancePath + "/tag", schemaPath: "#/properties/tag/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate134.errors = [{ instancePath: instancePath + "/tag", schemaPath: "#/properties/tag/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs29 === errors; @@ -15750,14 +16495,14 @@ function validate124(data, { instancePath = "", parentData, parentDataProperty, } } } else { - validate124.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate134.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate124.errors = vErrors; + validate134.errors = vErrors; return errors === 0; } -function validate123(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +function validate133(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; const _errs0 = errors; @@ -15792,8 +16537,8 @@ function validate123(data, { instancePath = "", parentData, parentDataProperty, if (_errs3 === errors) { if (data.preview !== void 0) { const _errs4 = errors; - if (!validate124(data.preview, { instancePath: instancePath + "/preview", parentData: data, parentDataProperty: "preview", rootData })) { - vErrors = vErrors === null ? validate124.errors : vErrors.concat(validate124.errors); + if (!validate134(data.preview, { instancePath: instancePath + "/preview", parentData: data, parentDataProperty: "preview", rootData })) { + vErrors = vErrors === null ? validate134.errors : vErrors.concat(validate134.errors); errors = vErrors.length; } var valid1 = _errs4 === errors; @@ -15900,7 +16645,7 @@ function validate123(data, { instancePath = "", parentData, parentDataProperty, errors++; } if (!(data3 === "unsupported" || data3 === "validation_failed" || data3 === "network_inconclusive" || data3 === "inconclusive")) { - const err9 = { instancePath: instancePath + "/reason", schemaPath: "#/definitions/TorchRuntimePreviewRejectionReason/enum", keyword: "enum", params: { allowedValues: schema143.enum }, message: "must be equal to one of the allowed values" }; + const err9 = { instancePath: instancePath + "/reason", schemaPath: "#/definitions/TorchRuntimePreviewRejectionReason/enum", keyword: "enum", params: { allowedValues: schema160.enum }, message: "must be equal to one of the allowed values" }; if (vErrors === null) { vErrors = [err9]; } else { @@ -15970,7 +16715,7 @@ function validate123(data, { instancePath = "", parentData, parentDataProperty, vErrors.push(err13); } errors++; - validate123.errors = vErrors; + validate133.errors = vErrors; return false; } else { errors = _errs0; @@ -15982,57 +16727,57 @@ function validate123(data, { instancePath = "", parentData, parentDataProperty, } } } - validate123.errors = vErrors; + validate133.errors = vErrors; return errors === 0; } -var validateTorchRuntimePreviewQualification = validate126; -var schema144 = { "$schema": "http://json-schema.org/draft-07/schema#", "enum": ["qualified", "unverified"], "title": "TorchRuntimePreviewQualification", "type": "string" }; -function validate126(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateTorchRuntimePreviewQualification = validate136; +var schema161 = { "$schema": "http://json-schema.org/draft-07/schema#", "enum": ["qualified", "unverified"], "title": "TorchRuntimePreviewQualification", "type": "string" }; +function validate136(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (typeof data !== "string") { - validate126.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate136.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } if (!(data === "qualified" || data === "unverified")) { - validate126.errors = [{ instancePath, schemaPath: "#/enum", keyword: "enum", params: { allowedValues: schema144.enum }, message: "must be equal to one of the allowed values" }]; + validate136.errors = [{ instancePath, schemaPath: "#/enum", keyword: "enum", params: { allowedValues: schema161.enum }, message: "must be equal to one of the allowed values" }]; return false; } - validate126.errors = vErrors; + validate136.errors = vErrors; return errors === 0; } -var validateTorchRuntimePreviewRejectionReason = validate127; -var schema145 = { "$schema": "http://json-schema.org/draft-07/schema#", "enum": ["unsupported", "validation_failed", "network_inconclusive", "inconclusive"], "title": "TorchRuntimePreviewRejectionReason", "type": "string" }; -function validate127(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateTorchRuntimePreviewRejectionReason = validate137; +var schema162 = { "$schema": "http://json-schema.org/draft-07/schema#", "enum": ["unsupported", "validation_failed", "network_inconclusive", "inconclusive"], "title": "TorchRuntimePreviewRejectionReason", "type": "string" }; +function validate137(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (typeof data !== "string") { - validate127.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate137.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } if (!(data === "unsupported" || data === "validation_failed" || data === "network_inconclusive" || data === "inconclusive")) { - validate127.errors = [{ instancePath, schemaPath: "#/enum", keyword: "enum", params: { allowedValues: schema145.enum }, message: "must be equal to one of the allowed values" }]; + validate137.errors = [{ instancePath, schemaPath: "#/enum", keyword: "enum", params: { allowedValues: schema162.enum }, message: "must be equal to one of the allowed values" }]; return false; } - validate127.errors = vErrors; + validate137.errors = vErrors; return errors === 0; } -var validateTrialTorchRuntimeOutcome = validate128; -var schema146 = { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "capabilities": { "items": { "type": "string" }, "type": "array" }, "cleanup": { "type": "string" }, "error": { "type": ["string", "null"] }, "generation": { "type": ["string", "null"] }, "healthStatus": { "type": "string" }, "profileId": { "type": "string" }, "protocol": { "maximum": 4294967295, "minimum": 0, "type": ["integer", "null"] }, "startedByTrial": { "type": "boolean" }, "startupStatus": { "type": "string" }, "success": { "type": "boolean" }, "tag": { "type": "string" } }, "required": ["success", "tag", "profileId", "startupStatus", "healthStatus", "protocol", "capabilities", "generation", "startedByTrial", "error", "cleanup"], "title": "TrialTorchRuntimeOutcome", "type": "object" }; -function validate128(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateTrialTorchRuntimeOutcome = validate138; +var schema163 = { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "capabilities": { "items": { "type": "string" }, "type": "array" }, "cleanup": { "type": "string" }, "error": { "type": ["string", "null"] }, "generation": { "type": ["string", "null"] }, "healthStatus": { "type": "string" }, "profileId": { "type": "string" }, "protocol": { "maximum": 4294967295, "minimum": 0, "type": ["integer", "null"] }, "startedByTrial": { "type": "boolean" }, "startupStatus": { "type": "string" }, "success": { "type": "boolean" }, "tag": { "type": "string" } }, "required": ["success", "tag", "profileId", "startupStatus", "healthStatus", "protocol", "capabilities", "generation", "startedByTrial", "error", "cleanup"], "title": "TrialTorchRuntimeOutcome", "type": "object" }; +function validate138(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.success === void 0 && (missing0 = "success") || data.tag === void 0 && (missing0 = "tag") || data.profileId === void 0 && (missing0 = "profileId") || data.startupStatus === void 0 && (missing0 = "startupStatus") || data.healthStatus === void 0 && (missing0 = "healthStatus") || data.protocol === void 0 && (missing0 = "protocol") || data.capabilities === void 0 && (missing0 = "capabilities") || data.generation === void 0 && (missing0 = "generation") || data.startedByTrial === void 0 && (missing0 = "startedByTrial") || data.error === void 0 && (missing0 = "error") || data.cleanup === void 0 && (missing0 = "cleanup")) { - validate128.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate138.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { - if (!func2.call(schema146.properties, key0)) { - validate128.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + if (!func2.call(schema163.properties, key0)) { + validate138.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -16048,7 +16793,7 @@ function validate128(data, { instancePath = "", parentData, parentDataProperty, for (let i0 = 0; i0 < len0; i0++) { const _errs4 = errors; if (typeof data0[i0] !== "string") { - validate128.errors = [{ instancePath: instancePath + "/capabilities/" + i0, schemaPath: "#/properties/capabilities/items/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate138.errors = [{ instancePath: instancePath + "/capabilities/" + i0, schemaPath: "#/properties/capabilities/items/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid1 = _errs4 === errors; @@ -16057,7 +16802,7 @@ function validate128(data, { instancePath = "", parentData, parentDataProperty, } } } else { - validate128.errors = [{ instancePath: instancePath + "/capabilities", schemaPath: "#/properties/capabilities/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; + validate138.errors = [{ instancePath: instancePath + "/capabilities", schemaPath: "#/properties/capabilities/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; return false; } } @@ -16069,7 +16814,7 @@ function validate128(data, { instancePath = "", parentData, parentDataProperty, if (data.cleanup !== void 0) { const _errs6 = errors; if (typeof data.cleanup !== "string") { - validate128.errors = [{ instancePath: instancePath + "/cleanup", schemaPath: "#/properties/cleanup/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate138.errors = [{ instancePath: instancePath + "/cleanup", schemaPath: "#/properties/cleanup/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs6 === errors; @@ -16081,7 +16826,7 @@ function validate128(data, { instancePath = "", parentData, parentDataProperty, let data3 = data.error; const _errs8 = errors; if (typeof data3 !== "string" && data3 !== null) { - validate128.errors = [{ instancePath: instancePath + "/error", schemaPath: "#/properties/error/type", keyword: "type", params: { type: schema146.properties.error.type }, message: "must be string,null" }]; + validate138.errors = [{ instancePath: instancePath + "/error", schemaPath: "#/properties/error/type", keyword: "type", params: { type: schema163.properties.error.type }, message: "must be string,null" }]; return false; } var valid0 = _errs8 === errors; @@ -16093,7 +16838,7 @@ function validate128(data, { instancePath = "", parentData, parentDataProperty, let data4 = data.generation; const _errs10 = errors; if (typeof data4 !== "string" && data4 !== null) { - validate128.errors = [{ instancePath: instancePath + "/generation", schemaPath: "#/properties/generation/type", keyword: "type", params: { type: schema146.properties.generation.type }, message: "must be string,null" }]; + validate138.errors = [{ instancePath: instancePath + "/generation", schemaPath: "#/properties/generation/type", keyword: "type", params: { type: schema163.properties.generation.type }, message: "must be string,null" }]; return false; } var valid0 = _errs10 === errors; @@ -16104,7 +16849,7 @@ function validate128(data, { instancePath = "", parentData, parentDataProperty, if (data.healthStatus !== void 0) { const _errs12 = errors; if (typeof data.healthStatus !== "string") { - validate128.errors = [{ instancePath: instancePath + "/healthStatus", schemaPath: "#/properties/healthStatus/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate138.errors = [{ instancePath: instancePath + "/healthStatus", schemaPath: "#/properties/healthStatus/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs12 === errors; @@ -16115,7 +16860,7 @@ function validate128(data, { instancePath = "", parentData, parentDataProperty, if (data.profileId !== void 0) { const _errs14 = errors; if (typeof data.profileId !== "string") { - validate128.errors = [{ instancePath: instancePath + "/profileId", schemaPath: "#/properties/profileId/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate138.errors = [{ instancePath: instancePath + "/profileId", schemaPath: "#/properties/profileId/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs14 === errors; @@ -16127,17 +16872,17 @@ function validate128(data, { instancePath = "", parentData, parentDataProperty, let data7 = data.protocol; const _errs16 = errors; if (!(typeof data7 == "number" && (!(data7 % 1) && !isNaN(data7)) && isFinite(data7)) && data7 !== null) { - validate128.errors = [{ instancePath: instancePath + "/protocol", schemaPath: "#/properties/protocol/type", keyword: "type", params: { type: schema146.properties.protocol.type }, message: "must be integer,null" }]; + validate138.errors = [{ instancePath: instancePath + "/protocol", schemaPath: "#/properties/protocol/type", keyword: "type", params: { type: schema163.properties.protocol.type }, message: "must be integer,null" }]; return false; } if (errors === _errs16) { if (typeof data7 == "number" && isFinite(data7)) { if (data7 > 4294967295 || isNaN(data7)) { - validate128.errors = [{ instancePath: instancePath + "/protocol", schemaPath: "#/properties/protocol/maximum", keyword: "maximum", params: { comparison: "<=", limit: 4294967295 }, message: "must be <= 4294967295" }]; + validate138.errors = [{ instancePath: instancePath + "/protocol", schemaPath: "#/properties/protocol/maximum", keyword: "maximum", params: { comparison: "<=", limit: 4294967295 }, message: "must be <= 4294967295" }]; return false; } else { if (data7 < 0 || isNaN(data7)) { - validate128.errors = [{ instancePath: instancePath + "/protocol", schemaPath: "#/properties/protocol/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; + validate138.errors = [{ instancePath: instancePath + "/protocol", schemaPath: "#/properties/protocol/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; return false; } } @@ -16151,7 +16896,7 @@ function validate128(data, { instancePath = "", parentData, parentDataProperty, if (data.startedByTrial !== void 0) { const _errs18 = errors; if (typeof data.startedByTrial !== "boolean") { - validate128.errors = [{ instancePath: instancePath + "/startedByTrial", schemaPath: "#/properties/startedByTrial/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; + validate138.errors = [{ instancePath: instancePath + "/startedByTrial", schemaPath: "#/properties/startedByTrial/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; return false; } var valid0 = _errs18 === errors; @@ -16162,7 +16907,7 @@ function validate128(data, { instancePath = "", parentData, parentDataProperty, if (data.startupStatus !== void 0) { const _errs20 = errors; if (typeof data.startupStatus !== "string") { - validate128.errors = [{ instancePath: instancePath + "/startupStatus", schemaPath: "#/properties/startupStatus/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate138.errors = [{ instancePath: instancePath + "/startupStatus", schemaPath: "#/properties/startupStatus/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs20 === errors; @@ -16173,7 +16918,7 @@ function validate128(data, { instancePath = "", parentData, parentDataProperty, if (data.success !== void 0) { const _errs22 = errors; if (typeof data.success !== "boolean") { - validate128.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; + validate138.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; return false; } var valid0 = _errs22 === errors; @@ -16184,7 +16929,7 @@ function validate128(data, { instancePath = "", parentData, parentDataProperty, if (data.tag !== void 0) { const _errs24 = errors; if (typeof data.tag !== "string") { - validate128.errors = [{ instancePath: instancePath + "/tag", schemaPath: "#/properties/tag/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate138.errors = [{ instancePath: instancePath + "/tag", schemaPath: "#/properties/tag/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs24 === errors; @@ -16204,15 +16949,15 @@ function validate128(data, { instancePath = "", parentData, parentDataProperty, } } } else { - validate128.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate138.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate128.errors = vErrors; + validate138.errors = vErrors; return errors === 0; } -var validateTrialTorchRuntimeParams = validate129; -function validate129(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateTrialTorchRuntimeParams = validate139; +function validate139(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; const _errs0 = errors; @@ -16373,7 +17118,7 @@ function validate129(data, { instancePath = "", parentData, parentDataProperty, vErrors.push(err10); } errors++; - validate129.errors = vErrors; + validate139.errors = vErrors; return false; } else { errors = _errs0; @@ -16385,24 +17130,24 @@ function validate129(data, { instancePath = "", parentData, parentDataProperty, } } } - validate129.errors = vErrors; + validate139.errors = vErrors; return errors === 0; } -var validateUpdateInferenceSettingsOutcome = validate130; -function validate130(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateUpdateInferenceSettingsOutcome = validate140; +function validate140(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.success === void 0 && (missing0 = "success") || data.model_id === void 0 && (missing0 = "model_id")) { - validate130.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate140.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "model_id" || key0 === "success")) { - validate130.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate140.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -16411,7 +17156,7 @@ function validate130(data, { instancePath = "", parentData, parentDataProperty, if (data.model_id !== void 0) { const _errs2 = errors; if (typeof data.model_id !== "string") { - validate130.errors = [{ instancePath: instancePath + "/model_id", schemaPath: "#/properties/model_id/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate140.errors = [{ instancePath: instancePath + "/model_id", schemaPath: "#/properties/model_id/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs2 === errors; @@ -16423,11 +17168,11 @@ function validate130(data, { instancePath = "", parentData, parentDataProperty, let data1 = data.success; const _errs4 = errors; if (typeof data1 !== "boolean") { - validate130.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; + validate140.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; return false; } if (true !== data1) { - validate130.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/const", keyword: "const", params: { allowedValue: true }, message: "must be equal to constant" }]; + validate140.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/const", keyword: "const", params: { allowedValue: true }, message: "must be equal to constant" }]; return false; } var valid0 = _errs4 === errors; @@ -16438,19 +17183,19 @@ function validate130(data, { instancePath = "", parentData, parentDataProperty, } } } else { - validate130.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate140.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate130.errors = vErrors; + validate140.errors = vErrors; return errors === 0; } -var validateUpdateInferenceSettingsParams = validate131; -var schema150 = { "additionalProperties": false, "properties": { "constraints": { "anyOf": [{ "$ref": "#/definitions/InferenceConstraintsInput" }, { "type": "null" }] }, "default": { "$ref": "#/definitions/DesktopJsonValue" }, "description": { "default": null, "type": ["string", "null"] }, "key": { "type": "string" }, "label": { "type": "string" }, "param_type": { "$ref": "#/definitions/ParamType" } }, "required": ["key", "label", "param_type", "default"], "type": "object" }; -var schema153 = { "description": "Data type for an inference parameter.", "enum": ["Number", "Integer", "String", "Boolean"], "type": "string" }; -var schema151 = { "additionalProperties": false, "properties": { "allowed_values": { "anyOf": [{ "type": "null" }, { "items": { "$ref": "#/definitions/DesktopJsonValue" }, "type": "array" }] }, "max": { "default": null, "maximum": 17976931348623157e292, "minimum": -17976931348623157e292, "type": ["number", "null"] }, "min": { "default": null, "maximum": 17976931348623157e292, "minimum": -17976931348623157e292, "type": ["number", "null"] } }, "type": "object" }; -var wrapper4 = { validate: validate134 }; -function validate134(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateUpdateInferenceSettingsParams = validate141; +var schema167 = { "additionalProperties": false, "properties": { "constraints": { "anyOf": [{ "$ref": "#/definitions/InferenceConstraintsInput" }, { "type": "null" }] }, "default": { "$ref": "#/definitions/DesktopJsonValue" }, "description": { "default": null, "type": ["string", "null"] }, "key": { "type": "string" }, "label": { "type": "string" }, "param_type": { "$ref": "#/definitions/ParamType" } }, "required": ["key", "label", "param_type", "default"], "type": "object" }; +var schema170 = { "description": "Data type for an inference parameter.", "enum": ["Number", "Integer", "String", "Boolean"], "type": "string" }; +var schema168 = { "additionalProperties": false, "properties": { "allowed_values": { "anyOf": [{ "type": "null" }, { "items": { "$ref": "#/definitions/DesktopJsonValue" }, "type": "array" }] }, "max": { "default": null, "maximum": 17976931348623157e292, "minimum": -17976931348623157e292, "type": ["number", "null"] }, "min": { "default": null, "maximum": 17976931348623157e292, "minimum": -17976931348623157e292, "type": ["number", "null"] } }, "type": "object" }; +var wrapper4 = { validate: validate144 }; +function validate144(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; const _errs0 = errors; @@ -16597,7 +17342,7 @@ function validate134(data, { instancePath = "", parentData, parentDataProperty, vErrors.push(err8); } errors++; - validate134.errors = vErrors; + validate144.errors = vErrors; return false; } else { errors = _errs0; @@ -16609,10 +17354,10 @@ function validate134(data, { instancePath = "", parentData, parentDataProperty, } } } - validate134.errors = vErrors; + validate144.errors = vErrors; return errors === 0; } -function validate133(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +function validate143(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { @@ -16620,7 +17365,7 @@ function validate133(data, { instancePath = "", parentData, parentDataProperty, const _errs1 = errors; for (const key0 in data) { if (!(key0 === "allowed_values" || key0 === "max" || key0 === "min")) { - validate133.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate143.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -16651,8 +17396,8 @@ function validate133(data, { instancePath = "", parentData, parentDataProperty, const len0 = data0.length; for (let i0 = 0; i0 < len0; i0++) { const _errs8 = errors; - if (!validate134(data0[i0], { instancePath: instancePath + "/allowed_values/" + i0, parentData: data0, parentDataProperty: i0, rootData })) { - vErrors = vErrors === null ? validate134.errors : vErrors.concat(validate134.errors); + if (!validate144(data0[i0], { instancePath: instancePath + "/allowed_values/" + i0, parentData: data0, parentDataProperty: i0, rootData })) { + vErrors = vErrors === null ? validate144.errors : vErrors.concat(validate144.errors); errors = vErrors.length; } var valid2 = _errs8 === errors; @@ -16681,7 +17426,7 @@ function validate133(data, { instancePath = "", parentData, parentDataProperty, vErrors.push(err2); } errors++; - validate133.errors = vErrors; + validate143.errors = vErrors; return false; } else { errors = _errs3; @@ -16702,17 +17447,17 @@ function validate133(data, { instancePath = "", parentData, parentDataProperty, let data2 = data.max; const _errs9 = errors; if (!(typeof data2 == "number" && isFinite(data2)) && data2 !== null) { - validate133.errors = [{ instancePath: instancePath + "/max", schemaPath: "#/properties/max/type", keyword: "type", params: { type: schema151.properties.max.type }, message: "must be number,null" }]; + validate143.errors = [{ instancePath: instancePath + "/max", schemaPath: "#/properties/max/type", keyword: "type", params: { type: schema168.properties.max.type }, message: "must be number,null" }]; return false; } if (errors === _errs9) { if (typeof data2 == "number" && isFinite(data2)) { if (data2 > 17976931348623157e292 || isNaN(data2)) { - validate133.errors = [{ instancePath: instancePath + "/max", schemaPath: "#/properties/max/maximum", keyword: "maximum", params: { comparison: "<=", limit: 17976931348623157e292 }, message: "must be <= 1.7976931348623157e+308" }]; + validate143.errors = [{ instancePath: instancePath + "/max", schemaPath: "#/properties/max/maximum", keyword: "maximum", params: { comparison: "<=", limit: 17976931348623157e292 }, message: "must be <= 1.7976931348623157e+308" }]; return false; } else { if (data2 < -17976931348623157e292 || isNaN(data2)) { - validate133.errors = [{ instancePath: instancePath + "/max", schemaPath: "#/properties/max/minimum", keyword: "minimum", params: { comparison: ">=", limit: -17976931348623157e292 }, message: "must be >= -1.7976931348623157e+308" }]; + validate143.errors = [{ instancePath: instancePath + "/max", schemaPath: "#/properties/max/minimum", keyword: "minimum", params: { comparison: ">=", limit: -17976931348623157e292 }, message: "must be >= -1.7976931348623157e+308" }]; return false; } } @@ -16727,17 +17472,17 @@ function validate133(data, { instancePath = "", parentData, parentDataProperty, let data3 = data.min; const _errs11 = errors; if (!(typeof data3 == "number" && isFinite(data3)) && data3 !== null) { - validate133.errors = [{ instancePath: instancePath + "/min", schemaPath: "#/properties/min/type", keyword: "type", params: { type: schema151.properties.min.type }, message: "must be number,null" }]; + validate143.errors = [{ instancePath: instancePath + "/min", schemaPath: "#/properties/min/type", keyword: "type", params: { type: schema168.properties.min.type }, message: "must be number,null" }]; return false; } if (errors === _errs11) { if (typeof data3 == "number" && isFinite(data3)) { if (data3 > 17976931348623157e292 || isNaN(data3)) { - validate133.errors = [{ instancePath: instancePath + "/min", schemaPath: "#/properties/min/maximum", keyword: "maximum", params: { comparison: "<=", limit: 17976931348623157e292 }, message: "must be <= 1.7976931348623157e+308" }]; + validate143.errors = [{ instancePath: instancePath + "/min", schemaPath: "#/properties/min/maximum", keyword: "maximum", params: { comparison: "<=", limit: 17976931348623157e292 }, message: "must be <= 1.7976931348623157e+308" }]; return false; } else { if (data3 < -17976931348623157e292 || isNaN(data3)) { - validate133.errors = [{ instancePath: instancePath + "/min", schemaPath: "#/properties/min/minimum", keyword: "minimum", params: { comparison: ">=", limit: -17976931348623157e292 }, message: "must be >= -1.7976931348623157e+308" }]; + validate143.errors = [{ instancePath: instancePath + "/min", schemaPath: "#/properties/min/minimum", keyword: "minimum", params: { comparison: ">=", limit: -17976931348623157e292 }, message: "must be >= -1.7976931348623157e+308" }]; return false; } } @@ -16751,27 +17496,27 @@ function validate133(data, { instancePath = "", parentData, parentDataProperty, } } } else { - validate133.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate143.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate133.errors = vErrors; + validate143.errors = vErrors; return errors === 0; } -function validate132(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +function validate142(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.key === void 0 && (missing0 = "key") || data.label === void 0 && (missing0 = "label") || data.param_type === void 0 && (missing0 = "param_type") || data.default === void 0 && (missing0 = "default")) { - validate132.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate142.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "constraints" || key0 === "default" || key0 === "description" || key0 === "key" || key0 === "label" || key0 === "param_type")) { - validate132.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate142.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -16783,8 +17528,8 @@ function validate132(data, { instancePath = "", parentData, parentDataProperty, const _errs3 = errors; let valid1 = false; const _errs4 = errors; - if (!validate133(data0, { instancePath: instancePath + "/constraints", parentData: data, parentDataProperty: "constraints", rootData })) { - vErrors = vErrors === null ? validate133.errors : vErrors.concat(validate133.errors); + if (!validate143(data0, { instancePath: instancePath + "/constraints", parentData: data, parentDataProperty: "constraints", rootData })) { + vErrors = vErrors === null ? validate143.errors : vErrors.concat(validate143.errors); errors = vErrors.length; } var _valid0 = _errs4 === errors; @@ -16811,7 +17556,7 @@ function validate132(data, { instancePath = "", parentData, parentDataProperty, vErrors.push(err1); } errors++; - validate132.errors = vErrors; + validate142.errors = vErrors; return false; } else { errors = _errs3; @@ -16830,8 +17575,8 @@ function validate132(data, { instancePath = "", parentData, parentDataProperty, if (valid0) { if (data.default !== void 0) { const _errs7 = errors; - if (!validate134(data.default, { instancePath: instancePath + "/default", parentData: data, parentDataProperty: "default", rootData })) { - vErrors = vErrors === null ? validate134.errors : vErrors.concat(validate134.errors); + if (!validate144(data.default, { instancePath: instancePath + "/default", parentData: data, parentDataProperty: "default", rootData })) { + vErrors = vErrors === null ? validate144.errors : vErrors.concat(validate144.errors); errors = vErrors.length; } var valid0 = _errs7 === errors; @@ -16843,7 +17588,7 @@ function validate132(data, { instancePath = "", parentData, parentDataProperty, let data2 = data.description; const _errs8 = errors; if (typeof data2 !== "string" && data2 !== null) { - validate132.errors = [{ instancePath: instancePath + "/description", schemaPath: "#/properties/description/type", keyword: "type", params: { type: schema150.properties.description.type }, message: "must be string,null" }]; + validate142.errors = [{ instancePath: instancePath + "/description", schemaPath: "#/properties/description/type", keyword: "type", params: { type: schema167.properties.description.type }, message: "must be string,null" }]; return false; } var valid0 = _errs8 === errors; @@ -16854,7 +17599,7 @@ function validate132(data, { instancePath = "", parentData, parentDataProperty, if (data.key !== void 0) { const _errs10 = errors; if (typeof data.key !== "string") { - validate132.errors = [{ instancePath: instancePath + "/key", schemaPath: "#/properties/key/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate142.errors = [{ instancePath: instancePath + "/key", schemaPath: "#/properties/key/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs10 === errors; @@ -16865,7 +17610,7 @@ function validate132(data, { instancePath = "", parentData, parentDataProperty, if (data.label !== void 0) { const _errs12 = errors; if (typeof data.label !== "string") { - validate132.errors = [{ instancePath: instancePath + "/label", schemaPath: "#/properties/label/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate142.errors = [{ instancePath: instancePath + "/label", schemaPath: "#/properties/label/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid0 = _errs12 === errors; @@ -16877,11 +17622,11 @@ function validate132(data, { instancePath = "", parentData, parentDataProperty, let data5 = data.param_type; const _errs14 = errors; if (typeof data5 !== "string") { - validate132.errors = [{ instancePath: instancePath + "/param_type", schemaPath: "#/definitions/ParamType/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate142.errors = [{ instancePath: instancePath + "/param_type", schemaPath: "#/definitions/ParamType/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } if (!(data5 === "Number" || data5 === "Integer" || data5 === "String" || data5 === "Boolean")) { - validate132.errors = [{ instancePath: instancePath + "/param_type", schemaPath: "#/definitions/ParamType/enum", keyword: "enum", params: { allowedValues: schema153.enum }, message: "must be equal to one of the allowed values" }]; + validate142.errors = [{ instancePath: instancePath + "/param_type", schemaPath: "#/definitions/ParamType/enum", keyword: "enum", params: { allowedValues: schema170.enum }, message: "must be equal to one of the allowed values" }]; return false; } var valid0 = _errs14 === errors; @@ -16896,14 +17641,14 @@ function validate132(data, { instancePath = "", parentData, parentDataProperty, } } } else { - validate132.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate142.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate132.errors = vErrors; + validate142.errors = vErrors; return errors === 0; } -function validate131(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +function validate141(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; const _errs0 = errors; @@ -16960,8 +17705,8 @@ function validate131(data, { instancePath = "", parentData, parentDataProperty, const len0 = data1.length; for (let i0 = 0; i0 < len0; i0++) { const _errs8 = errors; - if (!validate132(data1[i0], { instancePath: instancePath + "/settings/" + i0, parentData: data1, parentDataProperty: i0, rootData })) { - vErrors = vErrors === null ? validate132.errors : vErrors.concat(validate132.errors); + if (!validate142(data1[i0], { instancePath: instancePath + "/settings/" + i0, parentData: data1, parentDataProperty: i0, rootData })) { + vErrors = vErrors === null ? validate142.errors : vErrors.concat(validate142.errors); errors = vErrors.length; } var valid2 = _errs8 === errors; @@ -17035,8 +17780,8 @@ function validate131(data, { instancePath = "", parentData, parentDataProperty, const len1 = data3.length; for (let i1 = 0; i1 < len1; i1++) { const _errs14 = errors; - if (!validate132(data3[i1], { instancePath: instancePath + "/inference_settings/" + i1, parentData: data3, parentDataProperty: i1, rootData })) { - vErrors = vErrors === null ? validate132.errors : vErrors.concat(validate132.errors); + if (!validate142(data3[i1], { instancePath: instancePath + "/inference_settings/" + i1, parentData: data3, parentDataProperty: i1, rootData })) { + vErrors = vErrors === null ? validate142.errors : vErrors.concat(validate142.errors); errors = vErrors.length; } var valid4 = _errs14 === errors; @@ -17126,8 +17871,8 @@ function validate131(data, { instancePath = "", parentData, parentDataProperty, const len2 = data6.length; for (let i2 = 0; i2 < len2; i2++) { const _errs22 = errors; - if (!validate132(data6[i2], { instancePath: instancePath + "/inferenceSettings/" + i2, parentData: data6, parentDataProperty: i2, rootData })) { - vErrors = vErrors === null ? validate132.errors : vErrors.concat(validate132.errors); + if (!validate142(data6[i2], { instancePath: instancePath + "/inferenceSettings/" + i2, parentData: data6, parentDataProperty: i2, rootData })) { + vErrors = vErrors === null ? validate142.errors : vErrors.concat(validate142.errors); errors = vErrors.length; } var valid6 = _errs22 === errors; @@ -17233,8 +17978,8 @@ function validate131(data, { instancePath = "", parentData, parentDataProperty, const len3 = data10.length; for (let i3 = 0; i3 < len3; i3++) { const _errs32 = errors; - if (!validate132(data10[i3], { instancePath: instancePath + "/settings/" + i3, parentData: data10, parentDataProperty: i3, rootData })) { - vErrors = vErrors === null ? validate132.errors : vErrors.concat(validate132.errors); + if (!validate142(data10[i3], { instancePath: instancePath + "/settings/" + i3, parentData: data10, parentDataProperty: i3, rootData })) { + vErrors = vErrors === null ? validate142.errors : vErrors.concat(validate142.errors); errors = vErrors.length; } var valid8 = _errs32 === errors; @@ -17308,8 +18053,8 @@ function validate131(data, { instancePath = "", parentData, parentDataProperty, const len4 = data12.length; for (let i4 = 0; i4 < len4; i4++) { const _errs38 = errors; - if (!validate132(data12[i4], { instancePath: instancePath + "/inference_settings/" + i4, parentData: data12, parentDataProperty: i4, rootData })) { - vErrors = vErrors === null ? validate132.errors : vErrors.concat(validate132.errors); + if (!validate142(data12[i4], { instancePath: instancePath + "/inference_settings/" + i4, parentData: data12, parentDataProperty: i4, rootData })) { + vErrors = vErrors === null ? validate142.errors : vErrors.concat(validate142.errors); errors = vErrors.length; } var valid10 = _errs38 === errors; @@ -17399,8 +18144,8 @@ function validate131(data, { instancePath = "", parentData, parentDataProperty, const len5 = data15.length; for (let i5 = 0; i5 < len5; i5++) { const _errs46 = errors; - if (!validate132(data15[i5], { instancePath: instancePath + "/inferenceSettings/" + i5, parentData: data15, parentDataProperty: i5, rootData })) { - vErrors = vErrors === null ? validate132.errors : vErrors.concat(validate132.errors); + if (!validate142(data15[i5], { instancePath: instancePath + "/inferenceSettings/" + i5, parentData: data15, parentDataProperty: i5, rootData })) { + vErrors = vErrors === null ? validate142.errors : vErrors.concat(validate142.errors); errors = vErrors.length; } var valid12 = _errs46 === errors; @@ -17466,7 +18211,7 @@ function validate131(data, { instancePath = "", parentData, parentDataProperty, vErrors.push(err30); } errors++; - validate131.errors = vErrors; + validate141.errors = vErrors; return false; } else { errors = _errs0; @@ -17478,11 +18223,11 @@ function validate131(data, { instancePath = "", parentData, parentDataProperty, } } } - validate131.errors = vErrors; + validate141.errors = vErrors; return errors === 0; } -var validateUpdateModelNotesOutcome = validate144; -function validate144(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateUpdateModelNotesOutcome = validate154; +function validate154(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; const _errs0 = errors; @@ -17699,7 +18444,7 @@ function validate144(data, { instancePath = "", parentData, parentDataProperty, vErrors.push(err14); } errors++; - validate144.errors = vErrors; + validate154.errors = vErrors; return false; } else { errors = _errs0; @@ -17711,12 +18456,12 @@ function validate144(data, { instancePath = "", parentData, parentDataProperty, } } } - validate144.errors = vErrors; + validate154.errors = vErrors; return errors === 0; } -var validateUpdateModelNotesParams = validate145; -var schema157 = { "anyOf": [{ "additionalProperties": false, "properties": { "model_id": { "type": "string" }, "notes": { "default": null, "type": ["string", "null"] } }, "required": ["model_id"], "type": "object" }, { "additionalProperties": false, "properties": { "model_id": { "type": "string" }, "model_notes": { "default": null, "type": ["string", "null"] } }, "required": ["model_id"], "type": "object" }, { "additionalProperties": false, "properties": { "modelId": { "type": "string" }, "notes": { "default": null, "type": ["string", "null"] } }, "required": ["modelId"], "type": "object" }, { "additionalProperties": false, "properties": { "modelId": { "type": "string" }, "model_notes": { "default": null, "type": ["string", "null"] } }, "required": ["modelId"], "type": "object" }] }; -function validate145(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateUpdateModelNotesParams = validate155; +var schema174 = { "anyOf": [{ "additionalProperties": false, "properties": { "model_id": { "type": "string" }, "notes": { "default": null, "type": ["string", "null"] } }, "required": ["model_id"], "type": "object" }, { "additionalProperties": false, "properties": { "model_id": { "type": "string" }, "model_notes": { "default": null, "type": ["string", "null"] } }, "required": ["model_id"], "type": "object" }, { "additionalProperties": false, "properties": { "modelId": { "type": "string" }, "notes": { "default": null, "type": ["string", "null"] } }, "required": ["modelId"], "type": "object" }, { "additionalProperties": false, "properties": { "modelId": { "type": "string" }, "model_notes": { "default": null, "type": ["string", "null"] } }, "required": ["modelId"], "type": "object" }] }; +function validate155(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; const _errs0 = errors; @@ -17768,7 +18513,7 @@ function validate145(data, { instancePath = "", parentData, parentDataProperty, let data1 = data.notes; const _errs6 = errors; if (typeof data1 !== "string" && data1 !== null) { - const err3 = { instancePath: instancePath + "/notes", schemaPath: "#/anyOf/0/properties/notes/type", keyword: "type", params: { type: schema157.anyOf[0].properties.notes.type }, message: "must be string,null" }; + const err3 = { instancePath: instancePath + "/notes", schemaPath: "#/anyOf/0/properties/notes/type", keyword: "type", params: { type: schema174.anyOf[0].properties.notes.type }, message: "must be string,null" }; if (vErrors === null) { vErrors = [err3]; } else { @@ -17843,7 +18588,7 @@ function validate145(data, { instancePath = "", parentData, parentDataProperty, let data3 = data.model_notes; const _errs13 = errors; if (typeof data3 !== "string" && data3 !== null) { - const err8 = { instancePath: instancePath + "/model_notes", schemaPath: "#/anyOf/1/properties/model_notes/type", keyword: "type", params: { type: schema157.anyOf[1].properties.model_notes.type }, message: "must be string,null" }; + const err8 = { instancePath: instancePath + "/model_notes", schemaPath: "#/anyOf/1/properties/model_notes/type", keyword: "type", params: { type: schema174.anyOf[1].properties.model_notes.type }, message: "must be string,null" }; if (vErrors === null) { vErrors = [err8]; } else { @@ -17918,7 +18663,7 @@ function validate145(data, { instancePath = "", parentData, parentDataProperty, let data5 = data.notes; const _errs20 = errors; if (typeof data5 !== "string" && data5 !== null) { - const err13 = { instancePath: instancePath + "/notes", schemaPath: "#/anyOf/2/properties/notes/type", keyword: "type", params: { type: schema157.anyOf[2].properties.notes.type }, message: "must be string,null" }; + const err13 = { instancePath: instancePath + "/notes", schemaPath: "#/anyOf/2/properties/notes/type", keyword: "type", params: { type: schema174.anyOf[2].properties.notes.type }, message: "must be string,null" }; if (vErrors === null) { vErrors = [err13]; } else { @@ -17993,7 +18738,7 @@ function validate145(data, { instancePath = "", parentData, parentDataProperty, let data7 = data.model_notes; const _errs27 = errors; if (typeof data7 !== "string" && data7 !== null) { - const err18 = { instancePath: instancePath + "/model_notes", schemaPath: "#/anyOf/3/properties/model_notes/type", keyword: "type", params: { type: schema157.anyOf[3].properties.model_notes.type }, message: "must be string,null" }; + const err18 = { instancePath: instancePath + "/model_notes", schemaPath: "#/anyOf/3/properties/model_notes/type", keyword: "type", params: { type: schema174.anyOf[3].properties.model_notes.type }, message: "must be string,null" }; if (vErrors === null) { vErrors = [err18]; } else { @@ -18031,7 +18776,7 @@ function validate145(data, { instancePath = "", parentData, parentDataProperty, vErrors.push(err20); } errors++; - validate145.errors = vErrors; + validate155.errors = vErrors; return false; } else { errors = _errs0; @@ -18043,24 +18788,24 @@ function validate145(data, { instancePath = "", parentData, parentDataProperty, } } } - validate145.errors = vErrors; + validate155.errors = vErrors; return errors === 0; } -var validateValidateInstallationsOutcome = validate146; -function validate146(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateValidateInstallationsOutcome = validate156; +function validate156(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.removed_tags === void 0 && (missing0 = "removed_tags") || data.orphaned_dirs === void 0 && (missing0 = "orphaned_dirs") || data.valid_count === void 0 && (missing0 = "valid_count")) { - validate146.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate156.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "orphaned_dirs" || key0 === "removed_tags" || key0 === "valid_count")) { - validate146.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate156.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -18076,7 +18821,7 @@ function validate146(data, { instancePath = "", parentData, parentDataProperty, for (let i0 = 0; i0 < len0; i0++) { const _errs4 = errors; if (typeof data0[i0] !== "string") { - validate146.errors = [{ instancePath: instancePath + "/orphaned_dirs/" + i0, schemaPath: "#/properties/orphaned_dirs/items/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate156.errors = [{ instancePath: instancePath + "/orphaned_dirs/" + i0, schemaPath: "#/properties/orphaned_dirs/items/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid1 = _errs4 === errors; @@ -18085,7 +18830,7 @@ function validate146(data, { instancePath = "", parentData, parentDataProperty, } } } else { - validate146.errors = [{ instancePath: instancePath + "/orphaned_dirs", schemaPath: "#/properties/orphaned_dirs/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; + validate156.errors = [{ instancePath: instancePath + "/orphaned_dirs", schemaPath: "#/properties/orphaned_dirs/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; return false; } } @@ -18104,7 +18849,7 @@ function validate146(data, { instancePath = "", parentData, parentDataProperty, for (let i1 = 0; i1 < len1; i1++) { const _errs8 = errors; if (typeof data2[i1] !== "string") { - validate146.errors = [{ instancePath: instancePath + "/removed_tags/" + i1, schemaPath: "#/properties/removed_tags/items/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate156.errors = [{ instancePath: instancePath + "/removed_tags/" + i1, schemaPath: "#/properties/removed_tags/items/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid2 = _errs8 === errors; @@ -18113,7 +18858,7 @@ function validate146(data, { instancePath = "", parentData, parentDataProperty, } } } else { - validate146.errors = [{ instancePath: instancePath + "/removed_tags", schemaPath: "#/properties/removed_tags/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; + validate156.errors = [{ instancePath: instancePath + "/removed_tags", schemaPath: "#/properties/removed_tags/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; return false; } } @@ -18126,17 +18871,17 @@ function validate146(data, { instancePath = "", parentData, parentDataProperty, let data4 = data.valid_count; const _errs10 = errors; if (!(typeof data4 == "number" && (!(data4 % 1) && !isNaN(data4)) && isFinite(data4))) { - validate146.errors = [{ instancePath: instancePath + "/valid_count", schemaPath: "#/properties/valid_count/type", keyword: "type", params: { type: "integer" }, message: "must be integer" }]; + validate156.errors = [{ instancePath: instancePath + "/valid_count", schemaPath: "#/properties/valid_count/type", keyword: "type", params: { type: "integer" }, message: "must be integer" }]; return false; } if (errors === _errs10) { if (typeof data4 == "number" && isFinite(data4)) { if (data4 > 9007199254740991 || isNaN(data4)) { - validate146.errors = [{ instancePath: instancePath + "/valid_count", schemaPath: "#/properties/valid_count/maximum", keyword: "maximum", params: { comparison: "<=", limit: 9007199254740991 }, message: "must be <= 9007199254740991" }]; + validate156.errors = [{ instancePath: instancePath + "/valid_count", schemaPath: "#/properties/valid_count/maximum", keyword: "maximum", params: { comparison: "<=", limit: 9007199254740991 }, message: "must be <= 9007199254740991" }]; return false; } else { if (data4 < 0 || isNaN(data4)) { - validate146.errors = [{ instancePath: instancePath + "/valid_count", schemaPath: "#/properties/valid_count/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; + validate156.errors = [{ instancePath: instancePath + "/valid_count", schemaPath: "#/properties/valid_count/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; return false; } } @@ -18151,28 +18896,28 @@ function validate146(data, { instancePath = "", parentData, parentDataProperty, } } } else { - validate146.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate156.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate146.errors = vErrors; + validate156.errors = vErrors; return errors === 0; } -var validateVersionInfoOutcome = validate147; -function validate147(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateVersionInfoOutcome = validate157; +function validate157(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.success === void 0 && (missing0 = "success") || data.info === void 0 && (missing0 = "info")) { - validate147.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate157.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "info" || key0 === "success")) { - validate147.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate157.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -18186,13 +18931,13 @@ function validate147(data, { instancePath = "", parentData, parentDataProperty, if (data0 && typeof data0 == "object" && !Array.isArray(data0)) { let missing1; if (data0.tag === void 0 && (missing1 = "tag") || data0.installed === void 0 && (missing1 = "installed") || data0.size === void 0 && (missing1 = "size")) { - validate147.errors = [{ instancePath: instancePath + "/info", schemaPath: "#/definitions/RuntimeVersionInfo/required", keyword: "required", params: { missingProperty: missing1 }, message: "must have required property '" + missing1 + "'" }]; + validate157.errors = [{ instancePath: instancePath + "/info", schemaPath: "#/definitions/RuntimeVersionInfo/required", keyword: "required", params: { missingProperty: missing1 }, message: "must have required property '" + missing1 + "'" }]; return false; } else { const _errs5 = errors; for (const key1 in data0) { if (!(key1 === "installed" || key1 === "size" || key1 === "tag")) { - validate147.errors = [{ instancePath: instancePath + "/info", schemaPath: "#/definitions/RuntimeVersionInfo/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key1 }, message: "must NOT have additional properties" }]; + validate157.errors = [{ instancePath: instancePath + "/info", schemaPath: "#/definitions/RuntimeVersionInfo/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key1 }, message: "must NOT have additional properties" }]; return false; break; } @@ -18201,7 +18946,7 @@ function validate147(data, { instancePath = "", parentData, parentDataProperty, if (data0.installed !== void 0) { const _errs6 = errors; if (typeof data0.installed !== "boolean") { - validate147.errors = [{ instancePath: instancePath + "/info/installed", schemaPath: "#/definitions/RuntimeVersionInfo/properties/installed/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; + validate157.errors = [{ instancePath: instancePath + "/info/installed", schemaPath: "#/definitions/RuntimeVersionInfo/properties/installed/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; return false; } var valid2 = _errs6 === errors; @@ -18212,7 +18957,7 @@ function validate147(data, { instancePath = "", parentData, parentDataProperty, if (data0.size !== void 0) { const _errs8 = errors; if (data0.size !== null) { - validate147.errors = [{ instancePath: instancePath + "/info/size", schemaPath: "#/definitions/RuntimeVersionInfo/properties/size/type", keyword: "type", params: { type: "null" }, message: "must be null" }]; + validate157.errors = [{ instancePath: instancePath + "/info/size", schemaPath: "#/definitions/RuntimeVersionInfo/properties/size/type", keyword: "type", params: { type: "null" }, message: "must be null" }]; return false; } var valid2 = _errs8 === errors; @@ -18223,7 +18968,7 @@ function validate147(data, { instancePath = "", parentData, parentDataProperty, if (data0.tag !== void 0) { const _errs10 = errors; if (typeof data0.tag !== "string") { - validate147.errors = [{ instancePath: instancePath + "/info/tag", schemaPath: "#/definitions/RuntimeVersionInfo/properties/tag/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate157.errors = [{ instancePath: instancePath + "/info/tag", schemaPath: "#/definitions/RuntimeVersionInfo/properties/tag/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid2 = _errs10 === errors; @@ -18235,7 +18980,7 @@ function validate147(data, { instancePath = "", parentData, parentDataProperty, } } } else { - validate147.errors = [{ instancePath: instancePath + "/info", schemaPath: "#/definitions/RuntimeVersionInfo/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate157.errors = [{ instancePath: instancePath + "/info", schemaPath: "#/definitions/RuntimeVersionInfo/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } @@ -18248,11 +18993,11 @@ function validate147(data, { instancePath = "", parentData, parentDataProperty, let data4 = data.success; const _errs12 = errors; if (typeof data4 !== "boolean") { - validate147.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; + validate157.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; return false; } if (true !== data4) { - validate147.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/const", keyword: "const", params: { allowedValue: true }, message: "must be equal to constant" }]; + validate157.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/const", keyword: "const", params: { allowedValue: true }, message: "must be equal to constant" }]; return false; } var valid0 = _errs12 === errors; @@ -18263,29 +19008,29 @@ function validate147(data, { instancePath = "", parentData, parentDataProperty, } } } else { - validate147.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate157.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate147.errors = vErrors; + validate157.errors = vErrors; return errors === 0; } -var validateVersionStatusOutcome = validate148; -var schema162 = { "additionalProperties": false, "properties": { "activeVersion": { "type": ["string", "null"] }, "defaultVersion": { "type": ["string", "null"] }, "installedCount": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "versions": { "additionalProperties": { "$ref": "#/definitions/RuntimeVersionEntry" }, "type": "object" } }, "required": ["installedCount", "activeVersion", "defaultVersion", "versions"], "type": "object" }; -function validate150(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +var validateVersionStatusOutcome = validate158; +var schema179 = { "additionalProperties": false, "properties": { "activeVersion": { "type": ["string", "null"] }, "defaultVersion": { "type": ["string", "null"] }, "installedCount": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "versions": { "additionalProperties": { "$ref": "#/definitions/RuntimeVersionEntry" }, "type": "object" } }, "required": ["installedCount", "activeVersion", "defaultVersion", "versions"], "type": "object" }; +function validate160(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.isActive === void 0 && (missing0 = "isActive") || data.dependencies === void 0 && (missing0 = "dependencies")) { - validate150.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate160.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "dependencies" || key0 === "isActive")) { - validate150.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate160.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -18299,13 +19044,13 @@ function validate150(data, { instancePath = "", parentData, parentDataProperty, if (data0 && typeof data0 == "object" && !Array.isArray(data0)) { let missing1; if (data0.installed === void 0 && (missing1 = "installed") || data0.missing === void 0 && (missing1 = "missing")) { - validate150.errors = [{ instancePath: instancePath + "/dependencies", schemaPath: "#/definitions/RuntimeVersionDependencies/required", keyword: "required", params: { missingProperty: missing1 }, message: "must have required property '" + missing1 + "'" }]; + validate160.errors = [{ instancePath: instancePath + "/dependencies", schemaPath: "#/definitions/RuntimeVersionDependencies/required", keyword: "required", params: { missingProperty: missing1 }, message: "must have required property '" + missing1 + "'" }]; return false; } else { const _errs5 = errors; for (const key1 in data0) { if (!(key1 === "installed" || key1 === "missing")) { - validate150.errors = [{ instancePath: instancePath + "/dependencies", schemaPath: "#/definitions/RuntimeVersionDependencies/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key1 }, message: "must NOT have additional properties" }]; + validate160.errors = [{ instancePath: instancePath + "/dependencies", schemaPath: "#/definitions/RuntimeVersionDependencies/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key1 }, message: "must NOT have additional properties" }]; return false; break; } @@ -18321,7 +19066,7 @@ function validate150(data, { instancePath = "", parentData, parentDataProperty, for (let i0 = 0; i0 < len0; i0++) { const _errs8 = errors; if (typeof data1[i0] !== "string") { - validate150.errors = [{ instancePath: instancePath + "/dependencies/installed/" + i0, schemaPath: "#/definitions/RuntimeVersionDependencies/properties/installed/items/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate160.errors = [{ instancePath: instancePath + "/dependencies/installed/" + i0, schemaPath: "#/definitions/RuntimeVersionDependencies/properties/installed/items/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid3 = _errs8 === errors; @@ -18330,7 +19075,7 @@ function validate150(data, { instancePath = "", parentData, parentDataProperty, } } } else { - validate150.errors = [{ instancePath: instancePath + "/dependencies/installed", schemaPath: "#/definitions/RuntimeVersionDependencies/properties/installed/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; + validate160.errors = [{ instancePath: instancePath + "/dependencies/installed", schemaPath: "#/definitions/RuntimeVersionDependencies/properties/installed/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; return false; } } @@ -18349,7 +19094,7 @@ function validate150(data, { instancePath = "", parentData, parentDataProperty, for (let i1 = 0; i1 < len1; i1++) { const _errs12 = errors; if (typeof data3[i1] !== "string") { - validate150.errors = [{ instancePath: instancePath + "/dependencies/missing/" + i1, schemaPath: "#/definitions/RuntimeVersionDependencies/properties/missing/items/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; + validate160.errors = [{ instancePath: instancePath + "/dependencies/missing/" + i1, schemaPath: "#/definitions/RuntimeVersionDependencies/properties/missing/items/type", keyword: "type", params: { type: "string" }, message: "must be string" }]; return false; } var valid4 = _errs12 === errors; @@ -18358,7 +19103,7 @@ function validate150(data, { instancePath = "", parentData, parentDataProperty, } } } else { - validate150.errors = [{ instancePath: instancePath + "/dependencies/missing", schemaPath: "#/definitions/RuntimeVersionDependencies/properties/missing/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; + validate160.errors = [{ instancePath: instancePath + "/dependencies/missing", schemaPath: "#/definitions/RuntimeVersionDependencies/properties/missing/type", keyword: "type", params: { type: "array" }, message: "must be array" }]; return false; } } @@ -18370,7 +19115,7 @@ function validate150(data, { instancePath = "", parentData, parentDataProperty, } } } else { - validate150.errors = [{ instancePath: instancePath + "/dependencies", schemaPath: "#/definitions/RuntimeVersionDependencies/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate160.errors = [{ instancePath: instancePath + "/dependencies", schemaPath: "#/definitions/RuntimeVersionDependencies/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } @@ -18382,7 +19127,7 @@ function validate150(data, { instancePath = "", parentData, parentDataProperty, if (data.isActive !== void 0) { const _errs14 = errors; if (typeof data.isActive !== "boolean") { - validate150.errors = [{ instancePath: instancePath + "/isActive", schemaPath: "#/properties/isActive/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; + validate160.errors = [{ instancePath: instancePath + "/isActive", schemaPath: "#/properties/isActive/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; return false; } var valid0 = _errs14 === errors; @@ -18393,27 +19138,27 @@ function validate150(data, { instancePath = "", parentData, parentDataProperty, } } } else { - validate150.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate160.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate150.errors = vErrors; + validate160.errors = vErrors; return errors === 0; } -function validate149(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +function validate159(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.installedCount === void 0 && (missing0 = "installedCount") || data.activeVersion === void 0 && (missing0 = "activeVersion") || data.defaultVersion === void 0 && (missing0 = "defaultVersion") || data.versions === void 0 && (missing0 = "versions")) { - validate149.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate159.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "activeVersion" || key0 === "defaultVersion" || key0 === "installedCount" || key0 === "versions")) { - validate149.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate159.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -18423,7 +19168,7 @@ function validate149(data, { instancePath = "", parentData, parentDataProperty, let data0 = data.activeVersion; const _errs2 = errors; if (typeof data0 !== "string" && data0 !== null) { - validate149.errors = [{ instancePath: instancePath + "/activeVersion", schemaPath: "#/properties/activeVersion/type", keyword: "type", params: { type: schema162.properties.activeVersion.type }, message: "must be string,null" }]; + validate159.errors = [{ instancePath: instancePath + "/activeVersion", schemaPath: "#/properties/activeVersion/type", keyword: "type", params: { type: schema179.properties.activeVersion.type }, message: "must be string,null" }]; return false; } var valid0 = _errs2 === errors; @@ -18435,7 +19180,7 @@ function validate149(data, { instancePath = "", parentData, parentDataProperty, let data1 = data.defaultVersion; const _errs4 = errors; if (typeof data1 !== "string" && data1 !== null) { - validate149.errors = [{ instancePath: instancePath + "/defaultVersion", schemaPath: "#/properties/defaultVersion/type", keyword: "type", params: { type: schema162.properties.defaultVersion.type }, message: "must be string,null" }]; + validate159.errors = [{ instancePath: instancePath + "/defaultVersion", schemaPath: "#/properties/defaultVersion/type", keyword: "type", params: { type: schema179.properties.defaultVersion.type }, message: "must be string,null" }]; return false; } var valid0 = _errs4 === errors; @@ -18447,17 +19192,17 @@ function validate149(data, { instancePath = "", parentData, parentDataProperty, let data2 = data.installedCount; const _errs6 = errors; if (!(typeof data2 == "number" && (!(data2 % 1) && !isNaN(data2)) && isFinite(data2))) { - validate149.errors = [{ instancePath: instancePath + "/installedCount", schemaPath: "#/properties/installedCount/type", keyword: "type", params: { type: "integer" }, message: "must be integer" }]; + validate159.errors = [{ instancePath: instancePath + "/installedCount", schemaPath: "#/properties/installedCount/type", keyword: "type", params: { type: "integer" }, message: "must be integer" }]; return false; } if (errors === _errs6) { if (typeof data2 == "number" && isFinite(data2)) { if (data2 > 9007199254740991 || isNaN(data2)) { - validate149.errors = [{ instancePath: instancePath + "/installedCount", schemaPath: "#/properties/installedCount/maximum", keyword: "maximum", params: { comparison: "<=", limit: 9007199254740991 }, message: "must be <= 9007199254740991" }]; + validate159.errors = [{ instancePath: instancePath + "/installedCount", schemaPath: "#/properties/installedCount/maximum", keyword: "maximum", params: { comparison: "<=", limit: 9007199254740991 }, message: "must be <= 9007199254740991" }]; return false; } else { if (data2 < 0 || isNaN(data2)) { - validate149.errors = [{ instancePath: instancePath + "/installedCount", schemaPath: "#/properties/installedCount/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; + validate159.errors = [{ instancePath: instancePath + "/installedCount", schemaPath: "#/properties/installedCount/minimum", keyword: "minimum", params: { comparison: ">=", limit: 0 }, message: "must be >= 0" }]; return false; } } @@ -18475,8 +19220,8 @@ function validate149(data, { instancePath = "", parentData, parentDataProperty, if (data3 && typeof data3 == "object" && !Array.isArray(data3)) { for (const key1 in data3) { const _errs11 = errors; - if (!validate150(data3[key1], { instancePath: instancePath + "/versions/" + key1.replace(/~/g, "~0").replace(/\//g, "~1"), parentData: data3, parentDataProperty: key1, rootData })) { - vErrors = vErrors === null ? validate150.errors : vErrors.concat(validate150.errors); + if (!validate160(data3[key1], { instancePath: instancePath + "/versions/" + key1.replace(/~/g, "~0").replace(/\//g, "~1"), parentData: data3, parentDataProperty: key1, rootData })) { + vErrors = vErrors === null ? validate160.errors : vErrors.concat(validate160.errors); errors = vErrors.length; } var valid1 = _errs11 === errors; @@ -18485,7 +19230,7 @@ function validate149(data, { instancePath = "", parentData, parentDataProperty, } } } else { - validate149.errors = [{ instancePath: instancePath + "/versions", schemaPath: "#/properties/versions/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate159.errors = [{ instancePath: instancePath + "/versions", schemaPath: "#/properties/versions/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } @@ -18499,27 +19244,27 @@ function validate149(data, { instancePath = "", parentData, parentDataProperty, } } } else { - validate149.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate159.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate149.errors = vErrors; + validate159.errors = vErrors; return errors === 0; } -function validate148(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { +function validate158(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) { let vErrors = null; let errors = 0; if (errors === 0) { if (data && typeof data == "object" && !Array.isArray(data)) { let missing0; if (data.success === void 0 && (missing0 = "success") || data.status === void 0 && (missing0 = "status")) { - validate148.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; + validate158.errors = [{ instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: missing0 }, message: "must have required property '" + missing0 + "'" }]; return false; } else { const _errs1 = errors; for (const key0 in data) { if (!(key0 === "status" || key0 === "success")) { - validate148.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; + validate158.errors = [{ instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" }]; return false; break; } @@ -18527,8 +19272,8 @@ function validate148(data, { instancePath = "", parentData, parentDataProperty, if (_errs1 === errors) { if (data.status !== void 0) { const _errs2 = errors; - if (!validate149(data.status, { instancePath: instancePath + "/status", parentData: data, parentDataProperty: "status", rootData })) { - vErrors = vErrors === null ? validate149.errors : vErrors.concat(validate149.errors); + if (!validate159(data.status, { instancePath: instancePath + "/status", parentData: data, parentDataProperty: "status", rootData })) { + vErrors = vErrors === null ? validate159.errors : vErrors.concat(validate159.errors); errors = vErrors.length; } var valid0 = _errs2 === errors; @@ -18540,11 +19285,11 @@ function validate148(data, { instancePath = "", parentData, parentDataProperty, let data1 = data.success; const _errs3 = errors; if (typeof data1 !== "boolean") { - validate148.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; + validate158.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" }]; return false; } if (true !== data1) { - validate148.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/const", keyword: "const", params: { allowedValue: true }, message: "must be equal to constant" }]; + validate158.errors = [{ instancePath: instancePath + "/success", schemaPath: "#/properties/success/const", keyword: "const", params: { allowedValue: true }, message: "must be equal to constant" }]; return false; } var valid0 = _errs3 === errors; @@ -18555,11 +19300,11 @@ function validate148(data, { instancePath = "", parentData, parentDataProperty, } } } else { - validate148.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; + validate158.errors = [{ instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" }]; return false; } } - validate148.errors = vErrors; + validate158.errors = vErrors; return errors === 0; } export { @@ -18587,6 +19332,7 @@ export { validateGetReleaseDependenciesOutcome, validateGetReleaseDependenciesParams, validateGetTorchPreviewReportParams, + validateGetTorchReleaseOptionsParams, validateGetTorchRuntimeProbeParams, validateGithubCacheStatusOutcome, validateHfDownloadDetailsOutcome, @@ -18623,6 +19369,13 @@ export { validateSupportedQuantTypesOutcome, validateSwitchVersionOutcome, validateSwitchVersionParams, + validateTorchDriverAvailability, + validateTorchGpuVendor, + validateTorchReleaseCombination, + validateTorchReleaseDriverStatus, + validateTorchReleaseOptionsOutcome, + validateTorchReleaseOptionsStatus, + validateTorchReleaseRecommendation, validateTorchRuntimePreview, validateTorchRuntimePreviewArtifact, validateTorchRuntimePreviewOutcome, diff --git a/electron/src/preload.ts b/electron/src/preload.ts index e00241c73..349656c27 100644 --- a/electron/src/preload.ts +++ b/electron/src/preload.ts @@ -67,6 +67,8 @@ import { decodeSetDefaultVersionParams, decodeInstallVersionOutcome, decodeInstallVersionParams, + decodeGetTorchReleaseOptionsParams, + decodeTorchReleaseOptionsOutcome, decodePreviewTorchRuntimeParams, decodeTorchRuntimePreviewOutcome, decodeGetTorchRuntimeProbeParams, @@ -374,6 +376,9 @@ function validateTorchOptions(value: unknown): unknown { const preset = result['preset']; if (!Array.isArray(result['builds']) || !result['builds'].every((item) => typeof item === 'string') || !Array.isArray(result['adapters']) || !result['adapters'].every((item) => typeof item === 'string') + || typeof result['bundledPresetAvailable'] !== 'boolean' + || !['none', 'flux2'].includes(String(result['defaultAdapter'])) + || !result['adapters'].some((item) => item === result['defaultAdapter']) || !Array.isArray(result['pythons']) || !result['pythons'].every((item) => isRecord(item) && typeof item['id'] === 'string' && typeof item['label'] === 'string') || !Array.isArray(result['installed']) || !result['installed'].every((item) => isRecord(item) @@ -644,6 +649,10 @@ const electronAPI = { return validatedApiCall('install_version', decodeInstallVersionOutcome, params); }, get_torch_runtime_options: async () => validateTorchOptions(await apiCall('get_torch_runtime_options')), + get_torch_release_options: (tag: string) => { + const params = requireDecoded(decodeGetTorchReleaseOptionsParams({ tag }), 'get_torch_release_options request'); + return validatedApiCall('get_torch_release_options', decodeTorchReleaseOptionsOutcome, params); + }, preview_torch_runtime: async (request: { tag: string; build: string; python: string; adapter: string }) => { const params = requireDecoded(decodePreviewTorchRuntimeParams(request), 'preview_torch_runtime request'); return validatedApiCall('preview_torch_runtime', decodeTorchRuntimePreviewOutcome, params); diff --git a/electron/src/python-bridge.ts b/electron/src/python-bridge.ts index b3ede04f3..bcebda8d3 100644 --- a/electron/src/python-bridge.ts +++ b/electron/src/python-bridge.ts @@ -52,9 +52,14 @@ interface RPCResponse { } export function rpcRequestTimeoutMs(method: string): number { - if (method === 'preview_torch_runtime') return 195_000; + // Managed Python may need a uv bootstrap, interpreter install, index scan, + // and several wheel previews before the RPC returns any bytes. Allow these + // operations 15 minutes while keeping a finite HTTP socket deadline. + if (method === 'get_torch_runtime_options' + || method === 'get_torch_release_options' + || method === 'preview_torch_runtime' + || method === 'find_torch_alternatives') return 900_000; if (method === 'trial_torch_runtime') return 90_000; - if (method === 'find_torch_alternatives') return 75_000; return 60_000; } @@ -306,6 +311,7 @@ export class PythonBridge { private isShuttingDown = false; private healthCheckTimer: BridgeTimer | null = null; private restartTimer: BridgeTimer | null = null; + private pendingRpcCalls = new Set<() => void>(); private modelLibraryUpdateStream: NamedSseStreamOwner; private modelDownloadUpdateStream: NamedSseStreamOwner; private runtimeProfileUpdateStream: NamedSseStreamOwner; @@ -572,6 +578,7 @@ export class PythonBridge { this.stopRuntimeProfileUpdateStream(); this.stopServingStatusUpdateStream(); this.stopStatusTelemetryUpdateStream(); + for (const cancel of [...this.pendingRpcCalls]) cancel(); if (!this.process) { return; @@ -722,6 +729,9 @@ export class PythonBridge { * Make an RPC call to the backend */ async call(method: string, params: Record): Promise { + if (this.isShuttingDown && method !== 'shutdown') { + throw new Error('Backend bridge stopping'); + } if (!this.process) { throw new Error('Backend bridge not running'); } @@ -733,6 +743,21 @@ export class PythonBridge { params, id: Date.now(), }); + const requestTimeoutMs = rpcRequestTimeoutMs(method); + let deadline: BridgeTimer | null = null; + let settled = false; + let cancelPending: (() => void) | null = null; + const finish = (error: Error | null, result?: unknown): void => { + if (settled) return; + settled = true; + if (cancelPending) this.pendingRpcCalls.delete(cancelPending); + if (deadline !== null) { + this.timerController.clearTimeout(deadline); + deadline = null; + } + if (error) reject(error); + else resolve(result); + }; const options: http.RequestOptions = { hostname: '127.0.0.1', @@ -743,7 +768,7 @@ export class PythonBridge { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(requestBody), }, - timeout: rpcRequestTimeoutMs(method), + timeout: requestTimeoutMs, }; const req = http.request(options, (res) => { @@ -761,27 +786,51 @@ export class PythonBridge { const errorMessage = typeof response.error === 'string' ? response.error : response.error.message || JSON.stringify(response.error); - reject(new Error(errorMessage)); + finish(new Error(errorMessage)); } else { - resolve(response.result); + finish(null, response.result); } } catch { - reject(new Error(`Invalid JSON response: ${data}`)); + finish(new Error(`Invalid JSON response: ${data}`)); } }); + res.on('error', (error) => { + finish(new Error(`RPC response failed: ${error.message}`)); + }); + res.on('aborted', () => { + finish(new Error('RPC response aborted')); + }); }); req.on('error', (error) => { - reject(new Error(`RPC request failed: ${error.message}`)); + finish(new Error(`RPC request failed: ${error.message}`)); }); req.on('timeout', () => { + if (settled) return; + finish(new Error('RPC request timeout')); req.destroy(); - reject(new Error('RPC request timeout')); }); - req.write(requestBody); - req.end(); + cancelPending = () => { + if (settled) return; + finish(new Error('Backend bridge stopped')); + req.destroy(); + }; + this.pendingRpcCalls.add(cancelPending); + deadline = this.timerController.setTimeout(() => { + if (settled) return; + finish(new Error('RPC request timeout')); + req.destroy(); + }, requestTimeoutMs); + + try { + req.write(requestBody); + req.end(); + } catch (error) { + finish(error instanceof Error ? error : new Error(String(error))); + req.destroy(); + } }); } diff --git a/electron/src/rpc-method-registry.ts b/electron/src/rpc-method-registry.ts index bed94c136..87151f8dd 100644 --- a/electron/src/rpc-method-registry.ts +++ b/electron/src/rpc-method-registry.ts @@ -44,6 +44,7 @@ export const RPC_METHOD_REGISTRY = { 'switch_version', 'install_version', 'get_torch_runtime_options', + 'get_torch_release_options', 'preview_torch_runtime', 'get_torch_preview_report', 'get_torch_runtime_probe', diff --git a/electron/tests/ipc-validation.test.mjs b/electron/tests/ipc-validation.test.mjs index f117090d4..e85490511 100644 --- a/electron/tests/ipc-validation.test.mjs +++ b/electron/tests/ipc-validation.test.mjs @@ -19,6 +19,14 @@ test('RPC method registry has stable unique method names', () => { assert.ok(ALLOWED_RPC_METHODS.includes('torch_configure')); }); +test('Torch release options request reaches the registered RPC method', () => { + assert.ok(ALLOWED_RPC_METHODS.includes('get_torch_release_options')); + assert.deepEqual(validateApiCallPayload('get_torch_release_options', { tag: 'v2.14.0' }), { + method: 'get_torch_release_options', + params: { tag: 'v2.14.0' }, + }); +}); + test('backend setup IPC validates exact backend and retry identity before forwarding', () => { const token = '2e038924-e0e3-4266-95ef-f7a02997b7b6'; for (const backend of ['python_conversion', 'llama_cpp', 'nvfp4', 'sherry']) { diff --git a/electron/tests/main-lifecycle.test.mjs b/electron/tests/main-lifecycle.test.mjs index d526530e7..7e295bc0e 100644 --- a/electron/tests/main-lifecycle.test.mjs +++ b/electron/tests/main-lifecycle.test.mjs @@ -184,7 +184,11 @@ test('failed backend startup stops its pending restart before application cleanu } assert.equal(runtime.requests.length, 1, 'bootstrap must not start another backend request'); runtime.children[0].emit('exit', 1, null); - assert.equal(runtime.timers.size, 1, 'crash has a pending restart before startup fails'); + assert.deepEqual( + [...runtime.timers].map((timer) => timer.delayMs).sort((a, b) => a - b), + [1_000, 60_000], + 'crash has a pending restart and an outstanding health RPC deadline' + ); runtime.expireStartup(); runtime.requests[0].emit('error', new Error('connection refused')); await setImmediate(); diff --git a/electron/tests/packaging-hook.test.mjs b/electron/tests/packaging-hook.test.mjs index 9a19f03cc..be2cb84ab 100644 --- a/electron/tests/packaging-hook.test.mjs +++ b/electron/tests/packaging-hook.test.mjs @@ -3,14 +3,14 @@ import { spawnSync } from 'node:child_process'; import { fileURLToPath } from 'node:url'; import test from 'node:test'; -test('attribution hook loads when electron is the detected workspace root', () => { +test('attribution hook accepts Electron Builder beforePack context', () => { const result = spawnSync(process.execPath, ['-e', ` const { createRequire } = require('node:module'); const builderRequire = createRequire(require.resolve('electron-builder')); const { resolveFunction } = builderRequire('app-builder-lib/out/util/resolve'); const { build } = require('./package.json'); resolveFunction('commonjs', build.beforePack, 'beforePack', process.cwd()) - .then(hook => hook()) + .then(hook => hook({ appOutDir: '/tmp/pumas-package', electronPlatformName: 'linux', arch: 'x64' })) .catch(error => { console.error(error); process.exitCode = 1; }); `], { cwd: fileURLToPath(new URL('..', import.meta.url)), encoding: 'utf8' }); assert.equal(result.status, 0, result.stderr); diff --git a/electron/tests/preload-rpc-contract.test.mjs b/electron/tests/preload-rpc-contract.test.mjs index 77754a7a7..69bf98324 100644 --- a/electron/tests/preload-rpc-contract.test.mjs +++ b/electron/tests/preload-rpc-contract.test.mjs @@ -11,6 +11,32 @@ import { RPC_METHOD_REGISTRY } from '../dist/rpc-method-registry.js'; const DEFERRED_UNREGISTERED_PRELOAD_METHODS = []; +test('Torch runtime options require manager preset capability and an offered default adapter', async () => { + const harness = loadCompiledPreload(); + const options = { + builds: ['cpu'], pythons: [{ id: 'python3.12', label: 'Python 3.12' }], + adapters: ['none', 'flux2'], bundledPresetAvailable: true, defaultAdapter: 'flux2', + preset: { tag: 'v2.9.1', build: 'cu130', python: 'python3.12', adapter: 'bundled' }, + installed: [], + }; + for (const valid of [options, { ...options, adapters: ['none'], bundledPresetAvailable: false, defaultAdapter: 'none' }]) { + harness.respondWith(valid); + assert.deepEqual(toPlainValue(await harness.api.get_torch_runtime_options()), valid); + } + for (const invalid of [ + { ...options, bundledPresetAvailable: undefined }, + { ...options, bundledPresetAvailable: 'false' }, + { ...options, defaultAdapter: undefined }, + { ...options, defaultAdapter: 'bundled' }, + { ...options, adapters: ['none'], defaultAdapter: 'flux2' }, + ]) { + harness.respondWith(invalid); + await assert.rejects(harness.api.get_torch_runtime_options(), { + name: 'TypeError', message: 'Invalid get_torch_runtime_options response', + }); + } +}); + test('Torch preview decodes resolved and all typed rejection outcomes without reading message wording', async () => { const harness = loadCompiledPreload(); const request = { tag: 'v2.10.0', build: 'cpu', python: 'python3.12', adapter: 'none' }; diff --git a/electron/tests/python-bridge.test.mjs b/electron/tests/python-bridge.test.mjs index 57747684b..30680b92b 100644 --- a/electron/tests/python-bridge.test.mjs +++ b/electron/tests/python-bridge.test.mjs @@ -1,7 +1,8 @@ import assert from 'node:assert/strict'; import test from 'node:test'; -import { EventEmitter } from 'node:events'; +import { EventEmitter, once } from 'node:events'; import { readFileSync } from 'node:fs'; +import { createServer } from 'node:http'; import { createRequire } from 'node:module'; import { runInNewContext } from 'node:vm'; import { @@ -14,19 +15,21 @@ import { parseStatusTelemetryUpdateSseChunk, } from '../dist/python-bridge.js'; -test('Torch artifact preview has time to complete while other RPC calls keep the normal timeout', () => { - assert.equal(rpcRequestTimeoutMs('preview_torch_runtime'), 195_000); +test('managed-Python Torch requests have finite bridge deadlines', () => { + assert.equal(rpcRequestTimeoutMs('get_torch_release_options'), 900_000); + assert.equal(rpcRequestTimeoutMs('preview_torch_runtime'), 900_000); assert.equal(rpcRequestTimeoutMs('trial_torch_runtime'), 90_000); - assert.equal(rpcRequestTimeoutMs('find_torch_alternatives'), 75_000); + assert.equal(rpcRequestTimeoutMs('find_torch_alternatives'), 900_000); assert.equal(rpcRequestTimeoutMs('install_version'), 60_000); - assert.equal(rpcRequestTimeoutMs('get_torch_runtime_options'), 60_000); + assert.equal(rpcRequestTimeoutMs('get_torch_runtime_options'), 900_000); }); -test('bridge applies the longer timeout only to Torch preview HTTP requests', async () => { +test('bridge applies method-specific socket deadlines to Torch requests', async () => { const bridgeUrl = new URL('../dist/python-bridge.js', import.meta.url); const requireBridge = createRequire(bridgeUrl); const exports = {}; const seen = []; + const timers = new FakeTimerController(); runInNewContext(readFileSync(bridgeUrl, 'utf8'), { exports, Buffer, @@ -54,14 +57,17 @@ test('bridge applies the longer timeout only to Torch preview HTTP requests', as }); const bridge = new exports.PythonBridge({ port: 49152, debug: false, rustBinaryPath: process.execPath, launcherRoot: process.cwd(), + timerController: timers, }); bridge.process = {}; + await bridge.call('get_torch_release_options', { tag: 'v2.10.0' }); await bridge.call('preview_torch_runtime', { tag: 'v2.10.0' }); await bridge.call('trial_torch_runtime', { tag: 'v2.10.0', profileId: 'torch-profile' }); await bridge.call('find_torch_alternatives', { tag: 'v2.10.0', build: 'cpu', python: 'python3.12' }); await bridge.call('get_torch_runtime_options', {}); - assert.deepEqual(seen.map((request) => request.timeout), [195_000, 90_000, 75_000, 60_000]); + assert.deepEqual(seen.map((request) => request.timeout), [900_000, 900_000, 90_000, 900_000, 900_000]); + assert.equal(timers.pendingCount(), 0); }); class FakeTimerController { @@ -95,6 +101,109 @@ class FakeTimerController { } } +test('bridge wall-clock deadline closes a connected response that keeps sending bytes', { timeout: 5_000 }, async () => { + const timers = new FakeTimerController(); + let streamed; + const streaming = new Promise((resolve) => { streamed = resolve; }); + let responseClosed; + const closed = new Promise((resolve) => { responseClosed = resolve; }); + let chunksSent = 0; + const server = createServer((_request, response) => { + response.writeHead(200, { 'Content-Type': 'application/json' }); + response.write('{"result":'); + const interval = setInterval(() => { + response.write(' '); + chunksSent += 1; + if (chunksSent === 2) streamed(); + }, 5); + response.on('close', () => { + clearInterval(interval); + responseClosed(); + }); + }); + server.listen(0, '127.0.0.1'); + await once(server, 'listening'); + const address = server.address(); + assert.ok(address && typeof address !== 'string'); + const bridge = new PythonBridge({ + port: address.port, debug: false, rustBinaryPath: process.execPath, + launcherRoot: process.cwd(), timerController: timers, + }); + bridge.port = address.port; + bridge.process = {}; + + try { + const call = bridge.call('preview_torch_runtime', { tag: 'v2.10.0' }); + void call.catch(() => {}); + await streaming; + assert.equal(chunksSent >= 2, true); + assert.equal(timers.nextDelay(), 900_000); + await timers.runNext(); + await assert.rejects(call, /RPC request timeout/); + await closed; + assert.equal(timers.pendingCount(), 0); + } finally { + server.closeAllConnections(); + await new Promise((resolve) => server.close(resolve)); + } +}); + +test('stop cancels outstanding RPC calls and releases their deadlines', async () => { + const bridgeUrl = new URL('../dist/python-bridge.js', import.meta.url); + const requireBridge = createRequire(bridgeUrl); + const exports = {}; + const timers = new FakeTimerController(); + const requests = []; + let destroyed = 0; + runInNewContext(readFileSync(bridgeUrl, 'utf8'), { + exports, + Buffer, + process: { env: {} }, + setTimeout, + clearTimeout, + require(specifier) { + if (specifier === 'electron-log') return { info() {}, warn() {}, error() {} }; + if (specifier === 'http') return { + request() { + const request = new EventEmitter(); + request.write = () => {}; + request.end = () => { + if (requests.length === 2) request.emit('error', new Error('shutdown unavailable')); + }; + request.destroy = () => { + destroyed += 1; + request.emit('error', new Error('aborted')); + }; + requests.push(request); + return request; + }, + }; + return requireBridge(specifier); + }, + }); + const bridge = new exports.PythonBridge({ + port: 49152, debug: false, rustBinaryPath: process.execPath, + launcherRoot: process.cwd(), timerController: timers, + }); + bridge.process = { + kill() {}, + once(_event, callback) { queueMicrotask(callback); }, + }; + + const pending = bridge.call('preview_torch_runtime', { tag: 'v2.10.0' }); + assert.equal(timers.nextDelay(), 900_000); + const stopped = bridge.stop(); + const late = bridge.call('preview_torch_runtime', { tag: 'v2.10.0' }); + void late.catch(() => {}); + assert.equal(requests.length, 2, 'new RPC calls are rejected after stop begins'); + await assert.rejects(late, /Backend bridge stopping/); + await assert.rejects(pending, /Backend bridge stopped/); + await stopped; + assert.equal(requests.length, 2, 'shutdown is attempted after cancelling pending calls'); + assert.equal(destroyed, 1); + assert.equal(timers.pendingCount(), 0); +}); + function createBridge(timerController) { return new PythonBridge({ port: 49152, diff --git a/frontend/src/components/AppIndicator.test.tsx b/frontend/src/components/AppIndicator.test.tsx index 794965cc9..88302be75 100644 --- a/frontend/src/components/AppIndicator.test.tsx +++ b/frontend/src/components/AppIndicator.test.tsx @@ -26,6 +26,21 @@ afterEach(() => { describe('AppIndicator rendering and states', () => { describe('Rendering', () => { + it('does not offer legacy launch or stop actions for Torch', () => { + const onLaunch = vi.fn(); + const onStop = vi.fn(); + const { rerender } = render( + + ); + expect(screen.queryByTestId('app-indicator')).not.toBeInTheDocument(); + expect(screen.queryByRole('button', { name: 'Launch torch' })).not.toBeInTheDocument(); + + rerender(); + expect(screen.queryByRole('button', { name: 'Stop torch' })).not.toBeInTheDocument(); + expect(onLaunch).not.toHaveBeenCalled(); + expect(onStop).not.toHaveBeenCalled(); + }); + it('should render without crashing', () => { const { container } = render(); expect(container).toBeTruthy(); diff --git a/frontend/src/components/AppIndicator.tsx b/frontend/src/components/AppIndicator.tsx index 77e388343..81a086e95 100644 --- a/frontend/src/components/AppIndicator.tsx +++ b/frontend/src/components/AppIndicator.tsx @@ -38,7 +38,7 @@ export const AppIndicator: React.FC = ({ // Spinner animation for running state useEffect(() => { - if (state === 'running') { + if (appId !== 'torch' && state === 'running') { logger.debug(`Starting spinner animation for app: ${appId}`); const interval = setInterval(() => { setSpinnerFrame(prev => (prev + 1) % spinnerFrames.length); @@ -53,7 +53,7 @@ export const AppIndicator: React.FC = ({ // Error flash animation useEffect(() => { - if (launchError) { + if (appId !== 'torch' && launchError) { logger.warn(`Launch error detected for app: ${appId}, starting error flash animation`); const interval = setInterval(() => { setErrorFlash(prev => !prev); @@ -68,6 +68,8 @@ export const AppIndicator: React.FC = ({ return undefined; }, [launchError, appId]); + // Torch launch and stop are owned by explicit runtime profiles in TorchPanel. + if (appId === 'torch') return null; const handleClick = (e: React.MouseEvent) => { e.stopPropagation(); diff --git a/frontend/src/components/TorchDesktopProjection.test.tsx b/frontend/src/components/TorchDesktopProjection.test.tsx index 333d950a8..063a8e5cf 100644 --- a/frontend/src/components/TorchDesktopProjection.test.tsx +++ b/frontend/src/components/TorchDesktopProjection.test.tsx @@ -81,12 +81,28 @@ describe('Torch desktop projection', () => { builds: ['cpu', 'cu130'], pythons: [{ id: 'python3.12', label: 'Python 3.12' }], adapters: ['none', 'flux2'], + bundledPresetAvailable: true, defaultAdapter: 'flux2', preset: { tag: installedTag, build: 'cu130', python: 'python3.12', adapter: 'bundled' }, installed: [ { tag: installedTag, build: 'cu130', python: 'python3.12', adapter: 'bundled', qualification: 'qualified' }, { tag: releaseTag, build: 'cpu', python: 'python3.12', adapter: 'flux2', qualification: 'unverified' }, ], }); + const getReleaseOptions = vi.fn().mockResolvedValue({ + tag: releaseTag, + status: 'matches', + completeScan: true, + checkedChannels: ['cpu', 'cu130'], + combinations: [ + { build: 'cpu', python: 'python3.12', wheelUrl: 'https://download.pytorch.org/whl/cpu/torch.whl' }, + { build: 'cu130', python: 'python3.12', wheelUrl: 'https://download.pytorch.org/whl/cu130/torch.whl' }, + ], + issues: [], + detectedGpuVendors: [], + driverStatus: { nvidia: 'not_present', amd: 'not_present' }, + recommended: { build: 'cpu', python: 'python3.12' }, + recommendationNote: null, + }); const preview = vi.fn().mockResolvedValue({ status: 'resolved', preview: { previewId, expiresInSeconds: 300, tag: releaseTag, build: 'cpu', python: 'python3.12', adapter: 'flux2', @@ -107,6 +123,7 @@ describe('Torch desktop projection', () => { const unconditionalStop = vi.fn(); vi.stubGlobal('electronAPI', { get_torch_runtime_options: getOptions, + get_torch_release_options: getReleaseOptions, preview_torch_runtime: preview, get_torch_runtime_probe: probe, get_runtime_profiles_snapshot: vi.fn().mockResolvedValue({ success: true, snapshot: { profiles: [ @@ -130,10 +147,11 @@ describe('Torch desktop projection', () => { if (!installButton) throw new TypeError('Expected install button'); fireEvent.click(installButton); expect(installVersion).not.toHaveBeenCalled(); - fireEvent.change(await screen.findByRole('combobox', { name: 'Image adapter' }), { target: { value: 'flux2' } }); + expect(await screen.findByText('Pumas image dependencies are selected by Pumas for its FLUX.2 path; they are not part of upstream Torch.')).toBeInTheDocument(); fireEvent.click(screen.getByRole('button', { name: 'Check selected combination' })); await waitFor(() => expect(screen.getByText('SHA-256: abc123')).toBeInTheDocument()); - expect(preview).toHaveBeenCalledWith({ tag: releaseTag, build: 'cpu', python: 'python3.12', adapter: 'flux2' }); + expect(preview).toHaveBeenCalledWith({ tag: releaseTag, build: 'cpu', python: 'auto', adapter: 'flux2' }); + expect(screen.getByText('Selected Python: python3.12')).toBeInTheDocument(); fireEvent.click(screen.getByRole('button', { name: 'Install reviewed artifacts' })); await waitFor(() => expect(installVersion).toHaveBeenCalledWith(releaseTag, previewId)); expect(switchVersion).not.toHaveBeenCalled(); diff --git a/frontend/src/components/TorchInstallPreview.test.tsx b/frontend/src/components/TorchInstallPreview.test.tsx index 85dea0908..90f21e5bf 100644 --- a/frontend/src/components/TorchInstallPreview.test.tsx +++ b/frontend/src/components/TorchInstallPreview.test.tsx @@ -1,180 +1,390 @@ -import { fireEvent, render, screen, waitFor } from '@testing-library/react'; -import { describe, expect, it, vi } from 'vitest'; +import { fireEvent, render, screen, waitFor, within } from '@testing-library/react'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; import { TorchInstallPreview } from './TorchInstallPreview'; -import type { TorchAlternativesOutcome, TorchRuntimeOptions, TorchRuntimePreview, TorchRuntimePreviewOutcome, TorchRuntimePreviewRequest } from '../types/torch-install'; +import type { + TorchAlternativesOutcome, + TorchReleaseOptionsOutcome, + TorchRuntimeOptions, + TorchRuntimePreviewOutcome, + TorchRuntimePreviewRequest, +} from '../types/torch-install'; -const getOptions = vi.fn<() => Promise>(); +const getReleaseOptions = vi.fn<(tag: string) => Promise>(); +const getPresetOptions = vi.fn<() => Promise>(); const getPreview = vi.fn<(request: TorchRuntimePreviewRequest) => Promise>(); const getAlternatives = vi.fn<(tag: string, build: string, python: string) => Promise>(); vi.mock('../api/adapter', () => ({ api: { - get_torch_runtime_options: () => getOptions(), + get_torch_release_options: (tag: string) => getReleaseOptions(tag), + get_torch_runtime_options: () => getPresetOptions(), preview_torch_runtime: (request: TorchRuntimePreviewRequest) => getPreview(request), find_torch_alternatives: (tag: string, build: string, python: string) => getAlternatives(tag, build, python), }, })); -const options = { - builds: ['cpu', 'cu130'], - pythons: [{ id: 'python3.12', label: 'Python 3.12 at /usr/bin/python3.12' }], - adapters: ['none', 'flux2'], - installed: [], +const release: TorchReleaseOptionsOutcome = { + tag: 'v2.14.0', status: 'matches', completeScan: true, + checkedChannels: ['cpu', 'cu130'], + combinations: [ + { build: 'cpu', python: 'python3.11', wheelUrl: 'https://download.pytorch.org/whl/cpu/torch.whl' }, + { build: 'cu130', python: 'python3.12', wheelUrl: 'https://download.pytorch.org/whl/cu130/torch.whl' }, + ], + issues: [], detectedGpuVendors: ['nvidia', 'intel'], + driverStatus: { nvidia: 'available', amd: 'not_present' }, + recommended: { build: 'cu130', python: 'python3.12' }, recommendationNote: null, +}; +const preset: TorchRuntimeOptions = { + builds: ['cpu', 'cu130', 'cu134', 'rocm'], + pythons: [{ id: 'python3.12', label: 'Python 3.12' }], + adapters: ['none', 'flux2'], installed: [], + bundledPresetAvailable: true, defaultAdapter: 'none', preset: { tag: 'v2.9.1', build: 'cu130', python: 'python3.12', adapter: 'bundled' }, }; -const resolved = (preview: TorchRuntimePreview): TorchRuntimePreviewOutcome => ({ status: 'resolved', preview }); +beforeEach(() => { + vi.clearAllMocks(); + getReleaseOptions.mockResolvedValue(release); + getPresetOptions.mockResolvedValue(preset); + getPreview.mockImplementation(async (request) => ({ + status: 'resolved', + preview: { + ...request, previewId: 'review-1', expiresInSeconds: 300, + python: request.python === 'auto' ? (request.build === 'cpu' ? 'python3.11' : 'python3.12') : request.python, + qualification: request.adapter === 'bundled' ? 'qualified' : 'unverified', + artifacts: [{ name: 'torch', version: '2.14.0', url: 'https://download.pytorch.org/torch.whl', sha256: 'abc123' }], + }, + })); +}); describe('TorchInstallPreview', () => { - it('shows exact artifacts and installs only the reviewed selection', async () => { - getOptions.mockResolvedValue(options); - getPreview.mockResolvedValue(resolved({ - previewId: 'review-1', expiresInSeconds: 300, tag: 'v2.10.0', build: 'cpu', python: 'python3.12', - adapter: 'none', qualification: 'unverified', - artifacts: [{ name: 'torch', version: '2.10.0', url: 'https://download.pytorch.org/whl/cpu/torch.whl', sha256: 'abc123' }], - })); + it('retries runtime choices independently of a successful discovery and clears the error', async () => { + getPresetOptions.mockRejectedValueOnce(new Error('choices offline')); + render(); + expect(await screen.findByRole('alert')).toHaveTextContent('Torch runtime choices unavailable: choices offline'); + expect(screen.getByRole('alert')).not.toHaveTextContent('Probe inconclusive'); + fireEvent.click(screen.getByRole('button', { name: 'Retry Torch choices' })); + expect(await screen.findByText(/Recommended setup: cu130/)).toBeInTheDocument(); + expect(screen.queryByRole('alert')).not.toBeInTheDocument(); + expect(getPresetOptions).toHaveBeenCalledTimes(2); + }); + + it('uses the manager recommendation with core Torch and no required profile selectors', async () => { const onInstall = vi.fn(); - render(); + render(); - const install = screen.getByRole('button', { name: 'Install reviewed artifacts' }); - expect(install).toBeDisabled(); - expect(screen.getByText(/does not install Python/)).toBeInTheDocument(); - expect(screen.getByText(/Source compilation is a separate unsupported path/)).toBeInTheDocument(); - fireEvent.click(await screen.findByRole('button', { name: 'Check selected combination' })); - await waitFor(() => expect(screen.getByText('SHA-256: abc123')).toBeInTheDocument()); - expect(getPreview).toHaveBeenCalledWith({ tag: 'v2.10.0', build: 'cpu', python: 'python3.12', adapter: 'none' }); - expect(screen.getByText('URL: https://download.pytorch.org/whl/cpu/torch.whl')).toBeInTheDocument(); - expect(install).toBeEnabled(); + expect(await screen.findByText(/Recommended setup: cu130 · Python selected automatically · Core runtime only/)).toBeInTheDocument(); + expect(getReleaseOptions).toHaveBeenCalledWith('v2.14.0'); + expect(getPresetOptions).toHaveBeenCalledOnce(); + expect(screen.getByText('Advanced setup').closest('details')).not.toHaveAttribute('open'); + expect(screen.getByText(/Pumas installs a private Python version that matches the selected Torch release and its dependencies/i)).toBeInTheDocument(); + expect(screen.queryByRole('combobox', { name: 'Installed Python' })).not.toBeInTheDocument(); + expect(screen.queryByText(/install Python 3\.10–3\.13/i)).not.toBeInTheDocument(); + expect(screen.queryByText(/selected by Pumas for its FLUX.2 path/)).not.toBeInTheDocument(); - fireEvent.change(screen.getByRole('combobox', { name: 'Torch build' }), { target: { value: 'cu130' } }); - expect(install).toBeDisabled(); fireEvent.click(screen.getByRole('button', { name: 'Check selected combination' })); - await waitFor(() => expect(install).toBeDisabled()); - expect(onInstall).not.toHaveBeenCalled(); + await waitFor(() => expect(getPreview).toHaveBeenCalledWith({ tag: 'v2.14.0', build: 'cu130', python: 'auto', adapter: 'none' })); + expect(await screen.findByText('SHA-256: abc123')).toBeInTheDocument(); + expect(screen.getByText('Selected Python: python3.12')).toBeInTheDocument(); + fireEvent.click(screen.getByRole('button', { name: 'Install reviewed artifacts' })); + expect(onInstall).toHaveBeenCalledWith('review-1'); }); - it('locks the legacy preset and keeps an inconclusive probe from installing', async () => { - getOptions.mockResolvedValue(options); - getPreview.mockResolvedValue({ status: 'rejected', reason: 'network_inconclusive', message: 'index unreachable' }); - const onInstall = vi.fn(); - render(); + it('limits advanced build overrides to this release’s returned combinations', async () => { + render(); + fireEvent.click(await screen.findByText('Advanced setup')); + const build = screen.getByRole('combobox', { name: 'Torch build' }); + expect(within(build).getAllByRole('option').map((option) => option.textContent)).toEqual(['Choose a build', 'cpu', 'cu130']); + expect(within(build).queryByRole('option', { name: /cu134|rocm/i })).not.toBeInTheDocument(); + expect(screen.queryByRole('combobox', { name: 'Installed Python' })).not.toBeInTheDocument(); + fireEvent.change(build, { target: { value: 'cpu' } }); + fireEvent.click(screen.getByRole('button', { name: 'Check selected combination' })); + await waitFor(() => expect(getPreview).toHaveBeenCalledWith({ tag: 'v2.14.0', build: 'cpu', python: 'auto', adapter: 'none' })); + }); + + it('requires a deliberate advanced selection when no recommendation exists for a GPU-only release', async () => { + getReleaseOptions.mockResolvedValue({ + ...release, + checkedChannels: ['cu132'], + combinations: [{ build: 'cu132', python: 'python3.12', wheelUrl: 'https://download.pytorch.org/whl/cu132/torch.whl' }], + recommended: null, + recommendationNote: 'No GPU driver could be verified.', + }); + render(); - expect(await screen.findByRole('combobox', { name: 'Torch build' })).toBeDisabled(); - expect(screen.getByRole('combobox', { name: 'Installed Python' })).toBeDisabled(); + expect(await screen.findByText(/No setup was recommended. Open Advanced setup/)).toBeInTheDocument(); + expect(screen.getByRole('button', { name: 'Check selected combination' })).toBeDisabled(); + expect(getPreview).not.toHaveBeenCalled(); + fireEvent.click(screen.getByText('Advanced setup')); + const build = screen.getByRole('combobox', { name: 'Torch build' }); + expect(build).toHaveValue(''); + fireEvent.change(build, { target: { value: 'cu132' } }); fireEvent.click(screen.getByRole('button', { name: 'Check selected combination' })); - expect(await screen.findByRole('alert')).toHaveTextContent('Network inconclusive'); - expect(screen.getByRole('button', { name: 'Install fixed preset' })).toBeDisabled(); - expect(screen.queryByRole('button', { name: 'Find compatible alternatives' })).not.toBeInTheDocument(); - expect(onInstall).not.toHaveBeenCalled(); + await waitFor(() => expect(getPreview).toHaveBeenCalledWith({ tag: 'v2.14.0', build: 'cu132', python: 'auto', adapter: 'none' })); }); - it('offers the qualified preset and an unverified exact-wheel choice for the same release', async () => { - getOptions.mockResolvedValue(options); - getPreview.mockImplementation(async (request) => resolved({ - previewId: request.adapter === 'bundled' ? 'qualified-preset' : 'upstream-cpu', - expiresInSeconds: 300, - ...request, - qualification: request.adapter === 'bundled' ? 'qualified' : 'unverified', - artifacts: [], - })); + it('shows the manager’s driver caveat alongside a CPU recommendation', async () => { + getReleaseOptions.mockResolvedValue({ + ...release, + driverStatus: { ...release.driverStatus, nvidia: 'unavailable' }, + recommended: { build: 'cpu', python: 'python3.11' }, + recommendationNote: 'NVIDIA hardware was detected, but its driver could not be verified. CPU is recommended.', + }); + render(); + expect(await screen.findByText(/Recommended setup: cpu · Python selected automatically/)).toBeInTheDocument(); + expect(screen.getByText(/driver could not be verified. CPU is recommended/)).toBeInTheDocument(); + }); + + it('keeps Pumas FLUX.2 dependencies as an explicit advanced choice', async () => { + render(); + fireEvent.click(await screen.findByText('Advanced setup')); + fireEvent.change(screen.getByRole('combobox', { name: 'Dependency profile' }), { target: { value: 'flux2' } }); + expect(screen.getByText(/Recommended setup: cu130 · Python selected automatically · Pumas image dependencies/)).toBeInTheDocument(); + expect(screen.getByText(/selected by Pumas for its FLUX.2 path; they are not part of upstream Torch/)).toBeInTheDocument(); + fireEvent.click(screen.getByRole('button', { name: 'Check selected combination' })); + await waitFor(() => expect(getPreview).toHaveBeenCalledWith({ tag: 'v2.14.0', build: 'cu130', python: 'auto', adapter: 'flux2' })); + }); + + it('does not imply an incomplete discovery found no wheels', async () => { + getReleaseOptions.mockResolvedValue({ ...release, status: 'inconclusive', completeScan: false, combinations: [], recommended: null, issues: ['index timed out'] }); + render(); + expect(await screen.findByText(/Release discovery was inconclusive. Some official wheels may exist/)).toBeInTheDocument(); + expect(screen.getByText('index timed out')).toBeInTheDocument(); + expect(screen.getByRole('button', { name: 'Check selected combination' })).toBeDisabled(); + expect(screen.queryByText(/No official wheel matches were found/)).not.toBeInTheDocument(); + }); + + it('does not require a host Python selection before checking wheels', async () => { + getPresetOptions.mockResolvedValue({ ...preset, pythons: [], bundledPresetAvailable: false }); + render(); + + const check = await screen.findByRole('button', { name: 'Check selected combination' }); + expect(check).toBeEnabled(); + fireEvent.click(screen.getByText('Advanced setup')); + expect(screen.queryByRole('combobox', { name: 'Installed Python' })).not.toBeInTheDocument(); + expect(screen.queryByText(/Install.*CPython 3\.10–3\.13/i)).not.toBeInTheDocument(); + fireEvent.click(check); + await waitFor(() => expect(getPreview).toHaveBeenCalledWith({ tag: 'v2.14.0', build: 'cu130', python: 'auto', adapter: 'none' })); + }); + + it('keeps the qualified v2.9.1 bundled preset and an unverified upstream choice distinct', async () => { + getReleaseOptions.mockResolvedValue({ ...release, tag: 'v2.9.1' }); const onInstall = vi.fn(); render(); + const qualified = await screen.findByRole('button', { name: 'Qualified fixed preset' }); + expect(qualified).toHaveAttribute('aria-pressed', 'false'); + expect(screen.getByRole('button', { name: 'Other official wheels (unverified)' })).toHaveAttribute('aria-pressed', 'true'); + expect(screen.getByText('Advanced setup').closest('details')).not.toHaveAttribute('open'); + fireEvent.click(screen.getByRole('button', { name: 'Check selected combination' })); + await waitFor(() => expect(getPreview).toHaveBeenCalledWith({ tag: 'v2.9.1', build: 'cu130', python: 'auto', adapter: 'none' })); + expect(screen.getByRole('button', { name: 'Install reviewed artifacts' })).toBeEnabled(); - const presetChoice = await screen.findByRole('button', { name: 'Qualified fixed preset' }); - expect(presetChoice).toHaveAttribute('aria-pressed', 'true'); - expect(screen.getByRole('combobox', { name: 'Torch build' })).toBeDisabled(); + fireEvent.click(qualified); + expect(qualified).toHaveAttribute('aria-pressed', 'true'); fireEvent.click(screen.getByRole('button', { name: 'Check selected combination' })); - await waitFor(() => expect(getPreview).toHaveBeenCalledWith({ - tag: 'v2.9.1', build: 'cu130', python: 'python3.12', adapter: 'bundled', - })); + await waitFor(() => expect(getPreview).toHaveBeenLastCalledWith({ tag: 'v2.9.1', build: 'cu130', python: 'python3.12', adapter: 'bundled' })); fireEvent.click(screen.getByRole('button', { name: 'Install fixed preset' })); - expect(onInstall).toHaveBeenCalledWith('qualified-preset'); + expect(onInstall).toHaveBeenCalledWith('review-1'); fireEvent.click(screen.getByRole('button', { name: 'Other official wheels (unverified)' })); expect(screen.getByRole('button', { name: 'Install reviewed artifacts' })).toBeDisabled(); - expect(screen.getByRole('combobox', { name: 'Torch build' })).toBeEnabled(); - expect(screen.getByRole('combobox', { name: 'Image adapter' })).toBeEnabled(); - expect(screen.getByRole('combobox', { name: 'Image adapter' })).toHaveValue('none'); + expect(screen.queryByText(/Pumas image dependencies are selected by Pumas/)).not.toBeInTheDocument(); + fireEvent.click(screen.getByRole('button', { name: 'Check selected combination' })); + await waitFor(() => expect(getPreview).toHaveBeenLastCalledWith({ tag: 'v2.9.1', build: 'cu130', python: 'auto', adapter: 'none' })); + expect(await screen.findByText(/Artifact resolution is unverified/)).toBeInTheDocument(); + }); + + it('keeps the fixed preset available when upstream discovery fails', async () => { + getReleaseOptions.mockResolvedValue({ ...release, tag: 'v2.9.1' }); + getReleaseOptions.mockRejectedValueOnce(new Error('index timed out')); + const onInstall = vi.fn(); + render(); + + expect(await screen.findByRole('alert')).toHaveTextContent('Release discovery inconclusive: index timed out'); + const qualified = screen.getByRole('button', { name: 'Qualified fixed preset' }); + expect(qualified).toHaveAttribute('aria-pressed', 'false'); + expect(screen.getByRole('button', { name: 'Other official wheels (unverified)' })).toHaveAttribute('aria-pressed', 'true'); + expect(screen.getByRole('button', { name: 'Check selected combination' })).toBeDisabled(); + + fireEvent.click(qualified); + expect(screen.getByText(/Recommended setup: cu130 · python3.12 · bundled image dependencies \(fixed\)/)).toBeInTheDocument(); fireEvent.click(screen.getByRole('button', { name: 'Check selected combination' })); - await waitFor(() => expect(getPreview).toHaveBeenLastCalledWith({ - tag: 'v2.9.1', build: 'cpu', python: 'python3.12', adapter: 'none', + await waitFor(() => expect(getPreview).toHaveBeenCalledWith({ tag: 'v2.9.1', build: 'cu130', python: 'python3.12', adapter: 'bundled' })); + fireEvent.click(screen.getByRole('button', { name: 'Install fixed preset' })); + expect(onInstall).toHaveBeenCalledWith('review-1'); + + fireEvent.click(screen.getByRole('button', { name: 'Other official wheels (unverified)' })); + expect(screen.getByRole('alert')).toHaveTextContent('Release discovery inconclusive: index timed out'); + fireEvent.click(screen.getByRole('button', { name: 'Retry release discovery' })); + expect(await screen.findByText(/Recommended setup: cu130 · Python selected automatically · Core runtime only/)).toBeInTheDocument(); + expect(getReleaseOptions).toHaveBeenCalledTimes(2); + }); + + it('offers the fixed preset while upstream discovery is still pending', async () => { + getReleaseOptions.mockImplementation(() => new Promise(() => { + // Keep the upstream scan pending throughout this test. })); - expect(screen.getByText(/Artifact resolution is unverified/)).toBeInTheDocument(); - fireEvent.click(screen.getByRole('button', { name: 'Install reviewed artifacts' })); - expect(onInstall).toHaveBeenLastCalledWith('upstream-cpu'); + render(); + + const qualified = await screen.findByRole('button', { name: 'Qualified fixed preset' }); + expect(qualified).toHaveAttribute('aria-pressed', 'false'); + expect(screen.getByText('Discovering official wheels…')).toBeInTheDocument(); + expect(screen.getByRole('button', { name: 'Check selected combination' })).toBeDisabled(); + + fireEvent.click(qualified); + expect(screen.queryByText('Discovering official wheels…')).not.toBeInTheDocument(); + fireEvent.click(screen.getByRole('button', { name: 'Check selected combination' })); + await waitFor(() => expect(getPreview).toHaveBeenCalledWith({ tag: 'v2.9.1', build: 'cu130', python: 'python3.12', adapter: 'bundled' })); + expect(screen.getByRole('button', { name: 'Install fixed preset' })).toBeEnabled(); + + fireEvent.click(screen.getByRole('button', { name: 'Other official wheels (unverified)' })); + expect(screen.getByText('Discovering official wheels…')).toBeInTheDocument(); + expect(screen.getByRole('button', { name: 'Check selected combination' })).toBeDisabled(); }); - it('requires an already installed compatible Python before checking wheels', async () => { - getOptions.mockResolvedValue({ ...options, pythons: [] }); - render(); - expect(await screen.findByText(/Install CPython 3.10–3.13 for Linux x86_64/)).toBeInTheDocument(); + it('keeps the fixed preset available after an inconclusive upstream scan', async () => { + getReleaseOptions.mockResolvedValue({ + ...release, tag: 'v2.9.1', status: 'inconclusive', completeScan: false, + combinations: [], recommended: null, issues: ['index timed out'], + }); + render(); + + expect(await screen.findByText(/Release discovery was inconclusive. Some official wheels may exist/)).toBeInTheDocument(); expect(screen.getByRole('button', { name: 'Check selected combination' })).toBeDisabled(); + fireEvent.click(screen.getByRole('button', { name: 'Qualified fixed preset' })); + fireEvent.click(screen.getByRole('button', { name: 'Check selected combination' })); + await waitFor(() => expect(getPreview).toHaveBeenCalledWith({ tag: 'v2.9.1', build: 'cu130', python: 'python3.12', adapter: 'bundled' })); + expect(screen.getByRole('button', { name: 'Install fixed preset' })).toBeEnabled(); }); - it('reports a failed wheel report validation distinctly without offering alternatives', async () => { - getOptions.mockResolvedValue(options); - getPreview.mockResolvedValue({ status: 'rejected', reason: 'validation_failed', message: 'Unsupported combination: hash missing for torch' }); - render(); + it('skips the bundled v2.9.1 preset when the manager says it is unavailable', async () => { + getPresetOptions.mockResolvedValue({ ...preset, bundledPresetAvailable: false, defaultAdapter: 'none', adapters: ['none'] }); + getReleaseOptions.mockResolvedValue({ + ...release, tag: 'v2.9.1', checkedChannels: ['cpu'], + combinations: [{ build: 'cpu', python: 'python3.12', wheelUrl: 'https://download.pytorch.org/whl/cpu/torch.whl' }], + recommended: { build: 'cpu', python: 'python3.12' }, + }); + const onInstall = vi.fn(); + render(); - fireEvent.click(await screen.findByRole('button', { name: 'Check selected combination' })); - expect(await screen.findByRole('alert')).toHaveTextContent('Resolved wheel report failed validation: Unsupported combination: hash missing for torch'); - expect(screen.getByText(/cpu · python3.12 · none: failed validation/)).toBeInTheDocument(); - expect(screen.getByRole('button', { name: 'Install reviewed artifacts' })).toBeDisabled(); - expect(screen.queryByRole('button', { name: 'Find compatible alternatives' })).not.toBeInTheDocument(); - expect(screen.queryByText(/Probe inconclusive/)).not.toBeInTheDocument(); + expect(await screen.findByText(/Recommended setup: cpu · Python selected automatically · Core runtime only/)).toBeInTheDocument(); + expect(screen.queryByRole('button', { name: 'Qualified fixed preset' })).not.toBeInTheDocument(); + expect(screen.queryByRole('button', { name: 'Other official wheels (unverified)' })).not.toBeInTheDocument(); + expect(screen.queryByText(/bundled image dependencies \(fixed\)/)).not.toBeInTheDocument(); + expect(screen.queryByText(/install Python 3\.10–3\.13/i)).not.toBeInTheDocument(); + fireEvent.click(screen.getByText('Advanced setup')); + const profile = screen.getByRole('combobox', { name: 'Dependency profile' }); + expect(within(profile).getAllByRole('option').map((option) => option.textContent)).toEqual(['Core runtime only']); + fireEvent.click(screen.getByRole('button', { name: 'Check selected combination' })); + await waitFor(() => expect(getPreview).toHaveBeenCalledWith({ tag: 'v2.9.1', build: 'cpu', python: 'auto', adapter: 'none' })); + fireEvent.click(screen.getByRole('button', { name: 'Install reviewed artifacts' })); + expect(onInstall).toHaveBeenCalledWith('review-1'); }); - it('treats transport exceptions as inconclusive even when their text resembles an unsupported outcome', async () => { - getOptions.mockResolvedValue(options); - getPreview.mockRejectedValue(new Error('Unsupported combination: transport failed')); - render(); + it('leaves the upstream v2.9.1 choice unset when the manager has no recommendation', async () => { + getReleaseOptions.mockResolvedValue({ + ...release, tag: 'v2.9.1', recommended: null, + checkedChannels: ['cu132'], + combinations: [{ build: 'cu132', python: 'python3.12', wheelUrl: 'https://download.pytorch.org/whl/cu132/torch.whl' }], + }); + render(); + fireEvent.click(await screen.findByRole('button', { name: 'Other official wheels (unverified)' })); + expect(await screen.findByText(/No setup was recommended. Open Advanced setup/)).toBeInTheDocument(); + expect(screen.getByRole('button', { name: 'Check selected combination' })).toBeDisabled(); + expect(getPreview).not.toHaveBeenCalled(); + }); + it('keeps rejected previews from installing and classifies validation by enum', async () => { + getPreview.mockResolvedValue({ status: 'rejected', reason: 'validation_failed', message: 'Unsupported combination: missing hash' }); + render(); fireEvent.click(await screen.findByRole('button', { name: 'Check selected combination' })); - expect(await screen.findByRole('alert')).toHaveTextContent('Probe inconclusive: Unsupported combination: transport failed'); + expect(await screen.findByRole('alert')).toHaveTextContent('Resolved wheel report failed validation: Unsupported combination: missing hash'); expect(screen.queryByRole('button', { name: 'Find compatible alternatives' })).not.toBeInTheDocument(); expect(screen.getByRole('button', { name: 'Install reviewed artifacts' })).toBeDisabled(); }); - it('offers official wheel matches only after unsupported preview and rechecks a chosen candidate', async () => { - getOptions.mockResolvedValue(options); - getPreview.mockResolvedValueOnce({ status: 'rejected', reason: 'unsupported', message: 'no matching wheel' }); - getPreview.mockResolvedValueOnce(resolved({ - previewId: 'review-cu130', expiresInSeconds: 300, tag: 'v2.10.0', build: 'cu130', python: 'python3.12', - adapter: 'none', qualification: 'unverified', artifacts: [], + it('offers official wheel alternatives only after an unsupported preview and rechecks the chosen match', async () => { + getPreview.mockResolvedValueOnce({ status: 'rejected', reason: 'unsupported', message: 'selected dependencies have no matching wheel' }); + getPreview.mockImplementationOnce(async (request) => ({ + status: 'resolved', + preview: { ...request, python: 'python3.11', previewId: 'review-cpu', expiresInSeconds: 300, qualification: 'unverified', artifacts: [] }, })); getAlternatives.mockResolvedValue({ - selectedTag: 'v2.10.0', selectedBuild: 'cpu', selectedPython: 'python3.12', + selectedTag: 'v2.14.0', selectedBuild: 'cu130', selectedPython: 'python3.12', status: 'matches', incomplete: true, dependenciesNotChecked: true, - checkedBuilds: ['cpu', 'cu130'], issues: [], - matches: [{ tag: 'v2.10.0', build: 'cu130', python: 'python3.12', wheelUrl: 'https://download.pytorch.org/torch.whl', sha256: 'a'.repeat(64) }], + checkedBuilds: ['cu130', 'cpu'], issues: [], + matches: [{ tag: 'v2.14.0', build: 'cpu', python: 'python3.11', wheelUrl: 'https://download.pytorch.org/whl/cpu/torch.whl', sha256: 'a'.repeat(64) }], }); - render(); + const onInstall = vi.fn(); + render(); fireEvent.click(await screen.findByRole('button', { name: 'Check selected combination' })); - fireEvent.click(await screen.findByRole('button', { name: 'Find compatible alternatives' })); + expect(await screen.findByRole('alert')).toHaveTextContent('Unsupported combination'); + expect(screen.getByRole('button', { name: 'Install reviewed artifacts' })).toBeDisabled(); + fireEvent.click(screen.getByRole('button', { name: 'Find compatible alternatives' })); expect(await screen.findByText('Official Torch wheel matches only')).toBeInTheDocument(); expect(screen.getByText(/Other dependencies have not been checked/)).toBeInTheDocument(); - expect(getAlternatives).toHaveBeenCalledWith('v2.10.0', 'cpu', 'python3.12'); - fireEvent.click(screen.getByRole('button', { name: 'Preview v2.10.0 · cu130 · python3.12' })); - await waitFor(() => expect(getPreview).toHaveBeenLastCalledWith({ tag: 'v2.10.0', build: 'cu130', python: 'python3.12', adapter: 'none' })); + expect(getAlternatives).toHaveBeenCalledWith('v2.14.0', 'cu130', 'python3.12'); + fireEvent.click(screen.getByRole('button', { name: 'Preview v2.14.0 · cpu · python3.11' })); + await waitFor(() => expect(getPreview).toHaveBeenLastCalledWith({ tag: 'v2.14.0', build: 'cpu', python: 'python3.11', adapter: 'none' })); expect(await screen.findByText('Exact artifacts resolved')).toBeInTheDocument(); + fireEvent.click(screen.getByRole('button', { name: 'Install reviewed artifacts' })); + expect(onInstall).toHaveBeenCalledWith('review-cpu'); + }); + + it('shows and previews only host-eligible alternatives from the release combinations', async () => { + getReleaseOptions.mockResolvedValue({ + ...release, + checkedChannels: ['cpu'], + combinations: [{ build: 'cpu', python: 'python3.11', wheelUrl: 'https://download.pytorch.org/whl/cpu/torch.whl' }], + recommended: { build: 'cpu', python: 'python3.11' }, + }); + getPreview.mockResolvedValueOnce({ status: 'rejected', reason: 'unsupported', message: 'dependency unavailable' }); + getPreview.mockImplementationOnce(async (request) => ({ + status: 'resolved', + preview: { ...request, python: 'python3.11', previewId: 'eligible-cpu', expiresInSeconds: 300, qualification: 'unverified', artifacts: [] }, + })); + getAlternatives.mockResolvedValue({ + selectedTag: 'v2.14.0', selectedBuild: 'cpu', selectedPython: 'python3.11', + status: 'matches', incomplete: true, dependenciesNotChecked: true, + checkedBuilds: ['cpu', 'cu130', 'rocm6.4'], issues: [], + matches: [ + { tag: 'v2.14.0', build: 'cpu', python: 'python3.11' }, + { tag: 'v2.14.0', build: 'cu130', python: 'python3.11' }, + { tag: 'v2.14.0', build: 'rocm6.4', python: 'python3.11' }, + { tag: 'v2.14.0', build: 'cpu', python: 'python3.12' }, + { tag: 'v2.13.0', build: 'cpu', python: 'python3.11' }, + ], + }); + render(); + + fireEvent.click(await screen.findByRole('button', { name: 'Check selected combination' })); + fireEvent.click(await screen.findByRole('button', { name: 'Find compatible alternatives' })); + expect(await screen.findByText('Checked builds: cpu')).toBeInTheDocument(); + expect(screen.getAllByRole('button', { name: /^Preview v/ })).toHaveLength(1); + expect(screen.queryByRole('button', { name: /Preview .*cu130|Preview .*rocm6\.4|Preview v2\.13\.0/ })).not.toBeInTheDocument(); + fireEvent.click(screen.getByRole('button', { name: 'Preview v2.14.0 · cpu · python3.11' })); + await waitFor(() => expect(getPreview).toHaveBeenCalledTimes(2)); + expect(getPreview).toHaveBeenLastCalledWith({ tag: 'v2.14.0', build: 'cpu', python: 'python3.11', adapter: 'none' }); }); it('keeps a long artifact list and its install action inside the scrollable preview region', async () => { - getOptions.mockResolvedValue(options); - getPreview.mockResolvedValue(resolved({ - previewId: 'review-many', expiresInSeconds: 300, tag: 'v2.10.0', build: 'cpu', python: 'python3.12', - adapter: 'none', qualification: 'unverified', - artifacts: Array.from({ length: 30 }, (_, index) => ({ - name: `wheel-${index}`, version: '1.0', - url: `https://download.pytorch.org/whl/cpu/wheel-${index}.whl`, - sha256: 'a'.repeat(64), - })), + getPreview.mockImplementation(async (request) => ({ + status: 'resolved', + preview: { + ...request, previewId: 'review-many', expiresInSeconds: 300, qualification: 'unverified', + python: 'python3.12', + artifacts: Array.from({ length: 30 }, (_, index) => ({ + name: `wheel-${index}`, version: '1.0', + url: `https://download.pytorch.org/whl/cu130/wheel-${index}.whl`, + sha256: 'a'.repeat(64), + })), + }, })); - render(); + render(); fireEvent.click(await screen.findByRole('button', { name: 'Check selected combination' })); - const previewRegion = screen.getByRole('region', { name: 'Torch installation preview for v2.10.0' }); + const previewRegion = screen.getByRole('region', { name: 'Torch installation preview for v2.14.0' }); await waitFor(() => expect(screen.getByText('wheel-29 1.0')).toBeInTheDocument()); expect(previewRegion).toHaveClass('flex-1', 'min-h-0', 'overflow-y-auto'); expect(previewRegion).toContainElement(screen.getByRole('button', { name: 'Install reviewed artifacts' })); diff --git a/frontend/src/components/TorchInstallPreview.tsx b/frontend/src/components/TorchInstallPreview.tsx index caa2317db..fc4dd933b 100644 --- a/frontend/src/components/TorchInstallPreview.tsx +++ b/frontend/src/components/TorchInstallPreview.tsx @@ -1,7 +1,7 @@ import { useEffect, useRef, useState } from 'react'; import { ArrowLeft, Loader2 } from 'lucide-react'; import { api } from '../api/adapter'; -import type { TorchAlternativesOutcome, TorchRuntimeOptions, TorchRuntimePreview, TorchRuntimePreviewOutcome, TorchRuntimePreviewRejectReason } from '../types/torch-install'; +import type { TorchAlternativeMatch, TorchAlternativesOutcome, TorchReleaseOptionsOutcome, TorchRuntimeOptions, TorchRuntimePreview, TorchRuntimePreviewOutcome, TorchRuntimePreviewRejectReason } from '../types/torch-install'; interface TorchInstallPreviewProps { tag: string; @@ -35,13 +35,17 @@ function errorText(error: unknown): string { } export function TorchInstallPreview({ tag, onBack, onInstall }: TorchInstallPreviewProps) { - const [options, setOptions] = useState(null); + const [runtimeOptions, setRuntimeOptions] = useState(null); + const [releaseOptions, setReleaseOptions] = useState(null); + const [runtimeError, setRuntimeError] = useState(null); + const [releaseError, setReleaseError] = useState(null); + const [releaseAttempt, setReleaseAttempt] = useState(0); const [build, setBuild] = useState(''); - const [python, setPython] = useState(''); - const [adapter, setAdapter] = useState('none'); + const [adapter, setAdapter] = useState(''); const [selectionMode, setSelectionMode] = useState<'preset' | 'upstream'>('upstream'); const [preview, setPreview] = useState(null); - const [loadingOptions, setLoadingOptions] = useState(true); + const [loadingRuntimeOptions, setLoadingRuntimeOptions] = useState(true); + const [loadingReleaseOptions, setLoadingReleaseOptions] = useState(true); const [probing, setProbing] = useState(false); const [error, setError] = useState(null); const [rejection, setRejection] = useState | null>(null); @@ -50,11 +54,16 @@ export function TorchInstallPreview({ tag, onBack, onInstall }: TorchInstallPrev const [alternativesBusy, setAlternativesBusy] = useState(false); const [alternativesError, setAlternativesError] = useState(null); const requestNumber = useRef(0); + const selectionModeRef = useRef<'preset' | 'upstream'>('upstream'); useEffect(() => { let active = true; - setLoadingOptions(true); - setOptions(null); + setLoadingRuntimeOptions(true); + setLoadingReleaseOptions(true); + setRuntimeOptions(null); + setRuntimeError(null); + setReleaseOptions(null); + setReleaseError(null); setPreview(null); setError(null); setRejection(null); @@ -62,24 +71,37 @@ export function TorchInstallPreview({ tag, onBack, onInstall }: TorchInstallPrev setAlternatives(null); setAlternativesError(null); setAlternativesBusy(false); - void api.get_torch_runtime_options().then((result) => { + selectionModeRef.current = 'upstream'; + setSelectionMode(selectionModeRef.current); + setBuild(''); + setAdapter(''); + const releaseRequest = api.get_torch_release_options(tag).then((result) => { if (!active) return; - const preset = result.preset.tag === tag ? result.preset : null; - setOptions(result); - setSelectionMode(preset ? 'preset' : 'upstream'); - setBuild(preset?.build ?? result.builds[0] ?? ''); - setPython(preset?.python ?? result.pythons[0]?.id ?? ''); - setAdapter(preset?.adapter ?? result.adapters[0] ?? 'none'); + setReleaseOptions(result); + if (selectionModeRef.current === 'preset') return; + const choice = result.combinations.find((item) => item.build === result.recommended?.build && item.python === result.recommended.python); + setBuild(choice?.build ?? ''); }).catch((cause: unknown) => { - if (active) setError(errorText(cause)); + if (active) setReleaseError(`Release discovery inconclusive: ${errorText(cause)}`); }).finally(() => { - if (active) setLoadingOptions(false); + if (active) setLoadingReleaseOptions(false); }); + const runtimeRequest = api.get_torch_runtime_options().then((result) => { + if (!active) return; + setRuntimeOptions(result); + setAdapter(result.defaultAdapter); + }).catch((cause: unknown) => { + if (active) setRuntimeError(`Torch runtime choices unavailable: ${errorText(cause)}`); + }).finally(() => { + if (active) setLoadingRuntimeOptions(false); + }); + void releaseRequest; + void runtimeRequest; return () => { active = false; requestNumber.current += 1; }; - }, [tag]); + }, [tag, releaseAttempt]); const invalidatePreview = () => { requestNumber.current += 1; @@ -92,11 +114,12 @@ export function TorchInstallPreview({ tag, onBack, onInstall }: TorchInstallPrev setAlternativesBusy(false); }; - const probe = async (selection = { build, python, adapter }) => { + const selectedPython = selectionMode === 'preset' ? runtimeOptions?.preset.python ?? '' : 'auto'; + const probe = async (selection = { build, python: selectedPython, adapter }) => { if (!selection.build || !selection.python || probing) return; const currentRequest = ++requestNumber.current; const key = `${selection.build}|${selection.python}|${selection.adapter}`; - const label = `${selection.build} · ${selection.python} · ${selection.adapter}`; + const label = `${selection.build} · ${selection.python === 'auto' ? 'Python selected automatically' : selection.python} · ${selection.adapter}`; const recordCheck = (status: CheckedCombination['status']) => { setChecks((previous) => [...previous.filter((item) => item.key !== key), { key, label, status }]); }; @@ -133,7 +156,9 @@ export function TorchInstallPreview({ tag, onBack, onInstall }: TorchInstallPrev setAlternatives(null); setAlternativesError(null); try { - const result = await api.find_torch_alternatives(tag, build, python); + const discoveryPython = releaseOptions?.combinations.find((choice) => choice.build === build)?.python; + if (!discoveryPython) return; + const result = await api.find_torch_alternatives(tag, build, discoveryPython); if (requestNumber.current === currentRequest) setAlternatives(result); } catch (cause) { if (requestNumber.current === currentRequest) setAlternativesError(errorText(cause)); @@ -142,31 +167,34 @@ export function TorchInstallPreview({ tag, onBack, onInstall }: TorchInstallPrev } }; - const isPresetRelease = options?.preset.tag === tag; + const isPresetRelease = tag === runtimeOptions?.preset.tag && runtimeOptions.bundledPresetAvailable; const fixedPreset = isPresetRelease && selectionMode === 'preset'; const chooseMode = (mode: 'preset' | 'upstream') => { - if (!options) return; invalidatePreview(); + selectionModeRef.current = mode; setSelectionMode(mode); if (mode === 'preset') { - setBuild(options.preset.build); - setPython(options.preset.python); - setAdapter(options.preset.adapter); + setBuild(runtimeOptions?.preset.build ?? ''); + setAdapter(runtimeOptions?.preset.adapter ?? ''); } else { - setBuild(options.builds[0] ?? ''); - setPython(options.pythons[0]?.id ?? ''); - setAdapter(options.adapters[0] ?? 'none'); + const choice = releaseOptions?.combinations.find((item) => item.build === releaseOptions.recommended?.build && item.python === releaseOptions.recommended.python); + setBuild(choice?.build ?? ''); + setAdapter(runtimeOptions?.defaultAdapter ?? ''); } }; - const availableBuilds = fixedPreset ? [options.preset.build] : options?.builds ?? []; - const availablePythons = fixedPreset - ? [{ id: options.preset.python, label: `Python ${options.preset.python.replace('python', '')} (fixed preset)` }] - : options?.pythons ?? []; - const availableAdapters = fixedPreset ? [options.preset.adapter] : options?.adapters ?? []; - const hasSelectedPython = options?.pythons.some((choice) => choice.id === python) ?? false; + const availableBuilds = [...new Set(releaseOptions?.combinations.map((choice) => choice.build) ?? [])]; + const availableAdapters = runtimeOptions?.adapters.filter((choice) => choice === 'none' || choice === 'flux2') ?? []; + const isEligibleAlternative = (match: TorchAlternativeMatch) => match.tag === tag + && releaseOptions?.tag === tag + && releaseOptions.combinations.some((choice) => choice.build === match.build && choice.python === match.python); + const eligibleAlternatives = alternatives?.matches.filter(isEligibleAlternative) ?? []; + const eligibleCheckedBuilds = alternatives?.checkedBuilds.filter((choice) => availableBuilds.includes(choice)) ?? []; + const loadingOptions = loadingRuntimeOptions || (!isPresetRelease && loadingReleaseOptions); const canInstall = preview !== null && Boolean(preview.previewId) && preview.tag === tag && preview.build === build - && preview.python === python && preview.adapter === adapter; + && Boolean(preview.python) && preview.python !== 'auto' + && (!fixedPreset || preview.python === runtimeOptions.preset.python) + && preview.adapter === adapter; return (
@@ -185,43 +213,63 @@ export function TorchInstallPreview({ tag, onBack, onInstall }: TorchInstallPrev This check resolves package files and hashes. Device use, image generation, and socket startup need later runtime checks.

- Managed Torch requires Linux x86_64. Pumas uses an already installed compatible CPython 3.10–3.13 interpreter; it does not install Python. + This flow installs official binary wheels only. Source compilation is a separate unsupported path and is never used as a fallback.

- This flow installs official binary wheels only. Source compilation is a separate unsupported path and is never used as a fallback. + Pumas installs a private Python version that matches the selected Torch release and its dependencies. Python does not need to be installed on this computer.

- {loadingOptions ? : options && ( + {loadingOptions ? : runtimeOptions && (releaseOptions || isPresetRelease) && ( <> {isPresetRelease &&
} {fixedPreset &&

This release has one qualified Python 3.12 / CUDA 13.0 build.

} -
- - - -
- {options.pythons.length === 0 &&

No supported installed Python interpreter was found. Install CPython 3.10–3.13 for Linux x86_64, then reopen this preview.

} - {fixedPreset && options.pythons.length > 0 && !hasSelectedPython &&

This fixed preset requires installed CPython 3.12. Install it, then reopen this preview.

} - )} + {runtimeError &&
+

{runtimeError}

+ +
} + {!fixedPreset && releaseError &&
+

{releaseError}

+ +
} {checks.length > 0 &&
Checked combinations
    {checks.map((check) =>
  • {check.label}: {checkStatusLabel(check.status)}
  • )}
@@ -236,16 +284,16 @@ export function TorchInstallPreview({ tag, onBack, onInstall }: TorchInstallPrev {alternatives &&
Official Torch wheel matches only

Other dependencies have not been checked. Choose a match to run the normal exact preview for the full environment.

-

Checked builds: {alternatives.checkedBuilds.join(', ') || 'none'}

+

Checked builds: {eligibleCheckedBuilds.join(', ') || 'none'}

{alternatives.status === 'none' &&

No official Torch wheel matches were found for this release and Python.

} {alternatives.status === 'inconclusive' &&

Alternative search was inconclusive.

} {alternatives.issues.map((issue, index) =>

{issue}

)} - {alternatives.matches.length > 0 &&
    {alternatives.matches.map((match) => ( + {eligibleAlternatives.length > 0 &&
      {eligibleAlternatives.map((match) => (