o
    8Val                     @   s\  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@mAZAmBZB d dlCmDZD d dlEmFZG d dlHmIZI d dlJmKZKmLZL d dlMmNZN dd ZOd	d
 ZPd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/d0 Zcd1d2 Zdd3d4 Zed5d6 Zfd7d8 Zgd9d: Zhd;d< Zid=d> Zjd?d@ ZkdAdB ZldCdD ZmdEdF ZndGdH ZodIS )J    )B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	gf_csolvegf_frobenius_mapgf_frobenius_monomial_base)ExactQuotientFailed)
polyconfig)ZZ)pi	nextprime)raisesc                  C   sr   g d} g d}d}d}t | |t|ksJ g d}g d}t|t|||fks*J t| ||||t|ks7J d S )N)1   L   A   )c   a   _   i i	 )i#  i$  i%  )>         )r   rF   r   r   )UMpuES rY   D/usr/lib/python3/dist-packages/sympy/polys/tests/test_galoistools.pytest_gf_crt(   s   r[   c                   C   sp   t dddks	J t dddksJ t dddksJ t dddks$J t dddks-J t dddks6J d S )	Nr                  )r   rY   rY   rY   rZ   test_gf_int8   s   rc   c                   C   sN   t g dksJ t dgdksJ t ddgdksJ t g ddks%J d S )Nrb   r]   r   )r]   r   r   r   r]   ra   )r   rY   rY   rY   rZ   test_gf_degreeA   s   rd   c                   C   s   t g g ksJ t dgg ksJ t g dg ksJ t dgdgks%J t ddgdgks0J t g ddgks;J t g dg dksGJ t g dg dksSJ t g dg dks_J d S )Nr   )r   r   r   r]   )r   r   r   r]   r]   r^   r   )r   r]   r^   r   )r   r   r   r]   r^   r   )r   rY   rY   rY   rZ   test_gf_stripH   s   rf   c                   C   s   t g dg ks	J t dgddgksJ t dgdg ksJ t dgddgks)J t g ddg dks6J t g ddg dksCJ d S )	N   r]      rR   rg   rh      r]   r      r]   r   )rR      rj   r]   r   )r]   r]   rl   r]   r   )r   rY   rY   rY   rZ   test_gf_truncV   s   rn   c                   C   s    t g ddtg dksJ d S )Nri   rg   rk   )r	   rF   rY   rY   rY   rZ   test_gf_normal`   s    ro   c                  C   s   dddd} dddd}g d}t | dt|ksJ t|d|ks#J d	d
ddd} d	ddd}g d}t | dt|ks>J t|d|ksGJ tdgdddd
diksUJ tdgdddd
dikscJ d S )NrR   r^      )rg   rl   r   r]   r_   )r]   r   r   r   r   r^   r   r   r   r   r   r_   rg   r   )rg   ra   r_   r   )rg   r_   r   )rl   r   r   r   r   r   r   r   r]   r   r   r]   
   TZ	symmetricrb   F)r
   rF   r   )fFgrY   rY   rZ   test_gf_from_to_dictd   s    rw   c                   C   sl   t g ddg dksJ tg ddg dksJ tdgddd	d
gks'J tdgddd	dgks4J d S )N)r]   r      r^      r\   )r]   r   r^   r^   r   )r]   r   ra   r^   r_   )r]   r   rb   r^   r`   rr   rg   Trs   rb   F)r   r   rY   rY   rY   rZ   test_gf_from_to_int_polyw   s   rz   c                   C   s@   t g tdks	J t dgtdksJ t ddgtdksJ d S Nr   r]   r^   )r%   rF   rY   rY   rY   rZ   
test_gf_LC      r|   c                   C   s@   t g tdks	J t dgtdksJ t ddgtdksJ d S r{   )r&   rF   rY   rY   rY   rZ   
test_gf_TC   r}   r~   c                   C   s   t tg dtdg fksJ t tdgdtddgfks J t tdgdtddgfks1J t tg ddtdg dfksDJ t tg ddtdg dfksWJ d S )Nrg   r   r]   r^   r]   r^   r_   ra   )r^   r_   ra   r\   )r]   rx   r^      )r'   rF   maprY   rY   rY   rZ   test_gf_monic   s
   ""&*r   c                   C   s  t g dtg ks
