Releases: sdd-org/kiddo
Release list
v6.0.1
π Bug Fixes
-
Ensure kibrary compiles for wasm32-unknown-unknown target (@sdd, Fixes:#515)
-
Dispatch the /fuzz command the way /benchmark does (@sdd)
-
Grant the aggregate gate the permissions its called workflows need (@sdd)
-
Chebyshev over-pruning found by fuzz testing (@sdd)
-
Simd block-4 construction panic found by fuzzer (@sdd)
-
Fuzzer-found SIMD backtracking optimisatition correctness issue (@sdd)
-
Fuzz-uncovered construction bug (@sdd)
-
Prevent f32 over-prune found in fuzz test (@sdd)
-
Block-at-once strats now immutable-only (@sdd)
π€ CI
-
Aggregate required checks into a single PR Mergeable status (@sdd)
-
Run the v6 fuzz suite on demand via a /fuzz comment (@sdd)
π§Ή Chore
- Bump taiki-e/install-action from 2 to 2.85.5 (@dependabot[bot], Signed-off-by:dependabot[bot] support@github.com)
v6.0.0
Almost a year in the making and counting, Kiddo v6 is effectively a full rewrite, addressing some
long-standing issues.
- V6 represents a fundamental shift to a unified single
KdTreestruct, replacing the previous
mutable/immutable and float/fixed splits. The need for separate mutable / immutable trees has
been removed by introducing theLeafStrategytrait, which theKdTreehas as a generic parameter.
LeafStrategies can be mutable or immutable. KdTreeis also now generic over the newStemStrategytrait too. The combination of these two
orthogonal traits allow experimentation and selection of alternative stem layouts and traversal
mechanisms, alongside configurable leaf strategies, for performance experimentation.- The query API has been refactored from a handful of separate methods that were not particularly
cohesive into a single unified fluent builder API. The builder approach is much more orthogonal,
and protects against breaking changes when new options are introduced in the future. It permits
constraints to be encoded in the type system for impossible option combinations, prevents the need
for as many methods that differ only by some combination of features; allowing for configurable
result type projection, query types, and query configurations with defaults that match the v5-era
separate methods. - Some of the other new features added include configurable boundary-inclusivity, periodic boundary
conditions, thewithin_unsorted_visitresult mode to avoid materialization of results,TryFrom
for converting between differentKdTreetypes,new_from_source, andreplace_item. - Distance metric coverage has also been expanded and tidied up, including the addition of Chebyshev
and Minkowski metrics and support for queries whose result type is wider than the
stored coordinate type, which is especially important for fixed-point trees. - With regard to the Stem Strategy trait system, alongside the Eytzinger ordering from v5 and prior
is still available but now supports configurable prefetch behaviour. I've introduced the new
Donnelly stem ordering via a family of stem strategies, featuring configurable pre-fetch and block size,
unrolled traversal, SIMD descent, and full SIMD pruning and backtracking variants. The SIMD variant
contains custom AVX2, AVX512, and NEON kernels.
π Bug Fixes
- Preserve mutable leaf split associations (@sdd)
v6.0.0-alpha.4
β¨ Features
-
Add result capacity hint for radius queries (@sdd)
-
Add adaptive parallel tree construction (@sdd)
-
Specialize within-radius result projection (@sdd)
π Bug Fixes
- Handle padded stems in parallel construction (@sdd)
β»οΈ Refactor
-
Within_unsorted to a visitor (@sdd)
-
Switch from propagating points as indexes to actual values (@sdd)
π§ͺ Testing
-
Add result collection threshold profiler (@sdd)
-
Add v6 release parity benchmark suites (@sdd)
-
Add point projection benchmark (@sdd)
π€ CI
-
Add stem strategy benchmark variant (@sdd)
-
Rename basic benchmark variant (@sdd)
-
Pass benchmark features explicitly (@sdd)
-
Cap leaf benchmark tree size (@sdd)
-
Fix leaf benchmark export filter (@sdd)
-
Cap benchmark trees at 2^25 (@sdd)
-
Fix benchmark v5-v6 chart matching (@sdd)
-
Add ISA-specific stem benchmark reporting (@sdd)
-
Add tree construction benchmarks (@sdd)
π§Ή Chore
-
Bump actions/download-artifact from 4 to 8 (@dependabot[bot], Signed-off-by:dependabot[bot] support@github.com)
-
Bump actions/upload-artifact from 4 to 7 (@dependabot[bot], Signed-off-by:dependabot[bot] support@github.com)
-
Bump actions/setup-python from 5 to 7 (@dependabot[bot], Signed-off-by:dependabot[bot] support@github.com)
-
Add external comparison and projection tooling (@sdd)
-
Remove projection design markdown (@sdd)
-
Remove throwaway projection benchmark (@sdd)
v5.3.3
Ci
- Don't run comitlint for dependabot PRs
- Add v5 eytzinger profile benchmarks
- Split v5 nightly debug and release tests
- Allow nightly chunks lint at MSRV
- Stop ignoring the pinned v5 lockfile
π Bug Fixes
- Correct v5 unsorted nearest-n parity reporting
- Preserve stem alignment in rkyv conversion
- Use metric accumulation for immutable nearest one
- Allow mutable splits past constant axes
π§ͺ Testing
- Add v5 release parity benchmark reporting
π§Ή Chore
- Bump LoliGothick/clippy-check, Signed-off-by:dependabot[bot] support@github.com
- Bump rand deps
- Bump criterion deps
- Bump LoliGothick/clippy-check, Signed-off-by:dependabot[bot] support@github.com
- Bump codecov/codecov-action from 5 to 7, Signed-off-by:dependabot[bot] support@github.com
- Bump actions/checkout from 6 to 7, Signed-off-by:dependabot[bot] support@github.com
- Bump LoliGothick/clippy-check, Signed-off-by:dependabot[bot] support@github.com
- Bump actions/cache from 5 to 6, Signed-off-by:dependabot[bot] support@github.com
- Bump LoliGothick/clippy-check, Signed-off-by:dependabot[bot] support@github.com
- Bump LoliGothick/clippy-check, Signed-off-by:dependabot[bot] support@github.com
- Bump LoliGothick/clippy-check, Signed-off-by:dependabot[bot] support@github.com
- Pin v5 lockfile for msrv
- Bump actions/upload-artifact from 4 to 7, Signed-off-by:dependabot[bot] support@github.com
- Bump actions/setup-python from 5 to 7, Signed-off-by:dependabot[bot] support@github.com
- Bump actions/download-artifact from 4 to 8, Signed-off-by:dependabot[bot] support@github.com
v6.0.0-alpha.3
β¨ Features
- Make local query scratch the default (@sdd)
π Bug Fixes
- Remove broken dot product dist metric and associated code (@sdd)
β‘οΈ Performance
-
Alternate path to avoid wasted calcs on descent (@sdd)
-
Add IS_SIGNED assoc value to Axis (@sdd)
-
Dist1 on Manhattan and Chebyshev use saturating_dist (@sdd)
-
Improved offset update for Chebyshev and Manhattah (@sdd)
-
Use fused linear insertion for threshold vec results (@sdd)
-
Tune sorted and unsorted threshold vec limits (@sdd)
π€ CI
-
Harden pre-release string updater workflow against no changes (@sdd)
-
Publish custom benchmark reports (@sdd)
-
Add bench chart justfile tasks (@sdd)
-
Fix benchmark workflow bootstrap (@sdd)
-
Derive benchmark key without just (@sdd)
-
Pass benchmark args to just correctly (@sdd)
-
Pass benchmark recipe arguments positionally (@sdd)
-
Authenticate initial benchmark pages push (@sdd)
-
Rank featured chart by relative change (@sdd)
-
Add distance metric ISA matrix (@sdd)
-
Fix distance metric ISA benchmark builds (@sdd)
-
Simplify benchmark workflows (@sdd)
-
Fix benchmark workflow shellcheck (@sdd)
-
Suggest benchmarks for performance-sensitive PRs (@sdd)
-
Use heuristic benchmark suggestions (@sdd)
-
Allow benchmark suggestion comment updates (@sdd)
-
Add leaf strategy benchmark variant (@sdd)
-
Allow org members to trigger benchmark runs (@sdd)
-
Clarify benchmark run names (@sdd)
-
Split nightly debug and release tests (@sdd)
π§Ή Chore
-
Bump actions/setup-node from 6 to 7 (@dependabot[bot], Signed-off-by:dependabot[bot] support@github.com)
-
Update las requirement in the cargo-dependencies group (@dependabot[bot], Signed-off-by:dependabot[bot] support@github.com)
v6.0.0-alpha.2
β¨ Features
-
Configurable scratch location (@sdd)
-
Introduce QueryMetric public trait (@sdd, Fixes:Issue #390)
-
Ensure third-party leaf strategies can be used (@sdd)
-
Add example showing how to embed a kd-tree (@sdd)
-
Add ThresholdVecResultCollection for small-k
nearest_n(@cbueth)
π Bug Fixes
-
Add dafault impl of LeafStrategy::new_with_empty_leaf (@sdd)
-
Cache
threshold_distanceinThresholdVecResultCollection(@cbueth) -
Apply
ThresholdVecResultCollectionto scratch-basednearest_npath (@cbueth) -
Dispatch
into_sorted_vec()throughinto_vec()in ThresholdVec (@cbueth) -
Extend
ThresholdVecoptimisation to unsortednearest_npath (@cbueth)
β‘οΈ Performance
-
Pre-allocate unsorted result Vec with capacity 64 (@cbueth)
-
Use
select_nth_unstableextraction inThresholdVecResultCollection(@cbueth) -
Hybrid sorted-vec result collection for small-k
nearest_n(@cbueth)
π§ͺ Testing
-
Add regression test to ensure KdTree::default works (@sdd)
-
Add k=21 nearest_n_within case for BinaryHeap coverage, remove padding test (@cbueth)
π€ CI
-
Prepare embedded example artifacts in CI (@sdd)
-
Add bencher for master push and non-fork PRs (@sdd)
-
Run codspeed in simulation mode only (@sdd)
-
Install cmake for bencher runner (@sdd)
-
Add eytzinger nearest_n bencher profiles (@sdd)
-
Allow bencher runs for collaborators or manually permissioned forks (@sdd)
-
Switch to standard collab model now that repo is in a personal org (@sdd)
-
Ensure examples/data is .gitignored (@sdd)
-
Ensure git-cliff emits well-formatted md (@sdd)
-
Ensure git-cliff emits well-formatted md (@sdd)
-
Ensure git-cliff emits well-formatted md (@sdd)
-
Git-cliff nicer formatting (@sdd)
-
Git-cliff fix formatting yet again (@sdd)
π§Ή Chore
-
Bump LoliGothick/clippy-check (@dependabot[bot], Signed-off-by:dependabot[bot] support@github.com)
-
Migrate config renovate.json (@renovate[bot])
-
Move binaries to be examples or benches to avoid confusion in the crates.io page (@sdd)
-
Bump actions/github-script from 8 to 9 (@dependabot[bot], Signed-off-by:dependabot[bot] support@github.com)
-
Bump LoliGothick/clippy-check (@dependabot[bot], Signed-off-by:dependabot[bot] support@github.com)
-
Update reqwest dep (@sdd)
-
Update rust crate zip to v8 (@renovate[bot])
-
Update git-cliff config (@sdd)
-
Workflow to permit /intro comments on release-plz prs (@sdd)
-
Ensure release-plz and intro-comment format changelog (@sdd)
v6.0.0-alpha.1
Almost a year in the making and counting, Kiddo v6 is effectively a full rewrite, addressing some
long-standing issues.
- V6 represents a fundamental shift to a unified single
KdTreestruct, replacing the previous
mutable/immutable and float/fixed splits. The need for separate mutable / immutable trees has
been removed by introducing theLeafStrategytrait, which theKdTreehas as a generic parameter.
LeafStrategies can be mutable or immutable. KdTreeis also now generic over the newStemStrategytrait too. The combination of these two
orthogonal traits allow experimentation and selection of alternative stem layouts and traversal
mechanisms, alongside configurable leaf strategies, for performance experimentation.- The query API has been refactored from a handful of separate methods that were not particularly
cohesive into a single unified fluent builder API. The builder approach is much more orthogonal,
and protects against breaking changes when new options are introduced in the future. It permits
constraints to be encoded in the type system for impossible option combinations, prevents the need
for as many methods that differ only by some combination of features; allowing for configurable
result type projection, query types, and query configurations with defaults that match the v5-era
separate methods. - Some of the other new features added include configurable boundary-inclusivity, periodic boundary
conditions, thewithin_unsorted_visitresult mode to avoid materialization of results,TryFrom
for converting between differentKdTreetypes,new_from_source, andreplace_item. - Distance metric coverage has also been expanded and tidied up, including the addition of Chebyshev
Minkowski, and Dot Product metrics and support for queries whose result type is wider than the
stored coordinate type, which is especially important for fixed-point trees. - With regard to the Stem Strategy trait system, alongside the Eytzinger ordering from v5 and prior
is still available but now supports configurable prefetch behaviour. I've introduced the new
Donnelly stem ordering via a family of stem strategies, featuring configurable pre-fetch and block size,
unrolled traversal, SIMD descent, and full SIMD pruning and backtracking variants. The SIMD variant
contains custom AVX2, AVX512, and NEON kernels.
v5.3.2
Ci
- Backport workflow and repo config updates
- Backport build and coverage workflow updates
π Bug Fixes
- Add msrv, use algernative to f64::fract
π Styling
- Formatting and clean up unneeded md file
v5.3.0
I'm extremely grateful to @cbueth for his fantastic set of contributions to this release. The new distance metrics are a great addition to the library, come with extensive tests, and he was even able to contribute a big fix and some welcome refactors along the way. Thanks very much, Carlson!
β¨ Features
- Add Chebyshev (L_β norm) distance metric (#290, @cbueth)
- Add Generalised Minkowski (L_p norm) distance metric (#291, @cbueth)
- Add
*_exclusivemethods for querying with an exclusive (<) rather than inclusive (<=) boundary check (#294, @cbueth)
π Bug Fixes
- Ensure that all existing query methods have boundary checks that are inclusive (
<=), in line with typical k-d tree expectations (@cbueth)
If you were relying on these checks being exclusive, switch over to using the new*_exclusivevariants of the query methods.
π Docs
- Correct a mistake in the docs for
fixed::distance::Manhattan(#283, @Luca-spopo)
Deps
- update cmov dep from 0.4 to 0.5 (@sdd)
v5.2.1
π Documentation
- Update some stale documentation. Remove the global_allocate feature which is no longer used for anything