Skip to main content

fast-mlsirm

Ask DeepWiki

fast-mlsirm is an early high-performance toolkit for Multidimensional Latent Space Item Response Models, focused on MLS2PLM simulation, regularized point estimation, and true-parameter recovery checks.

The implemented simple-structure MLSIRM/MLS2PLM path follows Jeon, Jin, Schweinberger, and Baugh (2021), Kang and Jeon (2025), and Molenaar and Jeon (2026). Adjacent shipped methods include Angoff delta-plot DIF (docs/delta_plot_dif.md) and Bradley–Terry MM ranking (docs/bradley_terry_mm.md). Primary citations and decision records live in docs/traceability/research-basis.md and docs/adr/README.md. Score interpretation and fairness remain governed by AERA, APA, and NCME (2014).

The public API stays small:

import numpy as np

from fast_mlsirm import MLS2PLMConfig, FitConfig, fixed_item_calibration_diagnostics, simulate, dimensionality_diagnostics, fit, fit_diagnostics, recovery_report, render_diagnostics_report, response_process_dimensionality_diagnostics, response_process_fit_diagnostics

data = simulate(MLS2PLMConfig(seed=20260101))
result = fit(
    responses=data.Y,
    factor_id=data.factor_id,
    config=FitConfig(model="MLS2PLM", optimizer="adam_lbfgs", max_iter=100, backend="auto"),
)
report = recovery_report(data.truth, result.params)
diagnostics = fit_diagnostics(data.Y, result.params, data.factor_id, model=result.model)
dimensions = dimensionality_diagnostics(
    data.Y,
    data.factor_id,
    latent_dims=[1, 2, 3],
    config=FitConfig(model="MLS2PLM", optimizer="adam", max_iter=10, n_restarts=1),
)

print(report.summary)
print(diagnostics.model_fit)
print(dimensions.best)

category_probs = np.stack([1.0 - data.probabilities, data.probabilities], axis=2)
process_fit = response_process_fit_diagnostics(
    data.Y,
    category_probs,
    item_type="dichotomous",
    response_process="cumulative",
    group_id=np.arange(data.Y.shape[0]) % 2,
)
print(process_fit.itemfit["outfit_mnsq"])

process_dimensions = response_process_dimensionality_diagnostics(
    data.Y,
    {"dim2": category_probs},
    item_type="dichotomous",
    response_process="cumulative",
)
print(process_dimensions.best)

fixed_item_calibration = fixed_item_calibration_diagnostics(
    data.Y,
    {"dim2": category_probs},
    fixed_items=np.arange(min(4, data.Y.shape[1])),
    item_type="dichotomous",
    response_process="cumulative",
)
print(fixed_item_calibration.best)

Features

  • Canonical MLS2PLM binary response simulation.
  • gamma=0 no-CD simulation.
  • Regularized JML/MAP-style fitting for MIRT, MLSRM, MLS2PLM, ULSRM, ULS2PLM, and BIFAC2PLM constraints.
  • Missing response exclusion via NaN, -1, or an explicit mask, including missing-by-design rows or items when at least one response is observed.
  • Adam and small L-BFGS-style optimizers without SciPy.
  • Procrustes alignment and distance-based recovery metrics.
  • Point-estimate item, person, and model fit diagnostics for fitted models.
  • K-fold held-out likelihood diagnostics for latent-space dimensionality.
  • Shared dichotomous/polytomous response-process diagnostics from category probabilities.
  • Multigroup and multilevel-context fit summaries from person-level group or cluster IDs.
  • Response-process probability candidate comparisons for external dimensionality checks.
  • True-parameter reproduction, observed-information Hessian, vcov, standard error, and second-order stability helpers.
  • Fixed item parameter linking, CAT item-information selection, and greedy ATA form assembly with content min/max constraints.
  • Fixed-item calibration diagnostics that select candidate probability tensors using fixed evaluation-item likelihood and an item-fit penalty.
  • Rubric-centered schemas, deterministic bounded item-blueprint compilation, and canonical provider-neutral generation contracts. See Rubric-Centered Item Generation.
  • Provider-neutral contextual-orchestrator LLM-as-a-Judge integration with strict structured parsing. A judge result becomes an IRT row only through LLMJudgeResult.to_irt_row() with at least two criteria, followed by validate_irt_response_matrix(). Polytomous scoring defaults to category_method="binary_threshold", where each ordered boundary is a bounded Boolean call and malformed or non-monotone evidence fails closed; "direct" and "cumulative_threshold" are explicit alternatives. ContextualOrchestratorJudge accepts only an adapter that declares the contextual-orchestrator contract, so a raw provider transport fails at construction. Category-count and prompt-perturbation calibration are required for every method, and paired controls are available through build_multiple_choice_calibration_cases() and evaluate_paired_calibration(). Paired score deltas are diagnostic sensitivity evidence, not a causal law or a claim of judge debiasing. The response-matrix and calibration contracts are specified in ADR 0005, ADR 0006, and ADR 0008.
  • Standalone HTML reports for saved fit or dimensionality diagnostics.
  • CLI commands for simulation, fitting, diagnostics, and report rendering.
  • Rust-backed fitting objective (neg-loglik, gradients, and distance kernels) via PyO3/maturin as the primary numeric path, with a numerically-identical NumPy reference backend kept for parity testing. auto fails closed when the compiled Rust core is unavailable.

