code: def dmp_factor_list(f, u, K0):
      """Factor multivariate polynomials into irreducibles in `K[X]`."""
      if not u:
          return dup_factor_list(f, K0)
  
      J, f = dmp_terms_gcd(f, u, K0)
      cont, f = dmp_ground_primitive(f, u, K0)
  
      if K0.is_FiniteField:  # pragma: no cover
          coeff, factors = dmp_gf_factor(f, u, K0)
      elif K0.is_Algebraic:
          coeff, factors = dmp_ext_factor(f, u, K0)
      elif K0.is_GaussianRing:
          coeff, factors = dmp_zz_i_factor(f, u, K0)
      elif K0.is_GaussianField:
          coeff, factors = dmp_qq_i_factor(f, u, K0)
      else:
          if not K0.is_Exact:
              K0_inexact, K0 = K0, K0.get_exact()
              f = dmp_convert(f, u, K0_inexact, K0)
          else:
              K0_inexact = None
  
          if K0.is_Field:
              K = K0.get_ring()
  
              denom, f = dmp_clear_denoms(f, u, K0, K)
              f = dmp_convert(f, u, K0, K)
          else:
              K = K0
  
          if K.is_ZZ:
              levels, f, v = dmp_exclude(f, u, K)
              coeff, factors = dmp_zz_factor(f, v, K)
  
              for i, (f, k) in enumerate(factors):
                  factors[i] = (dmp_include(f, levels, v, K), k)
          elif K.is_Poly:
              f, v = dmp_inject(f, u, K)
  
              coeff, factors = dmp_factor_list(f, v, K.dom)
  
              for i, (f, k) in enumerate(factors):
                  factors[i] = (dmp_eject(f, v, K), k)
  
              coeff = K.convert(coeff, K.dom)
          else:  # pragma: no cover
              raise DomainError(
                  "factorization not supported over %s" % K0
              )
  
          if K0.is_Field:
              for i, (f, k) in enumerate(factors):
                  factors[i] = (dmp_convert(f, u, K, K0), k)
  
              coeff = K0.convert(coeff, K)
              coeff = K0.quo(coeff, denom)
  
              if K0_inexact:
                  for i, (f, k) in enumerate(factors):
                      max_norm = dmp_max_norm(f, u, K0)
                      f = dmp_quo_ground(f, max_norm, u, K0)
                      f = dmp_convert(f, u, K0, K0_inexact)
                      factors[i] = (f, k)
                      coeff = K0.mul(coeff, K0.pow(max_norm, k))
  
                  coeff = K0_inexact.convert(coeff, K0)
                  K0 = K0_inexact
  
      for i, j in enumerate(reversed(J)):
          if not j:
              continue
  
          term = {(0,) * (u - i) + (1,) + (0,) * i: K0.one}
          factors.insert(0, (dmp_from_dict(term, u, K0), j))
  
      return coeff * cont, _sort_factors(factors)
  
imports: from sympy.external.gmpy import GROUND_TYPES
  from sympy.core.random import _randint
  from sympy.polys.galoistools import gf_from_int_poly, gf_to_int_poly, gf_lshift, gf_add_mul, gf_mul, gf_div, gf_rem, gf_gcdex, gf_sqf_p, gf_factor_sqf, gf_factor
  from sympy.polys.densebasic import dup_LC, dmp_LC, dmp_ground_LC, dup_TC, dup_convert, dmp_convert, dup_degree, dmp_degree, dmp_degree_in, dmp_degree_list, dmp_from_dict, dmp_zero_p, dmp_one, dmp_nest, dmp_raise, dup_strip, dmp_ground, dup_inflate, dmp_exclude, dmp_include, dmp_inject, dmp_eject, dup_terms_gcd, dmp_terms_gcd
  from sympy.polys.densearith import dup_neg, dmp_neg, dup_add, dmp_add, dup_sub, dmp_sub, dup_mul, dmp_mul, dup_sqr, dmp_pow, dup_div, dmp_div, dup_quo, dmp_quo, dmp_expand, dmp_add_mul, dup_sub_mul, dmp_sub_mul, dup_lshift, dup_max_norm, dmp_max_norm, dup_l1_norm, dup_mul_ground, dmp_mul_ground, dup_quo_ground, dmp_quo_ground
  from sympy.polys.densetools import dup_clear_denoms, dmp_clear_denoms, dup_trunc, dmp_ground_trunc, dup_content, dup_monic, dmp_ground_monic, dup_primitive, dmp_ground_primitive, dmp_eval_tail, dmp_eval_in, dmp_diff_eval_in, dmp_compose, dup_shift, dup_mirror
  from sympy.polys.euclidtools import dmp_primitive, dup_inner_gcd, dmp_inner_gcd
  from sympy.polys.sqfreetools import dup_sqf_p, dup_sqf_norm, dmp_sqf_norm, dup_sqf_part, dmp_sqf_part
  from sympy.polys.polyutils import _sort_factors
  from sympy.polys.polyconfig import query
  from sympy.polys.polyerrors import ExtraneousFactors, DomainError, CoercionFailed, EvaluationFailed
  from sympy.utilities import subsets
  from math import ceil, log
label_desc: Use image node_id 34 for calling a global function with example usage: dmp_factor_list(f, u, K0) and returns: unknown,  _sort_factors, dup_factor_list