U
    ZÊ¹j3&  ã                   @   s4  d dl mZ d dlmZmZ d dlmZmZ d dlm	Z	 d dl
m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mZ d dlmZmZmZ d dlmZ dd„ Zdd„ Zdd„ Z dd„ Z!dd„ Z"dd„ Z#dd„ Z$dd„ Z%dd„ Z&dd „ Z'd!d"„ Z(d#d$„ Z)d%d&„ Z*d'd(„ Z+d)d*„ Z,d+d,„ Z-d-d.„ Z.d/S )0é    )Úprod)ÚQQÚZZ)ÚxÚtheta)Ú	factorint)Ún_order)ÚPolyÚcyclotomic_poly)ÚDomainMatrix)Ú	round_two)ÚStructureError)Ú
PowerBasisÚto_col)Úprime_decompÚ_two_elt_repÚ*_check_formal_conditions_for_maximal_order)Úraisesc                     sž   t tdtƒƒ} t| ƒ}| dt dt¡ ¡‰ ˆ  dt dt¡ ¡‰| t dt¡d d …d d…f ¡‰tt	‡ fdd„ƒ tt	‡fdd„ƒ tt	‡fd	d„ƒ d S )
Né   é   é   é   éÿÿÿÿc                      s   t ˆ ƒS ©N©r   © )ÚBr   úi/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/polys/numberfields/tests/test_primes.pyÚ<lambda>   ó    z@test_check_formal_conditions_for_maximal_order.<locals>.<lambda>c                      s   t ˆ ƒS r   r   r   )ÚCr   r   r      r   c                      s   t ˆ ƒS r   r   r   )ÚDr   r   r      r   )
r	   r
   r   r   Zsubmodule_from_matrixr   Úeyer   r   r   )ÚTÚAr   )r   r    r!   r   Ú.test_check_formal_conditions_for_maximal_order   s    "r%   c                  C   sŠ   d} t t| ƒƒ}t|ƒ\}}dD ]d}t||ƒ}|D ]P}|| |j|  }| ¡ }t|||ƒ}	|	|jkr2|| |	|  }
|
|ks2t‚q2q d S )Né   ©é   é   é   r   )r	   r
   r   r   ÚalphaZbasis_element_pullbacksr   ÚAssertionError)Úellr#   ÚZKÚdKÚpÚPÚPiÚHZgensÚbZH2r   r   r   Útest_two_elt_rep!   s    

