Ë
    7^(h¨  ã                   óö  — d Z ddlmZ ddlmZ ddlmZmZmZm	Z	m
Z
mZmZmZmZmZmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z) ddl*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZD ddlEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZT ddlUmVZVmWZWmXZX dd	lYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z` dd
lambZb ddlcmdZd ddlemfZfmgZgmhZhmiZi ddljmkZk ddllmmZnmoZpmqZr edk(  rddlsmtZt ndZtd„ Zud„ Zvd„ Zwd„ Zxd„ Zyd„ Zzd„ Z{d„ Z|d„ Z}d7d„Z~d„ Zd„ Z€d„ Z�d„ Z‚d „ Zƒd!„ Z„d"„ Z…d#„ Z†d$„ Z‡d%„ Zˆd&„ Z‰d8d'„ZŠd(„ Z‹d)„ ZŒd*„ Z�d+„ ZŽd,„ Z�d-„ Z�d.„ Z‘d/„ Z’d0„ Z“d1„ Z”d2„ Z•d3„ Z–d4„ Z—d5„ Z˜d6„ Z™y)9z:Polynomial factorization routines in characteristic zero. é    )ÚGROUND_TYPES)Ú_randint)Ú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)Ú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)Ú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)Ú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Ú	dup_shiftÚ	dmp_shiftÚ
dup_mirror)Údmp_primitiveÚdup_inner_gcdÚdmp_inner_gcd)Ú	dup_sqf_pÚdup_sqf_normÚdmp_sqf_normÚdup_sqf_partÚdmp_sqf_partÚ_dup_check_degreesÚ_dmp_check_degrees)Ú_sort_factors)Úquery)ÚExtraneousFactorsÚDomainErrorÚCoercionFailedÚEvaluationFailed)Úsubsets)ÚceilÚlogÚlog2Úflint)Ú	fmpz_polyNc                 ó®   — g }|D ]D  }d}	 t        | ||«      \  }}|s||dz   }} nnŒ|dk(  rt        d«      ‚|j                  ||f«       ŒF t        |«      S )z¥
    Determine multiplicities of factors for a univariate polynomial
    using trial division.

    An error will be raised if any factor does not divide ``f``.
    r   é   útrial division failed)r2   ÚRuntimeErrorÚappendr[   )ÚfÚfactorsÚKÚresultÚfactorÚkÚqÚrs           úU/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/polys/factortools.pyÚdup_trial_divisionru   X   s|   € ð €Fàò #ˆØˆàÜ˜1˜f aÓ(‰DˆAˆqáØ˜!˜a™%�1‘àð ð �Š6ÜÐ6Ó7Ð7à�‰�v˜q�kÕ"ð#ô  ˜Ó Ð ó    c                 óÄ   — g }|D ]O  }d}	 t        | |||«      \  }}t        ||«      r||dz   }} nnŒ'|dk(  rt        d«      ‚|j                  ||f«       ŒQ t	        |«      S )z§
    Determine multiplicities of factors for a multivariate polynomial
    using trial division.

    An error will be raised if any factor does not divide ``f``.
    r   rh   ri   )r3   r   rj   rk   r[   )	rl   rm   Úurn   ro   rp   rq   rr   rs   s	            rt   Údmp_trial_divisionry   t   s…   € ð €Fàò #ˆØˆàÜ˜1˜f a¨Ó+‰DˆAˆqä˜!˜QÔØ˜!˜a™%�1‘àð ð �Š6ÜÐ6Ó7Ð7à�‰�v˜q�kÕ"ð#ô  ˜Ó Ð rv   c                 ód  — ddl m} t        | «      }t        |dz  «      }t        |dz  «      }|j	                  t        d„ | D «       «      «      } ||dz
  |«      } ||dz
  |dz
  «      }|j                  t        | |«      «      }	||z  ||	z  z   }
|
t        | |«      z  }
t        |
dz  «      dz  }
|
S )aÍ  
    The Knuth-Cohen variant of Mignotte bound for
    univariate polynomials in ``K[x]``.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x = ring("x", ZZ)

    >>> f = x**3 + 14*x**2 + 56*x + 64
    >>> R.dup_zz_mignotte_bound(f)
    152

    By checking ``factor(f)`` we can see that max coeff is 8

    Also consider a case that ``f`` is irreducible for example
    ``f = 2*x**2 + 3*x + 4``. To avoid a bug for these cases, we return the
    bound plus the max coefficient of ``f``

    >>> f = 2*x**2 + 3*x + 4
    >>> R.dup_zz_mignotte_bound(f)
    6

    Lastly, to see the difference between the new and the old Mignotte bound
    consider the irreducible polynomial:

    >>> f = 87*x**7 + 4*x**6 + 80*x**5 + 17*x**4 + 9*x**3 + 12*x**2 + 49*x + 26
    >>> R.dup_zz_mignotte_bound(f)
    744

    The new Mignotte bound is 744 whereas the old one (SymPy 1.5.1) is 1937664.


    References
    ==========

    ..[1] [Abbott13]_

    r   )Úbinomialé   c              3   ó&   K  — | ]	  }|d z  –— Œ y­w)r|   N© ©Ú.0Úcfs     rt   ú	<genexpr>z(dup_zz_mignotte_bound.<locals>.<genexpr>¿   s   è ø€ Ò0 r˜R �UÑ0ùó   ‚rh   )	Ú(sympy.functions.combinatorial.factorialsr{   r   Ú_ceilÚsqrtÚsumÚabsr   r;   )rl   rn   r{   ÚdÚdeltaÚdelta2Ú	eucl_normÚt1Út2ÚlcÚbounds              rt   Údup_zz_mignotte_boundr‘   �   s½   € õR BÜ�1‹€AÜ�!�a‘%‹L€EÜ�5˜1‘9Ó€Fð —‘œÑ0¨QÔ0Ó0Ó2€Iñ 
�%˜!‘)˜VÓ	$€BÙ	�%˜!‘)˜V a™ZÓ	(€Bà	
�‰Œv�a˜‹|Ó	€BØ�‰N˜R "™WÑ$€EØ	Œ\˜!˜QÓÑ€EÜ�%˜!‘)Ó˜qÑ €Eà€Lrv   c                 ó¾   — t        | ||«      }t        t        | ||«      «      }t        t	        | |«      «      }|j                   ||dz   «      «      d|z  z  |z  |z  S )z7Mignotte bound for multivariate polynomials in `K[X]`. rh   r|   )r<   rˆ   r   r‡   r   r†   )rl   rx   rn   ÚaÚbÚns         rt   Údmp_zz_mignotte_boundr–   Ì   s^   € ä�Q˜˜1Ó€AÜŒM˜!˜Q Ó"Ó#€AÜŒO˜A˜qÓ!Ó"€Aà�6‰6‘!�A˜‘E“(Ó˜A˜q™DÑ  Ñ" 1Ñ$Ð$rv   c                 óú  — | dz  }t        ||||«      }t        |||«      }t        t        |||«      ||«      \  }	}
t        |	||«      }	t        |
||«      }
t	        t        |||«      t        |	||«      |«      }t        t	        |||«      ||«      }t        t	        ||
|«      ||«      }t	        t        |||«      t        |||«      |«      }t        t        ||j                  g|«      ||«      }t        t        |||«      ||«      \  }}t        |||«      }t        |||«      }t	        t        |||«      t        |||«      |«      }t        t        |||«      ||«      }t        t        |||«      ||«      }||||fS )a
  
    One step in Hensel lifting in `Z[x]`.

    Given positive integer `m` and `Z[x]` polynomials `f`, `g`, `h`, `s`
    and `t` such that::

        f = g*h (mod m)
        s*g + t*h = 1 (mod m)

        lc(f) is not a zero divisor (mod m)
        lc(h) = 1

        deg(f) = deg(g) + deg(h)
        deg(s) < deg(h)
        deg(t) < deg(g)

    returns polynomials `G`, `H`, `S` and `T`, such that::

        f = G*H (mod m**2)
        S*G + T*H = 1 (mod m**2)

    References
    ==========

    .. [1] [Gathen99]_

    r|   )r8   rD   r2   r.   r*   r,   Úone)Úmrl   ÚgÚhÚsÚtrn   ÚMÚerr   rs   rx   ÚGÚHr”   Úcr‰   ÚSÚTs                      rt   Údup_zz_hensel_stepr¥   Õ   s€  € ð8 	
ˆ1‰€Aä�A�q˜!˜QÓ€AÜ�!�Q˜Ó€Aä”7˜1˜a Ó# Q¨Ó*�D€A€qä�!�Q˜Ó€AÜ�!�Q˜Ó€Aä”˜˜1˜aÓ ¤'¨!¨Q°Ó"2°AÓ6€AÜ”'˜!˜Q Ó" A qÓ)€AÜ”'˜!˜Q Ó" A qÓ)€Aä”˜˜1˜aÓ ¤'¨!¨Q°Ó"2°AÓ6€AÜ”'˜!˜aŸe™e˜W aÓ(¨!¨QÓ/€Aä”7˜1˜a Ó# Q¨Ó*�D€A€qä�!�Q˜Ó€AÜ�!�Q˜Ó€Aä”˜˜1˜aÓ ¤'¨!¨Q°Ó"2°AÓ6€AÜ”'˜!˜Q Ó" A qÓ)€AÜ”'˜!˜Q Ó" A qÓ)€Aàˆa��Aˆ:Ðrv   c           
      óÞ  — t        |«      }t        ||«      }|dk(  r4t        ||j                  || |z  «      d   |«      }t	        || |z  |«      gS | }|dz  }	t        t        t        |«      «      «      }
t        |g| «      }|d|	 D ]  }t        |t        || «      | |«      }Œ t        ||	   | «      }||	dz   d D ]  }t        |t        || «      | |«      }Œ t        ||| |«      \  }}}t        || «      }t        || «      }t        || «      }t        || «      }t        d|
dz   «      D ]  }t        |||||||«      |dz  c\  }}}}}Œ  t        | ||d|	 ||«      t        | |||	d ||«      z   S )añ  
    Multifactor Hensel lifting in `Z[x]`.

    Given a prime `p`, polynomial `f` over `Z[x]` such that `lc(f)`
    is a unit modulo `p`, monic pair-wise coprime polynomials `f_i`
    over `Z[x]` satisfying::

        f = lc(f) f_1 ... f_r (mod p)

    and a positive integer `l`, returns a list of monic polynomials
    `F_1,\ F_2,\ \dots,\ F_r` satisfying::

       f = lc(f) F_1 ... F_r (mod p**l)

       F_i = f_i (mod p), i = 1..r

    References
    ==========

    .. [1] [Gathen99]_

    rh   r   r|   N)Úlenr   r>   ÚgcdexrD   Úintr…   Ú_log2r   r	   r   r   Úranger¥   Údup_zz_hensel_lift)Úprl   Úf_listÚlrn   rs   r�   ÚFr™   rq   r‰   rš   Úf_ir›   rœ   r�   Ú_s                    rt   r¬   r¬     s¸  € ô. 	ˆF‹€AÜ	��1‹€BàˆA‚vÜ˜1˜aŸg™g b¨!¨Q©$Ó/°Ñ2°AÓ6ˆÜ˜1˜a ™d AÓ&Ð(Ð(à	€AØ	ˆQ‰€AÜŒE”%˜“(‹OÓ€Aä˜"˜˜qÓ!€Aà�b�qˆzò 6ˆÜ�1Ô& s¨AÓ.°°1Ó5‰ð6ô 	˜ ™ AÓ&€Aà�a˜!‘e�fˆ~ò 6ˆÜ�1Ô& s¨AÓ.°°1Ó5‰ð6ô �q˜!˜Q Ó"�G€A€qˆ!ä�q˜!Ó€AÜ�q˜!Ó€AÜ�q˜!Ó€AÜ�q˜!Ó€Aä�1�a˜!‘e‹_ò HˆÜ,¨Q°°1°a¸¸A¸qÓAÀ1ÀaÁ4ˆ‰ˆˆAˆq�!‘aðHô ˜a  F¨2¨A J°°1Ó5Ü
˜Q  6¨!¨" :¨q°!Ó
4ñ5ð 5rv   c                 ó2   — ||dz  kD  r||z
  }|sy| |z  dk(  S )Nr|   Tr   r~   )Úfcrr   Úpls      rt   Ú_test_plr¶   G  s*   € Øˆ2�‰7‚{Ø�‰FˆÙØØ�‰6�Q‰;Ðrv   c           
      óê  — t        | «      }|dk(  r| gS ddlm} | d   }t        | |«      }t	        | |«      }t        t        |j                   ||dz   «      «      d|z  z  |z  |z  «      «      }t        |dz   d|z  z  |d|z  dz
  z  z  «      }t        t        dt        |«      z  «      «      }	t        d|	z  t        |	«      z  «      }
g }t        d|
dz   «      D ]  } ||«      r||z  dk(  rŒ|j                  |«      }t        | |«      }t        |||«      sŒ?t        |||«      d   }|j!                  ||f«       t#        |«      dk  st#        |«      dkD  sŒ n t%        |d	„ ¬
«      \  }}t        t        t        d|z  dz   |«      «      «      }|D �cg c]  }t'        ||«      ‘Œ }}t)        || |||«      }t        t#        |«      «      }t+        |«      }g d}}||z  }d|z  t#        |«      k  �rrt-        ||«      D �]J  }|dk(  r'd}|D ]  }|||   d   z  }Œ ||z  }t/        |||«      sGŒ0|g}|D ]  }t1        |||   |«      }Œ t3        |||«      }t5        ||«      d   }|d   }|r	||z  dk7  rŒv|g}t+        |«      }||z
  }|dk(  r'|g}|D ]  }t1        |||   |«      }Œ t3        |||«      }|D ]  }t1        |||   |«      }Œ t3        |||«      }t7        |«      } t7        ||«      }!| |!z  |k  sŒú|}|D �cg c]	  }||vsŒ|‘Œ }}t5        ||«      d   }t5        ||«      d   } |j!                  |«       t	        | |«      } n |dz  }d|z  t#        |«      k  r�Œr|| gz   S c c}w c c}w )z4Factor primitive square-free polynomials in `Z[x]`. rh   r   )Úisprimeéÿÿÿÿr|   é   é   é   c                 ó   — t        | d   «      S )Nrh   )r§   )Úxs    rt   ú<lambda>z#dup_zz_zassenhaus.<locals>.<lambda>p  s   € ¤3 q¨¡t£9€ rv   )Úkey)r   Úsympy.ntheoryr¸   r;   r   r©   rˆ   r†   r…   rª   Ú_logr«   Úconvertr   r   r   rk   r§   Úminr   r¬   Úsetra   r¶   r.   rD   rI   r=   )"rl   rn   r•   r¸   r´   ÚAr”   ÚBÚCÚgammar�   r“   Úpxr°   Úfsqfxr­   Úfsqfr¯   ÚffÚmodularrš   Úsorted_Tr¤   rm   rœ   rµ   r£   rr   Úir    r¡   ÚT_SÚG_normÚH_norms"                                     rt   Údup_zz_zassenhausrÔ   N  së  € ä�1‹€AàˆA‚vØˆsˆ
å%à	
ˆ2‰€BÜ�Q˜Ó€AÜˆq�!‹€AÜŒC�—‘‘q˜˜Q™“xÓ   A¡Ñ% aÑ'¨Ñ)Ó*Ó+€AÜˆQ�‰U�a˜‘c‰N˜1˜q ™s Q™w™<Ñ'Ó(€AÜ”�aœ˜a›‘jÓ!Ó"€EÜ��%‘œ˜U›Ñ#Ó$€EØ
€Aô �A�u˜q‘yÓ!ò ˆÙ�rŒ{˜a "™f¨škØà�Y‰Y�r‹]ˆä˜Q Ó#ˆä˜˜2˜qÔ!ØÜ˜a  QÓ'¨Ñ*ˆØ	�‰�"�e�ÔÜˆu‹:˜Š?œc !›f q›jÙðô �!Ñ,Ô-�G€A€täŒE”$�q˜‘s˜Q‘w Ó"Ó#Ó$€Aà/3Ö4¨Œ~˜b !Õ$Ð4€GÐ4ä˜1˜a ¨!¨QÓ/€Aä”S˜“V‹}€HÜˆH‹€AØ�QˆQ€GØ	
ˆA‰€Bà
ˆA‰#”�Q“‹-Ü˜ 1Ó%ó 4	ˆAð
 �AŠvØ�Øò #�AØ˜!˜A™$˜r™(™
‘Að#à˜‘F�Ü  A rÔ*Øà�C�Øò ,�AÜ  1 Q¡4¨Ó+‘Að,ä˜a  QÓ'�Ü! ! QÓ'¨Ñ*�Ø�b‘E�Ù˜˜a™ 1šØà�ˆAÜ�A“ˆAØ�a‘%ˆCà�AŠvØ�C�Øò ,�AÜ  1 Q¡4¨Ó+‘Að,ä˜a  QÓ'�àò (�Ü˜A˜q ™t QÓ'‘ð(ô ˜!˜R Ó#ˆAä   AÓ&ˆFÜ   AÓ&ˆFà�f‰} Ó!Ø�Ø'/Ö> !°1¸A²:šAÐ>�Ð>ä! ! QÓ'¨Ñ*�Ü! ! QÓ'¨Ñ*�à—‘˜qÔ!Ü˜1˜a“L�áðe4	ðh �‰FˆAðk ˆA‰#”�Q“Œ-ðn �a�S‰=ÐùòA 5ùòh ?s   ÆM+Ë?	M0Ì	M0c                 óÐ   — t        | |«      }t        | |«      }t        | dd |«      }|r=ddlm}  |t        |«      «      }|j                  «       D ]  }||z  sŒ	||dz  z  sŒ y yy)z2Test irreducibility using Eisenstein's criterion. rh   Nr   ©Ú	factorintr|   T)r   r   rF   rÁ   r×   r©   Úkeys)rl   rn   r�   ÚtcÚe_fcr×   Úe_ffr­   s           rt   Údup_zz_irreducible_prÜ   ·  sl   € ä	��1‹€BÜ	��1‹€Bä�q˜˜�u˜aÓ €DáÝ+Ùœ˜T›Ó#ˆà—‘“ò 	ˆAØ�Q“˜R ! Q¡$›YÙñ	ð	 rv   c                 ó°  — |j                   r!	 ||j                  «       }}t        | ||«      } n|j                  syt        | |«      }t        | |«      }|dk7  s
|dk7  r|dk7  ry|s't        | |«      \  }}||j                  k7  s|| dfgk7  ryt        | «      }g g }
}	t        |dd«      D ]  }|	j                  d| |   «       Œ t        |dz
  dd«      D ]  }|
j                  d| |   «       Œ t        t        |	«      |«      }	t        t        |
«      |«      }
t        |	t        |
d|«      |«      }|j!                  t        ||«      «      rt#        ||«      }|| k(  ryt%        | |«      }	|j!                  t        |	|«      «      rt#        |	|«      }	||	k(  rt'        |	|«      ryt)        ||«      }t        ||«      |k(  rt'        ||«      ryy# t        $ r Y yw xY w)ad  
    Efficiently test if ``f`` is a cyclotomic polynomial.

    Examples
    ========

    >>> from sympy.polys import ring, ZZ
    >>> R, x = ring("x", ZZ)

    >>> f = x**16 + x**14 - x**10 + x**8 - x**6 + x**2 + 1
    >>> R.dup_cyclotomic_p(f)
    False

    >>> g = x**16 + x**14 - x**10 - x**8 - x**6 + x**2 + 1
    >>> R.dup_cyclotomic_p(g)
    True

    References
    ==========

    Bradford, Russell J., and James H. Davenport. "Effective tests for
    cyclotomic polynomials." In International Symposium on Symbolic and
    Algebraic Computation, pp. 244-251. Springer, Berlin, Heidelberg, 1988.

    Frh   r¹   éþÿÿÿr   T)Úis_QQÚget_ringr   r_   Úis_ZZr   r   Údup_factor_listr˜   r   r«   Úinsertr0   r   r,   r:   Úis_negativer(   rP   Údup_cyclotomic_prW   )rl   rn   ÚirreducibleÚK0r�   rÙ   Úcoeffrm   r•   rš   r›   rÐ   r°   r    s                 rt   rå   rå   Ç  sÛ  € ð4 	‡w‚wð	Ø�q—z‘z“|�ˆBÜ˜A˜r 1Ó%‰Að �WŠWØä	��1‹€BÜ	��1‹€Bà	ˆQ‚w�2˜’8  a¢ØáÜ(¨¨AÓ.‰ˆˆwà�A—E‘EŠ>˜W¨!¨Q¨¨Ò0Øä�1‹€AØˆr€q€Aä�1�b˜"Óò ˆØ	�‰��A�a‘DÕðô �1�q‘5˜"˜bÓ!ò ˆØ	�‰��A�a‘DÕðô 	”	˜!“˜aÓ €AÜ”	˜!“˜aÓ €Aä�”:˜a  AÓ&¨Ó*€Aà‡}�}”V˜A˜q“\Ô"Ü�A�q‹MˆàˆA‚vØä�1�aÓ€Aà‡}�}”V˜A˜q“\Ô"Ü�A�q‹MˆàˆA‚vÔ" 1 aÔ(Øä�Q˜Ó€Aäˆq�!ƒ}˜ÒÔ.¨q°!Ô4Øàøôe ò 	Ùð	ús   ŽG	 Ç		GÇGc                 óÖ   — ddl m} |j                  |j                   g} || «      j                  «       D ]0  \  }}t	        t        |||«      ||«      }t        |||dz
  z  |«      }Œ2 |S )z1Efficiently generate n-th cyclotomic polynomial. r   rÖ   rh   )rÁ   r×   r˜   Úitemsr4   r!   )r•   rn   r×   r›   r­   rq   s         rt   Údup_zz_cyclotomic_polyrë     sl   € å'Ø	
�‰�—‘�ˆ€Aá˜!“×"Ñ"Ó$ò *‰ˆˆ1Ü”K  1 aÓ(¨!¨QÓ/ˆÜ˜˜1˜q 1™u™: qÓ)‰ð*ð €Hrv   c                 óz  — ddl m} |j                  |j                   gg} || «      j                  «       D ]w  \  }}|D �cg c]  }t	        t        |||«      ||«      ‘Œ }}|j                  |«       t        d|«      D ]-  }|D �	cg c]  }	t        |	||«      ‘Œ }}	|j                  |«       Œ/ Œy |S c c}w c c}	w )Nr   rÖ   rh   )rÁ   r×   r˜   rê   r4   r!   Úextendr«   )
r•   rn   r×   r¡   r­   rq   r›   ÚQrÐ   rr   s
             rt   Ú_dup_cyclotomic_decomposerï   &  s¸   € Ý'à
�%‰%�!—%‘%�ˆÐ€Aá˜!“×"Ñ"Ó$ò ‰ˆˆ1Ø;<Ö>°aŒg”k ! Q¨Ó*¨A¨qÕ1Ð>ˆÐ>Ø	�‰�Œä�q˜!“ò 	ˆAØ01Ö3¨1”+˜a  AÕ&Ð3ˆAÐ3Ø�H‰H�Q�Kñ	ð	ð €Hùò ?ùò 4s   ÁB3ÂB8c                 ó@  — t        | |«      t        | |«      }}t        | «      dk  ry|dk7  s|dvryt        d„ | dd D «       «      ryt        | «      }t	        ||«      }|j                  |«      s|S g }t	        d|z  |«      D ]  }||vsŒ|j                  |«       Œ |S )aø  
    Efficiently factor polynomials `x**n - 1` and `x**n + 1` in `Z[x]`.

    Given a univariate polynomial `f` in `Z[x]` returns a list of factors
    of `f`, provided that `f` is in the form `x**n - 1` or `x**n + 1` for
    `n >= 1`. Otherwise returns None.

    Factorization is performed using cyclotomic decomposition of `f`,
    which makes this method much faster that any other direct factorization
    approach (e.g. Zassenhaus's).

    References
    ==========

    .. [1] [Weisstein09]_

    r   Nrh   )r¹   rh   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­w)N)Úboolr   s     rt   r‚   z+dup_zz_cyclotomic_factor.<locals>.<genexpr>P  s   è ø€ Ò
&˜Œ4��8Ñ
&ùs   ‚r¹   r|   )r   r   r   Úanyrï   Úis_onerk   )rl   rn   Úlc_fÚtc_fr•   r°   r¡   r›   s           rt   Údup_zz_cyclotomic_factorr÷   6  s­   € ô$ ˜˜1“œv a¨›|ˆ$€Dä�!ƒ}˜ÒØàˆq‚y�D Ñ'Øä
Ñ
&˜a  "˜gÔ
&Ô&Øä�1‹€AÜ! ! QÓ'€Aà�8‰8�DŒ>Øˆàˆä*¨1¨Q©3°Ó2ò 	ˆAØ˜ŠzØ—‘˜•ð	ð ˆrv   c                 ó<  — t        | |«      \  }}t        |«      }t        ||«      dk  r| t        ||«      }}|dk  r|g fS |dk(  r||gfS t	        d«      rt        ||«      r||gfS d}t	        d«      rt        ||«      }|€t        ||«      }|t        |d¬«      fS )z:Factor square-free (non-primitive) polynomials in `Z[x]`. r   rh   ÚUSE_IRREDUCIBLE_IN_FACTORNÚUSE_CYCLOTOMIC_FACTORF)Úmultiple)	rI   r   r   r(   r\   rÜ   r÷   rÔ   r[   )rl   rn   Úcontrš   r•   rm   s         rt   Údup_zz_factor_sqfrý   b  s¹   € ä˜A˜qÓ!�G€Dˆ!ä�1‹€Aäˆa�ƒ|�aÒØ�%œ  A›ˆaˆàˆA‚vØ�RˆxˆØ	
ˆaŠØ�a�SˆyÐäÐ(Ô)Ü  1Ô%Ø˜!˜�9Ðà€GäÐ$Ô%Ü*¨1¨aÓ0ˆà€Ü# A qÓ)ˆà”˜w°Ô7Ð7Ð7rv   c                 óL  — t         dk(  r[t        | ddd…   «      }|j                  «       \  }}|D ��cg c]  \  }}|j                  «       ddd…   |f‘Œ }}}|t	        |«      fS t        | |«      \  }}t        |«      }t        ||«      dk  r| t        ||«      }}|dk  r|g fS |dk(  r||dfgfS t        d«      rt        ||«      r||dfgfS t        ||«      }d}	t        d«      rt        ||«      }	|	€t        ||«      }	t        | |	|«      }t        | |«       ||fS c c}}w )a  
    Factor (non square-free) polynomials in `Z[x]`.

    Given a univariate polynomial `f` in `Z[x]` computes its complete
    factorization `f_1, ..., f_n` into irreducibles over integers::

                f = content(f) f_1**k_1 ... f_n**k_n

    The factorization is computed by reducing the input polynomial
    into a primitive square-free polynomial and factoring it using
    Zassenhaus algorithm. Trial division is used to recover the
    multiplicities of factors.

    The result is returned as a tuple consisting of::

              (content(f), [(f_1, k_1), ..., (f_n, k_n))

    Examples
    ========

    Consider the polynomial `f = 2*x**4 - 2`::

        >>> from sympy.polys import ring, ZZ
        >>> R, x = ring("x", ZZ)

        >>> R.dup_zz_factor(2*x**4 - 2)
        (2, [(x - 1, 1), (x + 1, 1), (x**2 + 1, 1)])

    In result we got the following factorization::

                 f = 2 (x - 1) (x + 1) (x**2 + 1)

    Note that this is a complete factorization over integers,
    however over Gaussian integers we can factor the last term.

    By default, polynomials `x**n - 1` and `x**n + 1` are factored
    using cyclotomic decomposition to speedup computations. To
    disable this behaviour set cyclotomic=False.

    References
    ==========

    .. [1] [Gathen99]_

    re   Nr¹   r   rh   rù   rú   )r   rf   rp   Úcoeffsr[   rI   r   r   r(   r\   rÜ   rW   r÷   rÔ   ru   rY   )
rl   rn   Úf_flintrü   rm   ÚfacÚexprš   r•   r¡   s
             rt   Údup_zz_factorr    sL  € ô\ �wÒÜ˜A™d ˜d™GÓ$ˆØŸ™Ó(‰ˆˆgØ=D×E±°°c�C—J‘J“L¡ 2 Ñ&¨Ò,ÐEˆÑEØ”] 7Ó+Ð+Ð+ä˜A˜qÓ!�G€Dˆ!ä�1‹€Aäˆa�ƒ|�aÒØ�%œ  A›ˆaˆàˆA‚vØ�RˆxˆØ	
ˆaŠØ�q˜!�f�Xˆ~ÐäÐ(Ô)Ü  1Ô%Ø˜1˜a˜&˜�>Ð!ä�Q˜Ó€AØ€AäÐ$Ô%Ü$ Q¨Ó*ˆà€yÜ˜a Ó#ˆä   A qÓ)€Gä�q˜'Ô"à�ˆ=ÐùóA Fs   ³"D c                 óê   — ||z  g}| D ]d  }t        |«      }t        |«      D ]8  }|dk7  r|j                  ||«      }||z  }|dk7  rŒ|j                  |«      sŒ7  y |j	                  |«       Œf |dd S )z,Wang/EEZ: Compute a set of valid divisors.  rh   N)rˆ   ÚreversedÚgcdrô   rk   )ÚEÚcsÚctrn   ro   rr   rs   s          rt   Údmp_zz_wang_non_divisorsr
  Ó  s�   € à�"‰uˆY€Fàò ˆÜ�‹Fˆä˜&Ó!ò 	ˆAØ�q’&Ø—E‘E˜!˜Q“K�Ø˜‘F�ð �q“&ð �x‰x˜�{Úð	ð 	�‰�aÕðð �!�"ˆ:Ðrv   c           
      ó   — t        t        | |«      ||dz
  |«      st        d«      ‚t        | |||«      }t        ||«      st        d«      ‚t	        ||«      \  }}|j                  t        ||«      «      r| t        ||«      }}|dz
  }	|D �
�cg c]  \  }
}t        |
||	|«      ‘Œ }}
}t        ||||«      }|�|||fS t        d«      ‚c c}}
w )z2Wang/EEZ: Test evaluation points for suitability. rh   zno luck)	rK   r   r`   rT   rI   rä   r   r(   r
  )rl   r¤   r	  rÆ   rx   rn   rš   r¢   r›   Úvr�   r²   r  ÚDs                 rt   Údmp_zz_wang_test_pointsr  ç  s×   € äœ  1› q¨!¨a©%°Ô3Ü˜yÓ)Ð)ä�a˜˜A˜qÓ!€Aä�Q˜Œ?Ü˜yÓ)Ð)ä˜˜AÓ�D€A€qà‡}�}”V˜A˜q“\Ô"Øˆr”7˜1˜a“=ˆ1ˆà	ˆA‰€Aà01×3©¨¨1Œ-˜˜1˜a Õ
