U
    L?hto                     @   sp  d dl mZmZmZmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZC d dlDmEZE d dlFmGZH d dlImJZJ d dlKmLZL d dlMmNZN d dlOmPZP dd	 ZQd
d ZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\d d! Z]d"d# Z^d$d% Z_d&d' Z`d(d) Zad*d+ Zbd,d- Zcd.d/ Zdd0d1 Zed2d3 Zfd4d5 Zgd6d7 Zhd8d9 Zid:d; Zjd<d= Zkd>d? Zld@dA ZmdBdC ZndDdE ZodFdG ZpdHdI ZqdJdK ZrdLS )M    )Cgf_crtgf_crt1gf_crt2gf_int	gf_degreegf_stripgf_trunc	gf_normalgf_from_dict
gf_to_dictgf_from_int_polygf_to_int_polygf_neggf_add_groundgf_sub_groundgf_mul_groundgf_addgf_sub
gf_add_mul
gf_sub_mulgf_mulgf_sqrgf_divgf_remgf_quogf_exquo	gf_lshift	gf_rshift	gf_expandgf_pow
gf_pow_modgf_gcdexgf_gcdgf_lcmgf_cofactorsgf_LCgf_TCgf_monicgf_evalgf_multi_eval
gf_composegf_compose_modgf_trace_mapgf_diffgf_irreduciblegf_irreducible_pgf_irred_p_ben_orgf_irred_p_rabingf_sqf_listgf_sqf_partgf_sqf_p
gf_Qmatrix	gf_Qbasisgf_ddf_zassenhausgf_ddf_shoupgf_edf_zassenhausgf_edf_shoupgf_berlekampgf_factor_sqf	gf_factorgf_valuelinear_congruence_csolve_prime_las_vegascsolve_prime	gf_csolvegf_frobenius_mapgf_frobenius_monomial_base)ExactQuotientFailed)
polyconfig)ZZ)pi)	nextprime)raisesc                  C   sz   dddg} dddg}d}d}t | |t|ks0td	d
dg}dddg}t|t|||fks\tt| ||||t|ksvtd S )N1   L   A   c   a   _   i i	 i#  i$  i%  >         )r   rG   AssertionErrorr   r   )UMpuES r[   T/var/www/html/venv/lib/python3.8/site-packages/sympy/polys/tests/test_galoistools.pytest_gf_crt)   s    



r]   c                   C   sp   t dddkstt dddks$tt dddks6tt dddksHtt dddksZtt dddksltd S )	Nr                  )r   rT   r[   r[   r[   r\   test_gf_int9   s    re   c                   C   sT   t g dkstt dgdks"tt ddgdks6tt dddddgdksPtd S )Nrd   r_   r   rc   )r   rT   r[   r[   r[   r\   test_gf_degreeB   s    rf   c                   C   s   t g g kstt dgg ks"tt dddgg ks8tt dgdgksLtt ddgdgksbtt ddddgdgks|tt dddgdddgkstt ddddgdddgkstt ddddddgdddgkstd S Nr   r_   r`   )r   rT   r[   r[   r[   r\   test_gf_stripI   s    rh   c                   C   s   t g dg kstt dgddgks(tt dgdg ks<tt dgddgksRtt dddddgddddgksttt dddddgddddddgkstd S )	N   r_      rS      r         )r   rT   r[   r[   r[   r\   test_gf_truncW   s    "rn   c                   C   s(   t dddddgdtdddgks$td S )Nri   rj   rk   r_   r   rl   )r	   rG   rT   r[   r[   r[   r\   test_gf_normala   s    ro   c                  C   s   dddd} dddd}ddddddddddddg}t | dt|ksHtt|d|ksZtd	dddd
} d	ddd}ddddddddddddg}t | dt|kstt|d|ksttdgdddddiksttdgdddddikstd S )NrS   r`      )ri   rl   r   r_   ra   r   ri   )ri   rc   ra   r   )ri   ra   r   rl   
   TZ	symmetricrd   F)r
   rG   rT   r   )fFgr[   r[   r\   test_gf_from_to_dicte   s    rw   c                   C   s   t dddddgddddddgks&ttdddddgdddd	dd
gksLttdgdddd	gksfttdgddddgkstd S )Nr_   r      r`      r^   rc   ra   rd   rb   rr   ri   Trs   F)r   rT   r   r[   r[   r[   r\   test_gf_from_to_int_polyx   s    &&rz   c                   C   s@   t g tdkstt dgtdks&tt ddgtdks<td S rg   )r%   rG   rT   r[   r[   r[   r\   
test_gf_LC   s    r{   c                   C   s@   t g tdkstt dgtdks&tt ddgtdks<td S rg   )r&   rG   rT   r[   r[   r[   r\   
test_gf_TC   s    r|   c                   C   s   t tg dtdg fkstt tdgdtddgfks@tt tdgdtddgfksbtt tddddgdtdddddgfkstt tddddgdtddddd	gfkstd S )
Nri   r   r_   r`   ra   rc   r^   rx      )r'   rG   maprT   r[   r[   r[   r\   test_gf_monic   s
    "".r   c                
   C   sH  t g dtg kstt dgdtdgks,tt dddgdtdddgksLttg ddtg ksbttg ddtg ksxttg ddtdgksttg ddtdgksttdgddtd	gksttdgddtdgksttdgddtg ksttdgddtg ksttdddgddtddd
