a
    kh                     @   s  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	d
 Zeejdfged e d ejdfged ed  de  d ejdfed d ejdfged ed  ed  e d ejdfed d ejdfed d ejdfed de  d ejdfed e d ej dfged ed  ded   ded   de  d ej!dfed de  d ej"dfed d ej#dfed de  d ej$dfed e d ej%dfged ed  ed  ed  ed  e d e	j&dfed d e	jdfed d e	j'dfed ded   d e	jdfed ded   d e	j(dfed ded   d e	j)dfed ded   d e	j*dfed ded   ded   ded   ded   e d e	j+dfed ded   d e	j,dfed ded   d e	j-dfed ded   ded   ded   ded   de  d e	j.dfed ded   ded   ded   ded   de  d e	j/dfed ded   ded   d ed   de  d e	j0dfed ded   ded   ed  de  d e	j1dfed d!e  d e	j2dfed e d e	j3dfgd"Z4d#d$ Z5d%d& Z6d'd( Z7d)d* Z8d+d, Z9d-d. Z:d/d0 Z;d1S )2z#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                  C   s   t td d t td t d t td d t td td  td  t d fD ]b} t| \}}| |  ksxJ |jsJ |jsJ t| }t|}t|j	|j	d usTJ qTd S )N            )
r   r   r
   ZdegreeZis_monicZis_irreducibler	   alg_field_from_polyr   ext)T_UKL r   ^/var/www/auris/lib/python3.9/site-packages/sympy/polys/numberfields/tests/test_galoisgroups.py!test_tschirnhausen_transformation   s    "



r   Tr   r   Fr   r                     l      
   7               i  	      )r   r   r   r   r!   r$   c                  C   sD   t ddD ]4} t|  }|D ]"\}}}t|dd||fksJ qq
dS )z!
    Try all the test polys.
    r   r&   TZby_nameNrangetest_polys_by_degr   )degZpolysr   Galtr   r   r   test_galois_groupZ   s    r6   c                   C   s.   t tdd  t tdd  t tdd  d S )Nc                   S   s   t tdtS )Nr   r   r   r   r   r   r   r   <lambda>e       z8test_galois_group_degree_out_of_bounds.<locals>.<lambda>c                   S   s   t tdtS )Nr   r7   r   r   r   r   r8   f   r9   c                   S   s   t ttd d S )Nr&   r   r7   r   r   r   r   r8   g   r9   )r   
ValueErrorr   r   r   r   &test_galois_group_degree_out_of_boundsd   s    r;   c                  C   sB   t ddD ]2} t|  d \}}}t|\}}|| ks
J q
dS )zv
    Check at least one polynomial of each supported degree, to see that
    conversion from name to group works.
    r   r&   r   N)r1   r2   r   Zget_perm_group)r3   r   ZG_namer   r4   r   r   r   test_galois_group_not_by_namej   s    r<   c                  C   sB   t ddD ]2} t|  d \}}}t|d dd||fks
J q
dS )zG
    Check that we can work with polys that are not monic over ZZ.
    r   r&   r   r   Tr/   Nr0   )r3   r   r4   r5   r   r   r   #test_galois_group_not_monic_over_ZZu   s    r=   c                  C   s0   t d D ]"\} }}tt| ||fksJ qd S )Nr   )r2   r   r   r   r4   r5   r   r   r   'test__galois_group_degree_4_root_approx~   s    r?   c                  C   s0   t d D ]"\} }}tt| ||fksJ qd S )Nr!   )r2   r   r   r>   r   r   r   "test__galois_group_degree_5_hybrid   s    r@   c                  C   sl   t ttd d } | jdd\}}|tjks4J t ttd d } | jdd\}}|tjkshJ d S )Nr   r   Tr/   r   )r	   r   r   r   r   r   VD4)kr4   r   r   r   r    test_AlgebraicField_galois_group   s    rD   N)<__doc__Z	sympy.abcr   Zsympy.combinatorics.galoisr   r   r   r   r   r   Z!sympy.polys.domains.rationalfieldr	   Z%sympy.polys.numberfields.galoisgroupsr
   r   r   r   Z!sympy.polys.numberfields.subfieldr   Zsympy.polys.polytoolsr   Zsympy.testing.pytestr   r   ZS1ZS2ZA3ZS3ZC4rA   rB   ZA4ZS4ZC5ZD5ZM20ZA5ZS5ZC6ZD6ZG18ZA4xC2ZS4pZS4mZG36mZS4xC2ZPSL2F5ZPGL2F5ZG36pZG72ZA6ZS6r2   r6   r;   r<   r=   r?   r@   rD   r   r   r   r   <module>   sh    
"&	:	6FJJ>:4
	