Ë
    7^(h¿P  ã                   ó>  — d Z ddlmZ ddlZddlmZmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZ dd	lmZ dd
lmZmZ ddlmZmZmZmZ ddlmZ ddlmZmZmZmZ ddl m!Z! ddl"m#Z#  G d„ de«      Z$	 	 dd„Z%d„ Z&dd„Z'dd„Z(dd„Z)dd„Z*dd„Z+dd„Z,e#ddddœd„«       Z-y) 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                   ó   — e Zd Zy)ÚMaxTriesExceptionN)Ú__name__Ú
__module__Ú__qualname__© ó    úc/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/polys/numberfields/galoisgroups.pyr   r   #   s   „ Ør   r   é   c                 ó8  ‡— t        d«      }| j                  «       }|€
t        «       }|j                  | j                  «       |ri Šd}d}ˆfd„}	t        |«      D �]1  }
|r| |	«      }t        |«      }t        d„ |D «       «      }||z   kD  r(|dk(  r|dz  }|dz
  }n|dz  } |	|«      }t        |«      }t        d«      g|D �cg c]  }t        |«      ‘Œ c}z   }n>t        |
dz  dz   |«      }t        j                  d|dz
  «      }t        || |t        «      }t        || j                  «      }t        | j                  ||z
  «      |«      }|j                  |vs�Œt!        |j                  j#                  «       t        «      s�Œ.||fc S  t$        ‚c c}w )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   •— ‰j                  | t        | d«      «      }|‰| <   |S )Né   )Úgetr   )ÚdegreeÚgenÚcoeff_generatorss     €r   Úget_coeff_generatorz9tschirnhausen_transformation.<locals>.get_coeff_generatorc   s,   ø€ Ø×"Ñ" 6¬<¸ÀÓ+BÓCˆØ#&Ð˜Ñ Øˆ
r   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­w)N)Úabs)Ú.0Úcs     r   ú	<genexpr>z/tschirnhausen_transformation.<locals>.<genexpr>x   s   è ø€ Ò+˜q”C˜—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Úmr/   ÚaÚCÚdÚAÚUr*   s                       @r   Útschirnhausen_transformationrM   '   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ä��A—E‘E‹NˆÜ�—‘˜Q ™UÓ# QÓ'ˆØ�5‰5˜Ó¤I¨a¯e©e¯m©m«o¼rÖ$BØ�a�4ŠKðM&ôN Ðùò 2s   ÃFc                 óx   — t        | t        «      r| j                  «       nt        | t        «      }t        |«      S )z?Convenience to check if a Poly or dup has square discriminant. )Ú
isinstancer   Údiscriminantr
   r   r   )r=   rJ   s     r   Úhas_square_discrQ   ’   s+   € ä& q¬$Ô/ˆ�‰ÔÔ5EÀaÌÓ5L€AÜ�Q‹<Ðr   Fc                 ó\   — ddl m} t        | «      r|j                  dfS |j                  dfS )z~
    Compute the Galois group of a polynomial of degree 3.

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

    Uses Prop 6.3.5 of [1].

    r   )ÚS3TransitiveSubgroupsTF)Úsympy.combinatorics.galoisrS   rQ   ÚA3ÚS3)r=   r?   Ú	randomizerS   s       r   Ú_galois_group_degree_3rX   ˜   s6   € õ AÜ0?ÀÔ0BÐ"×%Ñ% tÐ,ð 4Ø'×*Ñ*¨EÐ2ð4r   c           	      óò  — ddl m} ddlm} t	        d«      }|d   |d   z  |d   |d   z  z   } |d«        |d«      dd«        |d«      dd«      g}t        |||«      }|d   |d   dz  z  |d   |d   dz  z  z   |d   |d   dz  z  z   |d   |d   dz  z  z   }	 |d«        |d«      dd«      g}
