Skip to content

Commit b08ec90

Browse files
committed
new helper functions
1 parent a2036bf commit b08ec90

File tree

1 file changed

+22
-26
lines changed

1 file changed

+22
-26
lines changed

src/systemathics/apis/helpers/dataframe_helpers.py

Lines changed: 22 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1225,7 +1225,8 @@ def _parse_date_for_filtering(date_input):
12251225
except Exception as e:
12261226
print(f"Error: {str(e)}")
12271227
return pd.DataFrame()
1228-
1228+
1229+
12291230
# Helpers functions
12301231

12311232
def _python_date_to_google_date(py_date):
@@ -1253,35 +1254,30 @@ def _build_strike_filter(strike) -> "filter.DoubleFilter":
12531254
12541255
Examples
12551256
--------
1256-
_build_strike_filter(100.0) # exact: lower == upper == 100.0
1257-
_build_strike_filter((80.0, 120.0)) # range [80, 120]
1258-
_build_strike_filter((None, 120.0)) # open lower bound, upper == 120
1259-
_build_strike_filter((80.0, None)) # lower == 80, open upper bound
1257+
_build_strike_filter(100.0) # exact
1258+
_build_strike_filter((80.0, 120.0)) # range [80, 120)
1259+
_build_strike_filter((None, 120.0)) # open lower bound, less_than 120
1260+
_build_strike_filter((80.0, None)) # greater_or_equal_than 80, open upper bound
12601261
"""
12611262
if isinstance(strike, (int, float)):
1262-
# Exact match: set both bounds to the same value
1263-
return filter.DoubleFilter(
1264-
lower_bound=wrappers_pb2.DoubleValue(value=float(strike)),
1265-
upper_bound=wrappers_pb2.DoubleValue(value=float(strike)),
1266-
)
1263+
return filter.DoubleFilter(exact=float(strike))
12671264

12681265
if isinstance(strike, tuple) and len(strike) == 2:
12691266
lo, hi = strike
1270-
kwargs = {}
1267+
range_kwargs = {}
12711268
if lo is not None:
1272-
kwargs["lower_bound"] = wrappers_pb2.DoubleValue(value=float(lo))
1269+
range_kwargs["greater_or_equal_than"] = wrappers_pb2.DoubleValue(value=float(lo))
12731270
if hi is not None:
1274-
kwargs["upper_bound"] = wrappers_pb2.DoubleValue(value=float(hi))
1275-
if not kwargs:
1271+
range_kwargs["less_than"] = wrappers_pb2.DoubleValue(value=float(hi))
1272+
if not range_kwargs:
12761273
raise ValueError("strike_interval tuple must have at least one non-None bound.")
1277-
return filter.DoubleFilter(**kwargs)
1274+
return filter.DoubleFilter(range=filter.DoubleFilterRange(**range_kwargs))
12781275

12791276
raise TypeError(
12801277
"strike_interval must be a float (exact) or a (min, max) tuple "
12811278
f"with at least one non-None bound. Got: {strike!r}"
12821279
)
12831280

1284-
12851281
def _build_maturity_filter(maturity) -> "filter.DateFilter":
12861282
"""
12871283
Build a DateFilter proto from a Python value.
@@ -1294,30 +1290,32 @@ def _build_maturity_filter(maturity) -> "filter.DateFilter":
12941290
_build_maturity_filter((None, "2025-12-31")) # open lower bound
12951291
_build_maturity_filter(("2025-03-01", None)) # open upper bound
12961292
"""
1297-
1293+
12981294
# Exact match
1299-
if isinstance(maturity, (datetime.date, str)):
1295+
if isinstance(maturity, (date, str)):
13001296
proto_d = _parse_date_input(maturity)
1301-
return filter.DateFilter(start_date=proto_d, end_date=proto_d)
1297+
return filter.DateFilter(exact=proto_d)
13021298

13031299
# Range
13041300
if isinstance(maturity, tuple) and len(maturity) == 2:
13051301
start, end = maturity
1306-
kwargs = {}
1302+
range_kwargs = {}
13071303
if start is not None:
1308-
kwargs["start_date"] = _parse_date_input(start)
1304+
range_kwargs["greater_or_equal_than"] = _parse_date_input(start)
13091305
if end is not None:
1310-
kwargs["end_date"] = _parse_date_input(end)
1311-
if not kwargs:
1306+
range_kwargs["less_than"] = _parse_date_input(end)
1307+
if not range_kwargs:
13121308
raise ValueError("maturity_date tuple must have at least one non-None bound.")
1313-
return filter.DateFilter(**kwargs)
1309+
return filter.DateFilter(range=filter.DateFilterRange(**range_kwargs))
13141310

13151311
raise TypeError(
13161312
"maturity_date must be a date/str (exact) or a (start, end) tuple "
13171313
f"with at least one non-None bound. Got: {maturity!r}"
13181314
)
13191315

13201316

1317+
1318+
13211319
def _proto_enum_parse(proto_enum_cls, prefix, value):
13221320
"""
13231321
Convert a user-supplied string or int to a proto enum int value.
@@ -1389,5 +1387,3 @@ def _format_option_type(int_value) -> str:
13891387

13901388
def _format_strike_type(int_value) -> str:
13911389
return _proto_enum_name(StrikeType.StrikeType, "STRIKE_TYPE_", int_value)
1392-
1393-

0 commit comments

Comments
 (0)