Context7 now indexes the canonical docs/ sources while excluding internal
planning archives, and the public documentation consistently uses
“projection” except for established API identifiers and publication titles.
Removed the maintainer archive from the public documentation site.
A searchable Material for MkDocs documentation site with task-oriented user
guides, a complete literature-linked measure reference, generated public API
pages, performance documentation, and maintainer guidance.
Strict documentation CI for pull requests and master updates, plus GitHub
Pages deployment from the immutable source tag whenever a GitHub Release is
published.
A three-field GitHub issue form for proposing a metric from its name, paper,
and optional reference implementation without preparing repository files.
A vis installation extra for the optional ZADUVis plotting dependency.
A no-code metric proposal path for contributors and repository guidance for
coding agents implementing paper- or reference-backed metrics.
A development-only exact selected-rank oracle, isolated memory/time benchmark,
and post-0.5.1 scaling plan for replacing persistent full inverse rankings.
Bounded iter_measure_many() evaluation with lazy indexed results,
per-result diagnostics, memory-capped concurrency, deterministic ordering,
indexed failures, and explicit early-close cleanup.
Opt-in exact external-memory ordering for Spearman and Non-Metric Stress,
including deterministic sorted runs, bounded-fan-in merge, disk-backed
tie-average ranks and PAVA, explicit RAM/disk budgets, and exception-safe
workspace cleanup.
README now serves as a compact installation and quickstart entry point; the
detailed measure, execution, backend, visualization, and contribution
material has moved to the documentation site.
The supported-measures table now links every metric to its primary academic
reference, including the constituent scores exposed by validation wrappers.
Matplotlib is no longer installed by the base zadu package; users of
ZADUVis can install it with pip install "zadu[vis]".
Mixed pair-and-neighbor specifications now plan condensed, streaming, or
external pair resources independently of their kNN resources instead of
forcing two dense distance matrices. Strategy selection accounts for all
coexisting resource caches before accepting a memory budget.
Default NumPy kNN now uses exact stable float64 row blocks for direct and
scheduled execution. This removes the implicit FAISS float32 conversion and
the mandatory faiss-cpu dependency while preserving bounded scheduler
memory and deterministic duplicate-distance ties.
Gap Index now evaluates Euclidean and precomputed triangle edges in bounded
vectorized blocks while preserving its scalar callable/SciPy-metric fallback,
published triangulation, Heron validation, and upstream score parity.
Exact external pair ordering now uses compiled binary merges instead of a
per-record Python heap merge.
DTM and KL density resources now fuse multiple sigma values in exact
two-pass row blocks, avoiding transient dense distance and kernel matrices
unless another scheduled metric already requires the distance matrix.
Scheduled T&C, class-aware T&C, and MRRE now build exact cross-space ranks in
bounded NumPy row blocks and retain O(nk) state instead of two persistent
n x n inverse rankings. Run diagnostics expose block bounds, distance reuse,
retained dtypes, and optional-provider fallback.
MLX and PyTorch now execute the paired selected-rank resource natively with
device-side stable sorting, inverse scatter, rank gather, and membership
reductions. Geodesic rank resources retain an explicit NumPy fallback, and
PyTorch planning reserves its fixed target-index transfer workspace.
Slow-reference parity tests and isolated microbenchmarks for exact NumPy metric
kernels.
Typed exact resource contracts, a deterministic execution planner, and a
NumPy/FAISS resource provider.
ExecutionConfig for backend, device, and memory-budget selection, plus
ZADU.last_run_info for separate execution diagnostics.
Exact condensed and memory-bounded streaming pair resources, with an isolated
dense-versus-planned benchmark.
Shared exact pair ordering and tie-aware rank resources for Spearman and
Non-Metric Stress, with repeated-embedding reuse and preallocation guards.
Exact blockwise stable-kNN and selected-distance resources for Topographic
Product, including shared multi-k prefix results.
Parameterized density, gathered-rank, and fused neighbor-statistics resources,
with compact exact index/rank storage and explicit resource lifetimes.
Deterministic optional n_jobs execution and memory-budget-aware worker
planning for Steadiness & Cohesiveness.
Ordered ZADU.measure_many() execution with shared original-space resources,
per-embedding results, and aggregate JSON-compatible diagnostics.
Opt-in, memory-bounded embedding_workers for exact repeated-embedding
execution and indexed EmbeddingExecutionError failures.
An optional, lazily imported MLX provider for memory-bounded Euclidean
distance matrices, condensed pairs, stable full/inverse rankings, exact
neighbor prefixes, and stable-kNN tables on Apple Silicon.
Provider-native MLX tensor batching for equal-shaped measure_many() inputs,
including memory-capped batch width and indexed batch failures.
An optional, lazily imported PyTorch provider for exact, memory-planned
Euclidean distance matrices, condensed pairs, stable full/inverse rankings,
and exact stable neighbor prefixes on CPU, MPS, and CUDA.
Provider-native PyTorch batching for equal-shaped repeated embeddings using
batched cdist and stable sorting, with bounded batch width and indexed
failures.
A provisional zadu.backends entry-point contract for separately packaged
exact providers, including an optional planner working-memory hook.
A backend capability guide, scheduled benchmark workflow, reproducible
release-history benchmark, and 0.5.1 acceleration report.
Vectorized T&C, class-aware T&C, MRRE, LCMC, and Neighborhood Hit kernels.
Reduced Topographic Product to gathered ratios and cumulative logs, and batched
local Procrustes alignment with bounded temporary memory.
Metric registry cache declarations now use typed resource requirements; full
rankings satisfy compatible kNN requests and larger k resources serve
smaller prefixes.
Stress, Scale-Normalized Stress, and Pearson now share one stable sufficient-
statistics pass over unique off-diagonal pairs and release per-run pair
temporaries after their final consumer.
Spearman and Non-Metric Stress now share compact condensed distances and one
reusable original-space pair order instead of requiring two persistent dense
distance matrices.
Topographic Product now retains only O(nk) neighbor tables and computes its
selected distances in bounded row blocks instead of caching two n x n
distance matrices.
Steadiness & Cohesiveness reuses planned kNN tables, keeps its full weighted-SNN
graphs sparse, batches cluster-pair reductions, and preserves fixed-seed
single/multi-worker global and local results.
Repeated embeddings now use one exact maximum-k plan and are prevalidated as
a collection before sequential memory-bounded execution begins.
Parallel repeated-embedding runs share frozen original resources, isolate
mutable per-embedding caches, limit native inner threads, and automatically
fall back for unsafe random-state configurations.
Explicit MLX device and dtype selection now preserves the NumPy default,
forbids silent precision downgrade, records cold/warm/transfer timings, and
falls back to NumPy/SciPy/FAISS per unsupported resource.
MLX distance outputs are reused through unified-memory views by dependent
rankings; embedded workspaces are invalidated between runs, and neighbor
diagnostics expose stable tie handling, self exclusion, block bounds, and
zero-copy boundaries.
On MLX, embedding_workers now requests a native tensor batch width rather
than Python threads; incompatible shapes or plans fall back sequentially with
the reason recorded in collection diagnostics.
On PyTorch, embedding_workers likewise requests a native tensor batch width;
unsupported shapes and memory-constrained plans preserve ordered sequential
execution with an explicit diagnostic reason.