J t dgdtdgksJ t g ddtg dks$J tg ddtg ks/J tg ddtg ks:J tg ddtdgksFJ tg ddtdgksRJ tdgddtd	gks_J tdgddtd
gkslJ tdgddtg ksxJ tdgddtg ksJ tg dddtg dksJ tg dddtg dksJ tg ddtg ksJ tg ddtg ksJ tdgddtg ksJ tdgddtdgksJ tg dddtg ksJ tg dddtg dksJ tg dddtg dksJ tg g dtg ksJ tdgg dtdgksJ tg dgdtdgks$J tdgdgdtdgks3J tdgdgdtdgksBJ tddgdgdtddgksSJ tdgddgdtddgksdJ tg dg ddtg dksvJ tg g dtg ksJ tdgg dtdgksJ tg dgdtdgksJ tdgdgdtg ksJ tdgdgdtdgksJ tddgdgdtddgksJ tdgddgdtddgksJ tg dg ddtg dksJ tg dddgg ddtg dksJ tg dddgg ddtg dksJ t	g g dtg ks%J t	g dgdtg ks2J t	dgg dtg ks?J t	dgdgdtdgksNJ t	dgdgdtdgks]J t	g dg ddtg dksoJ t	g dg ddtg dksJ t	g dg ddtg dksJ t
g dtg ksJ t
dgdtd	gksJ t
ddgdtg dksJ t
g ddtg dksJ d S )Nrg   r]   rr   r]   r^   r_   )rr   	   r   r   r_   r   ra   r   )r]   r^   rl   re   rx   )rx   r_   rr   r^   )r   r   rr   )r   r   r^   r_   r^   r]   )rl   ra   r^   )r]   r\   rl   )r   r   rl   r]   )r]   r^   rr   r   r   )rr   r   r_   r^   r_   r\   )r_   r   r   rl   r]   r^   )ra   r   r]   r   	r]   r   r_   r^   ra   r_   r]   r^   r   )r^   r   r   r]   rx   	ra   r   r   ra   rl   r   r]   r_   r\   )r]   ra   ra   )r   rF   r   r   r   r   r   r   r   r   r   rY   rY   rY   rZ   test_gf_arith   st   ""$""$

