1
0
mirror of https://github.com/microsoft/qlib.git synced 2026-07-13 07:46:53 +08:00

support register custom feature ops easily

This commit is contained in:
bxdd
2020-12-10 09:00:00 +00:00
parent 2c5864204e
commit 0be57d51be
2 changed files with 71 additions and 48 deletions

View File

@@ -162,7 +162,7 @@ def parse_field(field):
# - $open+$close -> Feature("open")+Feature("close")
if not isinstance(field, str):
field = str(field)
return re.sub(r"\$(\w+)", r'Feature("\1")', field)
return re.sub(r"\$(\w+)", r'Feature("\1")', re.sub(r"(\w+\s*)\(", r"Operators.\1(", field))
def get_module_by_module_path(module_path):
@@ -728,3 +728,20 @@ def load_dataset(path_or_obj):
elif extension == ".csv":
return pd.read_csv(path_or_obj, parse_dates=True, index_col=[0, 1])
raise ValueError(f"unsupported file type `{extension}`")
#################### Operator Wrapper #####################
class OpsWrapper(object):
"""Ops Wrapper"""
def __init__(self):
self._ops = {}
def register(self, ops_list):
for operator in ops_list:
self._ops[operator.__name__] = operator
def __getattr__(self, key):
if self._ops is {}:
raise AttributeError("Please run qlib.init() first using qlib to register ops")
return self._ops[key]