"""Tests for CFC filtering.""" import numpy as np import pytest from impakt.transform.cfc import CFCFilter, cfc_filter class TestCFCFilter: def test_cfc60(self, head_accel_x): filtered = cfc_filter(head_accel_x, 60) assert filtered.cfc_class == 60 assert len(filtered.data) == len(head_accel_x.data) # Filtered signal should be smoother (lower peak) assert filtered.peak <= head_accel_x.peak # But still retain the general shape assert filtered.peak > 20.0 # Not completely killed def test_cfc180(self, head_accel_x): filtered = cfc_filter(head_accel_x, 180) assert filtered.cfc_class == 180 def test_cfc600(self, head_accel_x): filtered = cfc_filter(head_accel_x, 600) assert filtered.cfc_class == 600 def test_cfc1000(self, head_accel_x): filtered = cfc_filter(head_accel_x, 1000) assert filtered.cfc_class == 1000 # CFC 1000 removes very little — peak should be close to original assert abs(filtered.peak - head_accel_x.peak) < 5.0 def test_invalid_cfc_class(self): with pytest.raises(ValueError, match="Invalid CFC class"): CFCFilter(cfc_class=42) def test_transform_history(self, head_accel_x): filtered = cfc_filter(head_accel_x, 180) assert len(filtered.transform_history) == 1 assert "CFC 180" in filtered.transform_history[0] def test_original_unchanged(self, head_accel_x): original_data = head_accel_x.data.copy() _ = cfc_filter(head_accel_x, 180) assert np.array_equal(head_accel_x.data, original_data) def test_progressive_filtering(self, head_accel_x): """Lower CFC classes should produce smoother (lower peak) output.""" peak_1000 = cfc_filter(head_accel_x, 1000).peak peak_600 = cfc_filter(head_accel_x, 600).peak peak_180 = cfc_filter(head_accel_x, 180).peak peak_60 = cfc_filter(head_accel_x, 60).peak assert peak_1000 >= peak_600 >= peak_180 >= peak_60