code: def testPassThrough_Mono(self):
      self.midi_hub = midi_hub.MidiHub(
          [self.port], [self.port], midi_hub.TextureType.MONOPHONIC
      )
      self.midi_hub.passthrough = False
      self.send_capture_messages()
      self.assertTrue(self.port.message_queue.empty())
      self.midi_hub.passthrough = True
      self.send_capture_messages()
  
      passed_messages = []
      while not self.port.message_queue.empty():
          passed_messages.append(self.port.message_queue.get())
          passed_messages[-1].time = 0
      expected_messages = [
          mido.Message(type="note_on", note=0),
          mido.Message(type="control_change", control=1, value=1),
          mido.Message(type="note_off", note=0),
          mido.Message(type="note_on", note=1),
          mido.Message(type="note_off", note=1),
          mido.Message(type="note_on", note=2),
          mido.Message(type="note_off", note=2),
          mido.Message(type="note_on", note=3),
          mido.Message(type="control_change", control=1, value=1),
          mido.Message(type="note_off", note=3),
      ]
  
      self.assertListEqual(passed_messages, expected_messages)
  
imports: import collections
  import queue
  import threading
  import time
  from magenta.common import concurrency
  from magenta.interfaces.midi import midi_hub
  import mido
  from note_seq import testing_lib
  from note_seq.protobuf import music_pb2
  import tensorflow.compat.v1
label_desc: Use image node_id 25 for calling the MidiHubTest obj's underlying member method code with example usage: obj.testPassThrough_Mono() without return types