docs: def all_subslices(itr):
      """ generates every possible slice that can be generated from an iterable """
      assert iterable(itr), 'generators.all_subslices only accepts iterable arguments, not {}'.format(itr)
      if not hasattr(itr, '__len__'): # if itr isnt materialized, make it a deque
          itr = deque(itr)
      len_itr = len(itr)
      for start,_ in enumerate(itr):
          d = deque()
          for i in islice(itr, start, len_itr): # how many slices for this round
              d.append(i)
              yield tuple(d)