class_docstr: Has methods to ``enumerate`` and ``count`` the partitions of a multiset.
  
  This implements a refactored and extended version of Knuth's algorithm
  7.1.2.5M [AOCP]_."
  
  The enumeration methods of this class are generators and return
  data structures which can be interpreted by the same visitor
  functions used for the output of ``multiset_partitions_taocp``.
  
  Examples
  ========
  
  >>> from sympy.utilities.enumerative import MultisetPartitionTraverser
  >>> m = MultisetPartitionTraverser()
  >>> m.count_partitions([4,4,4,2])
  127750
  >>> m.count_partitions([3,3,3])
  686
  
  See Also
  ========
  
  multiset_partitions_taocp
  sympy.utilities.iterables.multiset_partitions
  
  References
  ==========
  
  .. [AOCP] Algorithm 7.1.2.5M in Volume 4A, Combinatoral Algorithms,
         Part 1, of The Art of Computer Programming, by Donald Knuth.
  
  .. [Factorisatio] On a Problem of Oppenheim concerning
         "Factorisatio Numerorum" E. R. Canfield, Paul Erdos, Carl
         Pomerance, JOURNAL OF NUMBER THEORY, Vol. 17, No. 1. August
         1983.  See section 7 for a description of an algorithm
         similar to Knuth's.
  
  .. [Yorgey] Generating Multiset Partitions, Brent Yorgey, The
         Monad.Reader, Issue 8, September 2007.
docstr: Enumerate the partitions of a multiset.
  
  Examples
  ========
  
  >>> from sympy.utilities.enumerative import list_visitor
  >>> from sympy.utilities.enumerative import MultisetPartitionTraverser
  >>> m = MultisetPartitionTraverser()
  >>> states = m.enum_all([2,2])
  >>> list(list_visitor(state, 'ab') for state in states)
  [[['a', 'a', 'b', 'b']],
  [['a', 'a', 'b'], ['b']],
  [['a', 'a'], ['b', 'b']],
  [['a', 'a'], ['b'], ['b']],
  [['a', 'b', 'b'], ['a']],
  [['a', 'b'], ['a', 'b']],
  [['a', 'b'], ['a'], ['b']],
  [['a'], ['a'], ['b', 'b']],
  [['a'], ['a'], ['b'], ['b']]]
  
  See Also
  ========
  
  multiset_partitions_taocp:
      which provides the same result as this method, but is
      about twice as fast.  Hence, enum_all is primarily useful
      for testing.  Also see the function for a discussion of
      states and visitors.
docstr_tok: ["Enumerate","the","partitions","of","a","multiset",".","Examples","========",">",">",">","from","sympy.utilities.enumerative","import","list_visitor",">",">",">","from","sympy.utilities.enumerative","import","MultisetPartitionTraverser",">",">",">","m","=","MultisetPartitionTraverser","(",")",">",">",">","states","=","m.enum_all","(","[","2,2","]",")",">",">",">","list","(","list_visitor","(","state",",","'ab","'",")","for","state","in","states",")","[","[","[","'","a","'",",","'","a","'",",","'","b","'",",","'","b","'","]","]",",","[","[","'","a","'",",","'","a","'",",","'","b","'","]",",","[","'","b","'","]","]",",","[","[","'","a","'",",","'","a","'","]",",","[","'","b","'",",","'","b","'","]","]",",","[","[","'","a","'",",","'","a","'","]",",","[","'","b","'","]",",","[","'","b","'","]","]",",","[","[","'","a","'",",","'","b","'",",","'","b","'","]",",","[","'","a","'","]","]",",","[","[","'","a","'",",","'","b","'","]",",","[","'","a","'",",","'","b","'","]","]",",","[","[","'","a","'",",","'","b","'","]",",","[","'","a","'","]",",","[","'","b","'","]","]",",","[","[","'","a","'","]",",","[","'","a","'","]",",","[","'","b","'",",","'","b","'","]","]",",","[","[","'","a","'","]",",","[","'","a","'","]",",","[","'","b","'","]",",","[","'","b","'","]","]","]","See","Also","========","multiset_partitions_taocp",":","which","provides","the","same","result","as","this","method",",","but","is","about","twice","as","fast",".","Hence",",","enum_all","is","primarily","useful","for","testing",".","Also","see","the","function","for","a","discussion","of","states","and","visitors","."]
code: def enum_all(self, multiplicities):
      """Enumerate the partitions of a multiset.
  
      Examples
      ========
  
      >>> from sympy.utilities.enumerative import list_visitor
      >>> from sympy.utilities.enumerative import MultisetPartitionTraverser
      >>> m = MultisetPartitionTraverser()
      >>> states = m.enum_all([2,2])
      >>> list(list_visitor(state, 'ab') for state in states)
      [[['a', 'a', 'b', 'b']],
      [['a', 'a', 'b'], ['b']],
      [['a', 'a'], ['b', 'b']],
      [['a', 'a'], ['b'], ['b']],
      [['a', 'b', 'b'], ['a']],
      [['a', 'b'], ['a', 'b']],
      [['a', 'b'], ['a'], ['b']],
      [['a'], ['a'], ['b', 'b']],
      [['a'], ['a'], ['b'], ['b']]]
  
      See Also
      ========
  
      multiset_partitions_taocp:
          which provides the same result as this method, but is
          about twice as fast.  Hence, enum_all is primarily useful
          for testing.  Also see the function for a discussion of
          states and visitors.
  
      """
      self._initialize_enumeration(multiplicities)
      while True:
          while self.spread_part_multiplicity():
              pass
  
          # M4  Visit a partition
          state = [self.f, self.lpart, self.pstack]
          yield state
  
          # M5 (Decrease v)
          while not self.decrement_part(self.top_part()):
              # M6 (Backtrack)
              if self.lpart == 0:
                  return
              self.lpart -= 1
  
label_desc: Use image node_id 10 for calling the MultisetPartitionTraverser obj's underlying member method code with example usage: obj.enum_all(multiplicities) without return types