o
    g3&                     @   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   a/var/www/visachat/venv/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   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   alphabasis_element_pullbacksr   )ellr%   ZKdKpPPiHgensbH2r   r   r   test_two_elt_rep!   s   

r9   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(   r1   r0      r   r   )r	   r
   r   r   len	valuatione)r2   r%   r0   r1   r3   P0vr   r   r   test_valuation_at_prime_ideal7   s   rA   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>r;   r      )	r	   r
   r   
ValueErrorr   r<   r>   fr0   )r%   r3   r?   r   r   r   test_decomp_1D   s   
rE   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)   r;   )r	   r
   r   r   r<   r>   rD   )r/   r%   r2   f_expg_expr3   r4   r   r   r   test_decomp_2U   s   

rH   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   #   radicals)r   r   r(   r1   r0   radicalr;   r   r	   r   r   r   getr<   r>   r%   radr0   r1   r2   r3   r   r   r   test_decomp_3c      rS   c               	   C   rI   )Nr      rK   )r   r(   rM   r;   r   rO   rQ   r   r   r   test_decomp_4p   rT   rV   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   rK   rM      r;   c                 3   s,    | ]} | j d ko | jd kV  qdS r;   Nr>   rD   ).0ir3   r   r   	<genexpr>      * z test_decomp_5.<locals>.<genexpr>c                 s       | ]}||j  V  qd S r   r>   r[   r4   r   r   r   r^          r   r   )r	   r   r   r   rP   r<   allranger   r>   rD   as_submodule)dr%   rR   r0   r1   r2   r   r]   r   test_decomp_5}   s     rh   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   rX   rK   rM   c                 s   ,    | ]}|j |j  kod kn  V  qdS rY   rZ   rb   r   r   r   r^      r_   z test_decomp_6.<locals>.<genexpr>c                 s   r`   r   ra   rb   r   r   r   r^      rc   )r	   r   r   r   rP   r<   rd   r   rQ   r   r   r   test_decomp_6   s    "rj   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   rX   c                 s   ri   rY   rZ   rb   r   r   r   r^      r_   z test_decomp_7.<locals>.<genexpr>c                 s   r`   r   ra   rb   r   r   r   r^      rc   )	r	   r   r   alg_field_from_polyprimes_abovemaximal_orderr<   rd   r   )r%   Kr2   r3   r0   r   r   r   test_decomp_7   s    

"ro   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   rB   r;   r(   rX   	      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%   r2   rN   r3   IJr4   r   r   r   display   s   

ztest_decomp_8.<locals>.displayFrK   rM   c                 s   r`   r   ra   rb   r   r   r   r^      rc   z test_decomp_8.<locals>.<genexpr>)r   r	   r   discriminantr   rP   r   r   )casesrv   inspectgr%   rR   r0   r1   dT	f_squaredFr2   rN   r3   rt   ru   r   r   r   test_decomp_8   sH   	
r~   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   rB   )r	   r
   r   rD   rf   r0   r%   r?   r   r   r   test_PrimeIdeal_eq   s
   r   c                  C   s8   t td} td| d }|d|j  | ksJ d S )Nr(   r   )r	   r
   r   r0   rf   r   r   r   r   test_PrimeIdeal_add   s   r   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   rk   r	   r   rl   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(   r:   r   z[ (2, (3*x + 1)/2) e=1, f=1 ])	field_genz![ (2, (3*theta + 1)/2) e=1, f=1 ]T)r   	just_gensz(2, (3*theta + 1)/2))r	   r   r   r   reprr   )r%   r0   r1   r3   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   rX   )      r,   rB   )denom)r,   r   r   r,   r   r   r   )r   rk   r	   r   rm   rl   parentr   reduce_element
reduce_ANP
to_alg_numreduce_alg_num)r   Zkr3   r   aa_bar_expected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   rX   r   )r   rk   r	   r   rl   r-   equiv)r   r3   r   r   r   test_issue_23402%  s   &
r   N)/mathr   sympyr   r   	sympy.abcr   r   sympy.ntheoryr   sympy.ntheory.residue_ntheoryr   sympy.polysr	   r
   sympy.polys.matricesr   sympy.polys.numberfields.basisr   #sympy.polys.numberfields.exceptionsr    sympy.polys.numberfields.modulesr   r   sympy.polys.numberfields.primesr   r   r   sympy.testing.pytestr   r'   r9   rA   rE   rH   rS   rV   rh   rj   ro   r~   r   r   r   r   r   r   r   r   r   r   <module>   s:    0
	