code: def _match_error_to_data_set(x, ex):
      
      # Simplest case, ex is None or a number
      if not _fun.is_iterable(ex):
          
          # Just make a matched list of Nones
          if ex is None: ex = [ex]*len(x)
          
          # Make arrays of numbers
          if _fun.is_a_number(ex): 
              value = ex # temporary storage
              ex    = []
              for n in range(len(x)): 
                  ex.append([value]*len(x[n]))
      
      # Otherwise, ex is iterable
      
      # Default behavior: If the elements are all numbers and the length matches
      # that of the first x-array, assume this is meant to match all the x
      # data sets
      if _fun.elements_are_numbers(ex) and len(ex) == len(x[0]): ex = [ex]*len(x)
  
      # The user may specify a list of some iterable and some not. Assume
      # in this case that at least the lists are the same length    
      for n in range(len(x)):
          # do nothing to the None's
          # Inflate single numbers to match
          if _fun.is_a_number(ex[n]): ex[n] = [ex[n]]*len(x[n])
          
      return ex
docs: Inflates ex to match the dimensionality of x, "intelligently". 
      x is assumed to be a 2D array.