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:
@@ -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]
|
||||
Reference in New Issue
Block a user