(f, u, K0)
return coeff*cont, _sort_factors(factors)
Factor polynomials into irreducibles in `K[X]`.
Factor polynomials into irreducibles in `K[X]`.
Factor polynomials into irreducibles in K [ X ] .
def dmp_factor_list(f, u, K0):
    """Factor 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)
    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.has_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.has_Field:
            for i, (f, k) in enumerate(factors):
                factors[i] = (dmp_convert(f, u, K, K0), k)

            coeff = K0.convert(coeff, K)

            if K0_inexact is None:
                coeff = coeff/denom
            else:
                for i, (f, k) in enumerate(factors):
                    f = dmp_quo_ground(f, denom, u, K0)
                    f = dmp_convert(f, u, K0, K0_inexact)
                    factors[i] = (f, 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)
def dmp_factor_list ( f , u , K0 ) : 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 ) 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 . has_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 . has_Field : for i , ( f , k ) in enumerate ( factors ) : factors [ i ] = ( dmp_convert ( f , u , K , K0 ) , k ) coeff = K0 . convert ( coeff , K ) if K0_inexact is None : coeff = coeff / denom else : for i , ( f , k ) in enumerate ( factors ) : f = dmp_quo_ground ( f , denom , u , K0 ) f = dmp_convert ( f , u , K0 , K0_inexact ) factors [ i ] = ( f , 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 )