t        «       }t        |«      D �]"  }|dkD  rt        | ||| ¬«      \  }} |j                  | d	¬
«      \  }}}t        |t        «      sŒDt        | «      }|€"|r|j                  d	fc S |j                  dfc S |r|j                  d	fc S ||   }|	j!                  t#        | ||«      «      d	¬«      }|
D �cg c]
  }||z  |z  ‘Œ }}t        |||«      }|j                  | «      \  }}}t%        |t        «      }|dk(  rŒút'        |«      r|j(                  dfc S |j*                  dfc S  t,        ‚c c}w )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#   ©r?   r@   rA   T)Úfind_integer_rootF©Úsimultaneous)Ú sympy.combinatorics.permutationsr[   rT   r]   r   r   r2   r5   rM   Úeval_for_polyr   r   rQ   ÚA4ÚS4ÚVÚsubsÚzipr
   r   ÚC4ÚD4r   )r=   r?   rW   r[   r]   r"   ÚF1Ús1ÚR1ÚF2_preÚs2_prer@   rE   Ú_ÚR_dupÚi0Úsq_discÚsigmaÚF2ÚtauÚs2ÚR2rJ   s                          r   Ú"_galois_group_degree_4_root_approxry   §   s]  € õ =Ý@ä�Ó€Að
 
ˆ1‰ˆa�‰d‰�Q�q‘T˜!˜A™$‘YÑ	€Bá�A‹Ø‰�A‹�q˜!ÓØ‰�A‹�q˜!Óð
€Bô
 
�2�q˜"Ó	€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Óó .5ˆØˆqŠ5ä/°¸YØ8?Ø@I¸MôK‰DˆAˆqð ×'Ñ'¨¸TÐ'ÓB‰ˆˆq�"ä˜¤Ô#Øô " !Ó$ˆàˆ:ñ 9@Ð*×-Ñ-¨tÐ4ò <Ø/×2Ñ2°EÐ:ò<ñ à)×+Ñ+¨TÐ2Ò2ð �2‘ˆð �[‰[œ˜Q¡ a£Ó)¸ˆ[Ó=ˆØ)/Ö0 #ˆe�C‰i˜‹oÐ0ˆÐ0Ü�r˜1˜bÓ!ˆØ×&Ñ& qÓ)‰ˆˆq�!Ü˜U¤BÓ'ˆà�Š6ØÜ�QŒ<Ø)×,Ñ,¨eÐ4Ò4à)×,Ñ,¨eÐ4Ò4ð].5ô` Ðùò 1s   Å9G4c                 ó.  — ddl m} t        «       }t        |«      D ]3  }t	        | d«      }t        |t        «      r nt        | ||| ¬«      \  }} Œ5 t        ‚t        |t        «      }t        t        |d   D �	�
cg c]  \  }	}
t        |	«      dz
  g|
z  ‘Œ c}
}	g «      «      }|dgk(  r't        | «      r|j                  dfS |j                  dfS |g d¢k(  r|j                   dfS |g d	¢k(  r|j"                  dfS |d
dgk(  sJ ‚|j$                  dfS c c}
}	w )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   r\   r^   r&   é   TF©r&   r&   é   )r$   r$   r$   r$   r}   )rT   r]   r2   r5   r   r   r   rM   r   r   ÚsortedÚsumÚlenrQ   rd   re   ri   rf   rj   )r=   r?   rW   r]   r@   rE   rq   rp   Ú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÷Ù!˜Q ŒˆQ‹�!‰ˆ�qÓóà	óó 	€Að 	ˆQˆC‚xÜ4CÀAÔ4FÐ&×)Ñ)¨4Ð0ð 	4Ø'×*Ñ*¨EÐ2ð	4ð 	ŠI‚~Ø%×(Ñ(¨%Ð0Ð0àŠI‚~Ø%×'Ñ'¨Ð.Ð.à��A�Š;Ðˆ;Ø!×$Ñ$ eÐ,Ð,ùós   Á:Dc           	      ó~  — ddl m} ddlm} t	        d«      }t        «       }|d   \  }}}	 |j                  |Ž }t        |||	«      }
t        «       }d}t        |«      D �]Ò  }|dkD  rt        | ||| ¬«      \  }} t        | d«      }t        |t        «      sŒ9|sOt        | «      }t        |t        «      r"|r|j                   d	fc S |j"                  dfc S |s|j$                  dfc S d	}|
j'                  | «      }|j)                  «       D ]  \  }}t+        ||t        «      rŒ n |}|d   |d   d
z  z  |d   |d
   d
