nodes: 0, module; 1, function_definition; 2, function_name:specify_data_set; 3, parameters; 4, block; 5, identifier:self; 6, identifier:x_input; 7, identifier:y_input; 8, default_parameter; 9, expression_statement; 10, if_statement; 11, expression_statement; 12, expression_statement; 13, identifier:sort_data; 14, False; 15, comment:"""
          Fully define data by lists of x values and y values.
  
          This will sort them by increasing x but remember how to unsort them for providing results.
  
          Parameters
          ----------
          x_input : iterable
              list of floats that represent x
          y_input : iterable
              list of floats that represent y(x) for each x
          sort_data : bool, optional
              If true, the data will be sorted by increasing x values.
          """; 16, identifier:sort_data; 17, block; 18, else_clause; 19, assignment; 20, assignment; 21, expression_statement; 22, expression_statement; 23, expression_statement; 24, expression_statement; 25, if_statement; 26, block; 27, attribute; 28, identifier:x; 29, attribute; 30, identifier:y; 31, assignment; 32, assignment; 33, assignment; 34, assignment; 35, comparison_operator:len(set(self._original_index_of_xvalue)) != len(x); 36, block; 37, expression_statement; 38, identifier:self; 39, identifier:x; 40, identifier:self; 41, identifier:y; 42, identifier:xy; 43, call; 44, pattern_list; 45, call; 46, identifier:x_input_list; 47, call; 48, attribute; 49, list_comprehension; 50, call; 51, call; 52, raise_statement; 53, assignment; 54, identifier:sorted; 55, argument_list; 56, identifier:x; 57, identifier:y; 58, identifier:zip; 59, argument_list; 60, identifier:list; 61, argument_list; 62, identifier:self; 63, identifier:_original_index_of_xvalue; 64, call; 65, for_in_clause; 66, identifier:len; 67, argument_list; 68, identifier:len; 69, argument_list; 70, call; 71, pattern_list; 72, expression_list; 73, call; 74, list_splat; 75, identifier:x_input; 76, attribute; 77, argument_list; 78, identifier:xi; 79, identifier:x; 80, call; 81, identifier:x; 82, identifier:RuntimeError; 83, argument_list; 84, identifier:x; 85, identifier:y; 86, identifier:x_input; 87, identifier:y_input; 88, identifier:zip; 89, argument_list; 90, identifier:xy; 91, identifier:x_input_list; 92, identifier:index; 93, identifier:xi; 94, identifier:set; 95, argument_list; 96, string; 97, identifier:x_input; 98, identifier:y_input; 99, attribute; 100, string_content:There are some non-unique x-values; 101, identifier:self; 102, identifier:_original_index_of_xvalue
code: def specify_data_set(self, x_input, y_input, sort_data=False):
          """
          Fully define data by lists of x values and y values.
  
          This will sort them by increasing x but remember how to unsort them for providing results.
  
          Parameters
          ----------
          x_input : iterable
              list of floats that represent x
          y_input : iterable
              list of floats that represent y(x) for each x
          sort_data : bool, optional
              If true, the data will be sorted by increasing x values.
          """
          if sort_data:
              xy = sorted(zip(x_input, y_input))
              x, y = zip(*xy)
              x_input_list = list(x_input)
              self._original_index_of_xvalue = [x_input_list.index(xi) for xi in x]
              if len(set(self._original_index_of_xvalue)) != len(x):
                  raise RuntimeError('There are some non-unique x-values')
          else:
              x, y = x_input, y_input
  
          self.x = x
          self.y = y