From 358a6473b5251e4fd0ddc125e068e822888e5531 Mon Sep 17 00:00:00 2001
From: Anan <anangupta05@gmail.com>
Date: Thu, 6 Feb 2025 05:13:11 +0530
Subject: [PATCH 1/2] Added safety checks for filter stability

---
 audio_filters/butterworth_filter.py | 23 ++++++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)

diff --git a/audio_filters/butterworth_filter.py b/audio_filters/butterworth_filter.py
index 4e6ea1b18fb4..c29c2e2e3c20 100644
--- a/audio_filters/butterworth_filter.py
+++ b/audio_filters/butterworth_filter.py
@@ -9,7 +9,22 @@
 Alternatively you can use scipy.signal.butter, which should yield the same results.
 """
 
-
+# All calls to filter creators must have keyword arguments
+def safe_checks(filter_creator):
+    def safe_filter_creator(**kwargs):
+        if not isinstance(kwargs['frequency'], int) or kwargs['frequency'] <= 0:
+            raise ValueError('Frequency must be a positive integer.')
+        if not isinstance(kwargs['samplerate'], int) or kwargs['samplerate'] <= 0:
+            raise ValueError('Samplerate must be a positive integer.')
+        if not (0 < kwargs['frequency'] < kwargs['samplerate'] / 2):
+            raise ValueError('Frequency must be less than half of the samplerate.')
+        if kwargs['q_factor'] <= 0:
+            raise ValueError('Q factor must be positive.')
+        return filter_creator(**kwargs)
+    return safe_filter_creator
+
+
+@safe_checks
 def make_lowpass(
     frequency: int,
     samplerate: int,
@@ -40,6 +55,7 @@ def make_lowpass(
     return filt
 
 
+@safe_checks
 def make_highpass(
     frequency: int,
     samplerate: int,
@@ -70,6 +86,7 @@ def make_highpass(
     return filt
 
 
+@safe_checks
 def make_bandpass(
     frequency: int,
     samplerate: int,
@@ -101,6 +118,7 @@ def make_bandpass(
     return filt
 
 
+@safe_checks
 def make_allpass(
     frequency: int,
     samplerate: int,
@@ -128,6 +146,7 @@ def make_allpass(
     return filt
 
 
+@safe_checks
 def make_peak(
     frequency: int,
     samplerate: int,
@@ -160,6 +179,7 @@ def make_peak(
     return filt
 
 
+@safe_checks
 def make_lowshelf(
     frequency: int,
     samplerate: int,
@@ -197,6 +217,7 @@ def make_lowshelf(
     return filt
 
 
+@safe_checks
 def make_highshelf(
     frequency: int,
     samplerate: int,

From 9977d00baf12229ba04e90b9b2de494f0002cef5 Mon Sep 17 00:00:00 2001
From: "pre-commit-ci[bot]"
 <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Date: Wed, 5 Feb 2025 23:50:18 +0000
Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci
---
 audio_filters/butterworth_filter.py | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/audio_filters/butterworth_filter.py b/audio_filters/butterworth_filter.py
index c29c2e2e3c20..4d51a306339c 100644
--- a/audio_filters/butterworth_filter.py
+++ b/audio_filters/butterworth_filter.py
@@ -9,18 +9,20 @@
 Alternatively you can use scipy.signal.butter, which should yield the same results.
 """
 
+
 # All calls to filter creators must have keyword arguments
 def safe_checks(filter_creator):
     def safe_filter_creator(**kwargs):
-        if not isinstance(kwargs['frequency'], int) or kwargs['frequency'] <= 0:
-            raise ValueError('Frequency must be a positive integer.')
-        if not isinstance(kwargs['samplerate'], int) or kwargs['samplerate'] <= 0:
-            raise ValueError('Samplerate must be a positive integer.')
-        if not (0 < kwargs['frequency'] < kwargs['samplerate'] / 2):
-            raise ValueError('Frequency must be less than half of the samplerate.')
-        if kwargs['q_factor'] <= 0:
-            raise ValueError('Q factor must be positive.')
+        if not isinstance(kwargs["frequency"], int) or kwargs["frequency"] <= 0:
+            raise ValueError("Frequency must be a positive integer.")
+        if not isinstance(kwargs["samplerate"], int) or kwargs["samplerate"] <= 0:
+            raise ValueError("Samplerate must be a positive integer.")
+        if not (0 < kwargs["frequency"] < kwargs["samplerate"] / 2):
+            raise ValueError("Frequency must be less than half of the samplerate.")
+        if kwargs["q_factor"] <= 0:
+            raise ValueError("Q factor must be positive.")
         return filter_creator(**kwargs)
+
     return safe_filter_creator