From 8ea573062af6e12061a52ac355acfc4915cc51c5 Mon Sep 17 00:00:00 2001 From: Martin Weinelt Date: Sat, 24 Jan 2026 03:18:46 +0100 Subject: [PATCH] python3Packages.filterpy: fix numpy 2.4 compat --- .../python-modules/filterpy/default.nix | 2 + .../filterpy/numpy-2.4-compat.patch | 69 +++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 pkgs/development/python-modules/filterpy/numpy-2.4-compat.patch diff --git a/pkgs/development/python-modules/filterpy/default.nix b/pkgs/development/python-modules/filterpy/default.nix index 11c103e5a040..110d3b136b0d 100644 --- a/pkgs/development/python-modules/filterpy/default.nix +++ b/pkgs/development/python-modules/filterpy/default.nix @@ -24,6 +24,8 @@ buildPythonPackage { hash = "sha256-KuuVu0tqrmQuNKYmDmdy+TU6BnnhDxh4G8n9BGzjGag="; }; + patches = [ ./numpy-2.4-compat.patch ]; + build-system = [ setuptools ]; dependencies = [ diff --git a/pkgs/development/python-modules/filterpy/numpy-2.4-compat.patch b/pkgs/development/python-modules/filterpy/numpy-2.4-compat.patch new file mode 100644 index 000000000000..ab0969e54735 --- /dev/null +++ b/pkgs/development/python-modules/filterpy/numpy-2.4-compat.patch @@ -0,0 +1,69 @@ +diff --git a/filterpy/kalman/EKF.py b/filterpy/kalman/EKF.py +index 5e83aec..06e9c42 100644 +--- a/filterpy/kalman/EKF.py ++++ b/filterpy/kalman/EKF.py +@@ -406,7 +406,8 @@ class ExtendedKalmanFilter(object): + mahalanobis : float + """ + if self._mahalanobis is None: +- self._mahalanobis = sqrt(float(dot(dot(self.y.T, self.SI), self.y))) ++ d2 = self.y.T @ self.SI @ self.y ++ self._mahalanobis = sqrt(np.asarray(d2).item()) + return self._mahalanobis + + def __repr__(self): +diff --git a/filterpy/kalman/fading_memory.py b/filterpy/kalman/fading_memory.py +index 36c9dcc..2c4d582 100644 +--- a/filterpy/kalman/fading_memory.py ++++ b/filterpy/kalman/fading_memory.py +@@ -438,7 +438,7 @@ class FadingKalmanFilter(object): + mahalanobis : float + """ + if self._mahalanobis is None: +- self._mahalanobis = sqrt(float(dot(dot(self.y.T, self.SI), self.y))) ++ self._mahalanobis = sqrt((self.y.T @ self.SI @ self.y).item()) + return self._mahalanobis + + def __repr__(self): +diff --git a/filterpy/kalman/kalman_filter.py b/filterpy/kalman/kalman_filter.py +index 994b596..0f72d85 100644 +--- a/filterpy/kalman/kalman_filter.py ++++ b/filterpy/kalman/kalman_filter.py +@@ -1235,7 +1235,8 @@ class KalmanFilter(object): + mahalanobis : float + """ + if self._mahalanobis is None: +- self._mahalanobis = sqrt(float(dot(dot(self.y.T, self.SI), self.y))) ++ d2 = dot(dot(self.y.T, self.SI), self.y) ++ self._mahalanobis = sqrt(np.asarray(d2).item()) + return self._mahalanobis + + @property +diff --git a/filterpy/kalman/tests/test_imm.py b/filterpy/kalman/tests/test_imm.py +index aa71fc2..ec2fdc1 100644 +--- a/filterpy/kalman/tests/test_imm.py ++++ b/filterpy/kalman/tests/test_imm.py +@@ -176,8 +176,8 @@ def test_imm(): + + zs = np.zeros((N, 2)) + for i in range(len(zs)): +- zs[i, 0] = simxs[i, 0] + randn()*r +- zs[i, 1] = simxs[i, 2] + randn()*r ++ zs[i, 0] = simxs[i, 0, 0] + randn()*r ++ zs[i, 1] = simxs[i, 2, 0] + randn()*r + + ''' + try: +diff --git a/filterpy/leastsq/least_squares.py b/filterpy/leastsq/least_squares.py +index 2610b14..6c5eb8f 100644 +--- a/filterpy/leastsq/least_squares.py ++++ b/filterpy/leastsq/least_squares.py +@@ -129,7 +129,7 @@ class LeastSquaresFilter(object): + + if self._order == 0: + K[0] = 1. / n +- y = z - x ++ y = z - x[0] + x[0] += K[0] * y + + elif self._order == 1: