class_docstr: Wrapper which allows multiple BaseDeformer objects to be chained together
  
  A given JAMS object will be transformed sequentially by
  each stage of the pipeline.
  
  The pipeline induces a graph over transformers
  
  Attributes
  ----------
  steps : argument array
      steps[i] is a tuple of `(name, Transformer)`
  
  Examples
  --------
  >>> P = muda.deformers.PitchShift(semitones=5)
  >>> T = muda.deformers.TimeStretch(speed=1.25)
  >>> Pipe = muda.Pipeline(steps=[('Pitch:maj3', P), ('Speed:1.25x', T)])
  >>> output_jams = list(Pipe.transform(jam_in))
  
  See Also
  --------
  Union
class_docstr_tok: ["Wrapper","which","allows","multiple","BaseDeformer","objects","to","be","chained","together","A","given","JAMS","object","will","be","transformed","sequentially","by","each","stage","of","the","pipeline",".","The","pipeline","induces","a","graph","over","transformers","Attributes","--","--","--","--","--","steps",":","argument","array","steps","[","i","]","is","a","tuple","of","`","(","name",",","Transformer",")","`","Examples","--","--","--","--",">",">",">","P","=","muda.deformers.PitchShift","(","semitones=5",")",">",">",">","T","=","muda.deformers.TimeStretch","(","speed=1.25",")",">",">",">","Pipe","=","muda.Pipeline","(","steps=","[","(","'Pitch",":","maj3","'",",","P",")",",","(","'Speed:1.25x","'",",","T",")","]",")",">",">",">","output_jams","=","list","(","Pipe.transform","(","jam_in",")",")","See","Also","--","--","--","--","Union"]
docstr: A recursive transformation pipeline
docstr_tok: ["A","recursive","transformation","pipeline"]
code: def __recursive_transform(self, jam, steps):
      """A recursive transformation pipeline"""
  
      if len(steps) > 0:
          head_transformer = steps[0][1]
          for t_jam in head_transformer.transform(jam):
              for q in self.__recursive_transform(t_jam, steps[1:]):
                  yield q
      else:
          yield jam
  
imports: import numpy
  import copy
  from collections import OrderedDict
  import itertools
  import six
  import inspect
label_desc: Use image node_id 4 for calling the Pipeline obj's underlying member method code with example usage: obj.__recursive_transform(jam, steps) without return types