ó
    Š*£h¨  ã                   óü  • S r SSKJr  SSKJr  SSKJrJrJrJ	r	J
r
JrJrJrJrJrJr  SSKJrJrJrJrJrJrJrJrJrJrJrJrJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(J)r)  SSK*J+r+J,r,J-r-J.r.J/r/J0r0J1r1J2r2J3r3J4r4J5r5J6r6J7r7J8r8J9r9J:r:J;r;J<r<J=r=J>r>J?r?J@r@JArAJBrBJCrCJDrD  SSKEJFrFJGrGJHrHJIrIJJrJJKrKJLrLJMrMJNrNJOrOJPrPJQrQJRrRJSrSJTrT  SSKUJVrVJWrWJXrX  SS	KYJZrZJ[r[J\r\J]r]J^r^J_r_J`r`  SS
KaJbrb  SSKcJdrd  SSKeJfrfJgrgJhrhJiri  SSKjJkrk  SSKlJmrnJorpJqrr  \S:X  a  SSKsJtrt  OSrtS ruS rvS rwS rxS ryS rzS r{S r|S r}S7S jr~S rS r€S r�S r‚S  rƒS! r„S" r…S# r†S$ r‡S% rˆS& r‰S8S' jrŠS( r‹S) rŒS* r�S+ rŽS, r�S- r�S. r‘S/ r’S0 r“S1 r”S2 r•S3 r–S4 r—S5 r˜S6 r™g)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                 ó¶   • / nU HG  nSn [        XU5      u  pgU(       d  XeS-   pPOOM  US:X  a  [        S5      eUR                  XE45        MI     [        U5      $ )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           ÚT/home/mande/repo/quber/.venv/lib/python3.13/site-packages/sympy/polys/factortools.pyÚdup_trial_divisionru   X   sm   € ð €FãˆØˆàÜ˜1 aÓ(‰DˆAæØ˜a™%‘1àñ ð �‹6ÜÐ6Ó7Ð7à�‰�v�kÖ"ñ ô  ˜Ó Ð ó    c                 óÈ   • / nU HP  nSn [        XX#5      u  px[        X‚5      (       a  XvS-   p`OOM'  US:X  a  [        S5      eUR                  XV45        MR     [	        U5      $ )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   su   € ð €FãˆØˆàÜ˜1 aÓ+‰DˆAä˜!×ÑØ˜a™%‘1àñ ð �‹6ÜÐ6Ó7Ð7à�‰�v�kÖ"ñ ô  ˜Ó Ð rv   c                 ó\  • SSK Jn  [        U 5      n[        US-  5      n[        US-  5      nUR	                  [        S U  5       5      5      nU" US-
  U5      nU" US-
  US-
  5      nUR                  [        X5      5      n	Xv-  X‰-  -   n
U
[        X5      -  n
[        U
S-  5      S-  n
U
$ )ae  
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   ó*   #   • U  H	  oS -  v •  M     g7f)r|   N© ©Ú.0Úcfs     rt   Ú	<genexpr>Ú(dup_zz_mignotte_bound.<locals>.<genexpr>¿   s   é € Ð0ªQ r žUªQùó   ‚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Ø	Œ\˜!ÓÑ€EÜ�%˜!‘)Ó˜qÑ €Eà€Lrv   c                 ó¸   • [        XU5      n[        [        XU5      5      n[        [	        X5      5      nUR                  U" US-   5      5      SU-  -  U-  U-  $ )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—   Ì   sX   € ä�Q˜1Ó€AÜŒM˜! Ó"Ó#€AÜŒO˜AÓ!Ó"€Aà�6‰6‘!�A˜‘E“(Ó˜A˜q™DÑ  Ñ" 1Ñ$Ð$rv   c                 óÂ  • U S-  n[        XX65      n[        X‡U5      n[        [        XHU5      X65      u  pš[        X—U5      n	[        X§U5      n
[	        [        XXU5      [        X’U5      U5      n[        [	        X+U5      Xv5      n[        [	        X:U5      Xv5      n[	        [        XLU5      [        X]U5      U5      n[        [        X¶R                  /U5      Xv5      n[        [        XNU5      XÖ5      u  nn[        X÷U5      n[        UXv5      n[	        [        X^U5      [        XüU5      U5      n[        [        UUU5      Xv5      n[        [        X[U5      Xv5      nXÍUU4$ )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¦   Õ   sH  € ð8 	
ˆ1‰€Aä�A˜!Ó€AÜ�!˜Ó€Aä”7˜1 Ó# QÓ*�D€Aä�!˜Ó€AÜ�!˜Ó€Aä”˜˜aÓ ¤'¨!°Ó"2°AÓ6€AÜ”'˜! Ó" AÓ)€AÜ”'˜! Ó" AÓ)€Aä”˜˜aÓ ¤'¨!°Ó"2°AÓ6€AÜ”'˜!Ÿe™e˜W aÓ(¨!Ó/€Aä”7˜1 Ó# QÓ*�D€A€qä�!˜Ó€AÜ�!�QÓ€Aä”˜˜aÓ ¤'¨!°Ó"2°AÓ6€AÜ”'˜!˜Q Ó" AÓ)€AÜ”'˜! Ó" AÓ)€Aà��Aˆ:Ðrv   c           
      ó¶  • [        U5      n[        X5      nUS:X  a1  [        XR                  X`U-  5      S   U5      n[	        XpU-  U5      /$ U nUS-  n	[        [        [        U5      5      5      n
[        U/U 5      nUSU	  H  n[        U[        XÀ5      X5      nM     [        X)   U 5      nX)S-   S  H  n[        U[        XÀ5      X5      nM     [        X½X5      u  pïn[        X°5      n[        XÐ5      n[        Xà5      n[        Xð5      n[        SU
S-   5       H  n[        X�X½XïU5      US-  su  p½pïnM     [        XUSU	 X45      [        XX)S X45      -   $ )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­     sq  € ô. 	ˆF‹€AÜ	�‹€BàˆAƒvÜ˜1Ÿg™g b¨Q©$Ó/°Ñ2°AÓ6ˆÜ˜1 ™d AÓ&Ð(Ð(à	€AØ	ˆQ‰€AÜŒE”%˜“(‹OÓ€Aä˜"˜˜qÓ!€Aà�b�q‹zˆÜ�1Ô& sÓ.°Ó5Šñ ô 	˜™ AÓ&€Aà˜!‘e�f‹~ˆÜ�1Ô& sÓ.°Ó5Šñ ô �q˜QÓ"�G€Aˆ!ä�qÓ€AÜ�qÓ€AÜ�qÓ€AÜ�qÓ€Aä�1�a˜!‘eŽ_ˆÜ,¨Q°1¸¸qÓAÀ1ÀaÁ4ˆ‰ˆˆq’añ ô ˜a F¨2¨A J°Ó5Ü
˜Q 6¨" :¨qÓ
4ñ5ð 5rv   c                 ó8   • XS-  :”  a  X-
  nU(       d  gX-  S:H  $ )Nr|   Tr   r~   )Úfcrr   Úpls      rt   Ú_test_plr·   G  s$   € Ø�‰7ƒ{Ø‰FˆÞØØ‰6�Q‰;Ðrv   c           
      óF  • [        U 5      nUS:X  a  U /$ SSKJn  U S   n[        X5      n[	        X5      n[        [        UR                  U" US-   5      5      SU-  -  U-  U-  5      5      n[        US-   SU-  -  USU-  S-
  -  -  5      n[        [        S[        U5      -  5      5      n	[        SU	-  [        U	5      -  5      n
/ n[        SU
S-   5       HŠ  nU" U5      (       a  Xl-  S:X  a  M  UR                  U5      n[        X5      n[        XÜU5      (       d  MI  [        XÜU5      S   nUR!                  XÎ45        [#        U5      S:  d  [#        U5      S:”  d  MŠ    O   [%        US	 S
9u  nn[        [        [        SU-  S-   U5      5      5      nU Vs/ s H  n['        UU5      PM     nn[)        XðUUU5      n[        [#        U5      5      n[+        U5      n/ SnnUU-  nSU-  [#        U5      ::  Ga•  [-        UU5       GHj  nUS:X  a0  SnU H  nUUU   S   -  nM     UU-  n[/        UUU5      (       d  M9  OOU/nU H  n[1        UUU   U5      nM     [3        UUU5      n[5        UU5      S   nUS   nU(       a  UU-  S:w  a  M‰  U/n[+        U5      nUU-
  nUS:X  a)  U/nU H  n[1        UUU   U5      nM     [3        UUU5      nU H  n[1        UUU   U5      nM     [3        UUU5      n[7        WU5      n [7        UU5      n!U U!-  U::  d  GM  UnU Vs/ s H  nUU;  d  M  UPM     nn[5        UU5      S   n[5        UU5      S   n UR!                  U5        [	        X5      n  O   US-  nSU-  [#        U5      ::  a  GM•  UU /-   $ s  snf s  snf )z4Factor primitive square-free polynomials in `Z[x]`. rh   r   )Úisprimeéÿÿÿÿr|   é   é   é   c                 ó   • [        U S   5      $ )Nrh   )r¨   )Úxs    rt   Ú<lambda>Ú#dup_zz_zassenhaus.<locals>.<lambda>p  s   € ¤3 q¨¡t¤9rv   )Ú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Ó#ˆä˜˜q×!Ñ!ÙÜ˜a QÓ'¨Ñ*ˆØ	�‰�"�ÔÜˆu‹:˜‹?œc !›f q�jÙñ "ô �!Ñ,Ñ-�G€A€täŒE”$�q˜‘s˜Q‘w Ó"Ó#Ó$€Aá/3Ó4ªt¨Œ~˜b !Ö$©t€GÐ4ä˜1 ¨!¨QÓ/€Aä”S˜“V‹}€HÜˆH‹€AØ�QˆQ€GØ	
ˆA‰€Bà
ˆA‰#”�Q“Œ-Ü˜ 1×%ˆ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‰} Ö!Ø�Ù'/Ó>¢x !°1¸A±:ŸA¡x�Ð>ä! ! QÓ'¨Ñ*�Ü! ! QÓ'¨Ñ*�à—‘˜qÔ!Ü˜1“L�áñe &ðh �‰FˆAðk ˆA‰#”�Q“Ž-ðn �a�S‰=ÐùòA 5ùòh ?s   ÆNÌ%
NÌ3Nc                 óì   • [        X5      n[        X5      n[        U SS U5      nU(       aH  SSKJn  U" [        U5      5      nUR                  5        H  nX'-  (       d  M  X7S-  -  (       d  M    g   gg)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Þ   ·  sc   € ä	�‹€BÜ	�‹€Bä�q˜˜�u˜aÓ €DæÝ+Ùœ˜T›Ó#ˆà—‘–ˆAØ—‘˜R Q¡$ŸY™YÙò ð	 rv   c                 óâ  • UR                   (       a   XR                  5       p[        XU5      n OUR                  (       d  g[        X5      n[        X5      nUS:w  d  US:w  a  US:w  a  gU(       d%  [        X5      u  pgXaR                  :w  d  XpS4/:w  a  g[        U 5      n/ / p©[        USS5       H  nU	R                  SX   5        M     [        US-
  SS5       H  nU
R                  SX   5        M     [        [        U	5      U5      n	[        [        U
5      U5      n
[        U	[        U
SU5      U5      nUR!                  [        XÁ5      5      (       a  [#        XÁ5      nXÀ:X  a  g[%        X5      n	UR!                  [        X‘5      5      (       a  [#        X‘5      n	XÉ:X  a  ['        X‘5      (       a  g[)        XÁ5      n[        XÑ5      U:X  a  ['        XÑ5      (       a  gg! [         a     gf = f)a   
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ð	Ø—z‘z“|�Ü˜A 1Ó%‰Að �W�WØä	�‹€BÜ	�‹€Bà	ˆQƒw�2˜“8  a£ØæÜ(¨Ó.‰ˆà—E‘E‹>˜W¨Q¨¨Ó0Øä�1‹€AØˆr€qä�1�b˜"ÖˆØ	�‰��A‘DÖñ ô �1�q‘5˜"˜bÖ!ˆØ	�‰��A‘DÖñ "ô 	”	˜!“˜aÓ €AÜ”	˜!“˜aÓ €Aä�”:˜a  AÓ&¨Ó*€Aà‡}�}”V˜A“\×"Ñ"Ü�A‹MˆàƒvØä�1Ó€Aà‡}�}”V˜A“\×"Ñ"Ü�A‹MˆàƒvÔ" 1×(Ñ(Øä�QÓ€Aäˆqƒ}˜ÓÔ.¨q×4Ñ4Øàøôe ó 	Ùð	ús   “G! Ç!
G.Ç-G.c                 óÒ   • SSK Jn  UR                  UR                  * /nU" U 5      R                  5        H-  u  pE[	        [        X4U5      X15      n[        X4US-
  -  U5      nM/     U$ )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í     s_   € å'Ø	
�‰�—‘�ˆ€Aá˜!“×"Ñ"Ö$‰ˆÜ”K  aÓ(¨!Ó/ˆÜ˜˜q 1™u™: qÓ)Šñ %ð €Hrv   c                 ó†  • SSK Jn  UR                  UR                  * //nU" U 5      R                  5        H|  u  pEU Vs/ s H  n[	        [        XdU5      Xa5      PM     nnUR                  U5        [        SU5       H0  nU V	s/ s H  n	[        X”U5      PM     nn	UR                  U5        M2     M~     U$ s  snf s  sn	f )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 !¨Ó*¨AÖ1¹1ˆÐ>Ø	�‰�Œä�q˜!–ˆAÙ01Ó3²¨1”+˜a AÖ&±ˆAÐ3Ø�H‰H�QŽKó ñ	 %ð €Hùò ?ùò 4s   Á  B9ÂB>c                 ó\  • [        X5      [        X5      p2[        U 5      S::  a  gUS:w  d  US;  a  g[        S U SS  5       5      (       a  g[        U 5      n[	        XA5      nUR                  U5      (       d  U$ / n[	        SU-  U5       H  nXu;  d  M
  UR                  U5        M     U$ )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   ó8   #   • U  H  n[        U5      v •  M     g 7f)N)Úboolr   s     rt   r‚   Ú+dup_zz_cyclotomic_factor.<locals>.<genexpr>P  s   é € Ð
&šg˜Œ4��8ˆ8šgù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£   € ô$ ˜“œv a›|ˆ$ä�!ƒ}˜ÓØàˆqƒy�D Ó'Øä
Ñ
&˜a  "™gÓ
&×&Ñ&Øä�1‹€AÜ! !Ó'€Aà�8‰8�D�>‰>Øˆàˆä*¨1¨Q©3°Ö2ˆAØ�zØ—‘˜–ñ 3ð ˆrv   c                 óH  • [        X5      u  p#[        U5      n[        X15      S:  a  U* [        X15      p2US::  a  U/ 4$ US:X  a  X#/4$ [	        S5      (       a  [        X15      (       a  X#/4$ Sn[	        S5      (       a  [        X15      nUc  [        X15      nU[        USS94$ )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Ó!�G€Dä�1‹€Aäˆaƒ|�aÓØ�%œ ›ˆaàˆAƒvØ�RˆxˆØ	
ˆa‹Ø�SˆyÐäÐ(×)Ñ)Ü ×%Ñ%Ø˜�9Ðà€GäÐ$×%Ñ%Ü*¨1Ó0ˆà�Ü# AÓ)ˆà”˜w°Ñ7Ð7Ð7rv   c                 óZ  • [         S:X  a\  [        U SSS2   5      nUR                  5       u  p4U VVs/ s H  u  pVUR                  5       SSS2   U4PM     nnnU[	        U5      4$ [        X5      u  p7[        U5      n[        Xq5      S:  a  U* [        Xq5      psUS::  a  U/ 4$ US:X  a  X7S4/4$ [        S5      (       a  [        Xq5      (       a  X7S4/4$ [        Xq5      nSn	[        S5      (       a  [        Xq5      n	U	c  [        Xq5      n	[        X	U5      n[        X5        X44$ s  snnf )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    s6  € ô\ �wÓÜ˜A™d ˜d™GÓ$ˆØŸ™Ó(‰ˆÙ=DÔEºW±°�C—J‘J“L¡ 2 Ñ&¨Ó,¹WˆÑEØ”] 7Ó+Ð+Ð+ä˜AÓ!�G€Dä�1‹€Aäˆaƒ|�aÓØ�%œ ›ˆaàˆAƒvØ�RˆxˆØ	
ˆa‹Ø˜!�f�Xˆ~ÐäÐ(×)Ñ)Ü ×%Ñ%Ø˜a˜&˜�>Ð!ä�QÓ€AØ€AäÐ$×%Ñ%Ü$ QÓ*ˆà�yÜ˜aÓ#ˆä   qÓ)€Gä�qÔ"àˆ=ÐùóA Fs   ³$D'c                 óü   • X-  /nU  Hm  n[        U5      n[        U5       H?  nUS:w  a  UR                  Xe5      nXV-  nUS:w  a  M  UR                  U5      (       d  M>      g   UR	                  U5        Mo     US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˜!“K�Ø‘F�ð �q•&ð �x‰x˜�{‹{Úñ "ð 	�‰�aÖñ ð �!�"ˆ:Ðrv   c           
      ó¦  • [        [        X5      X4S-
  U5      (       d  [        S5      e[        XXE5      n[        Xe5      (       d  [        S5      e[	        Xe5      u  pxUR                  [        X…5      5      (       a  U* [        X…5      p‡US-
  n	U V
Vs/ s H  u  p«[        X£X•5      PM     nn
n[        XÇX%5      nUb  XxU4$ [        S5      es  snn
f )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À   € äœ › q¨a©%°×3Ñ3Ü˜yÓ)Ð)ä�a˜AÓ!€Aä�Q�?‰?Ü˜yÓ)Ð)ä˜Ó�D€Aà‡}�}”V˜A“\×"Ñ"Øˆr”7˜1“=ˆ1à	ˆA‰€Aá01Ô3²©¨Œ-˜˜aÖ
#±€AÑ3Ü   rÓ-€Aà�}Ø�Qˆwˆä˜yÓ)Ð)ùó 	4s   ÂCc                 ó
  • / S/[        U5      -  US-
  p©nU H£  n[        X§5      n[        X·5      U-  n[        [	        [        U5      5      5       HU  nSX>   X   snnu  nnUU-  (       d  UU-  US-   pýUU-  (       d  M  US:w  d  M8  [        U[        UXúU5      X§5      SsoÉU'   MW     UR                  U5        M¥     [        U	5      (       d  [        e/ / nn[        X„5       H’  u  pË[        XÅX§5      n[        X·5      nUR                  U5      (       a  UU-  nO+UR                  UU5      nUU-  UU-  nn[        X½U5      X--  p+[        UUX§5      nUR                  U5        UR                  U5        M”     UR                  U5      (       a  U UU4$ / / nn[        UU5       H<  u  pËUR                  [        XÂX§5      5        UR                  [        X²SU5      5        M>     [        X[        U5      S-
  -  Xg5      n U UU4$ )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ˆ!€AãˆÜ�A‹MˆÜ�1‹L˜‰Oˆäœ%¤ A£›-Ö(ˆAØ˜a™d A¡DˆLˆAˆq‘&�1�aà˜1—uØ˜!‘t˜Q ™U�1ð ˜1—u‘uð �A�vÜ! !¤W¨Q°°aÓ%8¸!Ó?À���Q“4ñ )ð 	
�‰�Žñ ô ˆq�6‰6ÜÐà�ˆ€Bä�A–	‰ˆÜ˜! Ó%ˆÜ�A‹\ˆà�8‰8�B�<‰<Ø�Q‘‰Bà—‘�b˜!“ˆAØ�q‘D˜"˜a™%ˆrˆAÜ" 1¨Ó+¨R©Uˆrä˜1˜b !Ó'ˆà
�	‰	�!ŒØ
�	‰	�!Žñ ð  	‡x�x�‡|�|Ø�"�bˆyÐà�2ˆ€Cä�B˜–‰ˆØ�
‰
”> !¨Ó.Ô/Ø�
‰
”> !¨¨AÓ.Ö/ñ ô 	�qœs 1›v¨™zÑ*¨AÓ1€Aàˆc�3ˆ;Ðrv   c           
      óö  • [        U 5      S:X  aw  U u  pE[        XB5      n[        XR5      n[        XvX#5      u  p‰n
[        X�U5      n[        X‘U5      n	[	        X†X#5      u  p¸[        X›XrU5      n	[        X‚5      n[        X’5      n	X‰/nU$ U S   /n
[        U SS 5       H"  nU
R                  S[        XjS   U5      5        M$     / S//pí[        X
5       H>  u  pg[        Xv/US   / SUSU5      u  p˜UR                  U	5        UR                  U5        M@     / XÞS   /-   pÜ[        XÐ5       HN  u  p†[        X‚5      n[        Xb5      n[        [        X�U5      XbU5      n[        Xò5      nUR                  U5        MP     U$ )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�ƒ{Ø‰ˆä˜QÓ"ˆÜ˜QÓ"ˆä˜1 Ó&‰ˆˆaä�a˜AÓˆÜ�a˜AÓˆä�a˜AÓ!‰ˆä�q˜Q 1Ó%ˆä˜1Ó ˆÜ˜1Ó ˆà�ˆð2 €Mð/ ˆr‰UˆGˆä˜!˜A˜b˜'Ö"ˆAØ�H‰H�Qœ  Q¡4¨Ó+Ö,ñ #ð �Q�C�5ˆ1ä˜–I‰DˆAÜ% q f¨a°©e°R¸¸A¸qÀ!ÓD‰DˆAØ�H‰H�QŒKØ�H‰H�QŽKñ ð
 ˜˜r™U˜G™�ä˜–I‰DˆAÜ  Ó&ˆAÜ  Ó&ˆAä”y  qÓ)¨1°Ó3ˆAÜ˜qÓ$ˆAà�M‰M˜!Öñ ð €Mrv   c           
      ó´  • U(       d�  U  Vs/ s H  n/ PM     nn[        U5      n	[        U5       Ha  u  p«U(       d  M  [        X	U
-
  XF5      n[        [        XŒ5      5       H,  u  nu  pï[	        XûU5      n[        [        XïU5      XF5      X�'   M.     Mc     U$ [        U5      n	[        XU5      nUS   USS nn/ / nnU  H<  nUR                  [        UUXV5      5        UR                  [        UUX•U5      5        M>     [        UUX•U5      nUS-
  n[        UUX#UUU5      nU Vs/ s H  n[        USUU5      PM     nn[        UU5       H  u  nn[        XUXV5      nM     [        XXV5      n[!        UR"                  U* /X–5      n[%        X–5      n['        SU5       GH
  n[)        X5      (       a    Où[+        UUXV5      n[-        UUS-   UX•U5      n[)        UU5      (       a  MH  [/        UUR1                  U" U5      S-   5      UU5      n[        UUX#UUU5      n[        U5       H   u  p¯[+        [        USUU5      UXV5      XÊ'   M"     [        [        XŒ5      5       H  u  n
u  pï[3        XïXV5      XŠ'   M     [        UU5       H  u  nn[        XUXV5      nM     [        XXV5      nGM     U Vs/ s H  n[        XäXV5      PM     nnU$ s  snf s  snf s  snf )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ˆä! !ž‰HˆAÞÙä" 1¨!¡e¨QÓ2ˆAä&¤s¨1£yÖ1‘	�‘6�AÜ" 1¨QÓ/�Ü ¤¨¨qÓ!1°1Ó8�“ó 2ñ %ðv €Hôc �‹FˆÜ�q˜QÓˆà�‰u�a˜˜�fˆ1ˆØ�2ˆ1ˆãˆAØ�H‰H”W˜Q  1Ó(Ô)Ø�H‰H”[  A q¨QÓ/Ö0ñ ô ˜˜1˜a AÓ&ˆà�‰Eˆä˜q ! Q¨1¨a°Ó3ˆÙ-.Ó0ªQ¨Œi˜˜1˜a Ö#©QˆÐ0ä˜˜1–I‰DˆAˆqÜ˜A ! QÓ*ŠAñ ô ˜Q 1Ó(ˆä�a—e‘e˜a˜R�[ !Ó'ˆÜ�A‹Mˆä�q˜!—ˆAÜ˜!×ÑÙä˜˜1˜aÓ#ˆAÜ   A¨¡E¨1¨a°AÓ6ˆAä˜a ×#Ó#Ü" 1 a§k¡k±!°A³$¸±(Ó&;¸QÀÓB�Ü& q¨!¨Q°1°a¸Ó;�ä% ažL‘D�AÜ"¤9¨Q°°1°aÓ#8¸!¸QÓB�A“Dñ )ô "+¬3¨q«9Ö!5‘I�A‘v˜Ü" 1¨Ó.�A“Dñ "6ô    1žI‘D�A�qÜ# A¨!¨QÓ2’Añ &ô % Q¨1Ó0“ñ) ñ, 56Ó7²A¨qÔ˜q QÖ*±AˆÐ7à€Hùò} ùò8 1ùò@ 8s   ŒKÄ%KÊ1Kc                 ó8  • U /[        U5      US-
  p˜n[        U5      n[        [        USS 5      5       H:  u  p«[	        US   X¸U
-
  XZ-
  U5      nUR                  S[        XÄXš-
  U5      5        M<     [        [        X5      SS 5      n[        [        SUS-   5      Xs5       GHÜ  u  pìn[        U5      US-
  nnUSUS-
   X>S-
  S nn[        [        X5      5       H?  u  n
u  nn[        [        UUX–5      UUS-
  U5      nU/[        USS SUS-
  U5      -   X'   MA     [        UR                  U* /UU5      n[        UU5      n[!        U[#        UUU5      UU5      n[%        UUU5      n[        SU5       GH  n['        UU5      (       a    Mí  [)        UUUU5      n[+        UUS-   UUUU5      n['        UUS-
  5      (       a  MO  [-        UUR/                  U" U5      S-   5      US-
  U5      n[1        UUUXÔUS-
  U5      n[        [        UU5      5       H7  u  n
u  nn[3        U[        USUS-
  U5      UUU5      n[        UUUU5      X'   M9     [!        U[#        UUU5      UU5      n[        UUUU5      nGM     GMß     [#        XU5      U :w  a  [4        eU$ )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ˆ!€AäˆQ‹€Aäœ( 1 Q R 5›/Ö*‰ˆÜ˜˜!™˜a Q¡¨©¨qÓ1ˆØ	�‰�Ô$ Q¨1©5°!Ó4Ö5ñ +ô 	ŒO˜AÓ! ! "Ð%Ó&€Aä”u˜Q  A¡“¨×-‰ˆˆaÜ�A‹w˜˜A™ˆ1ˆà��!�a‘%ˆy˜! ™E˜F˜)ˆ1ˆä#¤C¨£JÖ/‰JˆA‰w��2Ü!¤-°°A°qÓ"<¸aÀÀQÁÈÓJˆBØ�4œ) A a b E¨1¨a°!©e°QÓ7Ñ7ˆA‹Dñ 0ô �a—e‘e˜a˜R�[ ! QÓ'ˆÜ�A�q‹Mˆä�A”z ! Q¨Ó*¨A¨qÓ1ˆä˜1˜a Ó#ˆä�q˜"—ˆ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°°a¸!±e¸QÓ?�ä!*¬3¨q°!«9Ö!5‘I�A‘v˜˜1Ü# A¤y°°A°q¸1±u¸aÓ'@À!ÀQÈÓJ�AÜ+¨A¨q°!°QÓ7�A“Dñ "6ô ˜Aœz¨!¨Q°Ó2°A°qÓ9�Ü$ Q¨¨1¨aÓ0“ô! ñ! .ôD �!˜Ó˜aÓÜÐàˆrv   c           
      óî  • SSK Jn  [        U5      n[        [	        X5      US-
  U5      u  px[        XU5      n	U" U" U	5      5      n
Uc  US:X  a  SnOSn[        5       / UR                  /U-  S4u  p¼pÞ [        XX}X5      u  nnn[        UU5      u  nn[        U5      nUS:X  a  U /$ UUUUU4/n[        S5      n[        S5      n[        S5      n[        U5      U:  aó  [        U5       HÎ  n[        U5       Vs/ s H  nU" U" U* U5      5      PM     nn[        U5      U;  a  UR                  [        U5      5        OMX   [        XX}X5      u  nnn[        UU5      u  nn[        U5      nUb  UU:w  a  UU:  a  / UpìOM™  OUnUS:X  a  U /s  $ UR!                  UUUUU45        [        U5      U:X  d  MÎ    O   UU-  n[        U5      U:  a  Mó  S	u  nnnU H*  u  n      n[#        UU5      nUb  UU:  a  UnUnOUnUS-  nM,     UU   u  nnnnnU n [%        XUUUXÑU5      u  n nn['        U UUXÚX5      n/ nU HO  n [-        XU5      u  nn UR/                  [1        XU5      5      (       a  [3        XU5      n UR!                  U 5        MQ     U$ ! [         a     GNðf = fs  snf ! [         a     GMÌ  f = f! [(         a.    [        S
5      (       a  [+        UXUS-   5      s $ [)        S5      ef = f)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   r5  r5  ß  sc  € õ< (ä�t‹n€Gäœ& ›,¨¨A©¨qÓ1�E€Bä˜a AÓ&€AÙ	‰)�A‹,‹€Aà
�{Ø�‹6Ø‰CàˆCä ›U B¨¯©¨°©
°DÐ8Ñ€G�aðÜ*¨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¸ÀÓ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°°Q¸¸1ÀÓC‰ˆˆ1ˆbÜ,¨Q°°2°q¸QÓBˆð €FãˆÜ# A¨!Ó,‰ˆˆ1à�=‰=œ q¨QÓ/×0Ñ0Ü˜˜aÓ ˆAà�‰�aÖñ ð €Møôc ó Úðüò <øô $ó Ûðûô\ ó GÜÐ(×)Ñ)Ü˜v q¨S°1©WÓ5Ò5ä#ØEóGð Gð	GúsB   Á53J Â)J Ã<J%ÅJ*È#J< Ê
J"Ê!J"Ê*
J9Ê8J9Ê<*K4Ë(K4c                 ó  • U(       d  [        X5      $ [        X5      (       a  UR                  / 4$ [        XU5      u  p4[	        XAU5      S:  a  U* [        XAU5      pC[        S [        XA5       5       5      (       a  U/ 4$ [        XAU5      u  pT/ n[        XA5      S:”  a$  [        XAU5      n[        XAU5      n[        XX5      n[        XQS-
  U5      S    H  u  pHUR                  SU/U45        M     [        XU5        U[!        U5      4$ )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   ó*   #   • U  H	  oS :*  v •  M     g7f©r   Nr~   ©r€   rŠ   s     rt   r‚   Ú dmp_zz_factor.<locals>.<genexpr>œ  ó   é € Ð
1Ò0�a�Ž6Ò0ùr„   rh   )r  r   r2  rJ   r   r)   r  r   rQ   r   rX   r5  ry   r1  rå   rZ   r[   )	rl   rx   rn   rÿ   r›   r¡   rm   r¢   rq   s	            rt   r1  r1  m  s  € öH Ü˜QÓ"Ð"ä�!×ÑØ�v‰v�rˆzÐä" 1¨Ó+�G€Dä�Q˜1Ó Ó!Ø�%œ  qÓ)ˆaä
Ñ
1œ?¨1Ô0Ó
1×1Ñ1Ø�Rˆxˆä˜˜qÓ!�D€Aà€Gä�!Ó˜!ÓÜ˜˜qÓ!ˆÜ˜˜aÓ ˆÜ$ Q¨1Ó0ˆä˜a Q¡¨Ó*¨1Ô-‰ˆØ�‰�q˜A˜3 ˜(Ö#ñ .ô �q˜WÔ%à”˜wÓ'Ð'Ð'rv   c           	      óÌ   • UR                  5       n[        XU5      n [        X5      u  p4U VVs/ s H  u  pV[        XRU5      U4PM     nnnUR                  X25      nX44$ s  snnf )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_factorrL  °  sh   € ð 
×	Ñ	Ó	€BÜ�A˜2Ó€AÜ$ QÓ+�N€EÙ;BÔCº7±°”˜C RÓ(¨!Ó,¹7€GÑCØ�J‰J�uÓ!€EØˆ>Ðùó Ds   ¯A c                 ó&  • UR                  5       n[        XU5      n [        X5      u  p4/ nU HK  u  pg[        Xb5      u  p‰[        X’U5      n
[	        U
SU5      u  p¼X;U-  -  X‡-  -  nUR                  XÇ45        MM     UnUR                  X25      nX44$ )z>Factor univariate polynomials into irreducibles in `ZZ_I[x]`. r   )Ú	get_fieldr   rL  rB   rJ   rk   rÅ   )rl   ré   rK  rê   rm   Únew_factorsr  rÒ   Ú	fac_denomÚfac_numÚfac_num_ZZ_IÚcontentÚfac_prims                rt   Údup_zz_i_factorrU  »  s¢   € ð 
�‰‹€BÜ�A˜2Ó€AÜ$ QÓ+�N€Eà€KÛ‰ˆä-¨cÓ6Ñˆ	Ü" 7°Ó3ˆÜ0°¸qÀ"ÓEÑˆà A™Ñ%¨)©.Ñ8ˆØ×Ñ˜H˜=Ö)ñ ð €GØ�J‰J�uÓ!€EØˆ>Ðrv   c           
      óÎ   • UR                  5       n[        XX#5      n [        XU5      u  pEU VVs/ s H  u  pg[        XaX25      U4PM     nnnUR                  XC5      nXE4$ s  snnf )z@Factor multivariate polynomials into irreducibles in `QQ_I[X]`. )rJ  r   Údmp_factor_listrÅ   )rl   rx   ré   rK  rê   rm   r  rÒ   s           rt   Údmp_qq_i_factorrX  Ñ  sj   € ð 
×	Ñ	Ó	€BÜ�A˜"Ó!€AÜ$ Q¨2Ó.�N€EÙ>EÔFºg±F°C”˜C BÓ+¨QÓ/¹g€GÑFØ�J‰J�uÓ!€EØˆ>Ðùó Gs   °A!c                 ó(  • UR                  5       n[        XX#5      n [        XU5      u  pE/ nU HK  u  px[        XqU5      u  pš[        X¡X25      n[	        X±U5      u  pÍXLU-  -  X˜-  -  nUR                  XØ45        MM     UnUR                  XC5      nXE4$ )z@Factor multivariate polynomials into irreducibles in `ZZ_I[X]`. )rN  r   rX  rC   rJ   rk   rÅ   )rl   rx   ré   rK  rê   rm   rO  r  rÒ   rP  rQ  rR  rS  rT  s                 rt   Údmp_zz_i_factorrZ  Ü  s¤   € ð 
�‰‹€BÜ�A˜"Ó!€AÜ$ Q¨2Ó.�N€Eà€KÛ‰ˆä-¨c°bÓ9Ñˆ	Ü" 7¨rÓ6ˆÜ0°À"ÓEÑˆà A™Ñ%¨)©.Ñ8ˆØ×Ñ˜H˜=Ö)ñ ð €GØ�J‰J�uÓ!€EØˆ>Ðrv   c                 óö  • [        U 5      [        X5      p2[        X5      n US::  a  U/ 4$ US:X  a  X0S4/4$ [        X5      U p@[	        X5      u  pVn[        XqR                  5      n[        U5      S:X  a  X0U[        U 5      -  4/4$ XQR                  -  n	[        U5       H=  u  n
u  p¼[        X±R                  U5      n[        XÖU5      u  pÜn[        XÙU5      nXØU
'   M?     [        XHU5      n[        XH5        X84$ )aŽ  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 !›<€rä�!‹€AàˆAƒvØ�2ˆvˆØˆAƒvØ˜�F�8ˆ|Ðä˜Ó˜q€qÜ˜1Ó �G€Aˆ!ä% a¯©Ó/€Gä
ˆ7ƒ|�qÓØ˜œ: a›=Ñ(Ð)Ð*Ð*Ð*à	�&‰&‰€Aä# GÖ,‰ˆ‰;ˆFÜ˜§¡ qÓ)ˆÜ  aÓ(‰ˆˆaÜ�a˜AÓˆØ�‹
ñ	 -ô ! ¨QÓ/€Gä�qÔ"àˆ;Ðrv   c                 ó>  • U(       d  [        X5      $ [        XU5      n[        XU5      n [        S [	        X5       5       5      (       a  U/ 4$ [        XU5      U p@[        XU5      u  pVn[        XqUR                  5      n[        U5      S:X  a  U /nOk[        U5       H\  u  n	u  p«[        X¡UR                  U5      n[        XÆX5      u  pËnU Vs/ s H  oÝUR                  -  PM     nn[        XÎX5      nXÈU	'   M^     [        XHX5      n[!        XAU5        X?4$ s  snf )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   ó*   #   • U  H	  oS :*  v •  M     g7frE  r~   rF  s     rt   r‚   Ú!dmp_ext_factor.<locals>.<genexpr>‰  rH  r„   rh   )r_  r   rH   r  r   rX   rV   Údmp_factor_list_includer]  r¨   r   r   rS   r^  rO   ry   rZ   )rl   rx   rn   r�   r±   r�   r›   rs   rm   rÒ   rp   r³   rœ   Úsir”   ro   s                   rt   Údmp_ext_factorre  T  s  € ö^ Ü˜aÓ#Ð#ä	�q˜QÓ	€BÜ˜˜qÓ!€Aä
Ñ
1œ?¨1Ô0Ó
1×1Ñ1Ø�2ˆvˆä˜˜aÓ  !€qÜ˜1 Ó#�G€Aˆ!ä% a¨A¯E©EÓ2€Gä
ˆ7ƒ|�qÓØ�#‰ä'¨Ö0‰NˆA‰{�Ü˜F q§u¡u¨aÓ0ˆAÜ# A¨!Ó/‰GˆA�!Ù%&Ó'¢Q˜r�A—F‘F”¡QˆAÐ'Ü˜! Ó%ˆAØ�A‹Jñ 1ô   ¨AÓ1€Fä�q˜VÔ$àˆ:Ðùò (s   ÃDc                 ó  • [        XUR                  5      n [        XR                  UR                  5      u  p#[	        U5       H"  u  nu  p[        XR                  U5      U4X4'   M$     UR                  X!R                  5      U4$ )z2Factor univariate polynomials over finite fields. )r   r]  r   r6  r   rÅ   )rl   rn   rê   rm   rÒ   rq   s         rt   Údup_gf_factorrg  ¢  sn   € ä�A˜!Ÿ%™%Ó €Aä˜q§%¡%¨¯©Ó/�N€Eä˜wÖ'‰	ˆ‰6ˆAÜ! !§U¡U¨AÓ.°Ð2ˆ‹
ñ (ð �9‰9�UŸE™EÓ" GÐ+Ð+rv   c                 ó   • [        S5      e)z4Factor multivariate polynomials over finite fields. z+multivariate polynomials over finite fields)ÚNotImplementedError)rl   rx   rn   s      rt   Údmp_gf_factorrj  ®  s   € ä
ÐKÓ
LÐLrv   c                 óŠ  • [        X5      u  p [        X5      u  p0UR                  (       a  [        X5      u  pEGOJUR                  (       a  [        X5      u  pEGO*UR                  (       a  [        X5      u  pEGO
UR                  (       a  [        X5      u  pEGOêUR                  (       d  XR                  5       p[        XU5      n OSnUR                  (       a+  UR                  5       n[        XU5      u  p€[        XU5      n OUnUR                   (       a  [#        X5      u  pEO‰UR$                  (       aj  ['        U SU5      u  p	[)        X	UR*                  5      u  pE[-        U5       H  u  n
u  p[/        X	U5      U4XZ'   M     UR1                  XGR*                  5      nO[3        SU-  5      eUR                  (       aÃ  [-        U5       H  u  n
u  p[        XU5      U4XZ'   M     UR1                  XG5      nUR5                  UW5      nU(       ar  [-        U5       HP  u  n
u  p[7        X5      n[9        XU5      n [        XU5      n X4XZ'   UR;                  XAR=                  XË5      5      nMR     UR1                  XA5      nUnU(       a*  UR?                  SUR@                  URB                  /U45        XC-  [E        U5      4$ )ú;Factor univariate polynomials into irreducibles in `K[x]`. Nr   ú#factorization not supported over %s)#r&   rI   Úis_FiniteFieldrg  Úis_Algebraicr_  Úis_GaussianRingrU  Úis_GaussianFieldrL  Úis_ExactÚ	get_exactr   Úis_Fieldrâ   rB   rã   r  Úis_Polyr$   rW  r]  r   r%   rÅ   r^   Úquor;   r@   ÚmulÚpowrå   r™   r2  r[   )rl   ré   r"  rÿ   rê   rm   Ú
K0_inexactrn   Údenomrx   rÒ   rq   Úmax_norms                rt   rä   rä   ³  sH  € ä˜Ó�D€AÜ˜AÓ"�G€Dà	××Ü& qÓ-‰ˆ‰wØ	��Ü'¨Ó.‰ˆ‰wØ	×	×	Ü(¨Ó/‰ˆ‰wØ	×	×	Ü(¨Ó/‰ˆ‰wà�{�{Ø§¡£˜Ü˜A¨2Ó.‰AàˆJà�;�;Ø—‘“ˆAä'¨¨qÓ1‰HˆEÜ˜A 1Ó%‰AàˆAà�7�7Ü*¨1Ó0‰NˆE�7Ø�Y�YÜ˜a  AÓ&‰DˆAä,¨Q°1·5±5Ó9‰NˆEä& wÖ/‘	�‘6�AÜ'¨¨aÓ0°!Ð4�“
ñ 0ð —I‘I˜e§U¡UÓ+‰EäÐCÀbÑHÓIÐIà�;�;Ü& wÖ/‘	�‘6�AÜ)¨!°Ó3°QÐ7�“
ñ 0ð —J‘J˜uÓ(ˆEØ—F‘F˜5 %Ó(ˆEæÜ!*¨7Ö!3‘I�A‘v˜Ü+¨AÓ2�HÜ& q°BÓ7�AÜ# A¨:Ó6�AØ"# �G‘JØŸF™F 5¯&©&°Ó*=Ó>’Eñ "4ð #×*Ñ*¨5Ó5�Ø�æØ�‰�q˜BŸF™F B§G¡GÐ,¨aÐ0Ô1à‰:”} WÓ-Ð-Ð-rv   c                 óŒ   • [        X5      u  p#U(       d  [        U/5      S4/$ [        US   S   X!5      nXCS   S   4/USS -   $ )rl  rh   r   N)rä   r   r>   )rl   rn   rê   rm   r›   s        rt   r\  r\  õ  sY   € ä$ QÓ*�N€EæÜ˜E˜7Ó# QÐ'Ð(Ð(ä˜7 1™: a™=¨%Ó3ˆØ˜A‘J˜q‘MÐ"Ð# g¨a¨b kÑ1Ð1rv   c           	      ó†  • U(       d  [        X5      $ [        XU5      u  p0[        XU5      u  p@UR                  (       a  [	        XU5      u  pVGO„UR
                  (       a  [        XU5      u  pVGOcUR                  (       a  [        XU5      u  pVGOBUR                  (       a  [        XU5      u  pVGO!UR                  (       d  X"R                  5       p'[        XXr5      n OSnUR                  (       a+  UR                  5       n[!        XX(5      u  p�[        XX(5      n OUnUR"                  (       aE  [%        XU5      u  p n['        XU5      u  pV[)        U5       H  u  nu  p[+        X
X¸5      U4Xl'   M     OˆUR,                  (       ai  [/        XU5      u  p[1        XUR2                  5      u  pV[)        U5       H  u  nu  p[5        XU5      U4Xl'   M     UR7                  XXR2                  5      nO[9        SU-  5      eUR                  (       aÄ  [)        U5       H  u  nu  p[        XX‚5      U4Xl'   M     UR7                  XX5      nUR;                  UW	5      nU(       as  [)        U5       HQ  u  nu  p[=        XU5      n[?        XX5      n [        XX'5      n X4Xl'   URA                  XRRC                  Xí5      5      nMS     UR7                  XR5      nUn[)        [E        U5      5       HH  u  pÏU(       d  M  SX-
  -  S-   SU-  -   URF                  0nURI                  S[K        UX5      U45        MJ     XT-  [M        U5      4$ )ú=Factor multivariate polynomials into irreducibles in `K[X]`. Nrm  )r   )rh   r   )'rä   r'   rJ   rn  rj  ro  re  rp  rZ  rq  rX  rr  rs  r   rt  râ   rC   rã   r"   r1  r   r#   ru  r$   rW  r]  r%   rÅ   r^   rv  r<   rA   rw  rx  r  r™   rå   r   r[   )rl   rx   ré   r  rÿ   rê   rm   ry  rn   rz  Úlevelsr  rÒ   rq   r{  r"  Úterms                    rt   rW  rW     sÐ  € æÜ˜qÓ%Ð%ä˜˜rÓ"�D€AÜ" 1¨Ó,�G€Dà	××Ü& q¨RÓ0‰ˆ‰wØ	��Ü'¨¨bÓ1‰ˆ‰wØ	×	×	Ü(¨¨rÓ2‰ˆ‰wØ	×	×	Ü(¨¨rÓ2‰ˆ‰wà�{�{Ø§¡£˜Ü˜A *Ó1‰AàˆJà�;�;Ø—‘“ˆAä'¨¨bÓ4‰HˆEÜ˜A "Ó(‰AàˆAà�7�7Ü& q¨QÓ/‰LˆF�qÜ*¨1°Ó3‰NˆEä& wÖ/‘	�‘6�AÜ)¨!°QÓ:¸AÐ>�“
ò 0à�Y�YÜ˜a AÓ&‰DˆAä,¨Q°1·5±5Ó9‰NˆEä& wÖ/‘	�‘6�AÜ'¨¨aÓ0°!Ð4�“
ñ 0ð —I‘I˜e§U¡UÓ+‰EäÐCÀbÑHÓIÐIà�;�;Ü& wÖ/‘	�‘6�AÜ)¨!°Ó6¸Ð:�“
ñ 0ð —J‘J˜uÓ(ˆEØ—F‘F˜5 %Ó(ˆEæÜ!*¨7Ö!3‘I�A‘v˜Ü+¨A°"Ó5�HÜ& q°AÓ:�AÜ# A¨"Ó9�AØ"# �G‘JØŸF™F 5¯&©&°Ó*=Ó>’Eñ "4ð #×*Ñ*¨5Ó5�Ø�äœ( 1›+Ö&‰ˆÞÙà�a‘e‘˜tÑ# d¨1¡fÑ,¨b¯f©fÐ5ˆØ�‰�qœ=¨¨qÓ5°qÐ9Ö:ñ 'ð ‰:”} WÓ-Ð-Ð-rv   c                 ó²   • U(       d  [        X5      $ [        XU5      u  p4U(       d  [        X15      S4/$ [        US   S   X1U5      nXTS   S   4/USS -   $ )r~  rh   r   N)r\  rW  r    r?   )rl   rx   rn   rê   rm   r›   s         rt   rc  rc  M  si   € æÜ& qÓ,Ð,ä$ Q¨1Ó-�N€EæÜ˜EÓ% qÐ)Ð*Ð*ä˜7 1™: a™=¨%°AÓ6ˆØ˜A‘J˜q‘MÐ"Ð# g¨a¨b kÑ1Ð1rv   c                 ó   • [        U SU5      $ )zS
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                 óf   • [        XU5      u  p4U(       d  g[        U5      S:”  a  gUS   u  p5US:H  $ )zU
Returns ``True`` if a multivariate polynomial ``f`` has no factors
over its domain.
Trh   Fr   )rW  r¨   )rl   rx   rn   r³   rm   rq   s         rt   rƒ  rƒ  c  s;   € ô
 !  qÓ)�J€AæØÜ	ˆW‹˜Ó	Øà�q‰z‰ˆØ�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*  r5  r1  rL  rU  rX  rZ  r_  re  rg  rj  rä   r\  rW  rc  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   