def collect_variables(self, context):
     variables = FilteredExpression.collect_variables(self, context)
     if self.expressions:
         variables |= set.union(*[collect_variables(expr, context) for expr in self.expressions])
     variables |= collect_variables(self.take_filter, context)
     variables |= collect_variables(self.leave_filter, context)
     return variables
 def traverse(self, context):
     for node in FilteredExpression.traverse(self, context):
         yield node
     for expr in self.expressions:
         for node in traverse_expr(expr, context):
             yield node
     for node in traverse_expr(self.take_filter, context):
         yield node
     for node in traverse_expr(self.leave_filter, context):
         yield node
     yield self