code: def validate(ref_intervals, ref_pitches, ref_velocities, est_intervals,
               est_pitches, est_velocities):
      
      transcription.validate(ref_intervals, ref_pitches, est_intervals,
                             est_pitches)
      # Check that velocities have the same length as intervals/pitches
      if not ref_velocities.shape[0] == ref_pitches.shape[0]:
          raise ValueError('Reference velocities must have the same length as '
                           'pitches and intervals.')
      if not est_velocities.shape[0] == est_pitches.shape[0]:
          raise ValueError('Estimated velocities must have the same length as '
                           'pitches and intervals.')
      # Check that the velocities are positive
      if ref_velocities.size > 0 and np.min(ref_velocities) < 0:
          raise ValueError('Reference velocities must be positive.')
      if est_velocities.size > 0 and np.min(est_velocities) < 0:
          raise ValueError('Estimated velocities must be positive.')
docs: Checks that the input annotations have valid time intervals, pitches,
      and velocities, and throws helpful errors if not.
  
      Parameters
      ----------
      ref_intervals : np.ndarray, shape=(n,2)
          Array of reference notes time intervals (onset and offset times)
      ref_pitches : np.ndarray, shape=(n,)
          Array of reference pitch values in Hertz
      ref_velocities : np.ndarray, shape=(n,)
          Array of MIDI velocities (i.e. between 0 and 127) of reference notes
      est_intervals : np.ndarray, shape=(m,2)
          Array of estimated notes time intervals (onset and offset times)
      est_pitches : np.ndarray, shape=(m,)
          Array of estimated pitch values in Hertz
      est_velocities : np.ndarray, shape=(m,)
          Array of MIDI velocities (i.e. between 0 and 127) of estimated notes