@@ -152,3 +152,53 @@ def test_get_visualization(self, mock_px):
152152 margin = {'t' : 150 },
153153 font = {'size' : 18 },
154154 )
155+
156+ @patch ('sdmetrics.reports.single_table._properties.data_validity.BoundaryAdherence.compute' )
157+ @patch ('sdmetrics.reports.single_table._properties.data_validity.CategoryAdherence.compute' )
158+ @patch ('sdmetrics.reports.single_table._properties.data_validity.KeyUniqueness.compute' )
159+ def test__generate_details_skip_sequence_index_boundary_adherence (
160+ self , key_uniqueness_mock , category_a_compute_mock , boundary_a_compute_mock
161+ ):
162+ """Test that sequence_index columns are excluded from BoundaryAdherence checks."""
163+ # Setup
164+ real_data = pd .DataFrame ({
165+ 'date' : pd .to_datetime (['2020-01-01' , '2020-01-02' , '2020-01-03' ]),
166+ 'value' : [1 , 2 , 3 ],
167+ 'category' : ['a' , 'b' , 'c' ],
168+ })
169+ synthetic_data = pd .DataFrame ({
170+ 'date' : pd .to_datetime (['2020-01-04' , '2020-01-05' , '2020-01-06' ]),
171+ 'value' : [4 , 5 , 6 ],
172+ 'category' : ['d' , 'e' , 'f' ],
173+ })
174+ metadata = {
175+ 'sequence_index' : 'date' , # This should skip BoundaryAdherence
176+ 'columns' : {
177+ 'date' : {'sdtype' : 'datetime' },
178+ 'value' : {'sdtype' : 'numerical' },
179+ 'category' : {'sdtype' : 'categorical' },
180+ },
181+ }
182+
183+ boundary_a_compute_mock .return_value = 0.8
184+ category_a_compute_mock .return_value = 0.9
185+
186+ # Run
187+ data_validity_property = DataValidity ()
188+ result = data_validity_property ._generate_details (real_data , synthetic_data , metadata )
189+
190+ # Assert
191+ expected_calls_ba = [call (real_data ['value' ], synthetic_data ['value' ])]
192+ boundary_a_compute_mock .assert_has_calls (expected_calls_ba )
193+ assert boundary_a_compute_mock .call_count == 1
194+
195+ expected_calls_ca = [call (real_data ['category' ], synthetic_data ['category' ])]
196+ category_a_compute_mock .assert_has_calls (expected_calls_ca )
197+ assert category_a_compute_mock .call_count == 1
198+
199+ key_uniqueness_mock .assert_not_called ()
200+
201+ expected_columns = ['value' , 'category' ]
202+ assert list (result ['Column' ]) == expected_columns
203+ expected_metrics = ['BoundaryAdherence' , 'CategoryAdherence' ]
204+ assert list (result ['Metric' ]) == expected_metrics
0 commit comments