code: def evaluate(ref_time, ref_freqs, est_time, est_freqs, **kwargs):
      
      scores = collections.OrderedDict()
  
      (scores['Precision'],
       scores['Recall'],
       scores['Accuracy'],
       scores['Substitution Error'],
       scores['Miss Error'],
       scores['False Alarm Error'],
       scores['Total Error'],
       scores['Chroma Precision'],
       scores['Chroma Recall'],
       scores['Chroma Accuracy'],
       scores['Chroma Substitution Error'],
       scores['Chroma Miss Error'],
       scores['Chroma False Alarm Error'],
       scores['Chroma Total Error']) = util.filter_kwargs(
           metrics, ref_time, ref_freqs, est_time, est_freqs, **kwargs)
  
      return scores
docs: Evaluate two multipitch (multi-f0) transcriptions, where the first is
      treated as the reference (ground truth) and the second as the estimate to
      be evaluated (prediction).
  
      Examples
      --------
      >>> ref_time, ref_freq = mir_eval.io.load_ragged_time_series('ref.txt')
      >>> est_time, est_freq = mir_eval.io.load_ragged_time_series('est.txt')
      >>> scores = mir_eval.multipitch.evaluate(ref_time, ref_freq,
      ...                                       est_time, est_freq)
  
      Parameters
      ----------
      ref_time : np.ndarray
          Time of each reference frequency value
      ref_freqs : list of np.ndarray
          List of np.ndarrays of reference frequency values
      est_time : np.ndarray
          Time of each estimated frequency value
      est_freqs : list of np.ndarray
          List of np.ndarrays of estimate frequency values
      kwargs
          Additional keyword arguments which will be passed to the
          appropriate metric or preprocessing functions.
  
      Returns
      -------
      scores : dict
          Dictionary of scores, where the key is the metric name (str) and
          the value is the (float) score achieved.