$$$"r   c                     s  t tdd  t tdd  t tdd  t tdd  tdgg ddtg dgfks-J tdgg ddtdgks<J tdgg ddtg ksJJ tg d	 tg dg d
} ddg}t dt| |fksmJ t dt|ksxJ t dt| ksJ t t fdd tg d	 tg dg d} g d}t dt| |fksJ t dt|ksJ t dt| ksJ t t fdd ttg dtddgdtddgksJ d S )Nc                   S      t g dg dtS Nr   rg   )r   rF   rY   rY   rY   rZ   <lambda>       z"test_gf_division.<locals>.<lambda>c                   S   r   r   )r   rF   rY   rY   rY   rZ   r      r   c                   S   r   r   r   rF   rY   rY   rY   rZ   r      r   c                   S   r   r   r   rY   rY   rY   rZ   r      r   r]   r   rx   )r\   ra   r_   r^   r]   r   )r\   r]   r   rl   r_   c                         t  dtS Nrx   r   rF   rY   rt   rv   rY   rZ   r          )r]   r^   r_   r   )r\   r]   r   rk   c                      r   r   r   rY   r   rY   rZ   r     r   )r]   r^   r]   rg   )rI   ZeroDivisionErrorr   rF   r   r   r   rD   )qrrY   r   rZ   test_gf_division   s0   "2r   c                  C   s   g d} t g dtg ksJ tg dtg g fksJ t | dtg dks&J t | dtg dks2J t| dt| g fks>J t| dtg ddgfksMJ t| d	tddgg d
fks]J t| dtg | fksiJ d S )N)r]   r^   r_   ra   r\   r\   r]   )r]   r^   r_   ra   r\   r   r^   )r]   r^   r_   ra   r\   r   r   r   r   r_   )r_   ra   r\   )r   rF   r   rt   rY   rY   rZ   test_gf_shift  s    r   c                  C   sP   ddgdfddgdfg} t | dtg dksJ t d| fdtg dks&J d S )Nr]   r^   r_   rg   )r]   r   r_   r\   rl   r   ra   )ra   rr   r]   r   r^   rr   )r   rF   )ru   rY   rY   rZ   test_gf_expand  s    r   c                   C   s  t g dddtdgksJ t g dddtg dksJ t g dddtg dks,J t g dddtg dks;J t g dd	dtg d
ksJJ t g dddtg dksYJ ttg ddtg ddtdgkspJ ttg ddtg ddtddgksJ ttg ddtg ddtddgksJ ttg ddtg ddtdd	gksJ ttg dd	tg ddtddgksJ ttg ddtg ddtddgksJ d S )N)r]   r   r   r]   r   r   rg   r]   r^   )	r]   r   r   r^   r\   r   r]   r\   r   r\   )r]   r   r   r\   rx   r   rr   rl   r^   rr   r   rl   rr   rl   rl   r   r\   r^   r\   r   rr   r   )!r]   r   r   r   r   r   rl   r   rr   r]   r^   r\   rr   rx   rx   r   r]   r^   r   r   rl   r^   r\   r^   r\   rx   rx   r   rr   rr   rx   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   ra   r   r   ra   rr   r   r   r   r   r   r   rr   r   r   rr   r_   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rl   r   r   rl   ra   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rr   r   r   rr   r_   r   r   r   r   r   r   ra   r   r   ra   rr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rl   r   r   r   r   r   r   r_   r   r   r_   r^   r   r   r   r   r   r   rr   r   r   rr   r_   r   r   r   r   r   r   rr   r   r   rr   r_   r   r   r   r   r   r   r^   r   r   r^   r\   r   r   r   r   r   r   ra   r   r   ra   rr   )r^   r   rx   r_   rx   ra   )r   rF   r    r   rY   rY   rY   rZ   test_gf_powering  s$   .00004r   c                   C   s  t tg tg dtdgg g fksJ t tdgtg dtdgg dgfks,J t tg tdgdtg dgdgfksCJ t tdgtdgdtg dgdgfks[J t tg tddgdtg dgddgfkstJ t tddgtg dtdgg ddgfksJ t tddgtddgdtg dgddgfksJ t tg dtg d	dtd
dgdgddgfksJ d S )Nrg   r]   r^   rl   r_   r   ra   r]   r   rx   r]   rx   r]   rx   r\   rx   )r!   rF   r   rY   rY   rY   rZ   test_gf_gcdex;  s   *..0226>r   c                   C   sJ  t tg tg dtg ksJ t tdgtg dtdgks$J t tg tdgdtdgks7J t tdgtdgdtdgksKJ t tg tddgdtddgks`J t tddgtg dtddgksuJ t tddgtddgdtddgksJ t tg dtg ddtddgksJ d S )	Nrg   r^   r]   r   r_   r   r   rx   )r"   rF   r   rY   rY   rY   rZ   test_gf_gcdI  s   "&&(**.2r   c                   C   s>  t tg tg dtg ksJ t tdgtg dtg ks#J t tg tdgdtg ks5J t tdgtdgdtdgksIJ t tg tddgdtg ks\J t tddgtg dtg ksoJ t tddgtddgdtddgksJ t tg dtg ddtg dksJ d S )	Nrg   r^   r]   r   r_   r   r   )r]   r   r   r   rx   )r#   rF   r   rY   rY   rY   rZ   test_gf_lcmV  s   "$$(&&.2r   c                   C   s  t tg tg dtg g g fksJ t tdgtg dtdgdgg fks+J t tg tdgdtdgg dgfksBJ t tdgtdgdtdgdgdgfks[J t tg tddgdtddgg dgfkstJ t tddgtg dtddgdgg fksJ t tddgtddgdtddgdgdgfksJ t tg dtg ddtddgddgg d	fksJ d S )
Nrg   r^   r]   r   r_   r   r   rx   r]   r   r]   )r$   rF   r   rY   rY   rY   rZ   test_gf_cofactorsc  s   (..222 
 r   c                   C   s|   t g dtg ks
J t dgdtg ksJ t ddgdtdgks"J t g ddtddgks0J t g ddtg ks<J d S )Nrg   rx   r_   rx   r_   r]   )r]   r   r   r   r   r   r   r   r   r   r   r]   )r-   rF   rY   rY   rY   rZ   test_gf_diffr  s
   r   c                   C   s  t g ddtdksJ t g ddtdksJ t dgddtdks"J t dgddtdks.J t g dddtdks;J t g dddtdksHJ t g dddtdksUJ t g d	ddtdksbJ t g d	ddtd
ksoJ t g d	ddtdks|J tg dg ddtg dksJ d S )Nra   rg   r      rx   r   r   r\   r   r_   r   )r   r]   r^   r_   )r]   rl   rl   r]   )r(   rF   r)   rY   rY   rY   rZ   test_gf_eval|  s   &r   c                  C   s   t g ddgdtg ksJ tg ddgddgdtg ksJ t dgg dtdgks*J t ddgg dtg ks7J t ddgddgdtddgksHJ tg d} tg d}tg d}t ||dtg dksjJ t||| dtg dksxJ d S )	Nr]   r   rg   r]   r]   ra   r   r]   r]   r]   r]   )r]   r   r   r^   )r]   r   r   r\   r   r   rx   )r_   r   rl   rr   )r*   rF   r+   r   rt   rv   hrY   rY   rZ   test_gf_compose  s    " r   c                  C   sL  t g d} g d}t ddg}t|d| dt }t|||d| dt g dg dfks.J t|||d| dt g dg dfksBJ t|||d| dt g d	g d
fksVJ t|||d| dt g ddgfksiJ t|||d| dt g dg dfks}J t|||d| dt g dg dfksJ t|||d| dt g ddgfksJ d S )Nr   r   r]   r   rg   )r\   r^   rr   r_   )r\   r_   r   ra   r^   )r\   r   r\   r_   )rr   r]   r\   rx   r_   )r]   rr   rl   r   rx   ra   )r]   r]   r   r\   )r\   r_   r   r   rr   )rF   r   r    r,   )rt   acbrY   rY   rZ   test_gf_trace_map  s2   r   c                   C   s   t tddtdtdu sJ t tddtdtdu sJ t tddtdtdu s*J t tddtdtdu s8J t tddtdtdu sFJ t tddtdtdu sTJ t td	dtdtdu sbJ d S )
Nr]   rg   Tr^   r_   ra   r\   rl   rx   )r/   r.   rF   rY   rY   rY   rZ   test_gf_irreducible  s    r   c                  C   sJ  t tdgdtdu sJ t tddgdtdu sJ t tg ddtdu s,J ttdgdtdu s:J ttddgdtdu sIJ ttg ddtdu sXJ tdd ttdgdtdu slJ ttddgdtdu s{J ttg ddtdu sJ tdd	 ttdgdtdu sJ ttddgdtdu sJ ttg ddtdu sJ tdd
 ttdd  td tg d} tg d}t	| |dt}t | dtdu sJ t |dtdu sJ t |dtdu sJ t| dtdu sJ t|dtdu sJ t|dtdu s#J d S )Nrx   rg   Tr_   r   FZGF_IRRED_METHODzben-orZrabinotherc                   S   s   t dgdtS )Nrx   rg   )r/   rF   rY   rY   rY   rZ   r     r   z'test_gf_irreducible_p.<locals>.<lambda>)r]   r   r            rl   rx   rx   rx   rr   )r]   rx   r   rx   r   r   r   rg   r   rr   r   rj   )
r0   rF   r   r1   configsetupr/   rI   KeyErrorr   r   rY   rY   rZ   test_gf_irreducible_p  s4   
r   c                  C   s  t g dtdg fksJ t dgdtdg fksJ t ddgdtdddgdfgfks,J tg dtdu s6J tdgdtdu sAJ tddgdtdu sMJ tddddt} t| dtdu s`J t | dtdddgdfgfksqJ g d} t| dtdu sJ t | dtdddgdfddgdfgfksJ t| dtg d	ksJ g d
} t | dtdddgdfddgdfddgdfgfksJ d S )Nrg   r   r]   T)rg   r   Fr]   r\   r   ra   r^   )r]   r_   r^   )r]   r   r   r^   r   r   r^   r   r   r]   r   r_   rl   )r2   rF   r4   r
   r3   r   rY   rY   rZ   test_gf_squarefree  s4   &





