From f9e748d1b0ab886fe093989e487590d3df50ba08 Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Sun, 21 Jun 2026 15:40:49 +0000 Subject: [PATCH 1/5] =?UTF-8?q?=F0=9F=A7=AA=20Add=20edge=20case=20tests=20?= =?UTF-8?q?for=20PitchTracker.track?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tests/test_pitch_tracker.py | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/services/analysis-engine/tests/test_pitch_tracker.py b/services/analysis-engine/tests/test_pitch_tracker.py index 84731c81..16cd8d3d 100644 --- a/services/analysis-engine/tests/test_pitch_tracker.py +++ b/services/analysis-engine/tests/test_pitch_tracker.py @@ -207,3 +207,25 @@ def test_pitch_tracker_confidence_returns_low() -> None: result = tracker._compute_confidence(voiced_probs, voiced_flag, y) assert result == "low" + +def test_pitch_tracker_nan_f0() -> None: + """Test when pyin returns NaN for voiced f0 values.""" + tracker = PitchTracker() + y = np.random.randn(22050) + + with patch("librosa.pyin", return_value=(np.array([np.nan, np.nan]), np.array([True, True]), np.array([1.0, 1.0]))): + result = tracker.track(y, sr=22050) + assert result["lowest_note"] is None + assert result["highest_note"] is None + assert result["confidence"] == "low" + +def test_pitch_tracker_low_avg_prob() -> None: + """Test when average voicing probability is less than 0.2.""" + tracker = PitchTracker() + y = np.random.randn(22050) + + with patch("librosa.pyin", return_value=(np.array([440.0]), np.array([True]), np.array([0.1]))): + result = tracker.track(y, sr=22050) + assert result["lowest_note"] is None + assert result["highest_note"] is None + assert result["confidence"] == "low" From 15df05d781c936283e898783e4564689e2db2a65 Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Sun, 21 Jun 2026 15:43:40 +0000 Subject: [PATCH 2/5] =?UTF-8?q?=F0=9F=A7=AA=20Add=20edge=20case=20tests=20?= =?UTF-8?q?for=20PitchTracker.track?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- services/analysis-engine/tests/test_pitch_tracker.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/services/analysis-engine/tests/test_pitch_tracker.py b/services/analysis-engine/tests/test_pitch_tracker.py index 16cd8d3d..d5d81423 100644 --- a/services/analysis-engine/tests/test_pitch_tracker.py +++ b/services/analysis-engine/tests/test_pitch_tracker.py @@ -213,7 +213,10 @@ def test_pitch_tracker_nan_f0() -> None: tracker = PitchTracker() y = np.random.randn(22050) - with patch("librosa.pyin", return_value=(np.array([np.nan, np.nan]), np.array([True, True]), np.array([1.0, 1.0]))): + with patch( + "librosa.pyin", + return_value=(np.array([np.nan, np.nan]), np.array([True, True]), np.array([1.0, 1.0])), + ): result = tracker.track(y, sr=22050) assert result["lowest_note"] is None assert result["highest_note"] is None From a6c7aca5406870f50601568ea1af0d668e665294 Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Sun, 21 Jun 2026 15:46:02 +0000 Subject: [PATCH 3/5] =?UTF-8?q?=F0=9F=A7=AA=20Add=20edge=20case=20tests=20?= =?UTF-8?q?for=20PitchTracker.track?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- services/analysis-engine/tests/test_pitch_tracker.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/services/analysis-engine/tests/test_pitch_tracker.py b/services/analysis-engine/tests/test_pitch_tracker.py index d5d81423..9e1c9970 100644 --- a/services/analysis-engine/tests/test_pitch_tracker.py +++ b/services/analysis-engine/tests/test_pitch_tracker.py @@ -208,6 +208,7 @@ def test_pitch_tracker_confidence_returns_low() -> None: result = tracker._compute_confidence(voiced_probs, voiced_flag, y) assert result == "low" + def test_pitch_tracker_nan_f0() -> None: """Test when pyin returns NaN for voiced f0 values.""" tracker = PitchTracker() @@ -222,6 +223,7 @@ def test_pitch_tracker_nan_f0() -> None: assert result["highest_note"] is None assert result["confidence"] == "low" + def test_pitch_tracker_low_avg_prob() -> None: """Test when average voicing probability is less than 0.2.""" tracker = PitchTracker() From c9a01a60e67ed78fbaab37151d62c6328bd24645 Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Sun, 21 Jun 2026 15:51:37 +0000 Subject: [PATCH 4/5] =?UTF-8?q?=F0=9F=A7=AA=20Add=20edge=20case=20tests=20?= =?UTF-8?q?for=20PitchTracker.track?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From b98a619cee5e53eaa643dd69822596837e4e2949 Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Sun, 21 Jun 2026 16:50:07 +0000 Subject: [PATCH 5/5] =?UTF-8?q?=F0=9F=A7=AA=20Add=20edge=20case=20tests=20?= =?UTF-8?q?for=20PitchTracker.track?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit