a
    kh3&                     @   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   X/var/www/auris/lib/python3.9/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   Z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s2J q2q 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    

r3   c                  C   sz   d} t t| }t|\}}t| |||d}t|dks<J |d }|| | }||jks`J |d| dksvJ d S )Nr%   r-   r,      r   r   )r	   r
   r   r   lenZ	valuatione)r.   r"   r,   r-   r/   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s4J |d }|jdksJJ |jdksXJ |d |jksjJ |d |kszJ |d d|j ksJ d S )Nr%   c                   S   s   t dS )Nr%   )r   r   r   r   r   r   I   r   ztest_decomp_1.<locals>.<lambda>r5   r      )	r	   r
   r   
ValueErrorr   r6   r7   fr,   )r"   r/   r8   r   r   r   test_decomp_1D   s    
r>   c                  C   st   d} t t| }dD ]Z}t|| }| d | }t||}t||ksHJ |D ] }|jdks^J |j|ksLJ qLqd S )Nr%   r&   r5   )r	   r
   r   r   r6   r7   r=   )r+   r"   r.   Zf_expZg_expr/   r0   r   r   r   test_decomp_2U   s    

r?   c               	   C   s   t td d } i }t| |d\}}dD ]V}t|| ||||d}t|dksTJ |d jdksfJ |d d || ks(J q(d S )Nr   #   Zradicals)r   r   r%   r-   r,   radicalr5   r   r	   r   r   r   getr6   r7   r"   radr,   r-   r.   r/   r   r   r   test_decomp_3c   s    rH   c               	   C   s   t td d } i }t| |d\}}dD ]V}t|| ||||d}t|dksTJ |d jdksfJ |d d || ks(J q(d S )Nr      rA   )r   r%   rB   r5   r   rD   rF   r   r   r   test_decomp_4p   s    rJ   c               	      s  dD ]} t td |  }i }t||d\}}d}t||||||d | d dkrt dksdJ t fddtdD sJ td	d  D || ksJ q| d d
ksJ t dksJ  d j	dksJ  d j
dksJ  d  || ksJ qd S )N)ir   rA   rB      r5   c                 3   s*   | ]"} | j d ko  | jd kV  qdS r5   Nr7   r=   ).0ir/   r   r   	<genexpr>   r   z test_decomp_5.<locals>.<genexpr>c                 s   s   | ]}||j  V  qd S r   r7   rO   r0   r   r   r   rR      r   r   r   )r	   r   r   r   rE   r6   allranger   r7   r=   as_submodule)dr"   rG   r,   r-   r.   r   rQ   r   test_decomp_5}   s     rY   c                  C   s   t td td  dt  d } i }t| |d\}}d}t|| ||||d}t|dks`J tdd |D svJ tdd |D || ksJ d S )	Nr   r   rL   rA   rB   c                 s   s*   | ]"}|j |j  kod kn  V  qdS rM   rN   rT   r   r   r   rR      r   z test_decomp_6.<locals>.<genexpr>c                 s   s   | ]}||j  V  qd S r   rS   rT   r   r   r   rR      r   )r	   r   r   r   rE   r6   rU   r   rF   r   r   r   test_decomp_6   s     rZ   c                  C   s   t td td  dt  d } t| }d}||}| }t|dksPJ tdd |D sfJ tdd |D || ksJ d S )Nr   r   rL   c                 s   s*   | ]"}|j |j  kod kn  V  qdS rM   rN   rT   r   r   r   rR      r   z test_decomp_7.<locals>.<genexpr>c                 s   s   | ]}||j  V  qd S r   rS   rT   r   r   r   rR      r   )	r	   r   r   alg_field_from_polyprimes_abovemaximal_orderr6   rU   r   )r"   Kr.   r/   r,   r   r   r   test_decomp_7   s     

r_   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J qqd S )Nr   r   r   r   r;   r5   r%   rL   	      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"   r.   rC   r/   IJr0   r   r   r   display   s    

ztest_decomp_8.<locals>.displayFrA   rB   c                 s   s   | ]}||j  V  qd S r   rS   rT   r   r   r   rR      r   z test_decomp_8.<locals>.<genexpr>)r   r	   r   Zdiscriminantr   rE   r   r   )Zcasesrf   inspectgr"   rG   r,   r-   ZdTZ	f_squaredFr.   rC   r/   rd   re   r   r   r   test_decomp_8   sD    	
rj   c                  C   sN   t td} td| d }|jdks(J | d|j ks>J |dksJJ d S )Nr%   r   r   r;   )r	   r
   r   r=   rW   r,   r"   r8   r   r   r   test_PrimeIdeal_eq   s
    rl   c                  C   s8   t td} td| d }|d|j  | ks4J d S )Nr%   r   )r	   r
   r   r,   rW   rk   r   r   r   test_PrimeIdeal_add   s    rm   c                  C   s   t ttd d } | dd }t|dks4J | dd }t|dksRJ t jttd d dd} | dd }t|d	ksJ | dd }t|dksJ 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\   str)kfrpr   r   r   test_str   s    rr   c                  C   sv   t td d } t| \}}td| ||d}t|d dks@J |d jtddksXJ |d jtdd	d
ksrJ d S )Nr   r%   r4   r   z[ (2, (3*x + 1)/2) e=1, f=1 ])	field_genz![ (2, (3*theta + 1)/2) e=1, f=1 ]T)rs   Z	just_gensz(2, (3*theta + 1)/2))r	   r   r   r   reprr   )r"   r,   r-   r/   r   r   r   	test_repr  s    ru   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sJ | t ddt d	dt d
dg}| t ddt ddt ddg}|	|}||ksJ | 
|}| 
|}||}||ksJ d S )Nr   r   rL   )      r)   r;   )Zdenom)r)   r   r   r)   rw   rv   r   )r   r[   r	   r   r]   r\   parentr   Zreduce_elementZ
reduce_ANPZ
to_alg_numZreduce_alg_num)rp   ZZkr/   rq   aZa_bar_expectedZa_barr   r   r   test_PrimeIdeal_reduce  s     &

  



rz   c                  C   sH   t ttd td  dt  d } | d}|d jdsDJ d S )Nr   r   rL   r   )r   r[   r	   r   r\   r*   equiv)rp   r/   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$   r3   r:   r>   r?   rH   rJ   rY   rZ   r_   rj   rl   rm   rr   ru   rz   r|   r   r   r   r   <module>   s8   0
	