r5   c                  C   sz   d} t t| ƒƒ}t|ƒ\}}t| |||d�}t|ƒdks<t‚|d }| | | ¡}||jks`t‚| d| ¡dksvt‚d S )Nr&   ©r/   r.   é   r   r   )r	   r
   r   r   Úlenr,   Z	valuationÚe)r0   r#   r.   r/   r1   ÚP0Úvr   r   r   Útest_valuation_at_prime_ideal7   s    r<   c                  C   s”   t tdƒƒ} ttdd„ ƒ td| ƒ}t|ƒdks4t‚|d }|jdksJt‚|jdksXt‚|d |j	ksjt‚|d |kszt‚|d d|j	 ks�t‚d S )Nr&   c                   S   s   t dƒS )Nr&   )r   r   r   r   r   r   I   r   ztest_decomp_1.<locals>.<lambda>r7   r   é   )
r	   r
   r   Ú
ValueErrorr   r8   r,   r9   Úfr.   )r#   r1   r:   r   r   r   Útest_decomp_1D   s    
r@   c                  C   st   d} t t| ƒƒ}dD ]Z}t|| ƒ}| d | }t||ƒ}t|ƒ|ksHt‚|D ] }|jdks^t‚|j|ksLt‚qLqd S )Nr&   r'   r7   )r	   r
   r   r   r8   r,   r9   r?   )r-   r#   r0   Zf_expZg_expr1   r2   r   r   r   Útest_decomp_2U   s    

rA   c               	   C   s„   t td d ƒ} i }t| |d�\}}dD ]V}t|| ||| |¡d�}t|ƒdksTt‚|d jdksft‚|d d || ks(t‚q(d S )Nr   é#   ©Zradicals)r   r   r&   ©r/   r.   Úradicalr7   r   ©r	   r   r   r   Úgetr8   r,   r9   ©r#   Úradr.   r/   r0   r1   r   r   r   Útest_decomp_3c   s    rJ   c               	   C   s„   t td d ƒ} i }t| |d�\}}dD ]V}t|| ||| |¡d�}t|ƒdksTt‚|d jdksft‚|d d || ks(t‚q(d S )Nr   é   rC   )r   r&   rD   r7   r   rF   rH   r   r   r   Útest_decomp_4p   s    rL   c               	      s  dD ]ú} t td |  ƒ}i }t||d�\}}d}t||||| |¡d�‰ | d dkr¢tˆ ƒdksdt‚t‡ fdd„tdƒD ƒƒs‚t‚t	d	d„ ˆ D ƒƒ|| ksþt‚q| d d
ks²t‚tˆ ƒdksÂt‚ˆ d j
dksÔt‚ˆ d jdksæt‚ˆ d  ¡ || kst‚qd S )N)iùÿÿÿéýÿÿÿr   rC   rD   é   r7   c                 3   s*   | ]"}ˆ | j d ko ˆ | jd kV  qdS ©r7   N©r9   r?   )Ú.0Úi©r1   r   r   Ú	<genexpr>Œ   s     z test_decomp_5.<locals>.<genexpr>c                 s   s   | ]}||j  V  qd S r   ©r9   ©rQ   r2   r   r   r   rT   �   s     r   r   )r	   r   r   r   rG   r8   r,   ÚallÚranger   r9   r?   Úas_submodule)Údr#   rI   r.   r/   r0   r   rS   r   Útest_decomp_5}   s     r[   c                  C   s˜   t td td  dt  d ƒ} i }t| |d�\}}d}t|| ||| |¡d�}t|ƒdks`t‚tdd„ |D ƒƒsvt‚tdd„ |D ƒƒ|| ks”t‚d S )	Nr   r   rN   rC   rD   c                 s   s*   | ]"}|j |j  kod kn  V  qdS rO   rP   rV   r   r   r   rT   Ÿ   s     z test_decomp_6.<locals>.<genexpr>c                 s   s   | ]}||j  V  qd S r   rU   rV   r   r   r   rT       s     )	r	   r   r   r   rG   r8   r,   rW   r   rH   r   r   r   Útest_decomp_6–   s     r\   c                  C   sˆ   t td td  dt  d ƒ} t | ¡}d}| |¡}| ¡ }t|ƒdksPt‚tdd„ |D ƒƒsft‚t	dd„ |D ƒƒ|| ks„t‚d S )Nr   r   rN   c                 s   s*   | ]"}|j |j  kod kn  V  qdS rO   rP   rV   r   r   r   rT   «   s     z test_decomp_7.<locals>.<genexpr>c                 s   s   | ]}||j  V  qd S r   rU   rV   r   r   r   rT   ¬   s     )
r	   r   r   Úalg_field_from_polyÚprimes_aboveÚmaximal_orderr8   r,   rW   r   )r#   ÚKr0   r1   r.   r   r   r   Útest_decomp_7£   s     

ra   c                  C   s„  t d dt d   dt   d t d dt d   dt   d t d dt d   t  d t d dt d   dt   d t d dt d   d t d dt d   dt   d t d dt d   d t d dt d   dt   d t d dt d   t  d t d dt d   dt   d t d dt d   dt   d t d dt d   dt   d t d dt d   dt   d t d dt d   dt   d t d d	t d   dt   d t d d
t d   d	t   d f} dd„ }d}| D ]¢}t|ƒ}i }t||d�\}}| ¡ }|| }	t|	ƒ}
|
D ]b}| |¡}t|||||d�}tdd„ |D ƒƒ}|| }|�rj|||||||ƒ ||k�st‚�q�qÜd S )Nr   r   r   r   r=   r7   r&   rN   é	   é   r)   c                 S   sX   t dƒ t | ||ƒ |D ]}t d|›d�ƒ qt d|ƒ t d|ƒ t d||k› �ƒ dS )z2Useful for inspection, when running test manually.z====================z  (ú)zI: zJ: zEqual: N)Úprint)r#   r0   rE   r1   ÚIÚJr2   r   r   r   ÚdisplayÄ   s    

