o
    GZh3&                     @   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                         t  S Nr    )Br   Y/var/www/auris/lib/python3.10/site-packages/sympy/polys/numberfields/tests/test_primes.py<lambda>       z@test_check_formal_conditions_for_maximal_order.<locals>.<lambda>c                      r   r   r   r   )Cr   r   r      r    c                      r   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 ]2}t||}|D ](}|| |j|  }| }t|||}	|	|jkrA|| |	|  }
|
|ksAJ qqd S )N            r   )r	   r
   r   r   alphaZbasis_element_pullbacksr   )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J |d }|| | }||jks0J |d| dks;J d S )Nr'   r/   r.      r   r   )r	   r
   r   r   lenZ	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sJ |d }|jdks%J |jdks,J |d |jks5J |d |ks=J |d d|j ksHJ 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   r9   fr.   )r$   r1   r:   r   r   r   test_decomp_1D   s   
r@   c                  C   st   d} t t| }dD ]-}t|| }| d | }t||}t||ks$J |D ]}|jdks/J |j|ks6J q&q
d S )Nr'   r(   r7   )r	   r
   r   r   r8   r9   r?   )r-   r$   r0   Zf_expZg_expr1   r2   r   r   r   test_decomp_2U   s   

rA   c               	   C      t td d } i }t| |d\}}dD ]+}t|| ||||d}t|dks*J |d jdks3J |d d || ks?J qd S )Nr   #   Zradicals)r   r   r'   r/   r.   radicalr7   r   r	   r   r   r   getr8   r9   r$   radr.   r/   r0   r1   r   r   r   test_decomp_3c      rK   c               	   C   rB   )Nr      rD   )r   r'   rE   r7   r   rG   rI   r   r   r   test_decomp_4p   rL   rN   c               	      s  dD ]}} t td |  }i }t||d\}}d}t||||||d | d dkrQt dks2J t fddtdD sAJ td	d  D || ksPJ q| d d
ksYJ t dksaJ  d j	dksjJ  d j
dkssJ  d  || ksJ qd S )N)ir   rD   rE      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>      * z test_decomp_5.<locals>.<genexpr>c                 s       | ]}||j  V  qd S r   r9   rS   r2   r   r   r   rV          r   r   )r	   r   r   r   rH   r8   allranger   r9   r?   as_submodule)dr$   rJ   r.   r/   r0   r   rU   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s0J tdd |D s;J tdd |D || ksJJ d S )	Nr   r   rP   rD   rE   c                 s   ,    | ]}|j |j  kod kn  V  qdS rQ   rR   rZ   r   r   r   rV      rW   z test_decomp_6.<locals>.<genexpr>c                 s   rX   r   rY   rZ   r   r   r   rV      r[   )r	   r   r   r   rH   r8   r\   r   rI   r   r   r   test_decomp_6   s    "rb   c                  C   s   t td td  dt  d } t| }d}||}| }t|dks(J tdd |D s3J tdd |D || ksBJ d S )Nr   r   rP   c                 s   ra   rQ   rR   rZ   r   r   r   rV      rW   z test_decomp_7.<locals>.<genexpr>c                 s   rX   r   rY   rZ   r   r   r   rV      r[   )	r	   r   r   alg_field_from_polyprimes_abovemaximal_orderr8   r\   r   )r$   Kr0   r1   r.   r   r   r   test_decomp_7   s    

"rg   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 ]P}t|}i }t||d\}}| }|| }	t|	}
|
D ]1}||}t|||||d}tdd |D }|| }|r5||||||| ||ks<J qqd S )Nr   r   r   r   r=   r7   r'   rP   	      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   rF   r1   IJr2   r   r   r   display   s   

ztest_decomp_8.<locals>.displayFrD   rE   c                 s   rX   r   rY   rZ   r   r   r   rV      r[   z test_decomp_8.<locals>.<genexpr>)r   r	   r   Zdiscriminantr   rH   r   r   )casesrn   inspectgr$   rJ   r.   r/   ZdTZ	f_squaredFr0   rF   r1   rl   rm   r   r   r   test_decomp_8   sH   	
rs   c                  C   sN   t td} td| d }|jdksJ | d|j ksJ |dks%J d S )Nr'   r   r   r=   )r	   r
   r   r?   r^   r.   r$   r:   r   r   r   test_PrimeIdeal_eq   s
   ru   c                  C   s8   t td} td| d }|d|j  | ksJ d S )Nr'   r   )r	   r
   r   r.   r^   rt   r   r   r   test_PrimeIdeal_add   s   rv   c                  C   s   t ttd d } | dd }t|dksJ | dd }t|dks)J t jttd d dd} | dd }t|d	ksEJ | dd }t|dksTJ d S )
Nr   r'   r   z(2, 3*_x/2 + 1/2)r   z(3)r,   )aliasz(2, 3*alpha/2 + 1/2))r   rc   r	   r   rd   str)kfrpr   r   r   test_str   s   r{   c                  C   sv   t td d } t| \}}td| ||d}t|d dks J |d jtddks,J |d jtdd	d
ks9J 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)r|   Z	just_gensz(2, (3*theta + 1)/2))r	   r   r   r   reprr   )r$   r.   r/   r1   r   r   r   	test_repr  s   r~   c                  C   s  t ttd td  dt  d } |  }| d}|d }|jtg ddd}|jtg ddd}||}||ksAJ | t ddt d	dt d
dg}| t ddt ddt ddg}|	|}||kslJ | 
|}| 
|}||}||ksJ d S )Nr   r   rP   )      r+   r=   )denom)r+   r   r   r+   r   r   r   )r   rc   r	   r   re   rd   parentr   Zreduce_elementZ
reduce_ANPZ
to_alg_numZreduce_alg_num)ry   ZZkr1   rz   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s"J d S )Nr   r   rP   r   )r   rc   r	   r   rd   r,   equiv)ry   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   rK   rN   r`   rb   rg   rs   ru   rv   r{   r~   r   r   r   r   r   r   <module>   s:    0
	