code: def testChordsExtractor(self):
      note_sequence = common_testing_lib.parse_test_proto(
          music_pb2.NoteSequence,
          """
          time_signatures: {
            numerator: 4
            denominator: 4}
          tempos: {
            qpm: 60}""",
      )
      music_testing_lib.add_chords_to_sequence(
          note_sequence, [("C", 2), ("Am", 4), ("F", 5)]
      )
      quantized_sequence = sequences_lib.quantize_note_sequence(
          note_sequence, steps_per_quarter=1
      )
      quantized_sequence.total_quantized_steps = 8
      expected_events = [
          [NO_CHORD, NO_CHORD, "C", "C", "Am", "F", "F", "F"]
      ]
      expected_chord_progressions = []
      for events_list in expected_events:
          chords = chords_lib.ChordProgression(
              events_list, steps_per_quarter=1, steps_per_bar=4
          )
          expected_chord_progressions.append(chords)
      unit = chord_pipelines.ChordsExtractor(all_transpositions=False)
      self._unit_transform_test(
          unit, quantized_sequence, expected_chord_progressions
      )
  
file_path: magenta/magenta/pipelines/chord_pipelines_test.py
imports: from absl.testing import absltest
  from magenta.common import testing_lib
  from magenta.pipelines import chord_pipelines
  from magenta.pipelines import melody_pipelines
  from note_seq import chords_lib
  from note_seq import constants
  from note_seq import sequences_lib
  from note_seq import testing_lib
  from note_seq.protobuf import music_pb2
label_desc: Use image node_id 3 for calling the ChordPipelinesTest obj's underlying member method code with example usage: obj.testChordsExtractor() without return types