gks2ttdddgddtdddgksVttg ddtg ksnttg ddtg ksttdgddtg ksttdgddtdgksttdddgddtg ksttdddgddtdddgksttdddgddtdddgks"ttg g dtg ks:ttdgg dtdgksVttg dgdtdgksrttdgdgdtdgksttdgdgdtdgksttddgdgdtddgksttdgddgdtddgksttdddgdddgdtdddgksttg g dtg ks4ttdgg dtdgksPttg dgdtdgkslttdgdgdtg ksttdgdgdtdgksttddgdgdtddgksttdgddgdtddgksttdddgdddgdtd
d	dgksttddd
gddgddd
dgdtdddddgksJtt	ddd
gddgddd
dgdtdddddgkstt
g g dtg kstt
g dgdtg kstt
dgg dtg kstt
dgdgdtdgkstt
dgdgdtdgkstt
dddd
ddgd	dddgdtddddd	ddddg	ksFtt
d	dddgdddd
ddgdtddddd	ddddg	kstt
dddddgdddddgdtd	ddd	d
ddddg	ksttg dtg ksttdgdtd	gksttddgdtdd	d	gksttdddddgdtd	ddd	d
ddddg	ksDtd S )Nri   r_   rr   r`   ra   	   r}   r   rc   rl   rx   r^   )r   rG   rT   r   r   r   r   r   r   r   r   r   r[   r[   r[   r\   test_gf_arith   s     $$$$""*""*  
  
  
  
$      $      $       r   c                     s  t tdd  t tdd  t tdd  t tdd  tdgdddgd	tg dgfks\ttdgdddgd	tdgks|ttdgdddgd	tg ksttd
dddddg tdddgd
dddg} ddg}t d	t| |fkstt d	t|kstt d	t| kstt t fdd td
dddddg tddddgd
ddg} dddg}t d	t| |fkstt d	t|kstt d	t| kstt t fdd ttdddgtddgdtddgks td S )Nc                   S   s   t dddgg dtS Nr_   r`   ra   ri   )r   rG   r[   r[   r[   r\   <lambda>       z"test_gf_division.<locals>.<lambda>c                   S   s   t dddgg dtS r   )r   rG   r[   r[   r[   r\   r      r   c                   S   s   t dddgg dtS r   r   rG   r[   r[   r[   r\   r      r   c                   S   s   t dddgg dtS r   r   r[   r[   r[   r\   r      r   r_   r`   ra   rx   r^   rc   r   rl   c                      s   t  dtS Nrx   r   rG   r[   rt   rv   r[   r\   r      r   c                      s   t  dtS r   r   r[   r   r[   r\   r     r   ri   )	rJ   ZeroDivisionErrorr   rG   rT   r   r   r~   rE   )qrr[   r   r\   test_gf_division   s0    $ 

r   c                  C   s   dddddg} t g dtg ks"ttg dtg g fks:tt | dtddddddgksZtt | dtdddddddgks|tt| dt| g fkstt| dtddddgdgfkstt| dtddgdddgfkstt| dtg | fkstd S )Nr_   r`   ra   rc   r^   r   )r   rG   rT   r   rt   r[   r[   r\   test_gf_shift  s     """r   c                  C   s`   ddgdfddgdfg} t | dtddddddgks8tt d| fdtdd	dd
dd	gks\td S )Nr_   r`   ra   ri   r}   r^   rl   rc   rr   r   )r   rG   rT   )ru   r[   r[   r\   test_gf_expand  s     r   c                   C   s  t dddddgddtdgks"tt dddddgddtdddddgksLtt dddddgddtdddddddddg	ks~tt dddddgddtddddddd	d
dd	dd
d	d
d
dddddd	gkstt dddddgddtddddddd
dd	dddd	dddddddd
dddddddd	d	dddg!ks,tt dddddgddtdddddddddddddddddddddddddddddddddddddd	ddddddd	ddd	ddddddddddddddddddd
ddd
ddddddddddddddddddd	ddd	dddddddddddd	dddddddddddddddddddddd
dddddddddddddddddd	ddd	dddddddd	ddd	ddddddddddddddddddddddd	gkstttdddddgdtdddgdtdgkstttdddddgdtdddgdtddgks*tttdddddgdtdddgdtddgksdtttdddddgdtdddgdtddgkstttdddddgdtdddgdtddgkstttdddddgdtdddgdtddgkstd S )Nr_   r   r}   ri   r`   r^   r   rx   rr   rl   -   rc   ra   )r   rG   rT   r    r~   r[   r[   r[   r\   test_gf_powering  s|   "*2,,          
,                                                                                                                                                       
8::::r   c                   C   s  t tg tg dtdgg g fks*tt tdgtg dtdgg dgfksXtt tg tdgdtg dgdgfkstt tdgtdgdtg dgdgfkstt tg tddgdtg dgddgfkstt tddgtg dtdgg ddgfkstt tddgtddgdtg dgddgfksTtt tddd	gtdd	dd	gdtd
dgdgdd	gfkstd S )Nri   r_   r`   rl   ra   r   rc   r}   rx   r^   )r!   rG   r~   rT   r[   r[   r[   r\   test_gf_gcdex<  s    *..0248r   c                   C   sT  t tg tg dtg ks"tt tdgtg dtdgksHtt tg tdgdtdgksntt tdgtdgdtdgkstt tg tddgdtddgkstt tddgtg dtddgkstt tddgtddgdtddgkstt tdddgtddddgdtddgksPtd S Nri   r`   r_   r   ra   r}   rx   )r"   rG   r~   rT   r[   r[   r[   r\   test_gf_gcdJ  s    "&&(**0r   c                   C   sN  t tg tg dtg ks"tt tdgtg dtg ksFtt tg tdgdtg ksjtt tdgtdgdtdgkstt tg tddgdtg kstt tddgtg dtg kstt tddgtddgdtddgkstt tdddgtddddgdtdddddgksJtd S r   )r#   rG   r~   rT   r[   r[   r[   r\   test_gf_lcmW  s    "$$(&&0r   c                   C   s  t tg tg dtg g g fks(tt tdgtg dtdgdgg fksVtt tg tdgdtdgg dgfkstt tdgtdgdtdgdgdgfkstt tg tddgdtddgg dgfkstt tddgtg dtddgdgg fkstt tddgtddgdtddgdgdgfksVtt tdddgtddddgdtddgddgdddgfkstd S r   )r$   rG   r~   rT   r[   r[   r[   r\   test_gf_cofactorsd  s    (..224   &r   c                   C   s   t g dtg kstt dgdtg ks*tt ddgdtdgksDtt dddgdtddgksbtt ddddddddddddgdtg kstd S )Nri   rx   ra   r_   r   )r-   rG   rT   r[   r[   r[   r\   test_gf_diffs  s
    r   c                
   C   s  t g ddtdkstt g ddtdks,tt dgddtdksDtt dgddtdks\tt dddddddddg	ddtdkstt dddddddddg	ddtd	kstt dddddddddg	ddtd
kstt ddddddddd
g	ddtd
kstt ddddddddd
g	ddtdks&tt ddddddddd
g	ddtd	ksPttdddgddddgdtddddgks~td S )Nrc   ri   r      rx   r_   ra   r`   r   r^   rl   )r(   rG   rT   r)   r[   r[   r[   r\   test_gf_eval}  s    ((((**r   c                  C   s  t g ddgdtg ksttg ddgddgdtg ks:tt dgg dtdgksTtt ddgg dtg ksntt ddgddgdtddgksttdddddg} tdddg}tddddg}t ||dtdddddddgkstt||| dtd	dd
dgkstd S )Nr_   r   ri   rc   r   r`   r^   rx   ra   rl   rr   )r*   rG   rT   r+   r~   rt   rv   hr[   r[   r\   test_gf_compose  s     "$r   c                  C   s  t dddddg} dddg}t ddg}t|d| dt }t|||d| dt dddgdddgfkshtt|||d| dt dddd	gdd	ddgfkstt|||d| dt dddd	gdddd
gfkstt|||d	| dt ddddgd
gfkstt|||d| dt dddgdddgfks tt|||d| dt dddd	gdd	ddgfksRtt|||d| dt ddddgdgfks~td S )Nr_   rc   r   r   ri   r^   r`   rr   ra   rx   rl   r}   )rG   r~   r    r,   rT   )rt   acbr[   r[   r\   test_gf_trace_map  s2    


r   c                   C   s   t tddtdtdkstt tddtdtdks8tt tddtdtdksTtt tddtdtdksptt tddtdtdkstt tddtdtdkstt td	dtdtdkstd S )
Nr_   ri   Tr`   ra   rc   r^   rl   rx   )r/   r.   rG   rT   r[   r[   r[   r\   test_gf_irreducible  s    r   c                  C   s  t tdgdtdkstt tddgdtdks:tt tdddgdtdksZtttdgdtdksvtttddgdtdkstttdddgdtdksttdd ttdgdtdkstttddgdtdkstttdddgdtdksttdd	 ttdgdtdksFtttddgdtdksftttdddgdtdksttdd
 tt	dd  td tdddddddddddg} tdddddddddddg}t
| |dt}t | dtdkstt |dtdks&tt |dtdks<tt| dtdksRtt|dtdkshtt|dtdks~td S )Nrx   ri   Tra   r_   FZGF_IRRED_METHODzben-orZrabinotherc                   S   s   t dgdtS )Nrx   ri   )r/   rG   r[   r[   r[   r\   r     r   z'test_gf_irreducible_p.<locals>.<lambda>r            rl   rr   rk   )r0   rG   r~   rT   r1   configsetupr/   rJ   KeyErrorr   r   r[   r[   r\   test_gf_irreducible_p  s4      " "
  r   c                  C   s  t g dtdg fkstt dgdtdg fks2tt ddgdtdddgdfgfksXttg dtdkslttdgdtdksttddgdtdksttddddt} t| dtdkstt | dtdddgdfgfkstdddd	g} t| dtdkstt | dtdddgdfdd
gd
fgfks2tt| dtddd
gksNtdddd
ddd
ddddg} t | dtdddgdfddgdfdd
gdfgfkstd S )Nri   r   r_   T)ri   r   Fr^   r}   rc   r`   ra   rl   )r2   rG   rT   r4   r
   r3   r   r[   r[   r\   test_gf_squarefree  s4    &






r   c                  C   s|   t ddddddddddg
} t ddddddddddg
}d}t||t }t| |||t }t| |||t }||ksxtd S )Nr`   r   r_   ra   )rG   r~   rD   rC   r    rT   )rt   rv   rW   r   r   Zh1r[   r[   r\   test_gf_frobenius_map  s    r   c                  C   sD  t dddddddgd} ddddddgddddd	dgdd	d	dd
dgddd
dddgddd
dddgdd
ddd
dgg}ddddddgddddddgddddddgg}t| dt|kstt|dt|kstt| dtddgdddgddddggksttddddd
d
dddg	} tddddddddgddddd
dddgdd	ddddddgddd	ddd	ddgddddddddgd	ddd	ddd
dgdddd
ddddgddddddddgg}ddddddddgddddddddgddddd
dddgg}t| dt|kstt|dt|kstt| dtddgddddgddddd	ggks@td S )Nr_   rd   ri   r   ra   r^   r}   rl   rr   r   rc   rx   r`   rS   r   )r   r5   rG   rT   r6   r;   r~   )rt   QVr[   r[   r\   test_gf_berlekamp  sH    
	
r   c               :   C   s  t tdtdddt} ddddddgdfdddddddddddgdfg}t| dt|ks`tt| dt|ksttt tdtdddt} ddgdfdddgdfdddddddgd	fdddddddddddddddddddddddddddddddddddddddddddddddddddddddg7d
fg}t| dt|ksFtt| dt|ks\tt tdtdtdtdtddd	t} dddgdfdddddgdfg}t| d	t|kstt| d	t|ksttdddddddddddg} ddgdfddddddddddg
dfg}t| dt|ks2tt| dt|ksHttttd t 	 }t dddd!|t} dd"d#gdfdd$d%d&d'd(d)d*d+g	d,fdd-d.d/d0d1gdfg}t| |t|kstt| |t|kstd S )2Nr_   rd   )r   r   ri   r   rr   r`   ?   r   ra   rl   )rl   r^   rc   ra   r_   r^      i  i  i  iE  i  rR   iA  i  n   i/  i  i     F   i  z   r   i)     r   r_   r   X  0
 il  i	H i#*  i1  i  i  iW iI rc   ;  .s YJ ,q h )
