def __str__(self): return '({} ({}) {} ({}))'.format( escape_id(self.op), ' '.join([x._jtype.parsableString() for x in self.ctor_arg_types]), ('(' + ' '.join( [x._jtype.parsableString() for x in self.initop_arg_types]) + ')' if self.initop_arg_types else 'None'), ' '.join([x._jtype.parsableString() for x in self.seqop_arg_types]))
def render(self, r): return '(Let {} {} {})'.format(escape_id(self.name), r(self.value), r(self.body))
def render(self, r): return '(ApplySeeded {} {} {})'.format( escape_id(self.function), self.seed, ' '.join([r(x) for x in self.args]))
def render(self, r): return '(TableIntervalJoin {} {} {})'.format( escape_id(self.root), r(self.left), r(self.right))
def head_str(self): return '{} {} ({})'.format( escape_str(self.entries_field_name), escape_str(self.cols_field_name), ' '.join([escape_id(id) for id in self.col_key]))
def render(self, r): return '(ArrayFor {} {} {})'.format(escape_id(self.value_name), r(self.a), r(self.body))
def render(self, r): return '(TableExplode {} {})'.format(escape_id(self.field), r(self.child))
def render(self, r): return '(GetField {} {})'.format(escape_id(self.name), r(self.o))
def render(self, r): return '(TableJoin {} {} {} {})'.format( escape_id(self.join_type), self.join_key, r(self.left), r(self.right))
def render(self, r): return '(TableOrderBy ({}) {})'.format( ' '.join(['{}{}'.format(order, escape_id(f)) for (f, order) in self.sort_fields]), r(self.child))
def render(self, r): return '(ApplyUnaryPrimOp {} {})'.format(escape_id(self.op), r(self.x))
def render(self, r): return '(Uniroot {} {} {} {})'.format( escape_id(self.argname), r(self.function), r(self.min), r(self.max))
def render(self, r): return '(ArrayFlatMap {} {} {})'.format(escape_id(self.name), r(self.a), r(self.body))
def render(self, r): return '(MakeStruct {})'.format(' '.join( ['({} {})'.format(escape_id(f), r(x)) for (f, x) in self.fields]))
def render(self, r): return '(Ref {})'.format(escape_id(self.name))
def head_str(self): return '({}) {}'.format(' '.join([escape_id(x) for x in self.keys]), self.is_sorted)
def render(self, r): return '(TableOrderBy ({}) {})'.format( ' '.join([escape_id(order + f) for (f, order) in self.sort_fields]), r(self.child))
def render(self, r): return '(ApplyComparisonOp {} {} {})'.format(escape_id(self.op), r(self.l), r(self.r))
def render(self, r): return '(MatrixExplodeCols ({}) {})'.format( ' '.join([escape_id(id) for id in self.path]), r(self.child))
def render(self, r): return '(ArrayScan {} {} {} {} {})'.format( escape_id(self.accum_name), escape_id(self.value_name), r(self.a), r(self.zero), r(self.body))
def render(self, r): return '(Uniroot {} {} {} {})'.format(escape_id(self.argname), r(self.function), r(self.min), r(self.max))
def render(self, r): return '(AggExplode {} {} {})'.format(escape_id(self.name), r(self.array), r(self.agg_body))
def render(self, r): return '(ApplyComparisonOp ({}) {} {})'.format(escape_id(self.op), r(self.l), r(self.r))
def render(self, r): return '(MakeStruct {})'.format(' '.join(['({} {})'.format(escape_id(f), r(x)) for (f, x) in self.fields]))
def render(self, r): return '(ArrayScan {} {} {} {} {})'.format(escape_id(self.accum_name), escape_id(self.value_name), r(self.a), r(self.zero), r(self.body))
def render(self, r): return '(InsertFields {} {})'.format( self.old, ' '.join(['({} {})'.format(escape_id(f), r(x)) for (f, x) in self.fields]))
def head_str(self): return escape_id(self.root)
def __str__(self): return '(TableOrderBy ({}) {})'.format( ' '.join([ '{}{}'.format(order, escape_id(f)) for (f, order) in self.sort_fields ]), self.child)
def __str__(self): return '(TableJoin {} {} {})'.format(escape_id(self.join_type), self.left, self.right)
def __str__(self): return '(TableExplode {} {})'.format(escape_id(self.field), self.child)
def __str__(self): return '(TableKeyBy ({}) {} {} {})'.format( ' '.join([escape_id(x) for x in self.keys]), self.n_partitions, self.sort, self.child)
def render(self, r): return '(TableLeftJoinRightDistinct {} {} {})'.format( escape_id(self.root), r(self.left), r(self.right))
def __str__(self): return '(TableMapRows {} {} {} {})'.format( ' '.join([escape_id(x) for x in self.new_key]) if self.new_key else 'None', self.preserved_key_fields, self.child, self.new_row)
def render(self, r): return '(MatrixKeyRowsBy ({}) {} {})'.format( ' '.join([escape_id(x) for x in self.keys]), self.is_sorted, r(self.child))
def render(self, r): return '(InsertFields {} {})'.format( self.old, ' '.join([ '({} {})'.format(escape_id(f), r(x)) for (f, x) in self.fields ]))
def render(self, r): return '(CastTableToMatrix {} {} ({}) {})'.format( escape_str(self.entries_field_name), escape_str(self.cols_field_name), ' '.join([escape_id(id) for id in self.col_key]), r(self.child))