ztest_decomp_8.<locals>.displayFrC   rD   c                 s   s   | ]}||j  V  qd S r   rU   rV   r   r   r   rT   Ø   s     z test_decomp_8.<locals>.<genexpr>)	r   r	   r   Zdiscriminantr   rG   r   r   r,   )Zcasesrh   ÚinspectÚgr#   rI   r.   r/   ZdTZ	f_squaredÚFr0   rE   r1   rf   rg   r   r   r   Útest_decomp_8¯   sD    ð	
rl   c                  C   sN   t tdƒƒ} td| ƒd }|jdks(t‚| ¡ d|j ks>t‚|dksJt‚d S )Nr&   r   r   r=   )r	   r
   r   r?   r,   rY   r.   ©r#   r:   r   r   r   Útest_PrimeIdeal_eqß   s
    rn   c                  C   s8   t tdƒƒ} td| ƒd }|d|j  | ¡ ks4t‚d S )Nr&   r   )r	   r
   r   r.   rY   r,   rm   r   r   r   Útest_PrimeIdeal_addé   s    ro   c                  C   s¬   t  ttd d ƒ¡} |  d¡d }t|ƒdks4t‚|  d¡d }t|ƒdksRt‚t jttd d ƒdd�} |  d¡d }t|ƒd	ksŠt‚|  d¡d }t|ƒdks¨t‚d S )
Nr   r&   r   z(2, 3*_x/2 + 1/2)r   z(3)r+   )Úaliasz(2, 3*alpha/2 + 1/2))r   r]   r	   r   r^   Ústrr,   )ÚkÚfrpr   r   r   Útest_strñ   s    rt   c                  C   sv   t td d ƒ} t| ƒ\}}td| ||d�}t|d ƒdks@t‚|d jtd�dksXt‚|d jtdd	�d
ksrt‚d S )Nr   r&   r6   r   z[ (2, (3*x + 1)/2) e=1, f=1 ])Ú	field_genz![ (2, (3*theta + 1)/2) e=1, f=1 ]T)ru   Z	just_gensz(2, (3*theta + 1)/2))r	   r   r   r   Úreprr,   r   )r#   r.   r/   r1   r   r   r   Ú	test_repr  s    rw   c                  C   s  t  ttd td  dt  d ƒ¡} |  ¡ }|  d¡}|d }|jtdddgƒdd�}|jtdd	dgƒdd�}| |¡}||ks†t	‚| t ddƒt ddƒt ddƒgƒ}| t ddƒt d	dƒt ddƒgƒ}| 
|¡}||ksÜt	‚|  |¡}|  |¡}| |¡}||k�st	‚d S )
Nr   r   rN   é   é   r*   r=   )Údenomr   )r   r]   r	   r   r_   r^   Úparentr   Zreduce_elementr,   Z
reduce_ANPZ
to_alg_numZreduce_alg_num)rr   ZZkr1   rs   ÚaZa_bar_expectedZa_barr   r   r   Útest_PrimeIdeal_reduce  s     &

  



r}   c                  C   sH   t  ttd td  dt  d ƒ¡} |  d¡}|d j d¡sDt‚d S )Nr   r   rN   r   )r   r]   r	   r   r^   r+   Úequivr,   )rr   r1   r   r   r   Útest_issue_23402%  s    &
r   N)/Úmathr   Zsympyr   r   Z	sympy.abcr   r   Zsympy.ntheoryr   Zsympy.ntheory.residue_ntheoryr   Zsympy.polysr	   r
   Zsympy.polys.matricesr   Zsympy.polys.numberfields.basisr   Z#sympy.polys.numberfields.exceptionsr   Z sympy.polys.numberfields.modulesr   r   Zsympy.polys.numberfields.primesr   r   r   Zsympy.testing.pytestr   r%   r5   r<   r@   rA   rJ   rL   r[   r\   ra   rl   rn   ro   rt   rw   r}   r   r   r   r   r   Ú<module>   s8   0
	