r   c                  C   s\   t g d} t g d}d}t||t }t| |||t }t| |||t }||ks,J d S )N)
r^   r   r]   r   r^   r^   r   r^   r^   r^   )
r]   r]   r   r^   r   r]   r   r^   r   r]   r_   )rF   r   rC   rB   r    )rt   rv   rU   r   r   Zh1rY   rY   rZ   test_gf_frobenius_map  s   r   c                  C   sJ  t g dd} g dg dg dg dg dg dg}g dg d	g d
g}t| dt|ks0J t|dt|ks:J t| dtddgg dg dgksMJ tg d} tg dg dg dg dg dg dg dg dg}g dg dg dg}t| dt|ksJ t|dt|ksJ t| dtddgg dg dgksJ d S )Nr]   r]   r   rb   r   r]   rg   )r]   r   r   r   r   r   )r_   r\   r   r   rl   r\   )r_   rl   rl   r]   rr   r   )r   ra   rr   r_   rx   r   )rx   r   rr   r   r   r   )r   rr   rx   r   rr   r   )r   r]   r]   r]   r]   r   )r   r   rx   r   r   r]   r]   r]   r\   r_   r   )	r]   r   r]   r   rr   rr   r   r^   r   )r]   r   r   r   r   r   r   r   )r^   r]   rx   rg   rr   rR   r\   rg   )r_   rl   ra   r_   r   ra   rx   r^   )ra   r_   rl   r\   r]   rl   r^   r_   )r^   rg   r   r   r_   r]   r_   rg   )rl   rg   r   rl   r^   rx   rr   r   )r\   rg   rx   rr   r   rg   rx   rR   )r_   r_   rR   r\   r   rg   r   rR   )r   r\   r\   r   r   r\   r]   r   )r   r   rg   r   rr   rR   r   r]   r   r_   )r]   r   ra   rR   )r]   r^   r_   ra   rl   )r   r5   rF   r6   r;   r   )rt   QVrY   rY   rZ   test_gf_berlekamp  sH   

	
r   c                  C   s  t tdtdddt} g ddfg ddfg}t| dt|ks#J t| dt|ks-J t tdtdddt} ddgdfg d	dfg d
dfg ddfg}t| dt|ksZJ t| dt|ksdJ t tdtdtdtdtdddt} g ddfg ddfg}t| dt|ksJ t| dt|ksJ tg d} ddgdfg ddfg}t| dt|ksJ t| dt|ksJ tttdt  }t dddd|t} g ddfg ddfg ddfg}t| |t|ksJ t| |t|ksJ d S )Nr]   rb   )r   r   rg   )r]   r   r   r   r   rr   )r]   r   r   r   r   r]   r   r   r   r   r]   r^   ?   r   r   )r]   r]   r]   r]   r]   r]   r]   r_   )7r]   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]   r]   r   r]   r   r]   r]   r   r]   r]   rl   )rl   r\   ra   r_   r]   )r]   r]   r   r]   r]   r   r]   r^   )r]   r^   r\      i  i  i  iE  i  rQ   iA  i  )
r]   n   i/  i  i     r   F   i  z   r   i)     r   r]   r   r]   iX  i0
 )	r]   il  i	H i#*  i1  i  i  iW iI ra   r]   i;  i.s iYJ i,q ih r\   )	r
   rF   r7   r8   r   rH   intrG   evalf)rt   rv   rU   rY   rY   rZ   test_gf_ddf;  sH   