#Ð3€AÑ3Ü   A r¨1Ó-€Aà€}Ø�!�Qˆwˆä˜yÓ)Ð)ùó 	4s   ÂC
c                 óò  — g dgt        |«      z  |dz
  }
}	}|D ]›  }t        |
|«      }t        ||«      |z  }t        t	        t        |«      «      «      D ]M  }d||   ||   c}}\  }}||z  s||z  |dz   }}||z  sŒ|dk7  sŒ.t        |t        |||
|«      |
|«      dc}|	|<   ŒO |j                  |«       Œ� t        |	«      st        ‚g g }}t        ||«      D ]”  \  }}t        |||
|«      }t        ||«      }|j                  |«      r||z  }n.|j                  ||«      }||z  ||z  }}t        |||«      ||z  }}t        |||
|«      }|j                  |«       |j                  |«       Œ– |j                  |«      r| ||fS g g }}t        ||«      D ]?  \  }}|j                  t        |||
|«      «       |j                  t        ||d|«      «       ŒA t        | |t        |«      dz
  z  ||«      } | ||fS )z0Wang/EEZ: Compute correct leading coefficients. r   rh   )r§   r   r   r  r«   r/   r1   rk   Úallr]   ÚziprK   rô   r  r>   r?   )rl   r¤   r  r  r¡   rÆ   rx   rn   rÈ   ÚJr  r›   r¢   r‰   rÐ   rq   rŸ   r�   r²   ÚCCÚHHr�   Úccrš   ÚCCCÚHHHs                             rt   Údmp_zz_wang_lead_coeffsr    s+  € à�1�#”c˜!“f‘*˜a !™eˆ!€q€Aàò ˆÜ�A�q‹MˆÜ�1�a‹L˜‰Oˆäœ%¤ A£›-Ó(ò 	CˆAØ˜a ™d A a¡DˆLˆAˆq‘&�1�aà˜1’uØ˜!‘t˜Q ™U�1�ð ˜1“uð �A‹vÜ! !¤W¨Q°°1°aÓ%8¸!¸QÓ?À���1�Q’4ð	Cð 	
