a
    rh3&                     @   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   f/var/www/html/assistant/venv/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   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    

r4   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.   r0   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>r6   r      )	r	   r
   r   
ValueErrorr   r7   r8   fr-   )r#   r0   r9   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'   r6   )r	   r
   r   r   r7   r8   r>   )r,   r#   r/   Zf_expZg_expr0   r1   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-   radicalr6   r   r	   r   r   r   getr7   r8   r#   radr-   r.   r/   r0   r   r   r   test_decomp_3c   s    rI   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      rB   )r   r&   rC   r6   r   rE   rG   r   r   r   test_decomp_4p   s    rK   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   rB   rC      r6   c                 3   s*   | ]"} | j d ko  | jd kV  qdS r6   Nr8   r>   ).0ir0   r   r   	<genexpr>   r   z test_decomp_5.<locals>.<genexpr>c                 s   s   | ]}||j  V  qd S r   r8   rP   r1   r   r   r   rS      r   r   r   )r	   r   r   r   rF   r7   allranger   r8   r>   as_submodule)dr#   rH   r-   r.   r/   r   rR   r   test_decomp_5}   s     rZ   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   rM   rB   rC   c                 s   s*   | ]"}|j |j  kod kn  V  qdS rN   rO   rU   r   r   r   rS      r   z test_decomp_6.<locals>.<genexpr>c                 s   s   | ]}||j  V  qd S r   rT   rU   r   r   r   rS      r   )r	   r   r   r   rF   r7   rV   r   rG   r   r   r   test_decomp_6   s     r[   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   rM   c                 s   s*   | ]"}|j |j  kod kn  V  qdS rN   rO   rU   r   r   r   rS      r   z test_decomp_7.<locals>.<genexpr>c                 s   s   | ]}||j  V  qd S r   rT   rU   r   r   r   rS      r   )	r	   r   r   alg_field_from_polyprimes_abovemaximal_orderr7   rV   r   )r#   Kr/   r0   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<   r6   r&   rM   	      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/   rD   r0   IJr1   r   r   r   display   s    

ztest_decomp_8.<locals>.displayFrB   rC   c                 s   s   | ]}||j  V  qd S r   rT   rU   r   r   r   rS      r   z test_decomp_8.<locals>.<genexpr>)r   r	   r   Zdiscriminantr   rF   r   r   )Zcasesrg   inspectgr#   rH   r-   r.   ZdTZ	f_squaredFr/   rD   r0   re   rf   r   r   r   test_decomp_8   sD    	
rk   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>   rX   r-   r#   r9   r   r   r   test_PrimeIdeal_eq   s
    rm   c                  C   s8   t td} td| d }|d|j  | ks4J d S )Nr&   r   )r	   r
   r   r-   rX   rl   r   r   r   test_PrimeIdeal_add   s    rn   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    rs   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&   r5   r   z[ (2, (3*x + 1)/2) e=1, f=1 ])	field_genz![ (2, (3*theta + 1)/2) e=1, f=1 ]T)rt   Z	just_gensz(2, (3*theta + 1)/2))r	   r   r   r   reprr   )r#   r-   r.   r0   r   r   r   	test_repr  s    rv   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   rM   )      r*   r<   )denom)r*   r   r   r*   rx   rw   r   )r   r\   r	   r   r^   r]   parentr   Zreduce_elementZ
reduce_ANPZ
to_alg_numZreduce_alg_num)rq   ZZkr0   rr   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sDJ d S )Nr   r   rM   r   )r   r\   r	   r   r]   r+   equiv)rq   r0   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%   r4   r;   r?   r@   rI   rK   rZ   r[   r`   rk   rm   rn   rs   rv   r|   r~   r   r   r   r   <module>   s8   0
	