z  z  z   |d
   |d   d
z  z  z   |d   |d   d
z  z  z   |d   |d   d
z  z  z   } |d«         |d«      dd«      d
d«      g}}|	|   }|j-                  t/        | ||«      «      d	¬«      }|D �cg c]
  }||z  |z  ‘Œ }}t        |||«      }|j1                  | «      \  }}}t3        |t        «      }|dk(  r�Œªt5        |«      r|j6                  d	fc S |j8                  d	fc S  t:        ‚c c}w )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   ©ÚS5TransitiveSubgroupsrZ   zX0,X1,X2,X3,X4)r1   r&   Fr^   r&   Tr$   r#   r}   r`   )rT   rˆ   rb   r[   r   r   Úas_exprr   r2   r5   rM   r   r   r   rQ   r   ÚA5ÚS5ÚM20Ú round_roots_to_integers_for_polyÚitemsr	   rg   rh   rc   r
   r   ÚC5ÚD5r   )r=   r?   rW   rˆ   r[   ÚX5ÚresÚF51rp   Ús51ÚR51r@   Úreached_second_stagerE   ÚR51_duprs   Úrounded_rootsÚpermutation_indexÚcandidate_rootr"   rn   ro   rr   rt   ru   rv   rw   rx   rq   rJ   s                                 r   Ú_galois_group_degree_5_hybridr›   )  s¢  € õ AÝ<ä	Ð!Ó	"€BÜ
Ó
€CØ�f‘+�K€CˆˆCØ
ˆ#�+‰+�rÐ
€CÜ
�C˜˜SÓ
!€Cä‹e€GØ ÐÜ�9Óó 64ˆØˆqŠ5Ü/°¸YØ8?Ø@I¸MôK‰DˆAˆqô *¨!¨QÓ/ˆÜ˜¤"Ô%Øñ
 $Ü% aÓ(ˆGä  ¬"Ô-Ù<CÐ.×1Ñ1°4Ð8ò @Ø3×6Ñ6¸Ð>ò@ñ Ø-×1Ñ1°5Ð9Ò9ð  $Ðð ×<Ñ<¸QÓ?ˆð 2?×1DÑ1DÓ1Fò 	Ñ-Ð˜~Ü˜G ^´RÕ8Ùð	ð ˆØ�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‰K˜‹N˜1˜aÓ   AÓ&ð
ˆð
 ˆØ�B‘ˆØ�[‰[œ˜Q¡ a£Ó)¸ˆ[Ó=ˆØ)/Ö0 #ˆe�C‰i˜‹oÐ0ˆÐ0Ü�r˜1˜bÓ!ˆØ×&Ñ& qÓ)‰ˆˆq�!Ü˜U¤BÓ'ˆà�Š6ÙÜ�QŒ<Ø)×,Ñ,¨dÐ3Ò3à)×,Ñ,¨dÐ3Ò3ðm64ôp Ðùò 1s   Æ>H:c                 óü  — ddl m} | }t        «       }t        |«      D ]3  }t	        | d«      }t        |t        «      r nt        | ||| ¬«      \  }} Œ5 t        ‚t        | «      }	t        |t        «      r|	r|j                  dfS |j                  dfS |	s|j                  dfS t        |t        j                  |«      ¬«      j!                  «       d   }
t#        |
«      dk(  r|j$                  dfS |j&                  dfS )	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&   r^   TF)Údomainr1   )rT   rˆ   r2   r5   r   r   r   rM   r   rQ   r   rŠ   r‹   rŒ   r   Úalg_field_from_polyÚfactor_listr€   r�   r�   )r=   r?   rW   rˆ   Ú_Tr@   rE   rq   rp   rs   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                 ó�  — ddl m} t        «       }t        |«      D ]3  }t	        | d«      }t        |t        «      r nt        | ||| ¬«      \  }} Œ5 t        ‚t        |t        «      }t        t        «      }	|d   D ]%  \  }
}|	t        |
«      dz
     j                  |
