code: def flatten(iterable, string_flattening=False):
      
      flat_list = []
      for item in iterable:
          is_iterable = (isinstance(item, collections.Iterable) and
                         (string_flattening or
                          (not string_flattening and not isinstance(item, str))
                          ))
          if is_iterable:
              flat_list.extend(flatten(item))
          else:
              flat_list.append(item)
      return flat_list
docs: Flatten an given iterable of iterables into one list.
  
      Parameters
      ----------
      iterable : iterable
      string_flattening : bool
          If this is False, then strings are NOT flattened
  
      Returns
      -------
      flat_list : List
  
      Examples
      --------
      >>> flatten([1, [2, [3]]])
      [1, 2, 3]
  
      >>> flatten(((1, 2), (3, 4), (5, 6)))
      [1, 2, 3, 4, 5, 6]
  
      >>> flatten(EList([EList([1, 2]), (3, [4, [[5]]])]))
      [1, 2, 3, 4, 5]