From b1e69d9bed186b087e80c05ac2f6c14395720bb6 Mon Sep 17 00:00:00 2001 From: bruno-f-cruz <7049351+bruno-f-cruz@users.noreply.github.com> Date: Fri, 8 May 2026 12:53:04 -0700 Subject: [PATCH] Surface sniff detector test details --- src/contraqctor/qc/harp/sniff_detector.py | 41 +++++++++++++------ .../test_qc/harp/test_harp_sniff_detector.py | 4 +- 2 files changed, 31 insertions(+), 14 deletions(-) diff --git a/src/contraqctor/qc/harp/sniff_detector.py b/src/contraqctor/qc/harp/sniff_detector.py index 2a0d89c..04d4090 100644 --- a/src/contraqctor/qc/harp/sniff_detector.py +++ b/src/contraqctor/qc/harp/sniff_detector.py @@ -115,20 +115,37 @@ def test_signal_quality(self): sudden_jumps_ratio = (np.sum(np.abs(derivative) > 3 * np.std(derivative))) / TOTAL_SAMPLES metrics["sudden_jumps_ratio"] = sudden_jumps_ratio - is_ok = ( - metrics["quantization_ratio"] > self.quantization_ratio_thr - and metrics["clustering_ratio"] < self.clustering_thr - and metrics["min_clipping"] < self.clipping_thr - and metrics["max_clipping"] < self.clipping_thr - and metrics["sudden_jumps_ratio"] < self.sudden_jumps_thr - ) - - if is_ok: - return self.pass_test(True, "Signal quality is good", context=metrics) + tests = { + "quantization_ratio": ( + metrics["quantization_ratio"] > self.quantization_ratio_thr, + "Quantization ratio is too low. Expected at least {:.2f}% of the full bit depth".format( + self.quantization_ratio_thr * 100 + ), + ), + "clustering_ratio": ( + metrics["clustering_ratio"] < self.clustering_thr, + f"Clustering ratio is too high. Expected less than {self.clustering_thr:.2f}", + ), + "min_clipping": ( + metrics["min_clipping"] < self.clipping_thr, + f"Too much clipping at the minimum value. Expected less than {self.clipping_thr:.2f}", + ), + "max_clipping": ( + metrics["max_clipping"] < self.clipping_thr, + f"Too much clipping at the maximum value. Expected less than {self.clipping_thr:.2f}", + ), + "sudden_jumps_ratio": ( + metrics["sudden_jumps_ratio"] < self.sudden_jumps_thr, + f"Too many sudden jumps in the signal. Expected less than {self.sudden_jumps_thr:.2f} of the samples to have sudden jumps.", + ), + } + + if all(test[0] for test in tests.values()): + return self.pass_test(metrics, "All quality checks passed.", context=metrics) else: return self.fail_test( - False, - "Signal quality is not good", + metrics, + "Some quality checks failed: " + "; ".join([test[1] for test in tests.values() if not test[0]]), context=metrics, ) diff --git a/tests/test_qc/harp/test_harp_sniff_detector.py b/tests/test_qc/harp/test_harp_sniff_detector.py index 5c95238..0e874e5 100644 --- a/tests/test_qc/harp/test_harp_sniff_detector.py +++ b/tests/test_qc/harp/test_harp_sniff_detector.py @@ -198,13 +198,13 @@ def test_sniff_detector_signal_quality(self, mock_sniff_device, mock_sniff_devic suite = HarpSniffDetectorTestSuite(mock_sniff_device) result = suite.test_signal_quality() assert result.status == Status.PASSED - assert "Signal quality is good" in result.message + assert "All quality checks passed." in result.message assert "context" in dir(result) suite = HarpSniffDetectorTestSuite(mock_sniff_device_bad_quality) result = suite.test_signal_quality() assert result.status == Status.FAILED - assert "Signal quality is not good" in result.message + assert "Some quality checks failed" in result.message metrics = result.context assert "quantization_ratio" in metrics