�‰��ðô ˆqŒ6ÜÐà�ˆ€Bä�A�q“	ò ‰ˆˆ1Ü˜!˜Q  1Ó%ˆÜ�A�q‹\ˆà�8‰8�BŒ<Ø�Q‘‰Bà—‘�b˜!“ˆAØ�q‘D˜"˜a™%ˆrˆAÜ" 1 a¨Ó+¨R°©UˆrˆAä˜1˜b ! QÓ'ˆà
�	‰	�!ŒØ
�	‰	�!�ðð  	‡x�x�„|Ø�"�bˆyÐà�2ˆ€Cä�B˜“ò 0‰ˆˆ1Ø�
‰
”> ! R¨¨AÓ.Ô/Ø�
‰
”> ! R¨¨AÓ.Õ/ð0ô 	�q˜"œs 1›v¨™zÑ*¨A¨qÓ1€Aàˆc�3ˆ;Ðrv   c           
      ó&  — t        | «      dk(  r‡| \  }}t        ||«      }t        ||«      }t        ||||«      \  }}	}
t        |||«      }t        |	||«      }	t	        ||||«      \  }}t        |	||||«      }	t        ||«      }t        |	|«      }	||	g}|S | d   g}
t        | dd «      D ]"  }|
j                  dt        ||
d   |«      «       Œ$ g dgg}}t        | |
«      D ]@  \  }}t        ||g|d   g d|d|«      \  }	}|j                  |	«       |j                  |«       ŒB g ||d   gz   }}t        || «      D ]S  \  }}t        ||«      }t        ||«      }t        t        |||«      |||«      }t        ||«      }|j                  |«       ŒU |S )z2Wang/EEZ: Solve univariate Diophantine equations. r|   r¹   rh   r   )r§   r   r   r   r
   r   r   r  rã   r.   r  Údmp_zz_diophantinerk   r   )r°   r™   r­   rn   r“   r”   rl   rš   rœ   r�   r    rr   ro   r£   r¤   rs   s                   rt   Údup_zz_diophantiner  7  sÎ  € ä