,






r   c                  C   sT   t g d} t g dg dg}t| ddt |ksJ t| ddt |ks(J d S )Nr   r   )r]   r]   r^   r^   r_   )rF   r   r9   r:   r   rY   rY   rZ   test_gf_edff  s   r   c                  C   s	  t g dtdg fksJ t dgdtdg fksJ t ddgdtdddgdfgfks,J tg dtdg fks8J tdgdtdg fksEJ tddgdtdddggfksVJ tdd tg dtdg fkshJ tdgdtdg fksuJ tddgdtdddggfksJ tdd tg dtdg fksJ tdgdtdg fksJ tddgdtdddggfksJ tdd ttg dtdg fksJ ttdgdtdg fksJ ttddgdtdddggfksJ tg dd	} }dddgdfddgdfg d
dfgf}tdd t | |t|ksJ tdd t | |t|ks.J tdd t | |t|ks?J dddgddgg d
gf}tdd t| |t|ks]J tdd t| |t|ksnJ tdd t| |t|ksJ tg ddd} }dddgdfg ddfg ddfgf}tdd t | |t|ksJ tdd t | |t|ksJ tdd t | |t|ksJ g dd} }dddgdfdd	gd	fgf}tdd t | |t|ksJ tdd t | |t|ksJ tdd t | |t|ksJ g dd} }dddgd	fg ddfg ddfgf}tdd t | |t|ksBJ tdd t | |t|ksSJ tdd t | |t|ksdJ tddddtd} }dg ddfg ddfgf}tdd t | |t|ksJ tdd t | |t|ksJ tdd t | |t|ksJ ttdtdddtd} }dddgdfddgdfg ddfg ddfg ddfg ddfg ddfg ddfg ddfg	f}tdd t | |t|ksJ tdd t | |t|ksJ tdd t | |t|ks%J ttdtdddtd} }ddd gdfg d!dfg d"dfg d#dfg d$dfg d%dfg d&dfg d'dfg d(dfg d)dfg d*dfg d+dfg d,dfgf}tdd t | |t|ksJ tdd t | |t|ksJ tdd t | |t|ksJ ttt	d-t
  }tdddd.|t} t| |td/u sJ dg d0dfg d1dfg d2dfg d3dfgf}tdd t | |t|ksJ tdd t | |t|ksJ dg d0g d1g d2g d3gf}tdd t| |t|ks)J tdd t| |t|ks:J ttt	d4t
  }tg d5} t| |td/u sXJ dg d6dfg d7dfgf}tdd t | |t|kswJ tdd t | |t|ksJ dg d6g d7gf}tdd t| |t|ksJ tdd t| |t|ksJ tdd8 ttd9d:  td d S );Nrg   r   r]   ZGF_FACTOR_METHODZ	berlekampZ
