o
    g                     @   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 ]1} t| \}}| |  ks<J |jsAJ |jsFJ t| }t|}t|j	|j	d us[J q*d S )N            )
r   r   r
   degreeis_monicis_irreducibler	   alg_field_from_polyr   ext)T_UKL r   g/var/www/visachat/venv/lib/python3.10/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 ]} t|  }|D ]\}}}t|dd||fksJ qqdS )z!
    Try all the test polys.
    r   r)   Tby_nameNrangetest_polys_by_degr   )degpolysr   Galtr   r   r    test_galois_groupZ   s   r;   c                   C   s.   t tdd  t tdd  t tdd  d S )Nc                   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   r<   )Nr   r=   r   r   r   r    r>   f   r?   c                   S   s   t ttd d S )Nr)   r   r=   r   r   r   r    r>   g   s    )r   
ValueErrorr   r   r   r    &test_galois_group_degree_out_of_boundsd   s   rA   c                  C   sB   t ddD ]} 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)r5   r6   r   get_perm_group)r7   r   G_namer   r9   r   r   r    test_galois_group_not_by_namej   s
   rD   c                  C   sB   t ddD ]} 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   Tr2   Nr4   )r7   r   r9   r:   r   r   r    #test_galois_group_not_monic_over_ZZu   s   rE   c                  C   0   t d D ]\} }}tt| ||fksJ qd S )Nr   )r6   r   r   r   r9   r:   r   r   r    'test__galois_group_degree_4_root_approx~      rH   c                  C   rF   )Nr$   )r6   r   r   rG   r   r   r    "test__galois_group_degree_5_hybrid   rI   rJ   c                  C   sl   t ttd d } | jdd\}}|tjksJ t ttd d } | jdd\}}|tjks4J d S )Nr   r   Tr2   r   )r	   r   r   r   r   r   VD4)kr9   r   r   r   r     test_AlgebraicField_galois_group   s   rN   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C4rK   rL   A4S4C5D5M20A5S5C6D6G18A4xC2S4pS4mG36mS4xC2PSL2F5PGL2F5G36pG72A6S6r6   r;   rA   rD   rE   rH   rJ   rN   r   r   r   r    <module>   sj     
"&:	6	FJJ>:4
	