docs: def read(filename, remove_duplicates=False, data_wrapper=DataWrapper):
      '''Read a file and return a `data_wrapper'd` data
  
      * Tries to guess the format and the H5 version.
      * Unpacks the first block it finds out of ('repaired', 'unraveled', 'raw')
  
      Parameters:
          remove_duplicates: boolean, If True removes duplicate points
          from the beginning of each section.
      '''
      with h5py.File(filename, mode='r') as h5file:
          version = get_version(h5file)
          if version == 'H5V1':
              points, groups = _unpack_v1(h5file)
          elif version == 'H5V2':
              stg = next(s for s in ('repaired', 'unraveled', 'raw')
                         if s in h5file['neuron1'])
              points, groups = _unpack_v2(h5file, stage=stg)
  
      if remove_duplicates:
          points, groups = _remove_duplicate_points(points, groups)
  
      neuron_builder = BlockNeuronBuilder()
      points[:, POINT_DIAMETER] /= 2  # Store radius, not diameter
      for id_, row in enumerate(zip_longest(groups,
                                            groups[1:, GPFIRST],
                                            fillvalue=len(points))):
          (point_start, section_type, parent_id), point_end = row
          neuron_builder.add_section(id_, int(parent_id), int(section_type),
                                     points[point_start:point_end])
  
      return neuron_builder.get_datawrapper(version, data_wrapper=data_wrapper)