docs: def _make_datablock(self):
          '''Make a data_block and sections list as required by DataWrapper'''
          section_ids = sorted(self.sections)
  
          # create all insertion id's, this needs to be done ahead of time
          # as some of the children may have a lower id than their parents
          id_to_insert_id = {}
          row_count = 0
          for section_id in section_ids:
              row_count += len(self.sections[section_id].points)
              id_to_insert_id[section_id] = row_count - 1
  
          datablock = np.empty((row_count, COLS.COL_COUNT), dtype=np.float)
          datablock[:, COLS.ID] = np.arange(len(datablock))
          datablock[:, COLS.P] = datablock[:, COLS.ID] - 1
  
          sections = []
          insert_index = 0
          for id_ in section_ids:
              sec = self.sections[id_]
              points, section_type, parent_id = sec.points, sec.section_type, sec.parent_id
  
              idx = slice(insert_index, insert_index + len(points))
              datablock[idx, COLS.XYZR] = points
              datablock[idx, COLS.TYPE] = section_type
              datablock[idx.start, COLS.P] = id_to_insert_id.get(parent_id, ROOT_ID)
              sections.append(DataBlockSection(idx, section_type, parent_id))
              insert_index = idx.stop
  
          return datablock, sections