U
    	-e3&                     @   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   k/var/www/html/Darija-Ai-Train/env/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st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rt dksdtt fddtdD stt	d	d  D || kstq| d d
kstt dkst d j
dkst d jdkst d  || kstqd S )N)ir   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st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st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qd 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st| dd }t|dkst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st	| t ddt ddt ddg}| t ddt d	dt ddg}|
|}||kst	| |}| |}||}||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
	