ˆ1ƒv�‚{Ø‰ˆˆ1ä˜Q Ó"ˆÜ˜Q Ó"ˆä˜1˜a  AÓ&‰ˆˆ1ˆaä�a˜˜AÓˆÜ�a˜˜AÓˆä�a˜˜A˜qÓ!‰ˆˆ1ä�q˜!˜Q  1Ó%ˆä˜1˜aÓ ˆÜ˜1˜aÓ ˆà�Q�ˆð2 €Mð/ ˆr‰UˆGˆä˜!˜A˜b˜'Ó"ò 	-ˆAØ�H‰H�Qœ  1 Q¡4¨Ó+Õ,ð	-ð �Q�C�5ˆ1ˆä˜˜1“Iò 	‰DˆAˆqÜ% q¨! f¨a°©e°R¸¸A¸qÀ!ÓD‰DˆAˆqØ�H‰H�QŒKØ�H‰H�Q�Kð	ð
 ˜˜Q˜r™U˜G™�ˆä˜˜1“Iò 	‰DˆAˆqÜ   AÓ&ˆAÜ   AÓ&ˆAä”y  A qÓ)¨1¨a°Ó3ˆAÜ˜q !Ó$ˆAà�M‰M˜!Õð	ð €Mrv   c           
      ó¢  — |s‹| D �cg c]  }g ‘Œ }}t        |«      }	t        |«      D ]a  \  }
}|sŒ	t        | |	|
z
  ||«      }t        t        ||«      «      D ]0  \  }\  }}t	        |||«      }t        t        |||«      ||«      ||<   Œ2 Œc |S t        |«      }	t        | ||«      }|d   |dd }}g g }}| D ]=  }|j                  t        ||||«      «       |j                  t        |||	||«      «       Œ? t        |||	||«      }|dz
  }t        |||||||«      }|D �cg c]  }t        |d||«      ‘Œ }}t        ||«      D ]  \  }}t        |||||«      }Œ t        ||||«      }t!        |j"                  | g|	|«      }t%        |	|«      }t'        d|«      D �]  }t)        ||«      r nút+        ||||«      }t-        ||dz   ||	||«      }t)        ||«      rŒ@t/        ||j1                   ||«      dz   «      ||«      }t        |||||||«      }t        |«      D ]"  \  }
}t+        t        |d||«      |||«      ||
<   Œ$ t        t        ||«      «      D ]  \  }
\  }}t3        ||||«      ||
<   Œ t        ||«      D ]  \  }}t        |||||«      }Œ t        ||||«      }�Œ |D �cg c]  }t        ||||«      ‘Œ }}|S c c}w c c}w c c}w )z4Wang/EEZ: Solve multivariate Diophantine equations. r¹   Nrh   r   )r   Ú	enumerater  r  r>   rD   r*   r§   r6   rk   r5   rL   r  r   r9   rE   r   r˜   r   r«   r   r/   rM   rA   Ú	factorialr+   )r°   r¢   rÆ   r‰   r­   rx   rn   r²   r£   r•   rÐ   rè   r¤   Újrœ   r�   rŸ   r“   rÇ   r    rl   rÈ   r  r”   r™   rž   rq   s                              rt   r  r  g  s<  € áØÖ�QŠbÐˆÐÜ�q‹Mˆä! !›ò 	9‰HˆAˆuÙØä" 1 a¨!¡e¨Q°Ó2ˆAä&¤s¨1¨a£yÓ1ò 9‘	�‘6�A�qÜ" 1 e¨QÓ/�Ü ¤¨¨A¨qÓ!1°1°aÓ8��!’ñ9ð	9ðv €Hôc �‹FˆÜ�q˜!˜QÓˆà�‰u�a˜˜�fˆ1ˆØ�2ˆ1ˆàò 	1ˆAØ�H‰H”W˜Q  1 aÓ(Ô)Ø�H‰H”[  A q¨!¨QÓ/Õ0ð	1ô ˜˜1˜a  AÓ&ˆà�‰Eˆä˜q ! Q¨¨1¨a°Ó3ˆØ-.Ö0¨Œi˜˜1˜a Õ#Ð0ˆÐ0ä˜˜1“Iò 	+‰DˆAˆqÜ˜A˜q ! Q¨Ó*‰Að	+ô ˜Q  1 aÓ(ˆä�a—e‘e˜a˜R�[ ! QÓ'ˆÜ�A�q‹Mˆä�q˜!“ó 	1ˆAÜ˜!˜QÔÙä˜˜1˜a Ó#ˆAÜ   A¨¡E¨1¨a°°AÓ6ˆAä˜a Õ#Ü" 1 a§k¡k±!°A³$¸±(Ó&;¸QÀÓB�Ü& q¨!¨Q°°1°a¸Ó;�ä% a›Lò C‘D�A�qÜ"¤9¨Q°°1°aÓ#8¸!¸QÀÓB�A�a’DðCô "+¬3¨q°!«9Ó!5ò /‘I�A‘v˜˜1Ü" 1 a¨¨AÓ.�A�a’Dð/ô    1›Iò 3‘D�A�qÜ# A q¨!¨Q°Ó2‘Að3ô % Q¨¨1¨aÓ0’ð)	1ð, 56Ö7¨qÔ˜q ! Q¨Õ*Ð7ˆÐ7à€Hùò} ùò8 1ùò@ 8s   ‡	KÄKÊ)Kc                 ó&  — | gt        |«      |dz
  }	}}t        |«      }t        t        |dd «      «      D ]>  \  }
}t	        |d   |||
z
  ||