r
   rG   r7   rT   r8   r~   rI   intrH   evalf)rt   rv   rW   r[   r[   r\   test_gf_ddf<  s    
&                                  , 
r   c                  C   s^   t dddddg} t dddgdddgg}t| ddt |ksDtt| ddt |ksZtd S )Nr_   r   r`   ra   )rG   r~   r9   rT   r:   r   r[   r[   r\   test_gf_edfg  s    r   c                  C   sx   t dddddddddddddddddg} t dddddddddg	dddddddddg	g}t| ddt |ksttd S )Nr_   r   r}   r`   )rG   r~   r9   rT   r   r[   r[   r\   test_issue_23174o  s    ,2r   c                  C   s
  t g dtdg fkstt dgdtdg fks2tt ddgdtdddgdfgfksXttg dtdg fkspttdgdtdg fksttddgdtdddggfksttdd tg dtdg fksttdgdtdg fksttddgdtdddggfksttdd tg dtdg fks4ttdgdtdg fksPttddgdtdddggfkstttdd ttg dtdg fkstttdgdtdg fkstttddgdtdddggfksttdddddgd } }dddgdfddgdfdddgdfgf}tdd t | |t|ksPttdd t | |t|ksrttdd t | |t|kstdddgddgdddggf}tdd t| |t|ksttdd t| |t|ksttdd t| |t|ksttdd	dd	d
