docs: def parse(query_string, info={}):
      """
      :returns: a normalized query_dict as in the following examples:
  
      >>> parse('kind=stats', {'stats': {'mean': 0, 'max': 1}})
      {'kind': ['mean', 'max'], 'k': [0, 1], 'rlzs': False}
      >>> parse('kind=rlzs', {'stats': {}, 'num_rlzs': 3})
      {'kind': ['rlz-000', 'rlz-001', 'rlz-002'], 'k': [0, 1, 2], 'rlzs': True}
      >>> parse('kind=mean', {'stats': {'mean': 0, 'max': 1}})
      {'kind': ['mean'], 'k': [0], 'rlzs': False}
      >>> parse('kind=rlz-3&imt=PGA&site_id=0', {'stats': {}})
      {'kind': ['rlz-3'], 'imt': ['PGA'], 'site_id': [0], 'k': [3], 'rlzs': True}
      """
      qdic = parse_qs(query_string)
      loss_types = info.get('loss_types', [])
      for key, val in qdic.items():  # for instance, convert site_id to an int
          if key == 'loss_type':
              qdic[key] = [loss_types[k] for k in val]
          else:
              qdic[key] = [lit_eval(v) for v in val]
      if info:
          qdic['k'], qdic['kind'], qdic['rlzs'] = _normalize(qdic['kind'], info)
      return qdic