Very fast Kalman filters.
Project description
fast-kalman
fast-kalman is a fixed-size C++23 Kalman filtering library with nanobind
Python bindings.
A Kalman filter estimates hidden state from noisy measurements by combining a
model prediction with observed data. It is commonly used for tracking, sensor
fusion, smoothing financial indicators, and any small state-space model where
you need a fast estimate plus uncertainty. This library implements several
Kalman filter variants for tiny dimensions, with explicit P, Q, and R
covariance matrices and no dependency on a matrix library.
The focus is speed for small fixed-size problems. In the included nx=2,nz=1
benchmark on this machine:
- the direct C++
kalman::LinearKalmanFilteris about 110x faster than OpenCV's nativecv::KalmanFilter - the Python
kalman.LinearKalmanFilterbinding is about 3.3x faster than OpenCV's C++-backedcv2.KalmanFilter - the Python
update_many(...)path runs linear updates at about 240 ns per measurement by keeping the loop in C++
Install
Python
Install from PyPI:
python -m pip install fast-kalman
Then import the package as kalman.
Build and install from this source tree:
python -m pip install .
For development and tests:
python -m pip install -e ".[test,benchmark]"
pytest tests
Build a wheel without asking pip to resolve already-installed runtime dependencies:
python -m pip wheel . --no-build-isolation --no-deps -w dist
The Python package is built with scikit-build-core and nanobind. Runtime
dimensions are accepted from 1 through 8 for Python constructors.
Release Builds
Build and upload the source distribution without Docker:
rm -rf dist
python -m build --sdist
python -m twine check dist/*
python -m twine upload dist/fast_kalman-*.tar.gz
Build public binary wheels with cibuildwheel. On Linux, cibuildwheel runs
manylinux/musllinux builds in containers, so Docker or Podman must be installed
and running:
docker --version
python -m cibuildwheel --platform linux --output-dir wheelhouse
python -m twine check wheelhouse/*
python -m twine upload wheelhouse/*
With Podman:
CIBW_CONTAINER_ENGINE=podman python -m cibuildwheel --platform linux --output-dir wheelhouse
Only upload wheelhouse/* after cibuildwheel succeeds and the directory
contains .whl files. A local linux_x86_64 wheel from python -m build is
useful for testing, but manylinux/musllinux wheels from cibuildwheel are the
right Linux binary artifacts for PyPI.
C++
Build and install as a CMake package:
cmake -S . -B build/cpp -DCMAKE_BUILD_TYPE=Release
cmake --build build/cpp
cmake --install build/cpp --prefix /path/to/prefix
Consume from another CMake project:
find_package(kalman REQUIRED)
target_link_libraries(my_target PRIVATE kalman::kalman)
The C++ API is template-based:
#include <kalman/kalman.hpp>
auto kf = kalman::make_constant_velocity_1d(
100.0, 0.0, 1.0,
10.0, 10.0,
1e-4, 1e-3,
0.25);
auto stats = kf.update(kalman::Vec<1>{100.5});
Nonlinear C++ model functions are template callables. Pass lambdas or functor
objects; the core API does not use function pointers or std::function for
transition, measurement, Jacobian, innovation, or retract callbacks.
Python Quick Start
import kalman
kf = kalman.LinearKalmanFilter(2, 1)
kf.x = [100.0, 0.0]
kf.P = [10.0, 0.0, 0.0, 10.0]
kf.F = [1.0, 1.0, 0.0, 1.0]
kf.Q = [1e-4, 0.0, 0.0, 1e-3]
kf.H = [1.0, 0.0]
kf.R = [0.25]
stats = kf.update([100.5])
batch = kf.update_many([100.5, 101.0, 101.5, 102.0])
Compiled nonlinear model example:
rb = kalman.RangeBearingEKF2D()
rb.dt = 1.0
rb.landmark_x = 0.0
rb.landmark_y = 0.0
rb.x = [1.0, 1.0, 0.1, 0.0]
rb.P = [1.0, 0.0, 0.0, 0.0,
0.0, 1.0, 0.0, 0.0,
0.0, 0.0, 1.0, 0.0,
0.0, 0.0, 0.0, 1.0]
rb.Q = [1e-3, 0.0, 0.0, 0.0,
0.0, 1e-3, 0.0, 0.0,
0.0, 0.0, 1e-3, 0.0,
0.0, 0.0, 0.0, 1e-3]
rb.R = [0.1, 0.0, 0.0, 0.1]
stats = rb.update_many([[1.5, 0.8], [1.6, 0.75]])
Filter Catalog
All matrices are row-major flat arrays in Python. In C++, vectors and matrices
are kalman::Vec<N> and kalman::Mat<R, C> backed by std::array<double, N>.
Shared defaults:
kDefaultEps = 1e-15kDefaultJitter = 1e-12kDefaultVarianceFloor = 1e-15
Update methods return UpdateStats<NX, NZ> in C++ and a dictionary in Python:
innovation: residual vectorS: innovation covarianceK: Kalman gainnis: normalized innovation squaredok: whether the update succeeded numerically
LinearKalmanFilter<NX, NZ>
Standard linear covariance-form Kalman filter.
State and options:
x: state vector, lengthNXP: state covariance,NX x NXF: transition matrix,NX x NXQ: process noise covariance,NX x NXH: measurement matrix,NZ x NXR: measurement noise covariance,NZ x NZlast: lastUpdateStats
Methods:
predict()- C++ only:
predict(B, u)for control input correct(z, eps=kDefaultEps)update(z, eps=kDefaultEps)correct_many(measurements, return_stats=False, eps=kDefaultEps)update_many(measurements, return_stats=False, eps=kDefaultEps)correct_scalar(z, h, r, eps=kDefaultEps)whenNZ == 1
Convenience constructors:
make_scalar_random_walk(initial_value, initial_variance, process_variance, measurement_variance)make_constant_velocity_1d(initial_position, initial_velocity, dt, position_variance, velocity_variance, process_position_variance, process_velocity_variance, measurement_variance)make_constant_acceleration_1d(initial_position, initial_velocity, initial_acceleration, dt, position_variance, velocity_variance, acceleration_variance, process_position_variance, process_velocity_variance, process_acceleration_variance, measurement_variance)
Automatic tuning:
tools/tune_linear_kalman.pyestimatesx,P,F,Q,H, andRfrom a numeric text stream.- Python:
LinearKalmanTuner(nx, nz, dt=1.0, model="auto", min_variance=1e-12, forgetting=0.75)keeps state across batches and returns aLinearKalmanTuningnamedtuple ordered forLinearKalmanFilter(*params).
ExtendedKalmanFilter<NX, NZ>
Extended Kalman filter for nonlinear transition and measurement models with caller-supplied Jacobians.
State and options:
x,P,Q,R,last
Methods:
predict(transition, transition_jacobian)correct(z, measurement, measurement_jacobian, eps=kDefaultEps)- Python:
update_many(measurements, transition, transition_jacobian, measurement, measurement_jacobian, return_stats=False, eps=kDefaultEps)
Python callbacks receive NumPy arrays and may return NumPy arrays or flat sequences. C++ callables are template parameters and can be inlined.
Automatic tuning:
- Python:
ExtendedKalmanTuner(nx, nz, dt=1.0, model="auto", min_variance=1e-12, forgetting=0.75)estimates initial Euclideanx,P,Q, andRand returns anExtendedKalmanTuningnamedtuple ordered forExtendedKalmanFilter(*params). The nonlinear transition and measurement callbacks remain caller-supplied.
IteratedExtendedKalmanFilter<NX, NZ>
Iterated EKF correction for measurement models that benefit from repeated linearization.
State and options:
x,P,Q,R,last
Methods:
predict(transition, transition_jacobian)correct(z, measurement, measurement_jacobian, max_iterations=5, tolerance=1e-10, eps=kDefaultEps)- Python:
update_many(measurements, transition, transition_jacobian, measurement, measurement_jacobian, max_iterations=5, tolerance=1e-10, return_stats=False, eps=kDefaultEps)
Automatic tuning:
- Python:
IteratedExtendedKalmanTuner(nx, nz, dt=1.0, model="auto", min_variance=1e-12, forgetting=0.75)returnsIteratedExtendedKalmanTuningordered forIteratedExtendedKalmanFilter(*params). Tunemax_iterationsandtoleranceseparately for accuracy/latency.
UnscentedKalmanFilter<NX, NZ>
Unscented Kalman filter using Cholesky-generated sigma points.
State and options:
x,P,Q,R,lastalpha,beta,kappathroughUnscentedParameters- defaults:
alpha = 1e-3,beta = 2.0,kappa = 0.0 - C++ helpers:
lambda(),scale(),wm(i),wc(i),sigma_points(...)
Methods:
predict(transition, jitter=kDefaultJitter)correct(z, measurement, jitter=kDefaultJitter, eps=kDefaultEps)- Python:
update_many(measurements, transition, measurement, return_stats=False, jitter=kDefaultJitter, eps=kDefaultEps) - Python batch sigma-point API:
predict_batch(transition_batch, jitter=kDefaultJitter)correct_batch(z, measurement_batch, jitter=kDefaultJitter, eps=kDefaultEps)update_many_batch(measurements, transition_batch, measurement_batch, return_stats=False, jitter=kDefaultJitter, eps=kDefaultEps)
transition_batch receives a (2 * NX + 1, NX) NumPy array and returns the
propagated sigma points with the same shape. measurement_batch receives a
(2 * NX + 1, NX) array and returns (2 * NX + 1, NZ).
Automatic tuning:
- Python:
UnscentedKalmanTuner(nx, nz, alpha=1e-3, beta=2.0, kappa=0.0, dt=1.0, model="auto", min_variance=1e-12, forgetting=0.75)returnsUnscentedKalmanTuningordered forUnscentedKalmanFilter(*params). Validatealpha,beta, andkappaagainst innovation behavior and held-out data.
InvariantExtendedKalmanFilter<ErrorN, NZ, StateT>
C++ invariant-error EKF shell for non-Euclidean state spaces.
State and options:
state: user-supplied state typeP,Q,R,last
Methods:
predict(propagate, error_transition)correct(z, measurement, error_jacobian, innovation, retract, eps=kDefaultEps)
This intentionally requires caller-supplied propagation, error transition, innovation, and retract operations. There is no fake universal IEKF for all state spaces.
Automatic tuning:
- No general automatic tuner. Tune the error-state
Qand measurementRfor the chosen manifold and sensor model.
EnsembleKalmanFilter<NX, NZ, EnsembleSize>
Ensemble Kalman filter. The current Python binding exposes EnsembleSize == 8;
C++ supports any compile-time ensemble size of at least 2.
State and options:
members: ensemble membersx: ensemble meanP: ensemble covarianceR: measurement noise covariancelast
Methods:
recompute_mean_covariance()predict(transition)- C++:
predict(transition, process_noise) - C++:
correct(z, measurement, observation_noise, eps=kDefaultEps) correct_deterministic(z, measurement, eps=kDefaultEps)- Python:
update_many(measurements, transition, measurement, return_stats=False, eps=kDefaultEps) - Python batch member API:
predict_batch(transition_batch)correct_deterministic_batch(z, measurement_batch, eps=kDefaultEps)update_many_batch(measurements, transition_batch, measurement_batch, return_stats=False, eps=kDefaultEps)
transition_batch receives an (8, NX) NumPy array and returns (8, NX).
measurement_batch receives (8, NX) and returns (8, NZ).
Automatic tuning:
- Python:
EnsembleKalmanTuner(nx, nz, ensemble_size=8, dt=1.0, model="auto", min_variance=1e-12, forgetting=0.75)estimates member initialization andR, returningEnsembleKalmanTuningordered forEnsembleKalmanFilter(*params).
AdaptiveKalmanFilter<NX, NZ>
Adaptive wrapper around LinearKalmanFilter that can update R and optionally
Q from innovation statistics.
State and options:
kf: underlying linear filter in C++- Python exposes
x,P,F,Q,H,R forgetting: exponential forgetting factor, default0.98min_variance: variance floor, default1e-12adapt_R: adapt measurement noise, defaulttruediagonal_R_only: keep only diagonalR, defaulttrueadapt_Q_from_state_correction: heuristicQadaptation, defaultfalseinnovation_covariance_ema,initialized
Methods:
predict()correct(z, eps=kDefaultEps)update(z, eps=kDefaultEps)correct_many(measurements, return_stats=False, eps=kDefaultEps)update_many(measurements, return_stats=False, eps=kDefaultEps)
Automatic tuning:
- This filter self-tunes online. Use
LinearKalmanTunerortools/tune_linear_kalman.pyfor initialF,H,P,Q, andR, then let the adaptive filter refineRonline if the innovation statistics are stable.
RangeBearingEKF2D
Python-facing compiled nonlinear EKF model for high-throughput range/bearing tracking without Python model callbacks.
Model:
- state:
[x, y, vx, vy] - measurement:
[range, bearing] - constant-velocity prediction
- configurable landmark at
(landmark_x, landmark_y)
State and options:
dtlandmark_x,landmark_yx,P,Q,R,last
Methods:
predict()measurement(x)measurement_jacobian(x)correct(z, eps=kDefaultEps)update(z, eps=kDefaultEps)update_many(measurements, return_stats=False, eps=kDefaultEps)
Automatic tuning:
- Python:
RangeBearingEKF2DTuner(nx=4, nz=2, dt=1.0, landmark_x=0.0, landmark_y=0.0, min_variance=1e-12, forgetting=0.75)estimatesx,P,Q, andRfrom[range, bearing]batches and returnsRangeBearingEKF2DTuningordered forRangeBearingEKF2D(*params).
Tuning From Data
tools/tune_linear_kalman.py estimates starting linear-filter parameters from a
numeric text stream:
tools/tune_linear_kalman.py prices.txt --nx 2 --nz 1 --dt 1.0
tools/tune_linear_kalman.py samples.txt --nx 4 --nz 2 --format json
The script accepts commas, spaces, or newlines. Values are grouped by --nz.
With --model auto, it chooses these layouts:
nx == nz: random walknx == 2 * nz: constant velocitynx == 3 * nz: constant acceleration- otherwise: generic identity transition
It prints row-major F, H, P, Q, and R, plus Python setup and C++
convenience-constructor arguments when applicable. Treat the output as initial
tuning values; validate against held-out data and inspect innovations or NIS
before shipping.
Python also exposes stateful tuning classes for library use. Each update(...)
call takes one independent batch of observations, such as one day's samples.
The tuner refines its internal estimate across calls, but it does not assume
that the last sample from one batch is continuous with the first sample from
the next batch.
import kalman
tuner = kalman.LinearKalmanTuner(2, 1, dt=1.0)
params = tuner.update(day_1_prices)
params = tuner.update(day_2_prices)
kf = kalman.LinearKalmanFilter(*params)
Available tuners:
LinearKalmanTuner->LinearKalmanTuning(nx, nz, x, P, F, Q, H, R)ExtendedKalmanTuner->ExtendedKalmanTuning(nx, nz, x, P, Q, R)IteratedExtendedKalmanTuner->IteratedExtendedKalmanTuning(nx, nz, x, P, Q, R)UnscentedKalmanTuner->UnscentedKalmanTuning(nx, nz, x, P, Q, R, alpha, beta, kappa)EnsembleKalmanTuner->EnsembleKalmanTuning(nx, nz, ensemble_size, members, R)RangeBearingEKF2DTuner->RangeBearingEKF2DTuning(dt, landmark_x, landmark_y, x, P, Q, R)
There is no AdaptiveKalmanTuner because AdaptiveKalmanFilter is the
self-tuning variant.
Benchmarks
Run both benchmark layers:
python -m pip install -e ".[benchmark]"
benchmarks/benchmark_python_filters.py --nx 2 --nz 1
benchmarks/benchmark_cpp_core.py --nx 2 --nz 1
benchmark_python_filters.py measures the nanobind API, including Python
callback overhead, update_many(...), UKF sigma-point batch callbacks, EnKF
member batch callbacks, and compiled model wrappers. When cv2 is installed, it
compares the matching linear predict/correct workload against OpenCV's
C++-backed cv2.KalmanFilter.
benchmark_cpp_core.py generates and compiles a small C++ benchmark binary. It
measures the direct template API with inlinable lambdas/functors and covers the
C++-only invariant EKF. When OpenCV development files are available through
pkg-config opencv4, it also benchmarks native cv::KalmanFilter.
Latest local nx=2,nz=1 run:
Python layer
| Workload | Implementation | ns/update |
|---|---|---|
| linear update | kalman.LinearKalmanFilter |
987 |
| linear update | cv2.KalmanFilter |
3231 |
linear update_many |
kalman.LinearKalmanFilter |
240 |
| adaptive update | kalman.AdaptiveKalmanFilter |
1090 |
adaptive update_many |
kalman.AdaptiveKalmanFilter |
350 |
| EKF NumPy callbacks | kalman.ExtendedKalmanFilter |
7503 |
EKF update_many |
kalman.ExtendedKalmanFilter |
6056 |
| iterated EKF callbacks | kalman.IteratedExtendedKalmanFilter |
14550 |
iterated EKF update_many |
kalman.IteratedExtendedKalmanFilter |
13436 |
| UKF per-sigma callbacks | kalman.UnscentedKalmanFilter |
21861 |
| UKF batched sigma callbacks | kalman.UnscentedKalmanFilter |
7203 |
UKF update_many_batch |
kalman.UnscentedKalmanFilter |
5867 |
| EnKF per-member callbacks | kalman.EnsembleKalmanFilter |
34177 |
| EnKF batched member callbacks | kalman.EnsembleKalmanFilter |
7513 |
EnKF update_many_batch |
kalman.EnsembleKalmanFilter |
6719 |
compiled range/bearing EKF update_many |
kalman.RangeBearingEKF2D |
570 |
C++ layer
| Workload | Implementation | ns/update |
|---|---|---|
| linear update | kalman::LinearKalmanFilter |
29.7 |
| linear update | cv::KalmanFilter |
3265 |
| scalar hot path | kalman::LinearKalmanFilter |
37.4 |
| EKF | kalman::ExtendedKalmanFilter |
44.1 |
| iterated EKF | kalman::IteratedExtendedKalmanFilter |
187.9 |
| UKF | kalman::UnscentedKalmanFilter |
296.5 |
| invariant EKF | kalman::InvariantExtendedKalmanFilter |
64.5 |
| EnKF, size 8 | kalman::EnsembleKalmanFilter |
137.9 |
| adaptive update | kalman::AdaptiveKalmanFilter |
119.3 |
Benchmark context matters. These numbers are for tiny fixed dimensions, release builds, and local hardware. Run the scripts on your target machine before making production latency claims.
Reference Tests
Run Python reference tests against FilterPy:
python -m pip install -e ".[test]"
pytest tests
FilterPy is used as the comparison implementation because it is a widely used pure-Python/NumPy Kalman filtering package with explicit matrix state, predict, and update operations that map directly to this library's linear filter API.
License
fast-kalman is licensed under the Apache License, Version 2.0. See
LICENSE for the full text.
Numerical Notes
This is a covariance-form implementation using Joseph-form covariance updates.
It has hard-coded inverse paths for 1x1, 2x2, and 3x3; larger dimensions
use a small fixed-size Gauss-Jordan inverse path. UKF sigma points use Cholesky
with jitter.
For poorly conditioned models or maximum numerical stability, square-root filter variants are the likely next upgrade.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fast_kalman-0.2.3.tar.gz.
File metadata
- Download URL: fast_kalman-0.2.3.tar.gz
- Upload date:
- Size: 54.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
75cfa0697c6aef95c6109aa3f53654c7f78c4a9c329bbc6accab8025aa9dc9ed
|
|
| MD5 |
198edcbd056074d905284d616d42af77
|
|
| BLAKE2b-256 |
9253cfaa0066264c03bb9106eaa3ba0baeec5c3284d9aa8a796cba4fb002f3a2
|
File details
Details for the file fast_kalman-0.2.3-cp314-cp314t-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: fast_kalman-0.2.3-cp314-cp314t-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 2.0 MB
- Tags: CPython 3.14t, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
007073b739ba6be9392d1406b0098f0c2d0f0c04e0636899bd45195509c56f87
|
|
| MD5 |
fe33dbed56bbe22bf8e0c68649caf9b2
|
|
| BLAKE2b-256 |
cbec61ed710b3ca83926fc92523fa2a349d83527cb6551c9491764a773f6f361
|
File details
Details for the file fast_kalman-0.2.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: fast_kalman-0.2.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 1.9 MB
- Tags: CPython 3.14t, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
48fb0ef491d085f3337c3f79d1b5ac95e524dcdaae9412881fe620a0396733c4
|
|
| MD5 |
311d1ab530db1b2c44d04d3e0d4903d7
|
|
| BLAKE2b-256 |
dc95b0200826e13d3973f8a04bf12caab0015d0a2acf3b814242cc977693ab4e
|
File details
Details for the file fast_kalman-0.2.3-cp314-cp314-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: fast_kalman-0.2.3-cp314-cp314-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.9 MB
- Tags: CPython 3.14, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3ed66a5e3f1b3d7a65cf55c015d4c6f003d8a9369b7ada959e04cf042fd1a93d
|
|
| MD5 |
818562c6ce4fc076b255dcd4fa77c489
|
|
| BLAKE2b-256 |
22c74cc2b6ed10e25c14f8aed4fad5c0df3422b5d2570508cdaee49a188d0bde
|
File details
Details for the file fast_kalman-0.2.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: fast_kalman-0.2.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 1.8 MB
- Tags: CPython 3.14, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
20569c214a3af851b1cca112fe95dd988c2f6944134fb73ca7ec9eb6cf7d094a
|
|
| MD5 |
2ffc723dba54afed8f0b3576b9bb85a9
|
|
| BLAKE2b-256 |
dfb2afeaaefdbf2626a2afc3644301e907768ed38b29f27f31742969a2d44c38
|
File details
Details for the file fast_kalman-0.2.3-cp313-cp313-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: fast_kalman-0.2.3-cp313-cp313-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.9 MB
- Tags: CPython 3.13, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
21824850c5e42aa1e386576826c26fa2c1a318c502f9ae2555d09f6a30a5cf28
|
|
| MD5 |
390dec889d4de5268319e99400780991
|
|
| BLAKE2b-256 |
d3121e2737d326bed6a870ca1048a0458ee97b6ba082c52949dc6cd16c5bf6bf
|
File details
Details for the file fast_kalman-0.2.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: fast_kalman-0.2.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 1.8 MB
- Tags: CPython 3.13, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1a462307650696518357ac4c730395ad6fdd93d5acca5434100a0a6b1d5bc2cb
|
|
| MD5 |
fff54605d87c5336d173c3289dcc5a83
|
|
| BLAKE2b-256 |
ab371e7c8923968e51b29fdea568dc40366276776859df19899b1d716de3182e
|
File details
Details for the file fast_kalman-0.2.3-cp312-cp312-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: fast_kalman-0.2.3-cp312-cp312-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.9 MB
- Tags: CPython 3.12, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bbc28d4a30c91557b7a1f593acbf53656651630920030e1095e25d5b6e28845a
|
|
| MD5 |
0e1bf89e12b71b09bf549ac04481994c
|
|
| BLAKE2b-256 |
5ebeb1793f71b16efb8f8fa6d2e4a55316a819377f716763e5c1171395358998
|
File details
Details for the file fast_kalman-0.2.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: fast_kalman-0.2.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 1.8 MB
- Tags: CPython 3.12, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ab149aee52d6557f1e8c7f35c6376cd5781c4e3d8ea536e4b8aad62b249d3ce6
|
|
| MD5 |
886014932e95cd282d080cf99fb79214
|
|
| BLAKE2b-256 |
5767adf288c0ebfaadb54ef0199f7522ce8d25e14204369af80f4e4757e9a0e4
|
File details
Details for the file fast_kalman-0.2.3-cp311-cp311-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: fast_kalman-0.2.3-cp311-cp311-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.9 MB
- Tags: CPython 3.11, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6893b56256db8ed1aee5fc19a15308b87c81cdd72cd34d2166115f943a1f3a30
|
|
| MD5 |
5e06dbfe96442fc498e38aa03bb61b23
|
|
| BLAKE2b-256 |
b12d4bbb932aeb3766976789b1d298f610dbc6c06859dedb4e96954b6eea5849
|
File details
Details for the file fast_kalman-0.2.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: fast_kalman-0.2.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 1.8 MB
- Tags: CPython 3.11, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
879154f7be8cec9bf1c21b7c986f956b02e74109fa86e8bc5fba72155caac8c6
|
|
| MD5 |
7f78b0c2c8c0875c7de11e7ca9f2dc77
|
|
| BLAKE2b-256 |
d679355805034a12e041d3658f4273569dab752b0d1ad62b89293333852a4782
|
File details
Details for the file fast_kalman-0.2.3-cp310-cp310-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: fast_kalman-0.2.3-cp310-cp310-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.9 MB
- Tags: CPython 3.10, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7416def6cb3898a1e14c2082563ef112ab01733c45629c6fed4048aede6bbe9a
|
|
| MD5 |
446b6142789a2c50b458d0ddcd1310c8
|
|
| BLAKE2b-256 |
5935302b39aaf9c04543e75c3668f8ec41ba9bcad524105e548b3f77a5cd20e6
|
File details
Details for the file fast_kalman-0.2.3-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: fast_kalman-0.2.3-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 1.8 MB
- Tags: CPython 3.10, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2c194497e3b2d0ed48d4a7cc241ef73a665eef60ffd0eea07f85d37861701da7
|
|
| MD5 |
fccaa8364d2a2bb9caf78563d0b48371
|
|
| BLAKE2b-256 |
7aa6f3ecbb7a0ea45b75586442252b59a8e3926ab94e34dd482b5489c962d29c
|
File details
Details for the file fast_kalman-0.2.3-cp39-cp39-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: fast_kalman-0.2.3-cp39-cp39-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.9 MB
- Tags: CPython 3.9, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1534aba22d3b854c08f219d057a5dd200625be591985a874d4134d5f1fb66c22
|
|
| MD5 |
65815036a77a3017e885030bac21efea
|
|
| BLAKE2b-256 |
22f8e23ee614371a6e925cab20712913da16fac42444a6f53723c87e4cf12db7
|
File details
Details for the file fast_kalman-0.2.3-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: fast_kalman-0.2.3-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 1.8 MB
- Tags: CPython 3.9, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9b4ff680a67b8585db1daa1a566debdc500b7201f65f21acd98afc2bf639e7a8
|
|
| MD5 |
e4886ce778a0faf8e7b109ecb2086132
|
|
| BLAKE2b-256 |
a5bca56ab84bb4a073abf43969e89213f1d0a35043628d6620f31dc57eaf7b53
|