docs: def read_raw_data(self, f):
          """Read signal data from file"""
  
          if not self.toc["kTocRawData"]:
              return
  
          f.seek(self.data_position)
  
          total_data_size = self.next_segment_offset - self.raw_data_offset
          log.debug(
              "Reading %d bytes of data at %d in %d chunks" %
              (total_data_size, f.tell(), self.num_chunks))
  
          for chunk in range(self.num_chunks):
              if self.toc["kTocInterleavedData"]:
                  log.debug("Data is interleaved")
                  data_objects = [o for o in self.ordered_objects if o.has_data]
                  # If all data types have numpy types and all the lengths are
                  # the same, then we can read all data at once with numpy,
                  # which is much faster
                  all_numpy = all(
                      (o.data_type.nptype is not None for o in data_objects))
                  same_length = (len(
                      set((o.number_values for o in data_objects))) == 1)
                  if (all_numpy and same_length):
                      self._read_interleaved_numpy(f, data_objects)
                  else:
                      self._read_interleaved(f, data_objects)
              else:
                  object_data = {}
                  log.debug("Data is contiguous")
                  for obj in self.ordered_objects:
                      if obj.has_data:
                          if (chunk == (self.num_chunks - 1) and
                                  self.final_chunk_proportion != 1.0):
                              number_values = int(
                                  obj.number_values *
                                  self.final_chunk_proportion)
                          else:
                              number_values = obj.number_values
                          object_data[obj.path] = (
                              obj._read_values(f, number_values))
  
                  for obj in self.ordered_objects:
                      if obj.has_data:
                          obj.tdms_object._update_data(object_data[obj.path])