
    sg                     2   d Z ddlmZ ddlmZmZ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 ddlmZ d	 Zeej0                  d
fgedz  ez   dz   ej2                  dfgedz  edz  z   dez  z
  dz
  ej4                  d
fedz  dz   ej6                  dfgedz  edz  z   edz  z   ez   dz   ej8                  dfedz  dz   ej:                  d
fedz  dz
  ej<                  dfedz  dez  z   dz   ej>                  d
fedz  ez   dz   ej@                  dfgedz  edz  z   dedz  z  z
  dedz  z  z
  dez  z   dz   ejB                  d
fedz  dez  z
  dz   ejD                  d
fedz  dz   ejF                  dfedz  dez  z   dz   ejH                  d
fedz  ez
  dz   ejJ                  dfgedz  edz  z   edz  z   edz  z   edz  z   ez   dz   e	jL                  dfedz  dz   e	j6                  dfedz  dz   e	jN                  dfedz  dedz  z  z
  dz
  e	j>                  d
fedz  dedz  z  z   dz   e	jP                  dfedz  dedz  z  z
  dz   e	jR                  dfedz  dedz  z  z
  dz
  e	jT                  d
fedz  dedz  z  z
  dedz  z  z   dedz  z  z
  dedz  z  z   ez   dz
  e	jV                  dfedz  dedz  z  z   dz
  e	jX                  dfedz  dedz  z  z   dz   e	jZ                  dfedz  dedz  z  z   dedz  z  z   dedz  z  z   dedz  z  z   dez  z   dz   e	j\                  d