Install

python -m pip install fast-mlsirm

Python 3.12 or newer. Published wheels ship the compiled Rust core, so nothing else is needed to fit a model.

The default runtime backend is "auto". It uses the compiled Rust core (fast_mlsirm._core) and fails closed when that extension is unavailable; automatic resolution never silently selects NumPy. The NumPy reference path is reached explicitly through fast_mlsirm.fit_reference() or fast-mlsirm fit --reference, not by passing backend="numpy" to fit().

For local development from a checkout:

python -m pip install -e ".[dev]"
cargo test --workspace

Source and editable installs build the extension with maturin, so they need a working Rust toolchain; the PyO3 crate is exercised by the Python parity tests.

Project Status

fast-mlsirm is an alpha research library. It is usable today by teams that run local MLS2PLM simulation, point-estimate fitting, diagnostics, and report generation, and it is not a regulated decision product, a hosted assessment platform, or a Bayesian posterior inference engine.

Every tagged release is built from a wheel that carries the compiled Rust core, and is checked against the Rust/NumPy parity suite plus a release-acceptance run before publication. The procedure lives in the release acceptance guide.

CLI

fast-mlsirm simulate \
  --persons 500 \
  --dims 2 \
  --items-per-dim 8 \
  --latent-dim 2 \
  --phi 0.3 \
  --gamma 1.5 \
  --seed 20260101 \
  --out runs/sim_001

fast-mlsirm fit \
  --responses runs/sim_001/responses.npy \
  --factors runs/sim_001/item_factor.csv \
  --model MLS2PLM \
  --backend auto \
  --latent-dim 2 \
  --optimizer adam_lbfgs \
  --max-iter 100 \
  --out runs/fit_001

fast-mlsirm diagnose-fit \
  --responses runs/sim_001/responses.npy \
  --factors runs/sim_001/item_factor.csv \
  --params runs/fit_001/params.npz \
  --model MLS2PLM \
  --out runs/diagnostics_001

fast-mlsirm diagnose-dimensions \
  --responses runs/sim_001/responses.npy \
  --factors runs/sim_001/item_factor.csv \
  --latent-dims 1,2,3 \
  --folds 5 \
  --model MLS2PLM \
  --max-iter 100 \
  --out runs/dimensions_001

fast-mlsirm diagnose-response-process \
  --responses runs/sim_001/responses.npy \
  --probabilities runs/model_probabilities.npy \
  --item-type polytomous \
  --response-process cumulative \
  --group-id runs/group_id.npy \
  --cluster-id runs/school_id.npy \
  --out runs/process_fit_001

fast-mlsirm diagnose-response-candidates \
  --responses runs/sim_001/responses.npy \
  --candidate dim1=runs/prob_dim1.npy \
  --candidate dim2=runs/prob_dim2.npy \
  --item-type dichotomous \
  --response-process ideal_point \
  --out runs/process_dimensions_001

fast-mlsirm diagnose-fixed-item-calibration \
  --responses runs/sim_001/responses.npy \
  --candidate dim1=runs/prob_dim1.npy \
  --candidate dim2=runs/prob_dim2.npy \
  --fixed-items runs/fixed_items.npy \
  --item-type dichotomous \
  --response-process ideal_point \
  --itemfit-penalty-weight 1.0 \
  --out runs/fixed_item_calibration_001

fast-mlsirm render-report \
  --diagnostics runs/diagnostics_001/fit_diagnostics.json \
  --out runs/diagnostics_001/report.html

For automation, every CLI command also accepts --json. In JSON mode, progress text is suppressed and stdout contains one status object with the output directory, key metrics, and generated file paths:

fast-mlsirm simulate \
  --persons 500 \
  --dims 2 \
  --items-per-dim 8 \
  --out runs/sim_001 \
  --json

fast-mlsirm fit \
  --responses runs/sim_001/responses.npy \
  --factors runs/sim_001/item_factor.csv \
  --out runs/fit_001 \
  --json

fit, diagnose-fit, and diagnose-dimensions validate that responses.npy is a 2D persons-by-items matrix and that item_factor.csv has exactly one factor id per item before running optimization or diagnostics. diagnose-fixed-item-calibration writes dimension_diagnostics.json with best_candidate, calibration_score, fixed-item coverage counts, and item-fit penalty metrics. --fixed-items accepts a .npy boolean mask or item-index vector; when omitted, all items are treated as the fixed calibration set.

