class_docstr: Composable cycles
  
  This class has compositions methods:
  
  ``+``
    for 'inner' products (zip)
  
  ``+=``
    in-place ``+``
  
  ``*``
    for outer products (`itertools.product`) and integer multiplication
  
  ``*=``
    in-place ``*``
  
  and supports basic slicing via ``[]``
  
  Parameters
  ----------
  left : Cycler or None
      The 'left' cycler
  
  right : Cycler or None
      The 'right' cycler
  
  op : func or None
      Function which composes the 'left' and 'right' cyclers.
class_docstr_tok: ["Composable","cycles","This","class","has","compositions","methods",":","``","+","``","for","'inner","'","products","(","zip",")","``","+=","``","in-place","``","+","``","``","*","``","for","outer","products","(","`","itertools.product","`",")","and","integer","multiplication","``","*","=","``","in-place","``","*","``","and","supports","basic","slicing","via","``","[","]","``","Parameters","--","--","--","--","--","left",":","Cycler","or","None","The","'left","'","cycler","right",":","Cycler","or","None","The","'right","'","cycler","op",":","func","or","None","Function","which","composes","the","'left","'","and","'right","'","cyclers","."]
docstr: Concatenate this cycler and an other.
  
  The keys must match exactly.
  
  This returns a single Cycler which is equivalent to
  `itertools.chain(self, other)`
  
  Examples
  --------
  
  >>> num = cycler('a', range(3))
  >>> let = cycler('a', 'abc')
  >>> num.concat(let)
  cycler('a', [0, 1, 2, 'a', 'b', 'c'])
  
  Parameters
  ----------
  other : `Cycler`
      The `Cycler` to concatenate to this one.
  
  Returns
  -------
  ret : `Cycler`
      The concatenated `Cycler`
docstr_tok: ["Concatenate","this","cycler","and","an","other",".","The","keys","must","match","exactly",".","This","returns","a","single","Cycler","which","is","equivalent","to","`","itertools.chain","(","self",",","other",")","`","Examples","--","--","--","--",">",">",">","num","=","cycler","(","'","a","'",",","range","(","3",")",")",">",">",">","let","=","cycler","(","'","a","'",",","'abc","'",")",">",">",">","num.concat","(","let",")","cycler","(","'","a","'",",","[","0",",","1",",","2",",","'","a","'",",","'","b","'",",","'","c","'","]",")","Parameters","--","--","--","--","--","other",":","`","Cycler","`","The","`","Cycler","`","to","concatenate","to","this","one",".","Returns","--","--","--","-","ret",":","`","Cycler","`","The","concatenated","`","Cycler","`"]
code: def concat(self, other):
      """Concatenate this cycler and an other.
  
      The keys must match exactly.
  
      This returns a single Cycler which is equivalent to
      `itertools.chain(self, other)`
  
      Examples
      --------
  
      >>> num = cycler('a', range(3))
      >>> let = cycler('a', 'abc')
      >>> num.concat(let)
      cycler('a', [0, 1, 2, 'a', 'b', 'c'])
  
      Parameters
      ----------
      other : `Cycler`
          The `Cycler` to concatenate to this one.
  
      Returns
      -------
      ret : `Cycler`
          The concatenated `Cycler`
      """
      return concat(self, other)
  
imports: from __future__ import absolute_import, division, print_function, unicode_literals
  import six
  from itertools import product, cycle
  from six.moves import zip, reduce
  from operator import mul, add
  import copy
label_desc: Use image node_id 21 for calling the Cycler obj's underlying member method code with example usage: obj.concat(other) and returns: concat