docs: def _fill_row_borders(self):
          """Add the first and last rows to the data by extrapolation.
          """
          lines = len(self.hrow_indices)
          chunk_size = self.chunk_size or lines
          factor = len(self.hrow_indices) / len(self.row_indices)
  
          tmp_data = []
          for num in range(len(self.tie_data)):
              tmp_data.append([])
          row_indices = []
  
          for index in range(0, lines, chunk_size):
              indices = np.logical_and(self.row_indices >= index / factor,
                                       self.row_indices < (index
                                                           + chunk_size) / factor)
              ties = np.argwhere(indices).squeeze()
              tiepos = self.row_indices[indices].squeeze()
  
              for num, data in enumerate(self.tie_data):
                  to_extrapolate = data[ties, :]
                  if len(to_extrapolate) > 0:
                      extrapolated = self._extrapolate_rows(to_extrapolate,
                                                            tiepos,
                                                            self.hrow_indices[
                                                                index],
                                                            self.hrow_indices[index + chunk_size - 1])
                      tmp_data[num].append(extrapolated)
  
              row_indices.append(np.array([self.hrow_indices[index]]))
              row_indices.append(tiepos)
              row_indices.append(np.array([self.hrow_indices[index
                                                             + chunk_size - 1]]))
  
          for num in range(len(self.tie_data)):
              self.tie_data[num] = np.vstack(tmp_data[num])
          self.row_indices = np.concatenate(row_indices)