d	dgdd } }dddgdfdddgdfddddgdfgf}tdd t | |t|ksttdd t | |t|ksttdd t | |t|kstddddgd } }dddgdfddgdfgf}tdd t | |t|ksttdd t | |t|ks8ttdd t | |t|ksZtddddddddddg
d } }dddgdfdddgdfddddddgdfgf}tdd t | |t|ksttdd t | |t|ksttdd t | |t|ksttddddtd } }ddddddddddddddddddgdfdddddddddddddddddgdfgf}tdd t | |t|ksttdd t | |t|ksttdd t | |t|kstttdtdddtd } }dddgdfddgdfdddgdfdddgdfdddgdfdddddgdfdddddgdfdddddddddg	dfdddddddddg	dfg	f}tdd t | |t|ksttdd t | |t|ksttdd t | |t|kstttdtdddtd } }dddgdfdddgdfddddgdfddddgdfdddddddgdfdddddddgdfdddddddgdfdddddddgdfdddddddgdfdddddddgdfdddddddgdfdddddddgdfdddddddgdfgf}tdd t | |t|ks*ttdd t | |t|ksLttdd t | |t|ksnttt	t
dt  }tdddd|t} t| |tdkstddddgdfdddddgdfdddd d!gdfdd"d#d$d%d&gdfgf}tdd t | |t|k	sttdd t | |t|k	s:tddddgdddddgdddd d!gdd"d#d$d%d&ggf}tdd t| |t|k	sttdd t| |t|k	sttt	t
d't  }tdddd(d)d*d+g} t| |tdk	stddd,d(gdfddd-d.d/gdfgf}tdd t | |t|k
s@ttdd t | |t|k
sbtddd,d(gddd-d.d/ggf}tdd t| |t|k
sttdd t| |t|k
sttdd0 ttd1d2  td d S )3Nri   r   r_   ZGF_FACTOR_METHODZ	berlekampZ
zassenhausZshoupr`   r   rd   r^   ra   rc   r}   rr   r   )    r   rx   rl   r   r   r   Tr   r   i> i. iS it  iQ i  i:  iW{  r   r   r   r   r   r   r   )   '   &   ,   rp         r   c                   S   s   t ddgdtS )Nr_   ri   )r=   rG   r[   r[   r[   r\   r   J  r   z test_gf_factor.<locals>.<lambda>)r=   rG   rT   r<   r   r   r~   r   r
   rI   r   rH   r   r4   rJ   r   )rt   rW   rv   r[   r[   r\   test_gf_factorv  s6   &"$$ "*
0*( 

 

r   c               
   C   sx  t ddddgddksttddddgks0ttd	ddg ksDttd
ddg ksXttd	ddd	ddddgksvttddddddgksttd
d	dd	dd
dddgksttdddgdddgksttdd	dgdg kstd	dlm}  | ddD ]@}ttdd	g|d |td|t}t||t	t
d|kstqtddddgddgksZttddddgdd	dgkszttdd
ddgdd	ddgksttdddgdddddddddddg	ksttddddgdddddgksttddddgddd d!d"gksttdddgd#dddd$d%d&gks8ttddddd'gd(d)d'gksZttdddgdg ksttd S )*Nr_   rx   r`   rc   ri   i  ra   r^   r   rl   rS   r   r      r   )
primeranged   rk      r   rj      (   rK   :   C   rL   rp   r   2   rN               p         r   <   rr   )r>   rT   r?   r@   Zsympy.ntheoryr   r   r   rG   listrangerA   rB   )r   rW   rt   r[   r[   r\   test_gf_csolveN  s8       "  
$$&"r   N)sZsympy.polys.galoistoolsr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   Zsympy.polys.polyerrorsrE   Zsympy.polysrF   r   Zsympy.polys.domainsrG   Zsympy.core.numbersrH   Zsympy.ntheory.generaterI   Zsympy.testing.pytestrJ   r]   re   rf   rh   rn   ro   rw   rz   r{   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r[   r[   r[   r\   <module>   sT    	

N#

)!
*+ Y