code: def _compute_cols_width(self):
          
  
          if hasattr(self, "_width"):
              return
          maxi = []
          if self._header:
              maxi = [ self._len_cell(x) for x in self._header ]
          for row in self._rows:
              for cell,i in zip(row, range(len(row))):
                  try:
                      maxi[i] = max(maxi[i], self._len_cell(cell))
                  except (TypeError, IndexError):
                      maxi.append(self._len_cell(cell))
          items = len(maxi)
          length = reduce(lambda x,y: x+y, maxi)
          if self._max_width and length + items*3 + 1 > self._max_width:
              maxi = [(self._max_width - items*3 -1) / items \
                  for n in range(items)]
          self._width = maxi
docs: Return an array with the width of each column
  
          If a specific width has been specified, exit. If the total of the
          columns width exceed the table desired width, another width will be
          computed to fit, and cells will be wrapped.