«       Œ' t        t        |	j!                  «       D ��cg c]  \  }}|gt        |«      z  ‘Œ c}}g «      «      }t#        | «      }|g d¢k(  r/|	d   d   }t#        |«      r|j$                  dfS |j&                  dfS |ddgk(  r>|	d   \  }}t#        |«      xs t#        |«      }|r|j(                  dfS |j*                  dfS |dd	gk(  r?|r|j,                  d
fS |	d	   d   }t#        |«      r|j.                  dfS |j0                  dfS |g d¢k(  r|r|j2                  d
fS |j4                  dfS |ddgk(  r|r|j6                  d
fS |j8                  dfS |g d¢k(  r|j:                  dfS |dgk(  sJ ‚t        «       }t        |«      D ]3  }t	        | d«      }t        |t        «      r nt        | ||| ¬«      \  }} Œ5 t        ‚t#        | «      }t=        |t        «      r|r|j>                  d
fS |j@                  dfS |r|jB                  d
fS |jD                  dfS c c}}w )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&   r^   )r&   r$   r#   r#   Fr$   r}   Tr|   r1   )r&   r&   r&   r#   r{   )#rT   r£   r2   r5   r   r   r   rM   r   r   r   Úlistr€   Úappendr~   r   rŽ   rQ   ÚC6ÚD6ÚG18ÚG36mÚS4pÚA4xC2ÚS4xC2rd   ÚS4mÚPSL2F5ÚPGL2F5rV   r   ÚA6ÚS6ÚG36pÚG72)r=   r?   rW   r£   r@   rE   rq   rp   r�   Úfactors_by_degr‚   rJ   Úffr„   ÚT_has_sq_discÚf1Úf2Ú
any_squares                     r   Ú_galois_group_degree_6_lookuprº   §  sI  € õ Aô ‹e€GÜ�9Óò  ˆÜ'¨¨1Ó-ˆÜ�UœBÔÙÜ+¨A¸Ø4;Ø<E¸ôG‰ˆ‰1ð	 ô  Ðä	˜¤Ó	#€Bô !¤Ó&€NØ�1‘ò -‰ˆˆ1Ø”s˜1“v ‘zÑ"×)Ñ)¨!Õ,ð-ô 	ŒsØ#1×#7Ñ#7Ó#9÷Ù˜!˜RˆˆŒc�"‹g‹óà	óó 	€Aô $ AÓ&€MàŠI‚~Ø˜AÑ˜qÑ!ˆÜ5DÀRÔ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Ð*×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   ÃK©Úby_namer?   rW   c                ó¤   — |xs g }|xs i }	 t        | g|¢­i |¤Ž\  }}|j                  |||¬«      S # t        $ r}t        dd|«      ‚d}~ww xY w)a˜  
    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¼   r?   rW   ÚgensÚargsÚFÚoptÚexcs	            r   r¾   r¾     st   € ðD Š:�2€DØŠ:�2€Dð8Ü Ð1 DÒ1¨DÑ1‰ˆˆ3ð �>‰> '°YØ$-ð ó /ð /øô ò 8Ü °°3Ó7Ð7ûð8ús   Ž4 ´	A½A
Á
A)é
   r    NT)r    F).Ú__doc__Úcollectionsr   r9   Ú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   rM   rQ   rX   ry   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   