code: def block_lengths(self):
          
          if self._lengths_cache is None:
              # The first column will have the correct lengths. We have an
              # invariant that requires that all blocks be the same length in a
              # row of blocks.
              self._lengths_cache = (
                  [obj.length() for obj in self._partitions_cache.T[0]]
                  if len(self._partitions_cache.T) > 0
                  else []
              )
          return self._lengths_cache
docs: Gets the lengths of the blocks.
  
          Note: This works with the property structure `_lengths_cache` to avoid
              having to recompute these values each time they are needed.