The explicit NumPy reference objective runs through fast_mlsirm.fit_reference (Python) or the CLI's fast-mlsirm fit --reference flag; production --backend choices are {rust, auto}. fit --backend rust requires the installed fast_mlsirm._core extension and fails clearly if it is unavailable. fit --backend auto uses the Rust objective when the compiled core is available and fails closed otherwise. Automatic resolution never silently selects NumPy.

The production backend axis is {rust, auto}; NumPy stays reachable only through the reference API above. GPU acceleration is a device sub-option of the Rust backend rather than a separate backend, selected with fit --backend rust --rust-device {auto,cpu,gpu} (or FitConfig(backend="rust", rust_device=...)). The Rust core carries a wgpu (MIT/Apache-2.0) GPGPU implementation of the negative-log-likelihood and gradient hot path:

  • rust_device="auto" (default) runs the GPGPU kernels when a compatible GPU adapter is present and otherwise falls back to the identical CPU path — no GPU required.
  • rust_device="gpu" prefers the GPU and still falls back to CPU (with a warning) when none is available, so CI and GPU-less machines pass unchanged.
  • rust_device="cpu" always uses the scalar CPU reference.

The GPU kernels run in single precision (WGSL has no f64); the CPU path is the f64 reference the numerical-parity tests assert against. The requested Rust device is recorded on FitResult.rust_device and in fit_summary.json; when gpu is explicitly requested on a machine without a compatible adapter, the runtime prints a warning and falls back to the CPU implementation.

render-report turns fit_diagnostics.json or dimension_diagnostics.json into a standalone HTML report with model summary cards, compact tables, and small bar views when chartable diagnostic metrics are present. Optional fit tables, dimensionality candidate comparisons, or metric summaries without values are summarized in a diagnostics coverage block instead of rendering as repeated blank-looking report sections or placeholder-only columns.

Repository Layout

python/fast_mlsirm/       Python public API and reference backend
crates/mlsirm-core/       Rust likelihood and gradient core
crates/fast-mlsirm-py/    PyO3 binding for the compiled Rust backend
tests/                    Python smoke and numerical tests
docs/                     Design docs, ADRs, and research traceability

Scope

This is not a Bayesian sampler. The package provides fast simulation, regularized point estimation, and recovery diagnostics, and the Rust backend keeps the same point-estimate formula contract as the NumPy reference path. Block-mode Rust execution, sparse response storage, posterior predictive checking, and new ordinal response estimators are out of scope for the current release.

Metadata

Release files for fast-mlsirm 0.11.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fast-mlsirm 0.11.4
File Size Uploaded
fast_mlsirm-0.11.4.tar.gz 1.6 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for fast-mlsirm 0.11.4
File
fast_mlsirm-0.11.4-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
fast_mlsirm-0.11.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.17+ x86-64 Details
fast_mlsirm-0.11.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.17+ ARM64 Details
fast_mlsirm-0.11.4-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl CPython 3.14 CPython 3.14 macOS 10.12+ universal2 (ARM64, x86-64), macOS 10.12+ x86-64, macOS 11.0+ ARM64 Details
fast_mlsirm-0.11.4-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
fast_mlsirm-0.11.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64 Details
fast_mlsirm-0.11.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ ARM64 Details
fast_mlsirm-0.11.4-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl CPython 3.13 CPython 3.13 macOS 10.12+ universal2 (ARM64, x86-64), macOS 10.12+ x86-64, macOS 11.0+ ARM64 Details
fast_mlsirm-0.11.4-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
fast_mlsirm-0.11.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64 Details
fast_mlsirm-0.11.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ ARM64 Details
fast_mlsirm-0.11.4-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl CPython 3.12 CPython 3.12 macOS 10.12+ x86-64, macOS 11.0+ ARM64, macOS 10.12+ universal2 (ARM64, x86-64) Details

Total release size: 82.0 MB

Release files / fast_mlsirm-0.11.4.tar.gz

Download URL fast_mlsirm-0.11.4.tar.gz
Size 1.6 MB
Tags Source
SHA-256 checksum
How to use checksums
761f13783484ba7ef82c810c9c740f113d20cf52f879556056dfae9b36e39731
BLAKE2b-256 checksum
How to use checksums
360babc04f519f48a2b4be5993f8c560b0cd5724ad00b1eef367526816cbf985
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / fast_mlsirm-0.11.4-cp314-cp314-win_amd64.whl

