docs: def load_observations((observations, regex, rename), path, filenames):
      """
      Returns a provisional name based dictionary of observations of the object.
      Each observations is keyed on the date. ie. a dictionary of dictionaries.
  
      :rtype : None
      :param observations: dictionary to store observtions into
      :param path: the directory where filenames are.
      :param filenames: list of files in path.
      """
  
      for filename in filenames:
          if re.search(regex, filename) is None:
              logging.warning("Skipping {}".format(filename))
              continue
          print os.path.join(path,filename)
          obs = mpc.MPCReader().read(os.path.join(path,filename))
          for ob in obs:
              if rename:
                  new_provisional_name = os.path.basename(filename)
                  new_provisional_name = new_provisional_name[0:new_provisional_name.find(".")]
                  ob.provisional_name = new_provisional_name
                  # ob.comment.name = new_provisional_name
              key1 = "{:.5f}".format(ob.date.mjd)
              key2 = ob.provisional_name 
              if key1 not in observations:
                   observations[key1] = {}
              if key2 in observations[key1]:
                 if observations[key1][key2]:
                     continue
                 if not observation.null_observation:
                     logger.error(filename)
                     logger.error(line)
                     logger.error(str(observations[key1][key2]))
                     raise ValueError("conflicting observations for {} in {}".format(key2, key1))
              observations[key1][key2] = ob