diff --git a/openavmkit/filters.py b/openavmkit/filters.py index a1c8c146..fcf6e06c 100644 --- a/openavmkit/filters.py +++ b/openavmkit/filters.py @@ -190,12 +190,12 @@ def resolve_filter(df: pd.DataFrame, f: list, rename_map: dict = None) -> pd.Ser if is_column_of_type(df, field, "number"): return df[field].fillna(0).ge(value) else: - return df[field].le(value) + return df[field].ge(value) if operator == "<=": if is_column_of_type(df, field, "number"): return df[field].fillna(0).le(value) else: - return df[field].ge(value) + return df[field].le(value) if operator == "==": return df[field].eq(value) if operator == "!=": diff --git a/tests/test_filters.py b/tests/test_filters.py index 0830035b..697f4a11 100644 --- a/tests/test_filters.py +++ b/tests/test_filters.py @@ -643,3 +643,23 @@ def test_filter_debug(): assert lists_are_equal(results_sf_select_improved, ['165177']) assert lists_are_equal(results_sf_select_vacant, []) + + +def test_string_ordered_comparisons(): + import pandas as pd + from openavmkit.filters import resolve_filter + + df = pd.DataFrame({"sale_date": ["2019-06-01", "2020-01-01", "2021-03-15"]}) + + ge = resolve_filter(df, [">=", "sale_date", "str:2020-01-01"]) + assert list(df[ge]["sale_date"]) == ["2020-01-01", "2021-03-15"] + + le = resolve_filter(df, ["<=", "sale_date", "str:2020-01-01"]) + assert list(df[le]["sale_date"]) == ["2019-06-01", "2020-01-01"] + + # > and < were already correct; control cases + gt = resolve_filter(df, [">", "sale_date", "str:2020-01-01"]) + assert list(df[gt]["sale_date"]) == ["2021-03-15"] + + lt = resolve_filter(df, ["<", "sale_date", "str:2020-01-01"]) + assert list(df[lt]["sale_date"]) == ["2019-06-01"]