zassenhausZshoup)r]   r   r   r]   r   r^   r   r   r   r   r   )
r]   r]   rr   r]   r   rr   rr   rr   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   rr   )r]   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rr   r   r\   r_   )r]   r   r   )r]   r^   r^   )r]   r   r^   )r]   r   r\   r   rx   )r]   r   rl   r   rx   )	r]   r   r   r   r]   r   r   r   rl   )	r]   r   r   r   rr   r   r   r   rl   r   rx   )r]   ra   r\   )r]   rl   r   r^   )r]   r   r   r^   )r]   r   r   r   r   r   ra   )r]   r^   r   r   ra   rl   ra   )r]   r^   r_   r   r   rl   ra   )r]   r^   rl   r   r   ra   ra   )r]   r_   r_   r]   rl   r   ra   )r]   r\   rl   r   r   rl   ra   )r]   rl   r^   rx   r   r   ra   )r]   rr   ra   rx   rr   rx   ra   )r]   rr   rr   r]   ra   r   ra   r   r   Tr   )r]   i> i. iS it  )r]   iQ i  i:  iW{  r   r   )r]   r^   r\   r   )   '   &   )r]   ,   r   )r]   rg   rp         r   c                   S   s   t ddgdtS )Nr]   rg   )r=   rF   rY   rY   rY   rZ   r   B  s    z test_gf_factor.<locals>.<lambda>)r=   rF   r<   r   r   r   r   r
   rH   r   rG   r   r4   rI   r   )rt   rU   rv   rY   rY   rZ   test_gf_factorn  s6  &""" (



&
 








 















r   c                   C   s  t g dddksJ tddddgksJ tdddg ks J td	d
dg ks*J tdddg dks6J tdddg dksBJ td	ddg dksNJ tg dddgksZJ tg dddd
gksgJ tg ddg dkstJ tg dddg dksJ tg dddg dksJ tg dddg dksJ tg ddg dksJ tg dd d!d"gksJ tg ddg ksJ d S )#N)r]   rx   r^   ra   rg   i  ra   r_   r\   r^   r   rl   r]   )r   r]   r^   r_   ra   rR   r   )ra   r      r   )r   r_   rl   r   rR   r   )r]   r_   r^   rj   rx   )r]   r_   r]   r\   )r_   rl   r   r_   )r   r]   r^   )r]   r]      )	ra   r   rh      (   rJ   :   C   rK   )r_   r\   r^   rp   )r   2   rM   )r_   r^   r^   rJ   )         )r]   r]   rx      )r   rJ   rK   p         )r]   r_   ra   r]   r   <   rr   r   )r>   r?   r@   rA   rY   rY   rY   rZ   test_gf_csolveF  s(   
r   N)pZ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   Zsympy.polys.polyerrorsrD   Zsympy.polysrE   r   Zsympy.polys.domainsrF   ZsympyrG   rH   Zsympy.testing.pytestrI   r[   rc   rd   rf   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   rY   rY   rY   rZ   <module>   sR     	

N#

)!
*+ Y