code: def _column_pack_filter(self, next_filter):
          
          next(next_filter)
          col_count = len(self.widths)
          queues = [collections.deque() for _ in range(col_count)]
          while True:
              try:
                  row = (yield)
              except GeneratorExit:
                  break
              for col, queue in zip(row, queues):
                  if col is not None:
                      queue.append(col)
              if all(queues):
                  next_filter.send([x.popleft() for x in queues])
          blanks = list(map(self._get_blank_cell, range(col_count)))
          while any(queues):
              next_filter.send([q.popleft() if q else blank
                                for q, blank in zip(queues, blanks)])
docs: Top-align column data irrespective of original row alignment.  E.g.
              INPUT: [
                  ["1a", "2a"],
                  [None, "2b"],
                  ["1b", "2c"],
                  [None, "2d"]
              ]
              OUTPUT: [
                  ["1a", "2a"],
                  ["1b", "2b"],
                  [<blank>, "2c"],
                  [<blank>, "2d"]
              ]