nodes: 0, module; 1, function_definition; 2, function_name:lagged_in_date; 3, parameters; 4, block; 5, default_parameter; 6, default_parameter; 7, default_parameter; 8, default_parameter; 9, default_parameter; 10, default_parameter; 11, default_parameter; 12, default_parameter; 13, default_parameter; 14, default_parameter; 15, expression_statement; 16, expression_statement; 17, comment:#print 'X, Y:', x, y; 18, if_statement; 19, if_statement; 20, if_statement; 21, return_statement; 22, identifier:x; 23, None; 24, identifier:y; 25, None; 26, identifier:filter_dict; 27, None; 28, identifier:model; 29, string; 30, identifier:app; 31, identifier:DEFAULT_APP; 32, identifier:sort; 33, True; 34, identifier:limit; 35, integer:30000; 36, identifier:lag; 37, integer:1; 38, identifier:pad; 39, integer:0; 40, identifier:truncate; 41, True; 42, comment:"""
      Lag the y values by the specified number of samples.
  
      FIXME: sort has no effect when sequences provided in x, y instead of field names
  
      >>> lagged_in_date(x=[.1,.2,.3,.4], y=[1,2,3,4], limit=4, lag=1)
      ([0.1, 0.2, 0.3, 0.4], [0, 1, 2, 3])
      >>> lagged_in_date(x=[.1,.2,.3,.4], y=[1,2,3,4], lag=1, truncate=True)
      ([0.1, 0.2, 0.3, 0.4], [0, 1, 2, 3])
      """; 43, assignment; 44, boolean_operator; 45, block; 46, boolean_operator; 47, block; 48, boolean_operator; 49, comment:#print 'X:', x; 50, block; 51, expression_list; 52, string_content:WikiItem; 53, identifier:lag; 54, call; 55, call; 56, call; 57, expression_statement; 58, identifier:y; 59, comparison_operator:len(y) == len(x); 60, if_statement; 61, return_statement; 62, boolean_operator; 63, comparison_operator:2 == len(x) <= len(x[0]); 64, expression_statement; 65, if_statement; 66, comment:#print x, y; 67, identifier:x; 68, identifier:y; 69, identifier:int; 70, argument_list; 71, identifier:isinstance; 72, argument_list; 73, identifier:isinstance; 74, argument_list; 75, assignment; 76, call; 77, call; 78, identifier:sort; 79, block; 80, expression_list; 81, identifier:x; 82, call; 83, integer:2; 84, call; 85, call; 86, assignment; 87, identifier:truncate; 88, block; 89, boolean_operator; 90, identifier:x; 91, identifier:basestring; 92, identifier:y; 93, identifier:basestring; 94, pattern_list; 95, call; 96, identifier:len; 97, argument_list; 98, identifier:len; 99, argument_list; 100, expression_statement; 101, expression_statement; 102, identifier:x; 103, call; 104, identifier:len; 105, argument_list; 106, identifier:len; 107, argument_list; 108, identifier:len; 109, argument_list; 110, pattern_list; 111, expression_list; 112, print_statement; 113, if_statement; 114, identifier:lag; 115, integer:0; 116, identifier:x; 117, identifier:y; 118, identifier:sequence_from_filter_spec; 119, argument_list; 120, identifier:y; 121, identifier:x; 122, assignment; 123, assignment; 124, identifier:lagged_seq; 125, argument_list; 126, identifier:x; 127, identifier:x; 128, subscript; 129, identifier:x; 130, identifier:y; 131, subscript; 132, call; 133, identifier:truncate; 134, identifier:lag; 135, comparison_operator:lag >= 0; 136, block; 137, else_clause; 138, list; 139, identifier:filter_dict; 140, keyword_argument; 141, keyword_argument; 142, keyword_argument; 143, keyword_argument; 144, identifier:xy; 145, call; 146, pattern_list; 147, expression_list; 148, identifier:y; 149, keyword_argument; 150, keyword_argument; 151, keyword_argument; 152, identifier:x; 153, integer:0; 154, identifier:x; 155, integer:0; 156, identifier:lagged_seq; 157, argument_list; 158, identifier:lag; 159, integer:0; 160, expression_statement; 161, block; 162, call; 163, call; 164, identifier:model; 165, identifier:model; 166, identifier:app; 167, identifier:app; 168, identifier:sort; 169, identifier:sort; 170, identifier:limit; 171, identifier:limit; 172, identifier:sorted; 173, argument_list; 174, identifier:x; 175, identifier:y; 176, list_comprehension; 177, list_comprehension; 178, identifier:lag; 179, identifier:lag; 180, identifier:pad; 181, identifier:pad; 182, identifier:truncate; 183, identifier:truncate; 184, subscript; 185, keyword_argument; 186, keyword_argument; 187, keyword_argument; 188, assignment; 189, expression_statement; 190, identifier:find_synonymous_field; 191, argument_list; 192, identifier:find_synonymous_field; 193, argument_list; 194, call; 195, keyword_argument; 196, identifier:col1; 197, for_in_clause; 198, identifier:col2; 199, for_in_clause; 200, identifier:x; 201, integer:1; 202, identifier:lag; 203, identifier:lag; 204, identifier:pad; 205, identifier:pad; 206, identifier:truncate; 207, identifier:truncate; 208, identifier:x; 209, subscript; 210, assignment; 211, identifier:x; 212, identifier:y; 213, identifier:zip; 214, argument_list; 215, identifier:reverse; 216, call; 217, pattern_list; 218, identifier:xy; 219, pattern_list; 220, identifier:xy; 221, identifier:x; 222, slice; 223, identifier:x; 224, subscript; 225, identifier:x; 226, identifier:y; 227, identifier:bool; 228, argument_list; 229, identifier:col1; 230, identifier:col2; 231, identifier:col1; 232, identifier:col2; 233, identifier:lag; 234, identifier:x; 235, slice; 236, comparison_operator:int(sort) < 0; 237, identifier:lag; 238, call; 239, integer:0; 240, identifier:int; 241, argument_list; 242, identifier:sort
code: def lagged_in_date(x=None, y=None, filter_dict=None, model='WikiItem', app=DEFAULT_APP, sort=True, limit=30000, lag=1, pad=0, truncate=True):
      """
      Lag the y values by the specified number of samples.
  
      FIXME: sort has no effect when sequences provided in x, y instead of field names
  
      >>> lagged_in_date(x=[.1,.2,.3,.4], y=[1,2,3,4], limit=4, lag=1)
      ([0.1, 0.2, 0.3, 0.4], [0, 1, 2, 3])
      >>> lagged_in_date(x=[.1,.2,.3,.4], y=[1,2,3,4], lag=1, truncate=True)
      ([0.1, 0.2, 0.3, 0.4], [0, 1, 2, 3])
      """
      lag = int(lag or 0)
      #print 'X, Y:', x, y
      if isinstance(x, basestring) and isinstance(y, basestring):
          x, y = sequence_from_filter_spec([find_synonymous_field(x), find_synonymous_field(y)], filter_dict, model=model, 
                                           app=app, sort=sort, limit=limit)
      if y and len(y) == len(x):
          if sort:
              xy = sorted(zip(x,y), reverse=bool(int(sort) < 0))
              x, y = [col1 for col1, col2 in xy], [col2 for col1, col2 in xy]
          return x, lagged_seq(y, lag=lag, pad=pad, truncate=truncate)
      if x and len(x) and 2 == len(x) <= len(x[0]):
          #print 'X:', x
          x, y = x[0], lagged_seq(x[1], lag=lag, pad=pad, truncate=truncate)
          if truncate:
              print truncate, lag
              if lag >= 0:
                  x = x[lag:]
              else:
                  x = x[:lag]
          #print x, y
      return x, y