code: def populate(self, data, resize_x=True, normalize=True):
          
          if data is None:
              raise WidgetDataError(
                  self,
                  "Parameter data should be non-None, to empty the table use TempyTable.clear() or "
                  "pass an empty list.",
              )
          data = copy(data)
          if not self.body:
              # Table is empty
              self(body=Tbody())
          self.clear()
  
          max_data_x = max(map(len, data))
          if not resize_x:
              self._check_row_size(max_data_x)
  
          for t_row, d_row in zip_longest(self.body, data):
              if not d_row:
                  t_row.remove()
              else:
                  if not t_row:
                      t_row = Tr().append_to(self.body)
                  if normalize:
                      d_row = AdjustableList(d_row).ljust(max_data_x, None)
                  for t_cell, d_cell in zip_longest(t_row, d_row):
                      if not t_cell and resize_x:
                          t_cell = Td().append_to(t_row)
                      t_cell.empty()
                      if d_cell is not None:
                          t_cell(d_cell)
          return self
docs: Adds/Replace data in the table.
          data: an iterable of iterables in the form [[col1, col2, col3], [col1, col2, col3]]
          resize_x: if True, changes the x-size of the table according to the given data.
              If False and data have dimensions different from the existing table structure a WidgetDataError is raised.
          normalize: if True all the rows will have the same number of columns, if False, data structure is followed.