@@ -690,17 +690,11 @@ def to_python(self, *, want_inline_parens=False):
690690 return self .value .__repr__ ()
691691
692692
693- class Name (str ):
693+ class UnQuotedStr (str ):
694694 def __init__ (self , v ):
695695 self .v = v
696696 str .__init__ (v )
697697
698- def is_equal (self , other ):
699- # can't use == as that builds a larger expression
700- if not isinstance (other , Name ):
701- return False
702- return self .v == other .v
703-
704698 def str (self ):
705699 return self .v
706700
@@ -709,22 +703,29 @@ def __repr__(self):
709703
710704
711705class FnTerm (Term ):
712- def __init__ (self , value , fn_arg = None , display_form = None , op = None ):
706+ # represent a function of columns
707+ def __init__ (self , value , fn_args = None , name = None , display_form = None , op = None ):
713708 if not callable (value ):
714709 raise TypeError ("value type must be callable" )
715710 self .value = value
711+ if name is None :
712+ name = value .__name__
713+ self .name = name
716714 if display_form is None :
717715 display_form = value .__name__
718716 if op is None :
719717 op = value .__name__
720718 self .display_form = display_form
721719 self .op = op
722- if fn_arg is None :
720+ if fn_args is None :
723721 self .args = []
724722 else :
725- if not isinstance (fn_arg , ColumnReference ):
726- raise TypeError ("Expected fn_arg to be None or a ColumnReference" )
727- self .args = [fn_arg ]
723+ if isinstance (fn_args , ColumnReference ):
724+ fn_args = [fn_args ]
725+ for v in fn_args :
726+ if not isinstance (v , ColumnReference ):
727+ raise TypeError ("Expected fn_args to be None or all ColumnReference" )
728+ self .args = fn_args
728729 Term .__init__ (self )
729730
730731 def is_equal (self , other ):
@@ -749,7 +750,7 @@ def replace_view(self, view):
749750 return self
750751
751752 def to_python (self , * , want_inline_parens = False ):
752- return Name (self .display_form )
753+ return UnQuotedStr (self .display_form )
753754
754755
755756class ListTerm (Term ):
@@ -1068,7 +1069,7 @@ def parse_assignments_in_context(ops, view, *, parse_env=None):
10681069 if not isinstance (v , Term ):
10691070 if callable (v ):
10701071 # k = f(k) implicit form
1071- v = FnTerm (v , fn_arg = ColumnReference (view = view , column_name = k ))
1072+ v = FnTerm (v , fn_args = [ ColumnReference (view = view , column_name = k )] )
10721073 else :
10731074 v = _parse_by_eval (
10741075 source_str = v , data_def = mp , outter_environemnt = parse_env
0 commit comments