feat(factors): 实现 AST 拍平优化支持嵌套窗口函数
- 新增 ExpressionFlattener 类自动拆解嵌套窗口函数(如 cs_rank(ts_delay(close, 1)))
- 支持因子引用其他因子:engine.register("fac2", cs_rank("fac1"))
- 给 DependencyExtractor 增加 ignore_symbols 免疫名单,防止已注册因子被当作数据库字段
- 添加完整测试覆盖嵌套场景和数值一致性验证
This commit is contained in:
@@ -39,6 +39,7 @@ class ExecutionPlanner:
|
||||
expression: Node,
|
||||
output_name: str = "factor",
|
||||
data_specs: Optional[List[DataSpec]] = None,
|
||||
ignore_dependencies: Optional[Set[str]] = None,
|
||||
) -> ExecutionPlan:
|
||||
"""从表达式创建执行计划。
|
||||
|
||||
@@ -46,12 +47,15 @@ class ExecutionPlanner:
|
||||
expression: DSL 表达式节点
|
||||
output_name: 输出因子名称
|
||||
data_specs: 预定义的数据规格,None 时自动推导
|
||||
ignore_dependencies: 需要忽略的依赖符号集合(如已注册因子名)
|
||||
|
||||
Returns:
|
||||
执行计划对象
|
||||
"""
|
||||
# 1. 提取依赖
|
||||
dependencies = self.compiler.extract_dependencies(expression)
|
||||
# 1. 提取依赖时传入要忽略的符号
|
||||
dependencies = self.compiler.extract_dependencies(
|
||||
expression, ignore_symbols=ignore_dependencies
|
||||
)
|
||||
|
||||
# 2. 翻译为 Polars 表达式
|
||||
polars_expr = self.translator.translate(expression)
|
||||
|
||||
Reference in New Issue
Block a user