docs: def import_gmfs(dstore, fname, sids):
      """
      Import in the datastore a ground motion field CSV file.
  
      :param dstore: the datastore
      :param fname: the CSV file
      :param sids: the site IDs (complete)
      :returns: event_ids, num_rlzs
      """
      array = writers.read_composite_array(fname).array
      # has header rlzi, sid, eid, gmv_PGA, ...
      imts = [name[4:] for name in array.dtype.names[3:]]
      n_imts = len(imts)
      gmf_data_dt = numpy.dtype(
          [('rlzi', U16), ('sid', U32), ('eid', U64), ('gmv', (F32, (n_imts,)))])
      # store the events
      eids = numpy.unique(array['eid'])
      eids.sort()
      E = len(eids)
      eid2idx = dict(zip(eids, range(E)))
      events = numpy.zeros(E, rupture.events_dt)
      events['eid'] = eids
      dstore['events'] = events
      # store the GMFs
      dic = general.group_array(array.view(gmf_data_dt), 'sid')
      lst = []
      offset = 0
      for sid in sids:
          n = len(dic.get(sid, []))
          lst.append((offset, offset + n))
          if n:
              offset += n
              gmvs = dic[sid]
              gmvs['eid'] = get_idxs(gmvs, eid2idx)
              gmvs['rlzi'] = 0   # effectively there is only 1 realization
              dstore.extend('gmf_data/data', gmvs)
      dstore['gmf_data/indices'] = numpy.array(lst, U32)
      dstore['gmf_data/imts'] = ' '.join(imts)
      sig_eps_dt = [('eid', U64), ('sig', (F32, n_imts)), ('eps', (F32, n_imts))]
      dstore['gmf_data/sigma_epsilon'] = numpy.zeros(0, sig_eps_dt)
      dstore['weights'] = numpy.ones((1, n_imts))
      return eids