code: def _match_data_sets(x,y):
      
      # Handle the None for x or y
      if x is None: 
          # If x is none, y can be either [1,2] or [[1,2],[1,2]]
          if _fun.is_iterable(y[0]):
              # make an array of arrays to match
              x = []
              for n in range(len(y)):
                  x.append(list(range(len(y[n]))))
          else: x = list(range(len(y)))
      
      if y is None: 
          # If x is none, y can be either [1,2] or [[1,2],[1,2]]
          if _fun.is_iterable(x[0]):
              # make an array of arrays to match
              y = []
              for n in range(len(x)):
                  y.append(list(range(len(x[n]))))
          else: y = list(range(len(x)))
      
      # At this point they should be matched, but may still be 1D
      # Default behavior: if all elements are numbers in both, assume they match
      if _fun.elements_are_numbers(x) and _fun.elements_are_numbers(y):
          x = [x]
          y = [y]
             
      # Second default behavior: shared array [1,2,3], [[1,2,1],[1,2,1]] or vis versa
      if _fun.elements_are_numbers(x) and not _fun.elements_are_numbers(y): x = [x]*len(y)
      if _fun.elements_are_numbers(y) and not _fun.elements_are_numbers(x): y = [y]*len(x)
  
      # Clean up any remaining Nones
      for n in range(len(x)):
          if x[n] is None: x[n] = list(range(len(y[n])))
          if y[n] is None: y[n] = list(range(len(x[n])))
      
      return x, y
docs: Makes sure everything is the same shape. "Intelligently".