Skip to content

Commit 7b4fc9f

Browse files
authored
Fix tests failing due to scipy 1.14 (#601)
1 parent 8e79aa2 commit 7b4fc9f

File tree

5 files changed

+50
-26
lines changed

5 files changed

+50
-26
lines changed

pyproject.toml

+3-3
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ dependencies = [
3030
"scikit-learn>=1.1.0;python_version>='3.10' and python_version<'3.11'",
3131
"scikit-learn>=1.1.3;python_version>='3.11' and python_version<'3.12'",
3232
"scikit-learn>=1.3.1;python_version>='3.12'",
33-
"scipy>=1.7.3,<1.14.0;python_version<'3.10'",
34-
"scipy>=1.9.2,<1.14.0;python_version>='3.10' and python_version<'3.12'",
35-
"scipy>=1.12.0,<1.14.0;python_version>='3.12'",
33+
"scipy>=1.7.3;python_version<'3.10'",
34+
"scipy>=1.9.2;python_version>='3.10' and python_version<'3.12'",
35+
"scipy>=1.12.0;python_version>='3.12'",
3636
'copulas>=0.11.0',
3737
'tqdm>=4.29',
3838
'plotly>=5.19.0',

tests/integration/reports/multi_table/test_quality_report.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ def test_multi_table_quality_report():
107107
details.append(report.get_details(property_))
108108

109109
# Assert score
110-
assert score == 0.649582127409184
110+
assert round(score, 15) == 0.649582127409184
111111
pd.testing.assert_frame_equal(
112112
properties,
113113
pd.DataFrame({

tests/integration/reports/single_table/_properties/test_column_pair_trends.py

+13-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import numpy as np
22
import pandas as pd
3+
from tests.utils import get_error_type
34

45
from sdmetrics.demos import load_demo
56
from sdmetrics.reports.single_table._properties.column_pair_trends import ColumnPairTrends
@@ -79,17 +80,25 @@ def test_get_score_warnings(self, recwarn):
7980
# Run
8081
column_pair_trends = ColumnPairTrends()
8182

82-
exp_message_1 = "ValueError: could not convert string to float: 'a'"
83+
exp_message_1 = 'ValueError'
8384

84-
exp_message_2 = "TypeError: '<=' not supported between instances of 'float' and 'str'"
85+
exp_message_2 = 'TypeError'
8586

86-
exp_error_serie = pd.Series([exp_message_1, None, None, exp_message_2, exp_message_2, None])
87+
exp_error_series = pd.Series([
88+
exp_message_1,
89+
None,
90+
None,
91+
exp_message_2,
92+
exp_message_2,
93+
None,
94+
])
8795

8896
score = column_pair_trends.get_score(real_data, synthetic_data, metadata)
8997

9098
# Assert
9199
details = column_pair_trends.details
92-
pd.testing.assert_series_equal(details['Error'], exp_error_serie, check_names=False)
100+
details['Error'] = details['Error'].apply(get_error_type)
101+
pd.testing.assert_series_equal(details['Error'], exp_error_series, check_names=False)
93102
assert score == 0.7751937984496124
94103

95104
def test_only_categorical_columns(self):

tests/integration/reports/single_table/test_quality_report.py

+26-18
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
from sdmetrics.demos import load_demo
88
from sdmetrics.reports.single_table import QualityReport
9+
from tests.utils import get_error_type
910

1011

1112
class TestQualityReport:
@@ -262,7 +263,7 @@ def test_report_end_to_end_with_errors(self):
262263
'Score': [0.6621621621621622, np.nan, 0.9953488372093023, 0.9395348837209302],
263264
'Error': [
264265
None,
265-
"TypeError: '<' not supported between instances of 'str' and 'float'",
266+
'TypeError',
266267
None,
267268
None,
268269
],
@@ -304,23 +305,25 @@ def test_report_end_to_end_with_errors(self):
304305
'Real Correlation': [np.nan] * 6,
305306
'Synthetic Correlation': [np.nan] * 6,
306307
'Error': [
307-
"ValueError: could not convert string to float: 'a'",
308+
'ValueError',
308309
None,
309310
None,
310-
"TypeError: '<=' not supported between instances of 'float' and 'str'",
311-
"TypeError: '<=' not supported between instances of 'float' and 'str'",
311+
'TypeError',
312+
'TypeError',
312313
None,
313314
],
314315
}
315316
expected_details_column_shapes = pd.DataFrame(expected_details_column_shapes_dict)
316317
expected_details_cpt = pd.DataFrame(expected_details_cpt__dict)
317318

318-
pd.testing.assert_frame_equal(
319-
report.get_details('Column Shapes'), expected_details_column_shapes
320-
)
321-
pd.testing.assert_frame_equal(
322-
report.get_details('Column Pair Trends'), expected_details_cpt
323-
)
319+
# Errors may change based on versions of scipy installed.
320+
col_shape_report = report.get_details('Column Shapes')
321+
col_pair_report = report.get_details('Column Pair Trends')
322+
col_shape_report['Error'] = col_shape_report['Error'].apply(get_error_type)
323+
col_pair_report['Error'] = col_pair_report['Error'].apply(get_error_type)
324+
325+
pd.testing.assert_frame_equal(col_shape_report, expected_details_column_shapes)
326+
pd.testing.assert_frame_equal(col_pair_report, expected_details_cpt)
324327
assert report.get_score() == 0.8204378797402054
325328

326329
def test_report_with_column_nan(self):
@@ -446,10 +449,10 @@ def test_report_with_column_nan(self):
446449
None,
447450
None,
448451
None,
449-
'ValueError: x and y must have length at least 2.',
452+
'ValueError',
450453
None,
451454
None,
452-
'ValueError: x and y must have length at least 2.',
455+
'ValueError',
453456
None,
454457
None,
455458
None,
@@ -458,12 +461,17 @@ def test_report_with_column_nan(self):
458461
expected_details_column_shapes = pd.DataFrame(expected_details_column_shapes_dict)
459462
expected_details_cpt = pd.DataFrame(expected_details_cpt__dict)
460463

461-
pd.testing.assert_frame_equal(
462-
report.get_details('Column Shapes'), expected_details_column_shapes
463-
)
464-
pd.testing.assert_frame_equal(
465-
report.get_details('Column Pair Trends'), expected_details_cpt
466-
)
464+
col_shape_report = report.get_details('Column Shapes')
465+
if 'Error' not in col_shape_report:
466+
# Errors may not occur in certain scipy versions
467+
expected_details_column_shapes.drop(columns=['Error'], inplace=True)
468+
469+
# Errors may change based on versions of library installed.
470+
col_pair_report = report.get_details('Column Pair Trends')
471+
col_pair_report['Error'] = col_pair_report['Error'].apply(get_error_type)
472+
473+
pd.testing.assert_frame_equal(col_shape_report, expected_details_column_shapes)
474+
pd.testing.assert_frame_equal(col_pair_report, expected_details_cpt)
467475

468476
def test_report_with_verbose(self, capsys):
469477
"""Test the report with verbose.

tests/utils.py

+7
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,10 @@ def __eq__(self, other):
4040
"""Assert equality by expanding the iterator."""
4141
assert all(x == y for x, y in zip(self.iterator, other))
4242
return True
43+
44+
45+
def get_error_type(error):
46+
if error is not None:
47+
colon_index = error.find(':')
48+
return error[:colon_index]
49+
return None

0 commit comments

Comments
 (0)