code: def factoring_visitor(state, primes):
      """Use with multiset_partitions_taocp to enumerate the ways a
      number can be expressed as a product of factors.  For this usage,
      the exponents of the prime factors of a number are arguments to
      the partition enumerator, while the corresponding prime factors
      are input here.
  
      Examples
      ========
  
      To enumerate the factorings of a number we can think of the elements of the
      partition as being the prime factors and the multiplicities as being their
      exponents.
  
      >>> from sympy.utilities.enumerative import factoring_visitor
      >>> from sympy.utilities.enumerative import multiset_partitions_taocp
      >>> from sympy import factorint
      >>> primes, multiplicities = zip(*factorint(24).items())
      >>> primes
      (2, 3)
      >>> multiplicities
      (3, 1)
      >>> states = multiset_partitions_taocp(multiplicities)
      >>> list(factoring_visitor(state, primes) for state in states)
      [[24], [8, 3], [12, 2], [4, 6], [4, 2, 3], [6, 2, 2], [2, 2, 2, 3]]
      """
      f, lpart, pstack = state
      factoring = []
      for i in range(lpart + 1):
          factor = 1
          for ps in pstack[f[i] : f[i + 1]]:
              if ps.v > 0:
                  factor *= primes[ps.c] ** ps.v
          factoring.append(factor)
      return factoring
  
label_desc: Use image node_id 2 for calling a global function with example usage: factoring_visitor(state, primes) and returns: factoring