fedz  dedz  z  z   dedz  z  z   dedz  z  z   dedz  z  z   dez  z
  dz   e	j^                  dfedz  dedz  z  z   dedz  z  z   dedz  z  z   dez  z   dz
  e	j`                  d
fedz  dedz  z  z   dedz  z  z   edz  z   dez  z   dz   e	jb                  dfedz  d ez  z   dz
  e	jd                  d
fedz  ez   dz   e	jf                  dfgd!Z4d" Z5d# Z6d$ Z7d% Z8d& Z9d' Z:d( Z;y))*z#Tests for computing Galois groups.     )x)S1TransitiveSubgroupsS2TransitiveSubgroupsS3TransitiveSubgroupsS4TransitiveSubgroupsS5TransitiveSubgroupsS6TransitiveSubgroups)QQ)tschirnhausen_transformationgalois_group"_galois_group_degree_4_root_approx_galois_group_degree_5_hybrid)field_isomorphism)Poly)raisesc                  (   t        t        dz  dz
        t        t        dz  t        z   dz         t        t        dz  dz         t        t        dz  t        dz  z
  t        dz  z   t        z
  dz         fD ]  } t        |       \  }}|j                         | j                         k(  sJ |j                  sJ |j
                  sJ t        j                  |       }t        j                  |      }t        |j                  |j                        J  y )N            )
r   r   r   degreeis_monicis_irreducibler
   alg_field_from_polyr   ext)T_UKLs        c/var/www/html/venv/lib/python3.12/site-packages/sympy/polys/numberfields/tests/test_galoisgroups.py!test_tschirnhausen_transformationr"      s    QTAXQTAX\QTAXQTAqD[1a4!#a'(	 ; ,A.1xxzQXXZ'''zzz""1%""1% .:::;    Tr   r   Fr   r                     l      
   7               i  	      )r   r   r   r   r&   r)   c                  v    t        dd      D ]*  } t        |    }|D ]  \  }}}t        |d      ||fk(  rJ  , y)z!
    Try all the test polys.
    r   r+   Tby_nameNrangetest_polys_by_degr   )degpolysr   Galts        r!   test_galois_groupr>   Z   sQ     Q{ =!#& 	=IAq#40QH<<<	==r#   c                  j    t        t        d        t        t        d        t        t        d        y )Nc                  4    t        t        dt                    S )Nr   r   r   r    r#   r!   <lambda>z8test_galois_group_degree_out_of_bounds.<locals>.<lambda>e       |DAJ7 r#   c                  4    t        t        dt                    S )Nr   rA   rB   r#   r!   rC   z8test_galois_group_degree_out_of_bounds.<locals>.<lambda>f   rD   r#   c                  >    t        t        t        dz  dz               S )Nr+   r   rA   rB   r#   r!   rC   z8test_galois_group_degree_out_of_bounds.<locals>.<lambda>g   s    |Da!,<= r#   )r   
ValueErrorrB   r#   r!   &test_galois_group_degree_out_of_boundsrH   d   s#    
:78
:78
:=>r#   c                      t        dd      D ]5  } t        |    d   \  }}}t        |      \  }}||j                         k(  r5J  y)zv
    Check at least one polynomial of each supported degree, to see that
    conversion from name to group works.
    r   r+   r   N)r8   r9   r   get_perm_group)r:   r   G_namer   r<   s        r!   test_galois_group_not_by_namerL   j   sR    
 Q{ ,(-a061A1F))++++,r#   c                  t    t        dd      D ])  } t        |    d   \  }}}t        |dz  d      ||fk(  r)J  y)zG
    Check that we can work with polys that are not monic over ZZ.
    r   r+   r   r   Tr5   Nr7   )r:   r   r<   r=   s       r!   #test_galois_group_not_monic_over_ZZrN   u   sK     Q{ ;%c*1-	1cAaC.1c(:::;r#   c                  ^    t         d   D ]!  \  } }}t        t        |             ||fk(  r!J  y )Nr   )r9   r   r   r   r<   r=   s      r!   'test__galois_group_degree_4_root_approxrQ   ~   s9    &q) G	1c1$q':q#hFFFGr#   c                  ^    t         d   D ]!  \  } }}t        t        |             ||fk(  r!J  y )Nr&   )r9   r   r   rP   s      r!   "test__galois_group_degree_5_hybridrS      s9    &q) B	1c,T!W5!SAAABr#   c                  L   t        j                  t        t        dz  dz               } | j	                  d      \  }}|t
        j                  k(  sJ t        j                  t        t        dz  dz
              } | j	                  d      \  }}|t
        j                  k(  sJ y )Nr   r   Tr5   r   )r
   r   r   r   r   r   VD4)kr<   r   s      r!    test_AlgebraicField_galois_grouprX      s    
tAqD1H~.A>>$>'DAq%'''''
tAqD1H~.A>>$>'DAq%(((((r#   N)<__doc__	sympy.abcr   sympy.combinatorics.galoisr   r   r   r   r   r	   !sympy.polys.domains.rationalfieldr
   %sympy.polys.numberfields.galoisgroupsr   r   r   r   !sympy.polys.numberfields.subfieldr   sympy.polys.polytoolsr   sympy.testing.pytestr   r"   S1S2A3S3C4rU   rV   A4S4C5D5M20A5S5C6D6G18A4xC2S4pS4mG36mS4xC2PSL2F5PGL2F5G36pG72A6S6r9   r>   rH   rL   rN   rQ   rS   rX   rB   r#   r!   <module>r{      s   )   1  @ & ';* 
!$$d+
 
AA,//7
 
A1qs	Q	 5 8 8$?	
A(++U3 
A1q!t	a	!	#%:%=%=uE	
A(**D1	
A(++U3	
A!b/22D9	
AA,//7 
A1qAv	!Q$	&1	,q	02G2J2JDQ	
A!b/22D9	
A(,,e4	
A1r	033T:	
AA,//7 
A1q!t	ad	"QT	)A	-	13H3K3KUS	
A*--u5	
A(++U3	
A!Q$	144d;	
A!Q$	155u=	
A!Q$	177?	
A!Q$	155t<	
A!Q$1a4	!AqD&	(1QT6	1A	5	9;P;T;TV[\	
A!Q$	166>	
A!Q$	177?	
A1a4"QT'	!C1H	,s1a4x	7#a%	?"	DF[FbFbdhi	
A1a4"QT'	!C1H	,s1a4x	7$q&	@2	EG\GcGcejk	
A!Q$1a4	!AqD&	(1Q3	.	24I4N4NPTU	
A!Q$1a4	!Q$	&1	,q	02G2K2KUS	
A1r	033T:	
AA,//7!?1 h=?,;G
B
)r#   