From beb0e153cdeae4faa6c49b0d6419d28cc64e49bc Mon Sep 17 00:00:00 2001 From: George Sittas Date: Mon, 18 Mar 2024 19:46:41 +0200 Subject: [PATCH 1/3] Fix: apply _to_hashable correctly in unit tests --- sqlmesh/core/test/definition.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sqlmesh/core/test/definition.py b/sqlmesh/core/test/definition.py index ae950dd080..65dd983522 100644 --- a/sqlmesh/core/test/definition.py +++ b/sqlmesh/core/test/definition.py @@ -129,16 +129,16 @@ def assert_equal( expected = expected.replace({None: np.nan}) def _to_hashable(x: t.Any) -> t.Any: - return tuple(x) if isinstance(x, list) else x + return str(x) if isinstance(x, (dict, list)) else x if sort: actual = ( - actual.apply(_to_hashable) + actual.apply(lambda col: col.map(_to_hashable)) .sort_values(by=actual.columns.to_list()) .reset_index(drop=True) ) expected = ( - expected.apply(_to_hashable) + expected.apply(lambda col: col.map(_to_hashable)) .sort_values(by=expected.columns.to_list()) .reset_index(drop=True) ) From c25308f3af1c0c8f445e9afc9c74f0f4268cfd02 Mon Sep 17 00:00:00 2001 From: George Sittas Date: Mon, 18 Mar 2024 20:05:21 +0200 Subject: [PATCH 2/3] Attempt to fix --- sqlmesh/core/test/definition.py | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/sqlmesh/core/test/definition.py b/sqlmesh/core/test/definition.py index 65dd983522..e898341449 100644 --- a/sqlmesh/core/test/definition.py +++ b/sqlmesh/core/test/definition.py @@ -132,17 +132,10 @@ def _to_hashable(x: t.Any) -> t.Any: return str(x) if isinstance(x, (dict, list)) else x if sort: - actual = ( - actual.apply(lambda col: col.map(_to_hashable)) - .sort_values(by=actual.columns.to_list()) - .reset_index(drop=True) - ) - expected = ( - expected.apply(lambda col: col.map(_to_hashable)) - .sort_values(by=expected.columns.to_list()) - .reset_index(drop=True) - ) - + actual = actual.apply(lambda col: col.map(_to_hashable)) + actual = actual.sort_values(by=actual.columns.to_list()).reset_index(drop=True) + expected = expected.apply(lambda col: col.map(_to_hashable)) + expected = expected.sort_values(by=expected.columns.to_list()).reset_index(drop=True) try: pd.testing.assert_frame_equal( expected, From c961e8426c0b3f32b5c1a9c8ef4c7df52e12bc3d Mon Sep 17 00:00:00 2001 From: George Sittas Date: Mon, 18 Mar 2024 21:02:30 +0200 Subject: [PATCH 3/3] Fix _to_hashable to take ndarray into account --- sqlmesh/core/test/definition.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sqlmesh/core/test/definition.py b/sqlmesh/core/test/definition.py index e898341449..9da8a93142 100644 --- a/sqlmesh/core/test/definition.py +++ b/sqlmesh/core/test/definition.py @@ -129,7 +129,9 @@ def assert_equal( expected = expected.replace({None: np.nan}) def _to_hashable(x: t.Any) -> t.Any: - return str(x) if isinstance(x, (dict, list)) else x + if isinstance(x, (list, np.ndarray)): + return tuple(x) + return str(x) if not isinstance(x, t.Hashable) else x if sort: actual = actual.apply(lambda col: col.map(_to_hashable))