U
    ZÊ¹j¬  ã                   @   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sxt‚|js‚t‚|jsŒt‚t | ¡}t |¡}t	|j
|j
ƒd k	sTt‚qTd S )Né   é   é   é   )r   r   r
   ZdegreeÚAssertionErrorZis_monicZis_irreducibler	   Úalg_field_from_polyr   Úext)ÚTÚ_ÚUÚKÚL© r   úo/var/www/html/bwave/python/venv/lib/python3.8/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t‚qq
dS )z!
    Try all the test polys.
    r   r'   T©Zby_nameN©ÚrangeÚtest_polys_by_degr   r   )ÚdegZpolysr   ÚGÚaltr   r   r   Útest_galois_groupZ   s    r7   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   r8   r   r   r   r   r9   f   r:   c                   S   s   t ttd d ƒƒS )Nr'   r   r8   r   r   r   r   r9   g   r:   )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
t‚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)r2   r3   r   Zget_perm_groupr   )r4   r   ZG_namer   r5   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
t‚q
dS )zG
    Check that we can work with polys that are not monic over ZZ.
    r   r'   r   r   Tr0   Nr1   )r4   r   r5   r6   r   r   r   Ú#test_galois_group_not_monic_over_ZZu   s    r>   c                  C   s0   t d D ]"\} }}tt| ƒƒ||fkst‚qd S )Nr   )r3   r   r   r   ©r   r5   r6   r   r   r   Ú'test__galois_group_degree_4_root_approx~   s    r@   c                  C   s0   t d D ]"\} }}tt| ƒƒ||fkst‚qd S )Nr"   )r3   r   r   r   r?   r   r   r   Ú"test__galois_group_degree_5_hybridƒ   s    rA   c                  C   sl   t  ttd d ƒ¡} | jdd�\}}|tjks4t‚t  ttd d ƒ¡} | jdd�\}}|tjksht‚d S )Nr   r   Tr0   r   )	r	   r   r   r   r   r   ÚVr   ÚD4)Úkr5   r   r   r   r   Ú test_AlgebraicField_galois_groupˆ   s    rE   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C4rB   rC   ZA4ZS4ZC5ZD5ZM20ZA5ZS5ZC6ZD6ZG18ZA4xC2ZS4pZS4mZG36mZS4xC2ZPSL2F5ZPGL2F5ZG36pZG72ZA6ZS6r3   r7   r<   r=   r>   r@   rA   rE   r   r   r   r   Ú<module>   sh    
ÿÿ"þ&û	:û	6FJJ>:ðá4
	