z
  |«      }|j                  dt        |||	|
z
  |«      «       Œ@ t        t        | |«      dd «      }t        t        d|dz   «      ||«      D �]Î  \  }}}t        |«      |dz
  }}|d|dz
   ||dz
  d }}t        t        ||«      «      D ]@  \  }
\  }}t        t        |||	|«      ||dz
  |«      }|gt        |dd d|dz
  |«      z   ||
<   ŒB t        |j                  | g||«      }t        ||«      }t!        |t#        |||«      ||«      }t%        |||«      }t        d|«      D ]ô  }t'        ||«      r Œét)        ||||«      }t+        ||dz   ||||«      }t'        ||dz
  «      rŒBt-        ||j/                   ||«      dz   «      |dz
  |«      }t1        ||||||dz
  |«      }t        t        ||«      «      D ]7  \  }
\  }}t3        |t        |d|dz
  |«      |||«      }t        ||||«      ||
<   Œ9 t!        |t#        |||«      ||«      }t        ||||«      }Œö �ŒÑ t#        |||«      | k7  rt4        ‚|S )z-Wang/EEZ: Parallel Hensel lifting algorithm. rh   Nr   r|   )r§   Úlistr  r  rL   rã   rE   Úmaxr   r  r«   rK   r   r   r˜   r   r-   r6   r   r   r/   rM   rA   r  r  r7   r]   )rl   r¡   ÚLCrÆ   r­   rx   rn   r£   r•   r  rÐ   r“   rœ   r‰   r  r    ÚwÚIr  r›   r�   r™   rž   r¢   Údjrq   rÈ   r¤   r�   s                                rt   Údmp_zz_wang_hensel_liftingr'  «  sÚ  € àˆc”3�q“6˜1˜q™5ˆ!€q€AäˆQ‹€Aäœ( 1 Q R 5›/Ó*ò 6‰ˆˆ1Ü˜˜!™˜a  Q¡¨¨A©¨qÓ1ˆØ	�‰�Ô$ Q¨¨1¨q©5°!Ó4Õ5ð6ô 	ŒO˜A˜qÓ! ! "Ð%Ó&€Aä”u˜Q  A¡“¨¨1Ó-ó  1‰ˆˆ1ˆaÜ�A‹w˜˜A™ˆ1ˆà��!�a‘%ˆy˜!˜A ™E˜F˜)ˆ1ˆä#¤C¨¨2£JÓ/ò 	8‰JˆA‰w��2Ü!¤-°°A°q¸!Ó"<¸aÀÀQÁÈÓJˆBØ�4œ) A a b E¨1¨a°!©e°QÓ7Ñ7ˆAˆaŠDð	8ô �a—e‘e˜a˜R�[ ! QÓ'ˆÜ�A�q‹Mˆä�A”z ! Q¨Ó*¨A¨qÓ1ˆä˜1˜a Ó#ˆä�q˜"“ò 	1ˆAÜ˜!˜QÔÙä˜˜1˜a Ó#ˆAÜ   A¨¡E¨1¨a°°AÓ6ˆAä˜a  Q¡Õ'Ü" 1 a§k¡k±!°A³$¸±(Ó&;¸QÀ¹UÀAÓF�Ü& q¨!¨Q°°1°a¸!±e¸QÓ?�ä!*¬3¨q°!«9Ó!5ò 8‘I�A‘v˜˜1Ü# A¤y°°A°q¸1±u¸aÓ'@À!ÀQÈÓJ�AÜ+¨A¨q°!°QÓ7�A�a’Dð8ô ˜Aœz¨!¨Q°Ó2°A°qÓ9�Ü$ Q¨¨1¨aÓ0‘ò!	1ð! 1ôD �!�Q˜Ó˜aÒÜÐàˆrv   c           
      óÄ  — ddl m} t        |«      }t        t	        | |«      |dz
  |«      \  }}t        | ||«      }	 | ||	«      «      }
|€
|dk(  rd}nd}t        «       g |j                  g|z  df\  }}}}	 t        | |||||«      \  }}}t        ||«      \  }}t        |«      }|dk(  r| gS |||||fg}t        d«      }t        d«      }t        d«      }t        |«      |k  ræt        |«      D ]Ä  }t        |«      D �cg c]  } | || |«      «      ‘Œ }}t        |«      |vr|j                  t        |«      «       nŒR	 t        | |||||«      \  }}}t        ||«      \  }}t        |«      }|�||k7  r||k  rg |}}nŒ“|}|dk(  r| gc S |j!                  |||||f«       t        |«      |k(  sŒÄ n ||z  }t        |«      |k  rŒæd	\  }}}|D ]'  \  }}}}}t#        ||«      }|�
||k  r|}|}n|}|dz  }Œ) ||   \  }}}}}| }	 t%        | |||||||«      \  } }}t'        | ||||
||«      }g }|D ]L  } t-        | ||«      \  }} |j/                  t1        | ||«      «      rt3        | ||«      } |j!                  | «       ŒN |S # t        $ r Y �ŒÝw xY wc c}w # t        $ r Y �Œ¸w xY w# t(        $ r* t        d
«      rt+        ||||dz   «      cY S t)        d«      ‚w xY w)a`  
    Factor primitive square-free polynomials in `Z[X]`.

    Given a multivariate polynomial `f` in `Z[x_1,...,x_n]`, which is
    primitive and square-free in `x_1`, computes factorization of `f` into
    irreducibles over integers.

    The procedure is based on Wang's Enhanced Extended Zassenhaus
    algorithm. The algorithm works by viewing `f` as a univariate polynomial
    in `Z[x_2,...,x_n][x_1]`, for which an evaluation mapping is computed::

                      x_2 -> a_2, ..., x_n -> a_n

    where `a_i`, for `i = 2, \dots, n`, are carefully chosen integers.  The
    mapping is used to transform `f` into a univariate polynomial in `Z[x_1]`,
    which can be factored efficiently using Zassenhaus algorithm. The last
    step is to lift univariate factors to obtain true multivariate
    factors. For this purpose a parallel Hensel lifting procedure is used.

    The parameter ``seed`` is passed to _randint and can be used to seed randint
    (when an integer) or (for testing purposes) can be a sequence of numbers.

    References
    ==========

    .. [1] [Wang78]_
    .. [2] [Geddes92]_

    r   )Ú	nextprimerh   Nr|   ÚEEZ_NUMBER_OF_CONFIGSÚEEZ_NUMBER_OF_TRIESÚEEZ_MODULUS_STEP)Nr   r   ÚEEZ_RESTART_IF_NEEDEDz3we need to restart algorithm with better parameters)rÁ   r)  r   Údmp_zz_factorr   r–   rÅ   Úzeror  rý   r§   r`   r\   r«   ÚtupleÚaddrk   r;   r  r'  r]   Údmp_zz_wangrJ   rä   r   r)   ) rl   rx   rn   ÚmodÚseedr)  Úrandintr	  r¤   r”   r­   ÚhistoryÚconfigsrÆ   rs   r  rœ   r  r²   r¡   Úeez_num_configsÚeez_num_triesÚeez_mod_stepÚrrÚs_normÚs_argrÐ   Ú_s_normÚorig_fr#  rm   ro   s                                    rt   r2  r2  ß  s‹  € õ< (ä�t‹n€Gäœ&  A›,¨¨A©¨qÓ1�E€Bˆä˜a  AÓ&€AÙ	‰)�A‹,‹€Aà
