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: Simplify the Cycler
  
  Returned as a composition using only sums (no multiplications)
  
  Returns
  -------
  simple : Cycler
      An equivalent cycler using only summation
docstr_tok: ["Simplify","the","Cycler","Returned","as","a","composition","using","only","sums","(","no","multiplications",")","Returns","--","--","--","-","simple",":","Cycler","An","equivalent","cycler","using","only","summation"]
code: def simplify(self):
      """Simplify the Cycler
  
      Returned as a composition using only sums (no multiplications)
  
      Returns
      -------
      simple : Cycler
          An equivalent cycler using only summation"""
      # TODO: sort out if it is worth the effort to make sure this is
      # balanced.  Currently it is is
      # (((a + b) + c) + d) vs
      # ((a + b) + (c + d))
      # I would believe that there is some performance implications
  
      trans = self.by_key()
      return reduce(
          add, (_cycler(k, v) for k, v in six.iteritems(trans))
      )
  
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 20 for calling the Cycler obj's underlying member method code with example usage: obj.simplify() and returns: reduce