ó
    Š*£h¿P  ã                   óN  • S r SSKJr  SSKrSSKJrJr  SSKJr  SSK	J
r
  SSKJr  SSKJr  SS	KJr  SS
KJrJr  SSKJrJrJrJr  SSKJr  SSKJrJrJrJr  SSK J!r!  SSK"J#r#   " S S\5      r$  SS jr%S r&SS jr'SS jr(SS jr)SS jr*SS jr+SS jr,\#SSSS.S j5       r-g) zà
Compute Galois groups of polynomials.

We use algorithms from [1], with some modifications to use lookup tables for
resolvents.

References
==========

.. [1] Cohen, H. *A Course in Computational Algebraic Number Theory*.

é    )ÚdefaultdictN)ÚDummyÚsymbols)Ú	is_square)ÚZZ)Ú
dup_random)Údup_eval)Údup_discriminant)Údup_factor_listÚdup_irreducible_p)ÚGaloisGroupExceptionÚget_resolvent_by_lookupÚdefine_resolventsÚ	Resolvent)Úcoeff_search)ÚPolyÚpoly_from_exprÚPolificationFailedÚComputationFailed)Ú	dup_sqf_p)Úpublicc                   ó   • \ rS rSrSrg)ÚMaxTriesExceptioné#   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__r   ó    Úb/home/mande/repo/quber/.venv/lib/python3.13/site-packages/sympy/polys/numberfields/galoisgroups.pyr   r   #   s   † Úr!   r   é   c                 ól  ^• [        S5      nU R                  5       nUc
  [        5       nUR                  U R                  5        U(       a  0 mSnSnU4S jn	[        U5       GHC  n
U(       a€  U	" W5      n[        U5      n[        S U 5       5      nX�-   W:”  a)  US:X  a  US-  nUS-
  nOUS-  nU	" U5      n[        U5      n[        S5      /U Vs/ s H  n[        U5      PM     sn-   nO?[        U
S-  S-   U5      n[        R                  " SUS-
  5      n[        UU* U[        5      n[        XðR                  5      n[        U R                  UU-
  5      U5      nUR                  U;  d  GM  [!        UR                  R#                  5       [        5      (       d  GM@  UU4s  $    [$        es  snf )a…  
Given a univariate, monic, irreducible polynomial over the integers, find
another such polynomial defining the same number field.

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

See Alg 6.3.4 of [1].

Parameters
==========

T : Poly
    The given polynomial
max_coeff : int
    When choosing a transformation as part of the process,
    keep the coeffs between plus and minus this.
max_tries : int
    Consider at most this many transformations.
history : set, None, optional (default=None)
    Pass a set of ``Poly.rep``'s in order to prevent any of these
    polynomials from being returned as the polynomial ``U`` i.e. the
    transformation of the given polynomial *T*. The given poly *T* will
    automatically be added to this set, before we try to find a new one.
fixed_order : bool, default True
    If ``True``, work through candidate transformations A(x) in a fixed
    order, from small coeffs to large, resulting in deterministic behavior.
    If ``False``, the A(x) are chosen randomly, while still working our way
    up from small coefficients to larger ones.

Returns
=======

Pair ``(A, U)``

    ``A`` and ``U`` are ``Poly``, ``A`` is the
    transformation, and ``U`` is the transformed polynomial that defines
    the same number field as *T*. The polynomial ``A`` maps the roots of
    *T* to the roots of ``U``.

Raises
======

MaxTriesException
    if could not find a polynomial before exceeding *max_tries*.

ÚXé   é   c                 óJ   >• TR                  U [        U S5      5      nUTU '   U$ )Né   )Úgetr   )ÚdegreeÚgenÚcoeff_generatorss     €r"   Úget_coeff_generatorÚ9tschirnhausen_transformation.<locals>.get_coeff_generatorc   s,   ø€ Ø×"Ñ" 6¬<¸ÀÓ+BÓCˆØ#&Ð˜Ñ Øˆ
r!   c              3   ó8   #   • U  H  n[        U5      v •  M     g 7f)N)Úabs)Ú.0Úcs     r"   Ú	<genexpr>Ú/tschirnhausen_transformation.<locals>.<genexpr>x   s   é € Ð+¢F˜q”C˜—F�F¢Fùs   ‚r)   é   )r   r+   ÚsetÚaddÚrepÚrangeÚnextÚmaxr   ÚminÚrandomÚrandintr   r   r,   Ú	resultantr   Úto_listr   )ÚTÚ	max_coeffÚ	max_triesÚhistoryÚfixed_orderr%   ÚnÚdeg_coeff_sumÚcurrent_degreer.   Úir,   ÚcoeffsÚmr3   ÚaÚCÚdÚAÚUr-   s                       @r"   Útschirnhausen_transformationrR   '   sŒ  ø€ ôb 	ˆc‹
€AØ	�‰‹
€AØ�Ü“%ˆØ‡K�K�—‘ÔæØÐØˆØˆõô
 �9×ˆö ñ & nÓ5ˆCÜ˜#“YˆFÜÑ+¡FÓ+Ó+ˆAØÑ! MÓ1Ø! QÓ&Ø! QÑ&�MØ%2°QÑ%6‘Nà" aÑ'�NÙ)¨.Ó9�Ü˜c›�Ü�A“�©&Ó1ª& Qœ2˜až5©&Ñ1Ñ1‰Aô �A�q‘D˜1‘H˜iÓ(ˆAÜ—’˜q ! a¡%Ó(ˆAÜ˜1˜q˜b !¤RÓ(ˆAä�—E‘E‹NˆÜ�—‘˜Q ™UÓ# QÓ'ˆØ�5‰5˜Ö¤I¨a¯e©e¯m©m«o¼r×$BÔ$BØ�a�4ŠKñM ôN Ðùò 2s   ÃF1c                 ó‚   • [        U [        5      (       a  U R                  5       O[        U [        5      n[        U5      $ )z?Convenience to check if a Poly or dup has square discriminant. )Ú
isinstancer   Údiscriminantr
   r   r   )rB   rO   s     r"   Úhas_square_discrV   ’   s.   € ä& q¬$×/Ñ/ˆ�‰ÔÔ5EÀaÌÓ5L€AÜ�Q‹<Ðr!   Fc                 óf   • SSK Jn  [        U 5      (       a  UR                  S4$ UR                  S4$ )zj
Compute the Galois group of a polynomial of degree 3.

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

Uses Prop 6.3.5 of [1].

r   )ÚS3TransitiveSubgroupsTF)Úsympy.combinatorics.galoisrX   rV   ÚA3ÚS3)rB   rD   Ú	randomizerX   s       r"   Ú_galois_group_degree_3r]   ˜   s9   € õ AÜ0?À×0BÑ0BÐ"×%Ñ% tÐ,ð 4Ø'×*Ñ*¨EÐ2ð4r!   c           	      ó  • SSK Jn  SSKJn  [	        S5      nUS   US   -  US   US   -  -   nU" S5      U" S5      " SS5      U" S5      " SS5      /n[        XeU5      nUS   US   S-  -  US   US   S-  -  -   US   US   S-  -  -   US   US   S-  -  -   n	U" S5      U" S5      " SS5      /n
[        5       n[        U5       GH6  nUS:”  a  [        XUU(       + S9u  pÐUR                  U S	S
9u  pín[        U[        5      (       d  MF  [        U 5      nUc'  U(       a  UR                  S	4s  $ UR                  S4s  $ U(       a  UR                  S	4s  $ X   nU	R!                  [#        UU" U5      5      S	S9nU
 Vs/ s H  nUU-  U-  PM     nn[        UUU5      nUR                  U 5      u  n  n[%        U[        5      nUS:X  a  GM	  ['        U5      (       a  UR(                  S4s  $ UR*                  S4s  $    [,        es  snf )z–
Compute the Galois group of a polynomial of degree 4.

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

Follows Alg 6.3.7 of [1], using a pure root approximation approach.

r   ©ÚPermutation©ÚS4TransitiveSubgroupszX0 X1 X2 X3r'   r)   r&   ©rD   rE   rF   T)Úfind_integer_rootF©Úsimultaneous)Ú sympy.combinatorics.permutationsr`   rY   rb   r   r   r7   r:   rR   Úeval_for_polyr   r   rV   ÚA4ÚS4ÚVÚsubsÚzipr
   r   ÚC4ÚD4r   )rB   rD   r\   r`   rb   r%   ÚF1Ús1ÚR1ÚF2_preÚs2_prerE   rJ   Ú_ÚR_dupÚi0Úsq_discÚsigmaÚF2ÚtauÚs2ÚR2rO   s                          r"   Ú"_galois_group_degree_4_root_approxr~   §   sN  € õ =Ý@ä�Ó€Að
 
ˆ1‰ˆa�‰d‰�Q�q‘T˜!˜A™$‘YÑ	€Bá�A‹Ù�AŒ�q˜!ÓÙ�AŒ�q˜!Óð
€Bô
 
�2˜"Ó	€Bð
 ˆq‰T�!�A‘$˜‘'‰\˜A˜a™D  1¡ q¡™LÑ(¨1¨Q©4°°!±°a±©<Ñ7¸!¸A¹$¸qÀ¹tÀQ¹w¹,ÑF€Fá�A‹Ù�AŒ�q˜!Óð€Fô
 ‹e€GÜ�9×ˆØˆq‹5ä/°Ø8?Ø@I¼MñK‰DˆAð ×'Ñ'¨¸TÐ'ÐB‰ˆ�"ä˜¤×#Ñ#Ùô " !Ó$ˆà‰:ö 9@Ð*×-Ñ-¨tÐ4ò <Ø/×2Ñ2°EÐ:ò<ö à)×+Ñ+¨TÐ2Ò2ð ‘ˆð �[‰[œ˜Q¡ a£Ó)¸ˆ[Ð=ˆÙ)/Ó0ª #ˆe�C‰i˜Œo©ˆÐ0Ü�r˜1˜bÓ!ˆØ×&Ñ& qÓ)‰ˆˆq�!Ü˜U¤BÓ'ˆà�‹6ÚÜ�Q�<‰<Ø)×,Ñ,¨eÐ4Ò4à)×,Ñ,¨eÐ4Ò4ñ] ô` Ðùò 1s   ÆHc                 óP  • SSK Jn  [        5       n[        U5       H8  n[	        U S5      n[        U[        5      (       a    O[        XUU(       + S9u  ppM:     [        e[        U[        5      n[        [        US    V	V
s/ s H  u  pš[        U	5      S-
  /U
-  PM     sn
n	/ 5      5      nUS/:X  a,  [        U 5      (       a  UR                  S4$ UR                  S4$ U/ SQ:X  a  UR                   S4$ U/ S	Q:X  a  UR"                  S4$ US
S/:X  d   eUR$                  S4$ s  sn
n	f )zŽ
Compute the Galois group of a polynomial of degree 4.

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

Based on Alg 6.3.6 of [1], but uses resolvent coeff lookup.

r   ra   rc   r)   é   TF©r)   r)   é   )r'   r'   r'   r'   r‚   )rY   rb   r7   r:   r   r   r   rR   r   r   ÚsortedÚsumÚlenrV   ri   rj   rn   rk   ro   )rB   rD   r\   rb   rE   rJ   rv   ru   ÚflÚrÚeÚLs               r"   Ú_galois_group_degree_4_lookuprŠ   þ   s=  € õ Aä‹e€GÜ�9ÖˆÜ'¨¨1Ó-ˆÜ�UœB×ÑÙÜ+¨AØ4;Ø<E¼ñG‰ˆ‰1ñ	 ô  Ðô 
˜¤Ó	#€BÜŒsØ%'¨¢UôÚ%*™T˜QŒˆQ‹�!‰ˆ�qÔ¡Uòà	óó 	€Að 	ˆQˆCƒxÜ4CÀA×4FÑ4FÐ&×)Ñ)¨4Ð0ð 	4Ø'×*Ñ*¨EÐ2ð	4ð 	ŠIƒ~Ø%×(Ñ(¨%Ð0Ð0àŠIƒ~Ø%×'Ñ'¨Ð.Ð.à��A�‹;Ðˆ;Ø!×$Ñ$ eÐ,Ð,ùós   Â D"c           	      óÌ  • SSK Jn  SSKJn  [	        S5      n[        5       nUS   u  pxn	UR                  " U6 n[        XuU	5      n
[        5       nSn[        U5       GHú  nUS:”  a  [        XUU(       + S9u  p€[        U S5      n[        U[        5      (       d  M?  U(       d^  [        U 5      n[        U[        5      (       a'  U(       a  UR                   S	4s  $ UR"                  S4s  $ U(       d  UR$                  S4s  $ S	nU
R'                  U 5      nUR)                  5        H  u  nn[+        UU[        5      (       a  M    O   UnUS   US   S
-  -  US   US
   S
-  -  -   US
   US   S
-  -  -   US   US   S
-  -  -   US   US   S
-  -  -   nU" S5      U" S5      " SS5      " S
S5      /nWnU	U   nUR-                  [/        UU" U5      5      S	S9nU Vs/ s H  nUU-  U-  PM     nn[        UUU5      nUR1                  U 5      u  n  n[3        U[        5      nUS:X  a  GMÍ  [5        U5      (       a  UR6                  S	4s  $ UR8                  S	4s  $    [:        es  snf )zÄ
Compute the Galois group of a polynomial of degree 5.

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

Based on Alg 6.3.9 of [1], but uses a hybrid approach, combining resolvent
coeff lookup, with root approximation.

r   ©ÚS5TransitiveSubgroupsr_   zX0,X1,X2,X3,X4)r6   r)   Frc   r)   Tr'   r&   r‚   re   )rY   r�   rg   r`   r   r   Úas_exprr   r7   r:   rR   r   r   r   rV   r   ÚA5ÚS5ÚM20Ú round_roots_to_integers_for_polyÚitemsr	   rl   rm   rh   r
   r   ÚC5ÚD5r   )rB   rD   r\   r�   r`   ÚX5ÚresÚF51ru   Ús51ÚR51rE   Úreached_second_stagerJ   ÚR51_duprx   Úrounded_rootsÚpermutation_indexÚcandidate_rootr%   rs   rt   rw   ry   rz   r{   r|   r}   rv   rO   s                                 r"   Ú_galois_group_degree_5_hybridr    )  s—  € õ AÝ<ä	Ð!Ó	"€BÜ
Ó
€CØ�f‘+�K€CˆCØ
�+Š+�rÐ
€CÜ
�C˜SÓ
!€Cä‹e€GØ ÐÜ�9×ˆØˆq‹5Ü/°Ø8?Ø@I¼MñK‰DˆAô *¨!¨QÓ/ˆÜ˜¤"×%Ñ%Ùö
 $Ü% aÓ(ˆGä  ¬"×-Ñ-Þ<CÐ.×1Ñ1°4Ð8ò @Ø3×6Ñ6¸Ð>ò@ö Ø-×1Ñ1°5Ð9Ò9ð  $Ðð ×<Ñ<¸QÓ?ˆð 2?×1DÑ1DÖ1FÑ-Ð˜~Ü˜G ^´R×8Ó8Ùñ 2Gð ˆØ�1‘�a˜‘d˜A‘g‘  !¡ Q q¡T¨1¡W¡Ñ,¨q°©t°A°a±D¸!±G©|Ñ;¸aÀ¹dÀ1ÀQÁ4ÈÁ7¹lÑJÈQÈqÉTÐRSÐTUÑRVÐXYÑRYÉ\ÑYˆá˜‹NÙ˜ŒN˜1˜aÔ   AÓ&ð
ˆð
 ˆØ�B‘ˆØ�[‰[œ˜Q¡ a£Ó)¸ˆ[Ð=ˆÙ)/Ó0ª #ˆe�C‰i˜Œo©ˆÐ0Ü�r˜1˜bÓ!ˆØ×&Ñ& qÓ)‰ˆˆq�!Ü˜U¤BÓ'ˆà�‹6ÚÜ�Q�<‰<Ø)×,Ñ,¨dÐ3Ò3à)×,Ñ,¨dÐ3Ò3ñm ôp Ðùò 1s   ÇI!c                 ó$  • SSK Jn  U n[        5       n[        U5       H8  n[	        U S5      n[        U[        5      (       a    O[        XUU(       + S9u  p€M:     [        e[        U 5      n	[        U[        5      (       a#  U	(       a  UR                  S4$ UR                  S4$ U	(       d  UR                  S4$ [        U[        R                  " U5      S9R!                  5       S   n
[#        U
5      S:X  a  UR$                  S4$ UR&                  S4$ )	z¾
Compute the Galois group of a polynomial of degree 5.

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

Based on Alg 6.3.9 of [1], but uses resolvent coeff lookup, plus
factorization over an algebraic extension.

r   rŒ   r)   rc   TF)Údomainr6   )rY   r�   r7   r:   r   r   r   rR   r   rV   r   r�   r�   r‘   r   Úalg_field_from_polyÚfactor_listr…   r”   r•   )rB   rD   r\   r�   Ú_TrE   rJ   rv   ru   rx   r†   s              r"   Ú(_galois_group_degree_5_lookup_ext_factorr¦   z  s
  € õ Aà	
€Bä‹e€GÜ�9ÖˆÜ'¨¨1Ó-ˆÜ�UœB×ÑÙÜ+¨AØ4;Ø<E¼ñG‰ˆ‰1ñ	 ô  Ðä˜aÓ €Gä˜¤×#Ñ#Þ4;Ð&×)Ñ)¨4Ð0ð 	8Ø+×.Ñ.°Ð6ð	8ö Ø%×)Ñ)¨5Ð1Ð1ô
 
ˆbœ×/Ò/°Ó3Ñ	4×	@Ñ	@Ó	BÀ1Ñ	E€BÜ
ˆ2ƒw�!ƒ|Ø%×(Ñ(¨$Ð/Ð/à%×(Ñ(¨$Ð/Ð/r!   c                 ó   • SSK Jn  [        5       n[        U5       H8  n[	        U S5      n[        U[        5      (       a    O[        XUU(       + S9u  ppM:     [        e[        U[        5      n[        [        5      n	US    H%  u  p§U	[        U
5      S-
     R                  U
5        M'     [        [        U	R!                  5        VVs/ s H  u  p¼U/[        U5      -  PM     snn/ 5      5      n[#        U 5      nU/ SQ:X  a4  U	S   S   n[#        U5      (       a  UR$                  S4$ UR&                  S4$ USS/:X  aH  U	S   u  nn[#        U5      =(       d    [#        U5      nU(       a  UR(                  S4$ UR*                  S4$ USS	/:X  aI  U(       a  UR,                  S
4$ U	S	   S   n[#        U5      (       a  UR.                  S4$ UR0                  S4$ U/ SQ:X  a#  U(       a  UR2                  S
4$ UR4                  S4$ USS/:X  a#  U(       a  UR6                  S
4$ UR8                  S4$ U/ SQ:X  a  UR:                  S4$ US/:X  d   e[        5       n[        U5       H8  n[	        U S5      n[        U[        5      (       a    O[        XUU(       + S9u  ppM:     [        e[#        U 5      n[=        U[        5      (       a#  U(       a  UR>                  S
4$ UR@                  S4$ U(       a  URB                  S
4$ URD                  S4$ s  snnf )z�
Compute the Galois group of a polynomial of degree 6.

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

Based on Alg 6.3.10 of [1], but uses resolvent coeff lookup.

r   )ÚS6TransitiveSubgroupsr)   rc   )r)   r'   r&   r&   Fr'   r‚   Tr�   r6   )r)   r)   r)   r&   r€   )#rY   r¨   r7   r:   r   r   r   rR   r   r   r   Úlistr…   Úappendrƒ   r„   r“   rV   ÚC6ÚD6ÚG18ÚG36mÚS4pÚA4xC2ÚS4xC2ri   ÚS4mÚPSL2F5ÚPGL2F5r[   r   ÚA6ÚS6ÚG36pÚG72)rB   rD   r\   r¨   rE   rJ   rv   ru   r†   Úfactors_by_degr‡   rO   Úffr‰   ÚT_has_sq_discÚf1Úf2Ú
any_squares                     r"   Ú_galois_group_degree_6_lookupr¿   §  sF  € õ Aô ‹e€GÜ�9ÖˆÜ'¨¨1Ó-ˆÜ�UœB×ÑÙÜ+¨AØ4;Ø<E¼ñG‰ˆ‰1ñ	 ô  Ðä	˜¤Ó	#€Bô !¤Ó&€NØ�1”‰ˆØ”s˜1“v ‘zÑ"×)Ñ)¨!Ö,ñ ô 	ŒsØ#1×#7Ñ#7Ô#9ôÚ#9™%˜!ˆˆŒc�"‹gŒÑ#9òà	óó 	€Aô $ AÓ&€MàŠIƒ~Ø˜AÑ˜qÑ!ˆÜ5DÀR×5HÑ5HÐ&×)Ñ)¨5Ð1ð 	8Ø+×.Ñ.°Ð6ð	8ð 
ˆq�!ˆf‹Ø Ñ"‰ˆˆBÜ$ RÓ(×?¬O¸BÓ,?ˆ
Þ6@Ð&×*Ñ*¨EÐ2ð 	:Ø+×0Ñ0°%Ð8ð	:ð 
ˆq�!ˆf‹ÞØ)×-Ñ-¨tÐ4Ð4à Ñ" 1Ñ%ˆBÜ<KÈB×<OÑ<OÐ*×0Ñ0°%Ð8ð ?Ø/×5Ñ5°uÐ=ð?ð 
Ši‹Þ4AÐ&×)Ñ)¨4Ð0ð 	9Ø+×/Ñ/°Ð7ð	9ð 
ˆq�!ˆf‹Þ8EÐ&×-Ñ-¨tÐ4ð 	<Ø+×2Ñ2°EÐ:ð	<ð 
ŠlÓ	Ø%×(Ñ(¨%Ð0Ð0à��‹8€Oˆ8ô ‹e€GÜ�9ÖˆÜ'¨¨1Ó-ˆÜ�UœB×ÑÙÜ+¨AØ4;Ø<E¼ñG‰ˆ‰1ñ	 ô  Ðä# AÓ&€Mä˜¤×#Ñ#Þ4AÐ&×)Ñ)¨4Ð0ð 	8Ø+×.Ñ.°Ð6ð	8ö 7DÐ&×+Ñ+¨TÐ2ð 	9Ø+×/Ñ/°Ð7ð	9ùóss   ÃL
©Úby_namerD   r\   c                ó°   • U=(       d    / nU=(       d    0 n [        U /UQ70 UD6u  pgUR                  XUS9$ ! [         a  n[        SSU5      eSnAff = f)al
  
Compute the Galois group for polynomials *f* up to degree 6.

Examples
========

>>> from sympy import galois_group
>>> from sympy.abc import x
>>> f = x**4 + 1
>>> G, alt = galois_group(f)
>>> print(G)
PermutationGroup([
(0 1)(2 3),
(0 2)(1 3)])

The group is returned along with a boolean, indicating whether it is
contained in the alternating group $A_n$, where $n$ is the degree of *T*.
Along with other group properties, this can help determine which group it
is:

>>> alt
True
>>> G.order()
4

Alternatively, the group can be returned by name:

>>> G_name, _ = galois_group(f, by_name=True)
>>> print(G_name)
S4TransitiveSubgroups.V

The group itself can then be obtained by calling the name's
``get_perm_group()`` method:

>>> G_name.get_perm_group()
PermutationGroup([
(0 1)(2 3),
(0 2)(1 3)])

Group names are values of the enum classes
:py:class:`sympy.combinatorics.galois.S1TransitiveSubgroups`,
:py:class:`sympy.combinatorics.galois.S2TransitiveSubgroups`,
etc.

Parameters
==========

f : Expr
    Irreducible polynomial over :ref:`ZZ` or :ref:`QQ`, whose Galois group
    is to be determined.
gens : optional list of symbols
    For converting *f* to Poly, and will be passed on to the
    :py:func:`~.poly_from_expr` function.
by_name : bool, default False
    If ``True``, the Galois group will be returned by name.
    Otherwise it will be returned as a :py:class:`~.PermutationGroup`.
max_tries : int, default 30
    Make at most this many attempts in those steps that involve
    generating Tschirnhausen transformations.
randomize : bool, default False
    If ``True``, then use random coefficients when generating Tschirnhausen
    transformations. Otherwise try transformations in a fixed order. Both
    approaches start with small coefficients and degrees and work upward.
args : optional
    For converting *f* to Poly, and will be passed on to the
    :py:func:`~.poly_from_expr` function.

Returns
=======

Pair ``(G, alt)``
    The first element ``G`` indicates the Galois group. It is an instance
    of one of the :py:class:`sympy.combinatorics.galois.S1TransitiveSubgroups`
    :py:class:`sympy.combinatorics.galois.S2TransitiveSubgroups`, etc. enum
    classes if *by_name* was ``True``, and a :py:class:`~.PermutationGroup`
    if ``False``.

    The second element is a boolean, saying whether the group is contained
    in the alternating group $A_n$ ($n$ the degree of *T*).

Raises
======

ValueError
    if *f* is of an unsupported degree.

MaxTriesException
    if could not complete before exceeding *max_tries* in those steps
    that involve generating Tschirnhausen transformations.

See Also
========

.Poly.galois_group

Úgalois_groupr)   NrÀ   )r   r   r   rÃ   )	ÚfrÁ   rD   r\   ÚgensÚargsÚFÚoptÚexcs	            r"   rÃ   rÃ     sp   € ðD �:�2€DØ�:�2€Dð8Ü Ð1 DÒ1¨DÑ1‰ˆð �>‰> 'Ø$-ð ð /ð /øô ó 8Ü °°3Ó7Ð7ûð8ús   ˜9 ¹
AÁAÁA)é
   r#   NT)r#   F).Ú__doc__Úcollectionsr   r>   Úsympy.core.symbolr   r   Úsympy.ntheory.primetestr   Úsympy.polys.domainsr   Úsympy.polys.densebasicr   Úsympy.polys.densetoolsr	   Úsympy.polys.euclidtoolsr
   Úsympy.polys.factortoolsr   r   Ú*sympy.polys.numberfields.galois_resolventsr   r   r   r   Ú"sympy.polys.numberfields.utilitiesr   Úsympy.polys.polytoolsr   r   r   r   Úsympy.polys.sqfreetoolsr   Úsympy.utilitiesr   r   rR   rV   r]   r~   rŠ   r    r¦   r¿   rÃ   r   r!   r"   Ú<module>rÙ      s®   ðñõ $Û ç ,Ý -Ý "Ý -Ý +Ý 4ß F÷ó õ <÷Jó Jå -Ý "ôÐ,ô ð IMØ-1ôhòVô4ôTôn(-ôVNôb*0ôZZ9ðz Ø#(°BÀ%ô j/ó ñj/r!   