€{Ø�Š6Ø‰CàˆCä ›U B¨¯©¨°©
°DÐ8Ñ€GˆW�a˜ðÜ*¨1¨a°°Q¸¸1Ó=‰ˆˆAˆqä   AÓ&‰ˆˆ1ä�‹Fˆà�Š6Ø�3ˆJà�r˜1˜a Ð#Ð$ˆô Ð3Ó4€OÜÐ/Ó0€MÜÐ+Ó,€Lä
ˆg‹,˜Ò
(Ü�}Ó%ò "	 ˆAÜ16°q³Ö;¨A‘!‘G˜S˜D #Ó&Õ'Ð;ˆAÐ;ä�Q‹x˜wÑ&Ø—‘œE !›HÕ%àðÜ2°1°a¸¸QÀÀ1ÓE‘��A�qô % Q¨Ó*‰DˆAˆqä�Q“ˆBàˆ}Ø˜’7Ø˜A’vØ%'¨ ™à à�à�AŠvØ�s’
à�N‰N˜A˜r 1 a¨Ð+Ô,ä�7‹|˜Ó.ÙðA"	 ðD �<ÑˆCôG ˆg‹,˜Ó
(ðJ "Ñ€FˆE�1à ò 
‰ˆˆ1ˆa��AÜ˜q !Ó$ˆàÐØ˜ÒØ �Ø‘àˆFà	ˆQ‰‰ð
ð ˜U‘^�N€A€rˆ1ˆa�Ø€FðGÜ*¨1¨a°°Q¸¸1¸aÀÓC‰ˆˆ1ˆbÜ,¨Q°°2°q¸!¸QÀÓBˆð €Fàò ˆÜ# A q¨!Ó,‰ˆˆ1à�=‰=œ q¨!¨QÓ/Ô0Ü˜˜1˜aÓ ˆAà�‰�aÕðð €Møôc ò Úðüò <øô $ò Úðûô\ ò GÜÐ(Ô)Ü˜v q¨!¨S°1©WÓ5Ò5ä#ØEóGð Gð	GúsB   Á85J Â.J Ä JÅJÈ'J, Ê	JÊJÊ	J)Ê(J)Ê,%KËKc                 ó  — |st        | |«      S t        | |«      r|j                  g fS t        | ||«      \  }}t	        |||«      dk  r| t        |||«      }}t        d„ t        ||«      D «       «      r|g fS t        |||«      \  }}g }t        ||«      dkD  r(t        |||«      }t        |||«      }t        | |||«      }t        ||dz
  |«      d   D ]  \  }}|j                  d|g|f«       Œ t        | ||«       |t!        |«      fS )aÜ  
    Factor (non square-free) polynomials in `Z[X]`.

    Given a multivariate polynomial `f` in `Z[x]` computes its complete
    factorization `f_1, \dots, f_n` into irreducibles over integers::

                 f = content(f) f_1**k_1 ... f_n**k_n

    The factorization is computed by reducing the input polynomial
    into a primitive square-free polynomial and factoring it using
    Enhanced Extended Zassenhaus (EEZ) algorithm. Trial division
    is used to recover the multiplicities of factors.

    The result is returned as a tuple consisting of::

             (content(f), [(f_1, k_1), ..., (f_n, k_n))

    Consider polynomial `f = 2*(x**2 - y**2)`::

        >>> from sympy.polys import ring, ZZ
        >>> R, x,y = ring("x,y", ZZ)

        >>> R.dmp_zz_factor(2*x**2 - 2*y**2)
        (2, [(x - y, 1), (x + y, 1)])

    In result we got the following factorization::

                    f = 2 (x - y) (x + y)

    References
    ==========

    .. [1] [Gathen99]_

    r   c              3   ó&   K  — | ]	  }|d k  –— Œ y­w©r   Nr~   ©r€   r‰   s     rt   r‚   z dmp_zz_factor.<locals>.<genexpr>œ  ó   è ø€ Ò
