本文整理汇总了Python中incoq.compiler.incast.L.get_setunion方法的典型用法代码示例。如果您正苦于以下问题:Python L.get_setunion方法的具体用法?Python L.get_setunion怎么用?Python L.get_setunion使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类incoq.compiler.incast.L
的用法示例。
在下文中一共展示了L.get_setunion方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: rewrite_aggr
# 需要导入模块: from incoq.compiler.incast import L [as 别名]
# 或者: from incoq.compiler.incast.L import get_setunion [as 别名]
def rewrite_aggr(self, symbol, name, aggr):
# Only operate on min and max nodes.
if isinstance(aggr.op, L.Min):
func = 'min2'
elif isinstance(aggr.op, L.Max):
func = 'max2'
else:
return
parts = L.get_setunion(aggr.value)
if len(parts) <= 1:
return
multiple_queries = \
len([p for p in parts if not isinstance(p, L.Set)]) > 1
i = 2
done_first_query = False
new_parts = []
for p in parts:
if isinstance(p, L.Set):
# Flatten the literal elements as arguments to
# min2/max2.
new_parts.extend(p.elts)
else:
new_query_node = aggr._replace(value=p)
if done_first_query:
# Create a new query symbol and node for this
# non-literal argument.
new_name = name + '_aggrop' + str(i)
i += 1
new_parts.append(L.Query(new_name, new_query_node,
None))
symtab.define_query(new_name, node=new_query_node,
impl=symbol.impl)
else:
# Push the Query node down to the first non-literal
# argument.
new_parts.append(L.Query(name, new_query_node, None))
symbol.node = new_query_node
done_first_query = True
return L.Call(func, new_parts)