code: def runInstance(
      self,
      input,
      tempoHints=None,
      useOnset=True,
      useBands=True,
      poolInit=False,
  ):
      print(
          "TestRhythmExtractor: Warning - these tests are evaluated with high tolerances for error, please review these tests"
      )
  
      gen = VectorInput(input)
      if not tempoHints:
          rhythm = RhythmExtractor(useOnset=useOnset, useBands=useBands)
      else:
          rhythm = RhythmExtractor(
              useOnset=useOnset,
              useBands=useBands,
              tempoHints=array(tempoHints),
          )
  
      p = Pool()
  
      gen.data >> rhythm.signal
      rhythm.bpm >> (p, "rhythm.bpm")
      rhythm.ticks >> (p, "rhythm.ticks")
      rhythm.estimates >> (p, "rhythm.estimates")
      rhythm.bpmIntervals >> (p, "rhythm.bpmIntervals")
  
      run(gen)
  
      outputs = [
          "rhythm.ticks",
          "rhythm.estimates",
          "rhythm.bpmIntervals",
      ]
  
      # in case ther was no output from rhythm extractor in any of the output
      # ports:
      for output in outputs:
          if output not in p.descriptorNames():
              p.add(output, [0])
      if "rhythm.bpm" not in p.descriptorNames():
          p.set("rhythm.bpm", 0)
  
      return [
          p["rhythm.bpm"],
          p["rhythm.ticks"],
          p["rhythm.estimates"],
          p["rhythm.bpmIntervals"],
      ]
  
file_path: essentia/test/src/unittests/rhythm/test_rhythmextractor.py
imports: from essentia_test import *
  from essentia.streaming import RhythmExtractor
  from essentia.standard import MonoLoader, RhythmExtractor
  from math import fabs
label_desc: Use image node_id 2 for calling the TestRhythmExtractor obj's underlying member method code with example usage: obj.runInstance(input, tempoHints, useOnset, useBands, poolInit) and returns: list