1�aˆ1��6Ñ
1ùrƒ   rh   )r  r   r/  rJ   r   r)   r  r   rQ   r   rX   r2  ry   r.  rã   rZ   r[   )	rl   rx   rn   rü   rš   r    rm   r¡   rq   s	            rt   r.  r.  m  s+  € ñH Ü˜Q Ó"Ð"ä�!�QÔØ�v‰v�rˆzÐä" 1 a¨Ó+�G€Dˆ!ä�Q˜˜1Ó Ò!Ø�%œ  A qÓ)ˆaˆä
Ñ
1œ?¨1¨aÓ0Ô
1Ô1Ø�Rˆxˆä˜˜A˜qÓ!�D€A€qà€Gä�!�QÓ˜!ÒÜ˜˜A˜qÓ!ˆÜ˜˜1˜aÓ ˆÜ$ Q¨¨1¨aÓ0ˆä˜a  Q¡¨Ó*¨1Ñ-ò $‰ˆˆ1Ø�‰�q˜A˜3 ˜(Õ#ð$ô �q˜!˜WÔ%à”˜wÓ'Ð'Ð'rv   c           	      óÔ   — |j                  «       }t        | ||«      } t        | |«      \  }}|D ��cg c]  \  }}t        |||«      |f‘Œ }}}|j                  ||«      }||fS c c}}w )z>Factor univariate polynomials into irreducibles in `QQ_I[x]`. )Úas_AlgebraicFieldr   râ   rÃ   )rl   rç   ÚK1rè   rm   r  rÐ   s          rt   Údup_qq_i_factorrH  °  su   € ð 
×	Ñ	Ó	€BÜ�A�r˜2Ó€AÜ$ Q¨Ó+�N€Eˆ7Ø;B×C±°°a”˜C  RÓ(¨!Ò,ÐC€GÑCØ�J‰J�u˜bÓ!€EØ�'ˆ>Ðùó Ds   ²A$c                 ó<  — |j                  «       }t        | ||«      } t        | |«      \  }}g }|D ]R  \  }}t        ||«      \  }}	t        |	||«      }
t	        |
d|«      \  }}|||z  z  ||z  z  }|j                  ||f«       ŒT |}|j                  ||«      }||fS )z>Factor univariate polynomials into irreducibles in `ZZ_I[x]`. r   )Ú	get_fieldr   rH  rB   rJ   rk   rÃ   )rl   rç   rG  rè   rm   Únew_factorsr  rÐ   Ú	fac_denomÚfac_numÚfac_num_ZZ_IÚcontentÚfac_prims                rt   Údup_zz_i_factorrQ  »  sÁ   € ð 
�‰‹€BÜ�A�r˜2Ó€AÜ$ Q¨Ó+�N€Eˆ7à€KØò *‰ˆˆQä-¨c°2Ó6Ñˆ	�7Ü" 7¨B°Ó3ˆÜ0°¸qÀ"ÓEÑˆ�à˜ A™Ñ%¨)°q©.Ñ8ˆØ×Ñ˜H a˜=Õ)ð*ð €GØ�J‰J�u˜bÓ!€EØ�'ˆ>Ðrv   c           
      óÚ   — |j                  «       }t        | |||«      } t        | ||«      \  }}|D ��cg c]  \  }}t        ||||«      |f‘Œ }}}|j                  ||«      }||fS c c}}w )z@Factor multivariate polynomials into irreducibles in `QQ_I[X]`. )rF  r   Údmp_factor_listrÃ   )rl   rx   rç   rG  rè   rm   r  rÐ   s           rt   Údmp_qq_i_factorrT  Ñ  s{   € ð 
×	Ñ	Ó	€BÜ�A�q˜"˜bÓ!€AÜ$ Q¨¨2Ó.�N€Eˆ7Ø>E×F±F°C¸”˜C  B¨Ó+¨QÒ/ÐF€GÑFØ�J‰J�u˜bÓ!€EØ�'ˆ>Ðùó Gs   ´A'c                 óD  — |j                  «       }t        | |||«      } t        | ||«      \  }}g }|D ]T  \  }}t        |||«      \  }	}
t        |
|||«      }t	        |||«      \  }}|||z  z  |	|z  z  }|j                  ||f«       ŒV |}|j                  ||«      }||fS )z@Factor multivariate polynomials into irreducibles in `ZZ_I[X]`. )rJ  r   rT  rC   rJ   rk   rÃ   )rl   rx   rç   rG  rè   rm   rK  r  rÐ   rL  rM  rN  rO  rP  s                 rt   Údmp_zz_i_factorrV  Ü  sÉ   € ð 
�‰‹€BÜ�A�q˜"˜bÓ!€AÜ$ Q¨¨2Ó.�N€Eˆ7à€KØò *‰ˆˆQä-¨c°1°bÓ9Ñˆ	�7Ü" 7¨A¨r°2Ó6ˆÜ0°¸qÀ"ÓEÑˆ�à˜ A™Ñ%¨)°q©.Ñ8ˆØ×Ñ˜H a˜=Õ)ð*ð €GØ�J‰J�u˜bÓ!€EØ�'ˆ>Ðrv   c                 ó  — t        | «      t        | |«      }}t        | |«      } |dk  r|g fS |dk(  r|| dfgfS t        | |«      | }} t	        | |«      \  }}}t        ||j                  «      }t        |«      dk(  r|| |t        | «      z  fgfS ||j                  z  }	t        |«      D ]B  \  }
\  }}t        ||j                  |«      }t        |||«      \  }}}t        ||	|«      }|||
<   ŒD t        |||«      }t        ||«       ||fS )aN	  Factor univariate polynomials over algebraic number fields.

    The domain `K` must be an algebraic number field `k(a)` (see :ref:`QQ(a)`).

    Examples
    ========

    First define the algebraic number field `K = \mathbb{Q}(\sqrt{2})`:

    >>> from sympy import QQ, sqrt
    >>> from sympy.polys.factortools import dup_ext_factor
    >>> K = QQ.algebraic_field(sqrt(2))

    We can now factorise the polynomial `x^2 - 2` over `K`:

    >>> p = [K(1), K(0), K(-2)] # x^2 - 2
    >>> p1 = [K(1), -K.unit]    # x - sqrt(2)
    >>> p2 = [K(1), +K.unit]    # x + sqrt(2)
    >>> dup_ext_factor(p, K) == (K.one, [(p1, 1), (p2, 1)])
    True

    Usually this would be done at a higher level:

    >>> from sympy import factor
    >>> from sympy.abc import x
    >>> factor(x**2 - 2, extension=sqrt(2))
    (x - sqrt(2))*(x + sqrt(2))

    Explanation
    ===========

    Uses Trager's algorithm. In particular this function is algorithm
    ``alg_factor`` from [Trager76]_.

    If `f` is a polynomial in `k(a)[x]` then its norm `g(x)` is a polynomial in
    `k[x]`. If `g(x)` is square-free and has irreducible factors `g_1(x)`,
    `g_2(x)`, `\cdots` then the irreducible factors of `f` in `k(a)[x]` are
    given by `f_i(x) = \gcd(f(x), g_i(x))` where the GCD is computed in
    `k(a)[x]`.

    The first step in Trager's algorithm is to find an integer shift `s` so
    that `f(x-sa)` has square-free norm. Then the norm is factorized in `k[x]`
    and the GCD of (shifted) `f` with each factor gives the shifted factors of
    `f`. At the end the shift is undone to recover the unshifted factors of `f`
    in `k(a)[x]`.

    The algorithm reduces the problem of factorization in `k(a)[x]` to
    factorization in `k[x]` with the main additional steps being to compute the
    norm (a resultant calculation in `k[x,y]`) and some polynomial GCDs in
    `k(a)[x]`.

    In practice in SymPy the base field `k` will be the rationals :ref:`QQ` and
    this function factorizes a polynomial with coefficients in an algebraic
    number field  like `\mathbb{Q}(\sqrt{2})`.

    See Also
    ========

    dmp_ext_factor:
        Analogous function for multivariate polynomials over ``k(a)``.
    dup_sqf_norm:
        Subroutine ``sqfr_norm`` also from [Trager76]_.
    sympy.polys.polytools.factor:
        The high-level function that ultimately uses this function as needed.
    r   rh   )r   r   rG   rW   rU   Údup_factor_list_includeÚdomr§   Úunitr  r   rR   rN   ru   rY   )rl   rn   r•   r�   r°   rœ   rš   rs   rm   r¡   rÐ   rp   r²   r›   s                 rt   Údup_ext_factorr[  ò  s.  € ôD �q‹Mœ6 ! Q›<€r€Aä�!�Q‹€AàˆA‚vØ�2ˆvˆØˆA‚vØ�Q˜�F�8ˆ|Ðä˜˜1Ó˜q€q€AÜ˜1˜aÓ �G€A€qˆ!ä% a¨¯©Ó/€Gä
ˆ7ƒ|�qÒØ�Q˜œ: a›=Ñ(Ð)Ð*Ð*Ð*à	ˆ!�&‰&‰€Aä# GÓ,ò ‰ˆ‰;ˆF�AÜ˜ §¡ qÓ)ˆÜ  1 aÓ(‰ˆˆ1ˆaÜ�a˜˜AÓˆØˆ�Š
ð	ô !  G¨QÓ/€Gä�q˜'Ô"àˆwˆ;Ðrv   c                 óJ  — |st        | |«      S t        | ||«      }t        | ||«      } t        d„ t	        | |«      D «       «      r|g fS t        | ||«      | }} t        | ||«      \  }}}t        |||j                  «      }t        |«      dk(  r| g}not        |«      D ]a  \  }	\  }
}t        |
||j                  |«      }t        ||||«      \  }}}|D �cg c]  }||j                  z  ‘Œ }}t        ||||«      }|||	<   Œc t        ||||«      }t!        |||«       ||fS c c}w )a®  Factor multivariate polynomials over algebraic number fields.

    The domain `K` must be an algebraic number field `k(a)` (see :ref:`QQ(a)`).

    Examples
    ========

    First define the algebraic number field `K = \mathbb{Q}(\sqrt{2})`:

    >>> from sympy import QQ, sqrt
    >>> from sympy.polys.factortools import dmp_ext_factor
    >>> K = QQ.algebraic_field(sqrt(2))

    We can now factorise the polynomial `x^2 y^2 - 2` over `K`:

    >>> p = [[K(1),K(0),K(0)], [], [K(-2)]] # x**2*y**2 - 2
    >>> p1 = [[K(1),K(0)], [-K.unit]]       # x*y - sqrt(2)
    >>> p2 = [[K(1),K(0)], [+K.unit]]       # x*y + sqrt(2)
    >>> dmp_ext_factor(p, 1, K) == (K.one, [(p1, 1), (p2, 1)])
    True

    Usually this would be done at a higher level:

    >>> from sympy import factor
    >>> from sympy.abc import x, y
    >>> factor(x**2*y**2 - 2, extension=sqrt(2))
    (x*y - sqrt(2))*(x*y + sqrt(2))

    Explanation
    ===========

    This is Trager's algorithm for multivariate polynomials. In particular this
    function is algorithm ``alg_factor`` from [Trager76]_.

    See :func:`dup_ext_factor` for explanation.

    See Also
    ========

    dup_ext_factor:
        Analogous function for univariate polynomials over ``k(a)``.
    dmp_sqf_norm:
        Multivariate version of subroutine ``sqfr_norm`` also from [Trager76]_.
    sympy.polys.polytools.factor:
        The high-level function that ultimately uses this function as needed.
    c              3   ó&   K  — | ]	  }|d k  –— Œ y­wrB  r~   rC  s     rt   r‚   z!dmp_ext_factor.<locals>.<genexpr>‰  rD  rƒ   rh   )r[  r   rH   r  r   rX   rV   Údmp_factor_list_includerY  r§   r  r   rS   rZ  rO   ry   rZ   )rl   rx   rn   r�   r°   rœ   rš   rs   rm   rÐ   rp   r²   r›   Úsir“   ro   s                   rt   Údmp_ext_factorr`  T  sA  € ñ^ Ü˜a Ó#Ð#ä	�q˜!˜QÓ	€BÜ˜˜A˜qÓ!€Aä
Ñ
1œ?¨1¨aÓ0Ô
1Ô1Ø�2ˆvˆä˜˜1˜aÓ  !€q€AÜ˜1˜a Ó#�G€A€qˆ!ä% a¨¨A¯E©EÓ2€Gä
ˆ7ƒ|�qÒØ�#‰ä'¨Ó0ò 	‰NˆA‰{�˜Ü˜F A q§u¡u¨aÓ0ˆAÜ# A q¨!¨QÓ/‰GˆAˆq�!Ø%&Ö'˜r��A—F‘F“Ð'ˆAÐ'Ü˜!˜Q  1Ó%ˆAØˆG�AŠJð	ô    7¨A¨qÓ1€Fä�q˜!˜VÔ$àˆvˆ:Ðùò (s   ÃD c                 ó  — t        | ||j                  «      } t        | |j                  |j                  «      \  }}t	        |«      D ]$  \  }\  } }t        | |j                  |«      |f||<   Œ& |j                  ||j                  «      |fS )z2Factor univariate polynomials over finite fields. )r   rY  r   r3  r  rÃ   )rl   rn   rè   rm   rÐ   rq   s         rt   Údup_gf_factorrb  ¢  s�   € ä�A�q˜!Ÿ%™%Ó €Aä˜q !§%¡%¨¯©Ó/�N€Eˆ7ä˜wÓ'ò 3‰	ˆ‰6ˆAˆqÜ! ! Q§U¡U¨AÓ.°Ð2ˆ�Š
ð3ð �9‰9�U˜AŸE™EÓ" GÐ+Ð+rv   c                 ó   — t        d«      ‚)z4Factor multivariate polynomials over finite fields. z+multivariate polynomials over finite fields)ÚNotImplementedError)rl   rx   rn   s      rt   Údmp_gf_factorre  ®  s   € ä
ÐKÓ
LÐLrv   c                 ób  — t        | |«      \  }} t        | |«      \  }} |j                  rt        | |«      \  }}�n9|j                  rt        | |«      \  }}�n|j                  rt        | |«      \  }}�nÿ|j                  rt        | |«      \  }}�nâ|j                  s ||j                  «       }}t        | ||«      } nd}|j                  r.|j                  «       }t        | ||«      \  }} t        | ||«      } n|}|j                   rt#        | |«      \  }}n‰|j$                  rot'        | d|«      \  } }	t)        | |	|j*                  «      \  }}t-        |«      D ]  \  }
\  } }t/        | |	|«      |f||
<   Œ |j1                  ||j*                  «      }nt3        d|z  «      ‚|j                  rÇt-        |«      D ]  \  }
\  } }t        | ||«      |f||
<   Œ |j1                  ||«      }|j5                  |«      }|ryt-        |«      D ]W  \  }
\  } }t7        | |«      }t9        | ||«      } t        | ||«      } | |f||
<   |j;                  ||j=                  ||«      «      }ŒY |j1                  ||«      }|}|r*|j?                  d|j@                  |jB                  g|f«       ||z  tE        |«      fS )ú;Factor univariate polynomials into irreducibles in `K[x]`. Nr   ú#factorization not supported over %s)#r&   rI   Úis_FiniteFieldrb  Úis_Algebraicr[  Úis_GaussianRingrQ  Úis_GaussianFieldrH  Úis_ExactÚ	get_exactr   Úis_Fieldrà   rB   rá   r  Úis_Polyr$   rS  rY  r  r%   rÃ   r^   Úquor;   r@   ÚmulÚpowrã   r˜   r/  r[   )rl   rç   r  rü   rè   rm   Ú
K0_inexactrn   Údenomrx   rÐ   rq   Úmax_norms                rt   râ   râ   ³  sŸ  € ä˜˜BÓ�D€A€qÜ˜A˜rÓ"�G€Dˆ!à	×ÒÜ& q¨"Ó-‰ˆŠwØ	�ŠÜ'¨¨2Ó.‰ˆŠwØ	×	Ò	Ü(¨¨BÓ/‰ˆŠwØ	×	Ò	Ü(¨¨BÓ/‰ˆŠwà�{Š{Ø §¡£˜ˆJÜ˜A˜z¨2Ó.‰AàˆJà�;Š;Ø—‘“ˆAä'¨¨2¨qÓ1‰HˆE�1Ü˜A˜r 1Ó%‰AàˆAà�7Š7Ü*¨1¨aÓ0‰NˆE‘7Ø�YŠYÜ˜a  AÓ&‰DˆAˆqä,¨Q°°1·5±5Ó9‰NˆE�7ä& wÓ/ò 5‘	�‘6�A�qÜ'¨¨1¨aÓ0°!Ð4�˜’
ð5ð —I‘I˜e Q§U¡UÓ+‰EäÐCÀbÑHÓIÐIà�;Š;Ü& wÓ/ò 8‘	�‘6�A�qÜ)¨!¨Q°Ó3°QÐ7�˜’
ð8ð —J‘J˜u aÓ(ˆEØ—F‘F˜5 %Ó(ˆEáÜ!*¨7Ó!3ò ?‘I�A‘v˜˜1Ü+¨A¨rÓ2�HÜ& q¨(°BÓ7�AÜ# A r¨:Ó6�AØ"# Q �G˜A‘JØŸF™F 5¨"¯&©&°¸1Ó*=Ó>‘Eð?ð #×*Ñ*¨5°"Ó5�Ø�áØ�‰�q˜BŸF™F B§G¡GÐ,¨aÐ0Ô1à�‰:”} WÓ-Ð-Ð-rv   c                 óŠ   — t        | |«      \  }}|st        |g«      dfgS t        |d   d   ||«      }||d   d   fg|dd z   S )rg  rh   r   N)râ   r   r>   )rl   rn   rè   rm   rš   s        rt   rX  rX  õ  sa   € ä$ Q¨Ó*�N€Eˆ7áÜ˜E˜7Ó# QÐ'Ð(Ð(ä˜7 1™: a™=¨%°Ó3ˆØ�G˜A‘J˜q‘MÐ"Ð# g¨a¨b kÑ1Ð1rv   c           	      ól  — |st        | |«      S t        | ||«      \  }} t        | ||«      \  }} |j                  rt	        | ||«      \  }}�n~|j
                  rt        | ||«      \  }}�n`|j                  rt        | ||«      \  }}�nB|j                  rt        | ||«      \  }}�n$|j                  s!||j                  «       }}t        | |||«      } nd}|j                  r0|j                  «       }t!        | |||«      \  }	} t        | |||«      } n|}|j"                  rKt%        | ||«      \  }
} }t'        | ||«      \  }}t)        |«      D ]  \  }\  } }t+        | |
||«      |f||<   Œ n‰|j,                  rot/        | ||«      \  } }t1        | ||j2                  «      \  }}t)        |«      D ]  \  }\  } }t5        | ||«      |f||<   Œ |j7                  ||j2                  «      }nt9        d|z  «      ‚|j                  rËt)        |«      D ]  \  }\  } }t        | |||«      |f||<   Œ |j7                  ||«      }|j;                  |	«      }|r|t)        |«      D ]Z  \  }\  } }t=        | ||«      }t?        | |||«      } t        | |||«      } | |f||<   |jA                  ||jC                  ||«      «      }Œ\ |j7                  ||«      }|}t)        tE        |«      «      D ]D  \  }}|sŒ	d||z
  z  dz   d|z  z   |jF                  i}|jI                  dtK        |||«      |f«       ŒF ||z  tM        |«      fS )ú=Factor multivariate polynomials into irreducibles in `K[X]`. Nrh  )r   )rh   r   )'râ   r'   rJ   ri  re  rj  r`  rk  rV  rl  rT  rm  rn  r   ro  rà   rC   rá   r"   r.  r  r#   rp  r$   rS  rY  r%   rÃ   r^   rq  r<   rA   rr  rs  r  r˜   rã   r   r[   )rl   rx   rç   r  rü   rè   rm   rt  rn   ru  Úlevelsr  rÐ   rq   rv  r  Úterms                    rt   rS  rS     sU  € áÜ˜q "Ó%Ð%ä˜˜A˜rÓ"�D€A€qÜ" 1 a¨Ó,�G€Dˆ!à	×ÒÜ& q¨!¨RÓ0‰ˆŠwØ	�ŠÜ'¨¨1¨bÓ1‰ˆŠwØ	×	Ò	Ü(¨¨A¨rÓ2‰ˆŠwØ	×	Ò	Ü(¨¨A¨rÓ2‰ˆŠwà�{Š{Ø §¡£˜ˆJÜ˜A˜q *¨bÓ1‰AàˆJà�;Š;Ø—‘“ˆAä'¨¨1¨b°!Ó4‰HˆE�1Ü˜A˜q " aÓ(‰AàˆAà�7Š7Ü& q¨!¨QÓ/‰LˆF�A�qÜ*¨1¨a°Ó3‰NˆE�7ä& wÓ/ò ?‘	�‘6�A�qÜ)¨!¨V°Q¸Ó:¸AÐ>�˜’
ñ?à�YŠYÜ˜a  AÓ&‰DˆAˆqä,¨Q°°1·5±5Ó9‰NˆE�7ä& wÓ/ò 5‘	�‘6�A�qÜ'¨¨1¨aÓ0°!Ð4�˜’
ð5ð —I‘I˜e Q§U¡UÓ+‰EäÐCÀbÑHÓIÐIà�;Š;Ü& wÓ/ò ;‘	�‘6�A�qÜ)¨!¨Q°°2Ó6¸Ð:�˜’
ð;ð —J‘J˜u aÓ(ˆEØ—F‘F˜5 %Ó(ˆEáÜ!*¨7Ó!3ò ?‘I�A‘v˜˜1Ü+¨A¨q°"Ó5�HÜ& q¨(°A°rÓ:�AÜ# A q¨"¨jÓ9�AØ"# Q �G˜A‘JØŸF™F 5¨"¯&©&°¸1Ó*=Ó>‘Eð?ð #×*Ñ*¨5°"Ó5�Ø�äœ( 1›+Ó&ò ;‰ˆˆ1ÙØà�a˜!‘e‘˜tÑ# d¨1¡fÑ,¨b¯f©fÐ5ˆØ�‰�qœ=¨¨q°"Ó5°qÐ9Õ:ð;ð �‰:”} WÓ-Ð-Ð-rv   c                 óª   — |st        | |«      S t        | ||«      \  }}|st        ||«      dfgS t        |d   d   |||«      }||d   d   fg|dd z   S )ry  rh   r   N)rX  rS  r    r?   )rl   rx   rn   rè   rm   rš   s         rt   r^  r^  M  su   € áÜ& q¨!Ó,Ð,ä$ Q¨¨1Ó-�N€Eˆ7áÜ˜E 1Ó% qÐ)Ð*Ð*ä˜7 1™: a™=¨%°°AÓ6ˆØ�G˜A‘J˜q‘MÐ"Ð# g¨a¨b kÑ1Ð1rv   c                 ó   — t        | d|«      S )z_
    Returns ``True`` if a univariate polynomial ``f`` has no factors
    over its domain.
    r   )Údmp_irreducible_p)rl   rn   s     rt   Údup_irreducible_pr  [  s   € ô
 ˜Q  1Ó%Ð%rv   c                 ó`   — t        | ||«      \  }}|syt        |«      dkD  ry|d   \  }}|dk(  S )za
    Returns ``True`` if a multivariate polynomial ``f`` has no factors
    over its domain.
    Trh   Fr   )rS  r§   )rl   rx   rn   r²   rm   rq   s         rt   r~  r~  c  sA   € ô
 !  A qÓ)�J€A€wáØÜ	ˆW‹˜Ò	Øà�q‰z‰ˆˆ1Ø�A‰vˆrv   )F)NN)šÚ__doc__Úsympy.external.gmpyr   Úsympy.core.randomr   Úsympy.polys.galoistoolsr   r   r   r   r	   r
   r   r   r   r   r   Úsympy.polys.densebasicr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   Úsympy.polys.densearithr(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   Úsympy.polys.densetoolsrB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   Úsympy.polys.euclidtoolsrQ   rR   rS   Úsympy.polys.sqfreetoolsrT   rU   rV   rW   rX   rY   rZ   Úsympy.polys.polyutilsr[   Úsympy.polys.polyconfigr\   Úsympy.polys.polyerrorsr]   r^   r_   r`   Úsympy.utilitiesra   Úmathrb   r…   rc   rÂ   rd   rª   re   rf   ru   ry   r‘   r–   r¥   r¬   r¶   rÔ   rÜ   rå   rë   rï   r÷   rý   r  r
  r  r  r  r  r'  r2  r.  rH  rQ  rT  rV  r[  r`  rb  re  râ   rX  rS  r^  r  r~  r~   rv   rt   ú<module>r�     sŸ  ðÙ @å ,å &÷÷ ÷ ñ ÷"÷ "÷ "÷ "÷ "÷ "ó "÷"$÷ $÷ $÷ $÷ $÷ $÷ $÷$&÷ &÷ &÷ &ñ &÷"ñ "÷÷ ñ õ 0Ý (÷Fó Fõ $ç :Ñ :ð �7ÒÞà€Iò!ò8!ò8:òx%ò6òr75òròfòRó Pòf	òò )òX8ò:Qòhò(*ò43òl-ò`AòH1óhKò\@(òFòò,òò,_òDKò\	,òMò
?.òD2òJ.òZ2ò&órv   