Download URL fast_mlsirm-0.11.4-cp314-cp314-win_amd64.whl
Size 5.9 MB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
c3aaa8a526de58842dd2cddc759e25b765da3b6a2c36257de66db35ef191e664
BLAKE2b-256 checksum
How to use checksums
cd62b4a5430ba804619963cdf09376618e189c6778cab4be448f79cbeb8b9dbe
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / fast_mlsirm-0.11.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL fast_mlsirm-0.11.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 5.9 MB
Tags CPython 3.14 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
f4923dfae8db5407d20cc9ce0a08baaf6273824a22d01709b4b0cbc8ccfdbb87
BLAKE2b-256 checksum
How to use checksums
4baa8810e7da6e2b8f3b7144d0ec5e8af94fae7bba78214f64d6afb5678a870a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / fast_mlsirm-0.11.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL fast_mlsirm-0.11.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 5.7 MB
Tags CPython 3.14 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
f0980d90d2094ef01d482915b1786b8654445fde5d5ba97446eedac573aca1e0
BLAKE2b-256 checksum
How to use checksums
758193605db43d1e43718790b2bb906e3c6cc08e4c098ca1a4d9311ad7434f68
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / fast_mlsirm-0.11.4-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl

Download URL fast_mlsirm-0.11.4-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Size 9.4 MB
Tags CPython 3.14 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
1779228af4c5d932514e465e57e137fd88f0d7e51d9463e69f1c6efa901bc179
BLAKE2b-256 checksum
How to use checksums
573cc2b6cd12b0decce604fb8929bc33165af98d7d8b3023456412116cd712aa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / fast_mlsirm-0.11.4-cp313-cp313-win_amd64.whl

Download URL fast_mlsirm-0.11.4-cp313-cp313-win_amd64.whl
Size 5.9 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
f010df97a1f8bc7e4800c1b341f40204e8b42ac467a4d96948886144a3a3575a
BLAKE2b-256 checksum
How to use checksums
f5d3078fdc2457ce91ab894f85bb4f312963a86b2d10dcbc77304efdd90aa3fd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / fast_mlsirm-0.11.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL fast_mlsirm-0.11.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 5.9 MB
Tags CPython 3.13 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
9ee76243c95a548a5f988c070588256d8e8d3bc747356991588a1f0a22b04a2c
BLAKE2b-256 checksum
How to use checksums
61c5a844e5e715bc732f0df7d28ad3e04a4ce3b16f06147fe03a91560e4d12d9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / fast_mlsirm-0.11.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL fast_mlsirm-0.11.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 5.7 MB
Tags CPython 3.13 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
c7af04c0d01e1a8c802d39278fac6edff7263f67a039a6e293fcbe42ecb440a1
BLAKE2b-256 checksum
How to use checksums
6dcc45bd74a88606866317c9b6d37d4fd6a59eba1ed44cdcd6ccffb51b7255b4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / fast_mlsirm-0.11.4-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl

Download URL fast_mlsirm-0.11.4-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Size 9.3 MB
Tags CPython 3.13 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
24bf3f0edd8a23a53a3e6ff4e9291f4574644c6e10b44c43294703dc97f0ebf8
BLAKE2b-256 checksum
How to use checksums
685ed71da24faddc710e13b198556e9f57277d39c8c375abba69d5b7606573da
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / fast_mlsirm-0.11.4-cp312-cp312-win_amd64.whl

Download URL fast_mlsirm-0.11.4-cp312-cp312-win_amd64.whl
Size 5.9 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
1ce70211d8f837e489d456863cba5c163d0d27972ecc1689b7787af0b40daed6
BLAKE2b-256 checksum
How to use checksums
59594ed8ec58561935d65f3485e46b315df93b69919f6b1c2efa4b2ccf323d99
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / fast_mlsirm-0.11.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL fast_mlsirm-0.11.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 5.9 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
1e65070ffab835a8af7e3eef3f67740b5146e9325d1a52b84b72f30e8b23998e
BLAKE2b-256 checksum
How to use checksums
2e2cb07949481dbc3db5ee6499b64446135e76fefc60e1117cfe3759248e5920
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / fast_mlsirm-0.11.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL fast_mlsirm-0.11.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 5.7 MB
Tags CPython 3.12 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
a42038ee72a23220b3153153b3e290f454f5dee098ee0fbfc17d94aefbb215fa
BLAKE2b-256 checksum
How to use checksums
f1ed611a8e627677a9ec54c3fbad8fa24eac94e1e5a318bcaa0ec60515599d07
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / fast_mlsirm-0.11.4-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl

Download URL fast_mlsirm-0.11.4-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Size 9.3 MB
Tags CPython 3.12 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
d026033bc4f649534c1f4d9516c7cd081fc064bd292a4e2d302acdb9f2ee060e
BLAKE2b-256 checksum
How to use checksums
8d45d26550e22b2de5281f8faa122bfb73ec75216ed3541e9a4316181748ffb1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

This release

0.11.4 This release

13 release files

0.11.2

2 release files

0.11.1

2 release files

0.11.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page