Skip to content

Releases: FlorianPfaff/PyRecEst

Release 2.2.3

22 May 06:38
26db78c

Choose a tag to compare

📚 Docs

  • Clarify the InformationFormDistributedKalmanNode/IDKFNode prediction-input conventions in the API docs so node-local inputs are interpreted correctly. (#2088)
  • Expand the documentation with API-selection, distribution-taxonomy, error-handling, and install-footprint guidance for choosing and deploying PyRecEst. (#2102)
  • Document the public API registry and backend capability matrix so supported modules and examples are easier to discover. (#2105)
  • Add scientific validation documentation, a backend-portable workflows tutorial, and backend API matrix checks for cross-backend usage. (#2109)
  • Document backend contracts and advanced tracking behavior while tightening distribution API and scientific-invariant coverage. (#2111)

📦 Dependencies

  • Update generated requirements to use NumPy 2.4.6. (#2089)
  • Refresh the locked pymdown-extensions version for documentation builds. (#2093)
  • Refresh the locked idna version in Poetry installs to 3.15. (#2094)
  • Raise the runtime and development idna pins to 3.15 and add a temporary OSV override so dependency scans report the fixed version. (#2095)
  • Regenerate the dependency files, including new requirements-all.txt and requirements-min.txt install variants. (#2097)
  • Refresh generated requirement files after the dependency set changes. (#2099)
  • Update generated requirements to use idna 3.15. (#2100)
  • Refresh the Poetry lockfile to keep packaged dependencies in sync. (#2115)
  • Refresh the generated requirements and lockfile entries after dependency changes. (#2122)
  • Update generated requirements to use the latest astropy-iers-data tables package. (#2125)
  • Update generated requirements to use requests 2.34.2. (#2126)
  • Update generated requirements to use networkx 3.6.1. (#2127)
  • Update generated requirements to use boule 0.6.0. (#2128)
  • Update generated requirements to use packaging 26.2. (#2129)
  • Refresh the generated requirements for the Healpy, JAX, and PyTorch install variants. (#2131)
  • Update generated requirements to use requests 2.34.2. (#2133)
  • Update generated requirements to use pandas 3.0.3. (#2134)
  • Update generated requirements to use setuptools 82.0.1. (#2135)
  • Update generated requirements to use packaging 26.2. (#2136)
  • Update generated requirements to use idna 3.16. (#2137)
  • Refresh the generated requirements for the Healpy, JAX, and PyTorch install variants after the latest dependency bumps. (#2140)

🐛 Fixes

  • Make the JAX array_from_sparse conversion place multidimensional entries correctly when rebuilding dense arrays. (#2091)
  • Make HypersphericalGridDistribution.to_hemisphere() reject invalid even-sized grids with a clear ValueError. (#2092)
  • Make NumPy and JAX backend contract operations such as reductions, take, cross, scatter_add, and slicing behave more consistently. (#2104)
  • Resolve hyperrectangular distribution edge cases so NumPy, JAX, and PyTorch backends handle them consistently. (#2108)
  • Restore custom distribution behavior and filter lazy exports so distributions and filter modules load consistently again. (#2110)
  • Make Fibonacci, spherical, circular, and Driscoll-Healy samplers return valid grids for singleton and low-density edge cases. (#2117)
  • Make evaluation runs pass Kalman process noise correctly, honor likelihood-based updates, and accept simulator-produced MTT ground-truth arrays. (#2119)
  • Resolve evaluation distance selection and object-array estimate extraction so filter evaluations use the intended metrics and mean extractors. (#2121)

✨ Features

  • Add CLI scenario tooling and backend-support utilities while resolving several tracking, distribution, and Gaussian numerics edge cases across PyRecEst. (#2096)

⚡ Improvements

  • Add backend portability, optional-dependency, and numerical-stability utilities plus compatibility and release-note tooling for easier setup across environments. (#2103)
  • Add backend capability and public API contract checks plus benchmark baselines to make supported features and regressions easier to track. (#2107)
  • Add pyrecest.api_registry and install, benchmark, and public-API checks so supported imports and dependency footprints are easier to audit. (#2112)
  • Add reproducibility and scenario-registry helpers and improve diagnostics, CLI discovery, and evaluation/filter backend boundaries. (#2114)

Release 2.2.2

19 May 02:00
f250cb6

Choose a tag to compare

What's Changed

  • Fix MegaLinter lint errors across three files by @Copilot in #2067
  • [MegaLinter] Apply linters automatic fixes by @github-actions[bot] in #2069
  • Add fixed-lag and fixed-interval smoothers for MEM-QKF trackers by @FlorianPfaff in #2068
  • [MegaLinter] Apply linters automatic fixes by @github-actions[bot] in #2070
  • Add RB-FFBSi smoother for MEM-RBPF trackers by @FlorianPfaff in #2071
  • [MegaLinter] Apply linters automatic fixes by @github-actions[bot] in #2072
  • Align LOMEM update with paper reduction by @FlorianPfaff in #2074
  • Fix MegaLinter E402 and invalid parameterized test case causing CI failures by @Copilot in #2078
  • Ensure hypertoroidal wrapped-normal mean is 1-D by @FlorianPfaff in #2082
  • Fix von Mises moment inversion by @FlorianPfaff in #2081
  • Fix JAX wrapped-normal PDF convergence check by @FlorianPfaff in #2079
  • Bump numpy from 2.4.4 to 2.4.5 by @dependabot[bot] in #2073
  • Handle undefined hyperspherical mean directions by @FlorianPfaff in #2080
  • Guard undefined hyperspherical mean directions by @FlorianPfaff in #2077
  • Fix von Mises moment inversion edge cases by @FlorianPfaff in #2075
  • Adapt RM smoother to Granstrom extent recursion by @FlorianPfaff in #2076
  • [MegaLinter] Apply linters automatic fixes by @github-actions[bot] in #2085
  • Bump version from 2.2.1 to 2.2.2 by @FlorianPfaff in #2086
  • Update requirements by @github-actions[bot] in #2087

Full Changelog: 2.2.1...2.2.2

Release 2.2.1

16 May 19:18

Choose a tag to compare

What's Changed

  • Add tracking performance metrics by @FlorianPfaff in #2011
  • Add fixed-lag out-of-sequence measurement utilities by @FlorianPfaff in #2010
  • Add ready-made dynamic and sensor model catalog by @FlorianPfaff in #2014
  • Add association hypothesis and gating helpers by @FlorianPfaff in #2016
  • Use matvec for camera projection helpers by @FlorianPfaff in #2017
  • Add association hypothesis smoke workflow by @FlorianPfaff in #2019
  • [MegaLinter] Apply linters automatic fixes by @github-actions[bot] in #2021
  • Bump urllib3 from 2.6.3 to 2.7.0 by @dependabot[bot] in #2022
  • Add Euclidean boxed particle filter by @FlorianPfaff in #2023
  • Fix block particle filter lint issues by @FlorianPfaff in #2025
  • [MegaLinter] Apply linters automatic fixes by @github-actions[bot] in #2026
  • Fix MEM-RBPF tracker lint issue by @FlorianPfaff in #2027
  • Bump urllib3 requirements to 2.7.0 by @FlorianPfaff in #2028
  • Add VBRM extended object tracker by @FlorianPfaff in #2031
  • Add MEM-QKF tracker by @FlorianPfaff in #2033
  • [MegaLinter] Apply linters automatic fixes by @github-actions[bot] in #2034
  • Update MEM-QKF robustness by @FlorianPfaff in #2035
  • Add LOMEM extended object tracker by @FlorianPfaff in #2036
  • Reuse MegaLinter autofix PR branch by @FlorianPfaff in #2041
  • Add MEM-QKF batch update mode by @FlorianPfaff in #2037
  • [MegaLinter] Apply linters automatic fixes by @github-actions[bot] in #2043
  • Use backend in MEM-RBPF tracker by @FlorianPfaff in #2044
  • [MegaLinter] Apply linters automatic fixes by @github-actions[bot] in #2045
  • Restore velocity locked MEM-QKF aliases by @FlorianPfaff in #2047
  • Bump torch from 2.11.0 to 2.12.0 by @dependabot[bot] in #2049
  • [MegaLinter] Apply linters automatic fixes by @github-actions[bot] in #2048
  • Add tests and exports for VL-MEM-QKF smoother by @FlorianPfaff in #2053
  • [MegaLinter] Apply linters automatic fixes by @github-actions[bot] in #2050
  • Add velocity-aided MEM-QKF tracker by @FlorianPfaff in #2051
  • Add mode RBPF manifold UKF tracker by @FlorianPfaff in #2052
  • [MegaLinter] Apply linters automatic fixes by @github-actions[bot] in #2054
  • Fix vMF deterministic sigma-point sampler by @FlorianPfaff in #2055
  • [MegaLinter] Apply linters automatic fixes by @github-actions[bot] in #2056
  • Fix hypertoroidal Dirac marginalization typing by @FlorianPfaff in #2058
  • [MegaLinter] Apply linters automatic fixes by @github-actions[bot] in #2059
  • [MegaLinter] Apply linters automatic fixes by @github-actions[bot] in #2060
  • Fix JAX backend failures in mixture pruning and vMF deterministic sampling by @Copilot in #2061
  • [MegaLinter] Apply linters automatic fixes by @github-actions[bot] in #2062
  • Bump version from 2.2.0 to 2.2.1 by @FlorianPfaff in #2063
  • Update requirements by @github-actions[bot] in #2064
  • [MegaLinter] Apply linters automatic fixes by @github-actions[bot] in #2065

Full Changelog: 2.2.0...2.2.1

Release 2.2.0

09 May 13:19
f86262b

Choose a tag to compare

⚡ Improvements

  • Expose linear Gaussian innovation diagnostics through KalmanFilter.innovation_linear(...) and KalmanFilter.normalized_innovation_squared_linear(...) for backend-native Kalman consistency checks. (#1999)
  • Add KalmanFilter.update_model_robust(...) so model-based Kalman filters can use robust linear-Gaussian updates with gating, Huber, and Student-t scaling. (#2002)
  • Add optional diagnostics to linear Gaussian and Kalman updates, including residuals, normalized innovation squared, measurement-noise scale, and action labels. (#1987)
  • Add inverse and composition helpers to AffineTransform for point-set registration workflows. (#1991)
  • Add student_t_covariance_scale(...) to compute robust measurement-covariance inflation for Student-t Kalman updates. (#1988)

✨ Features

  • Add NamedPairwiseFeatureSchema and CalibratedPairwiseAssociationModel to define named pairwise association features and turn them into calibrated match probabilities or costs. (#2004)
  • Add pairwise_mahalanobis_distances and pairwise_covariance_shape_components in pyrecest.utils for generic covariance-based association features. (#2003)
  • Add linear_gaussian_update_robust(...) and KalmanFilter.update_linear_robust(...) for gated, Student-t, Huber, and NIS-inflated linear-Gaussian measurement updates. (#1992)
  • Add pyrecest.filters.relaxed_s3f_so3 with relaxed S3F prediction helpers for SO(3) and S3+ x R3 state spaces. (#1998)
  • Add generic track-evaluation utilities in pyrecest.utils for scoring links, complete tracks, fragmentation, and aggregate track matrices across sessions. (#1997)
  • Add confidence-aware, heteroskedastic geodesic log-likelihood updates for SO3ProductParticleFilter and PartitionedSO3ProductParticleFilter. (#1996)
  • Expose a public pyrecest.distributions.so3_helpers module for quaternion normalization, exp/log maps, rotation conversion, geodesic distance, and vector rotation on SO(3). (#1990)
  • Add so3_right_multiplication_grid_transition(...) and quaternion_grid_transition_density(...) for quaternion-grid prediction on SO(3). (#1995)

🐛 Fixes

  • Resolve scalar SO(3) geodesic-distance handling and keep quaternion-grid transition densities normalized for SO(3) particle-filter workflows. (#2000)

Release 2.1.0

08 May 15:28
efc21d7

Choose a tag to compare

✨ Features

  • Add PartitionedSO3ProductParticleFilter for SO(3)^K states with configurable partitions, per-block weights, and block-wise resampling. (#1980)
  • Add configurable post-update resampling to particle filters so users can keep weighted particles, trigger resampling manually, or apply a custom resampling rule. (#1978)
  • Let FullSCGPTracker.update() weight or mask individual measurements so unreliable detections can be down-weighted or ignored during shape and kinematic updates. (#1976)
  • Add SphericalHarmonicsEOTTracker for 3-D star-convex extended-object tracking with spherical-harmonic extent coefficients. (#1973)

⚡ Improvements

  • Speed up BinghamDistribution normalization and moment fitting, especially for 2D and 4D cases, to make Bingham-based estimation much faster. (#1972)
  • Make HyperhemisphericalGridFilter.get_point_estimate() return the dominant scatter-matrix eigenvector directly for much faster point estimates. (#1970)

Release 2.0.0

04 May 16:21
d07b3ec

Choose a tag to compare

✨ Features

  • Introduce AdditiveNoiseTransitionModel and AdditiveNoiseMeasurementModel so nonlinear additive-noise dynamics and sensor models can be defined once and reused across compatible filters. (#1950)
  • Add SO(3) and SO(3)^K representation conversion support, including aliases and tangent-Gaussian and Dirac approximations for rotation distributions. (#1939)
  • Add reusable model adapters for grid filters so AbstractGridFilter can update from likelihood models and predict from transition-density models. (#1948)
  • Expand representation conversion aliases with domain-specific targets, custom alias registration, and a runnable conversion example for more distribution families. (#1964)
  • Add predict_model(...) and update_model(...) support to particle filters for reusable transition-sampling and likelihood model objects. (#1947)
  • Add predict_model(...) and update_model(...) support to UnscentedKalmanFilter for reusable additive-noise transition and measurement models. (#1944)
  • Add KalmanFilter.predict_model(...) and update_model(...) so linear Gaussian model objects can be passed directly to the filter. (#1945)
  • Add reusable likelihood, transition-sampling, and transition-density model objects in pyrecest.models for particle, grid, and related estimators. (#1949)
  • Add reusable linear Gaussian transition and measurement model classes in pyrecest.models with prediction and noise helper methods. (#1946)
  • Add string-based representation conversion aliases such as particles, gaussian, grid, and fourier, plus convert_to(...) convenience methods on distributions. (#1931)
  • Introduce a distribution representation-conversion layer with convert_distribution(...), conversion registration helpers, and method-form convert_to(...) access on distributions. (#1929)
  • Add proposal-based rejuvenation for goal-conditioned replay particle filters so particles can be pulled back onto high-likelihood position hypotheses after an update. (#1928)
  • Add GoalConditionedReplayParticleIMMFilter with per-particle motion modes for stationary, diffusion, momentum, goal-directed, and jump replay dynamics. (#1927)

⚡ Improvements

  • Make the representation conversion API available directly from pyrecest.distributions, including package-level exports for convert_distribution(...) and related helpers. (#1940)
  • Add pyrecest.protocols.testing helpers that make it easier to check whether custom distributions, filters, and models satisfy PyRecEst capability protocols. (#1953)
  • Add public model capability protocols and adapter helpers that let existing Kalman-style APIs accept structurally compatible model objects. (#1962)
  • Add a protocol capability matrix for representative distributions and filters, and ensure batched particle-model predictions keep the expected particle layout. (#1965)
  • Ship a py.typed marker so PyRecEst exposes its type information to external type checkers and typed downstream projects. (#1954)
  • Introduce the public pyrecest.protocols package with common array and dimension contracts plus filter capability protocols for extension code. (#1952)
  • Add backend-aware validation utilities for model vectors, matrices, covariances, and inferred state dimensions to make reusable model objects safer to construct. (#1942)
  • Speed up StateSpaceSubdivisionFilter linear updates and relaxed S3F covariance calculations with vectorized implementations. (#1926)

📚 Docs

  • Document how to extend pyrecest.protocols and add runnable custom distribution and custom filter examples. (#1963)
  • Add executable Kalman, Unscented Kalman, and particle filter examples that show how to use reusable model objects across filters. (#1943)

Release 1.1.2

29 Apr 10:52
81fac1a

Choose a tag to compare

What's Changed

Full Changelog: 1.1.1...1.1.2

Release 1.1.1

26 Apr 15:38
1c808e2

Choose a tag to compare

What's Changed

Full Changelog: 1.1.0...1.1.1

Release 1.1.0

25 Apr 08:44
f344bab

Choose a tag to compare

What's Changed

Full Changelog: 1.0.3...1.1.0

Release 1.0.3

24 Apr 07:48
beca106

Choose a tag to compare

What's Changed

Full Changelog: 1.0.2...1.0.3