a
    <b	m                     @   sd  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lJmKZK d dlLmMZM d dlNmOZO d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.d/ Zcd0d1 Zdd2d3 Zed4d5 Zfd6d7 Zgd8d9 Zhd:d; Zid<d= Zjd>d? Zkd@dA ZldBdC ZmdDdE ZndFdG ZodHdI ZpdJS )K    )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sTJ t| ||||t|ksnJ d S )N)1   L   A   )c   a   _   i i	 )i#  i$  i%  )>         )r   rF   r   r   )UMpuES rY   r/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-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s6J t dddksHJ t dddksZJ t dddkslJ d S )	Nr                  )r   rY   rY   rY   rZ   test_gf_int9   s    rc   c                   C   sN   t g dksJ t dgdks"J t ddgdks6J t g ddksJJ d S )Nrb   r]   r   )r]   r   r   r   r]   ra   )r   rY   rY   rY   rZ   test_gf_degreeB   s    rd   c                   C   s   t g g ksJ t dgg ks"J t g dg ks6J t dgdgksJJ t ddgdgks`J t g ddgksvJ t g dg dksJ t g dg dksJ t g dg dksJ 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_stripI   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sRJ t g ddg dkslJ t g ddg dksJ 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_truncW   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_normala   s    ro   c                  C   s   dddd} dddd}g d}t | dt|ks4J t|d|ksFJ d	d
ddd} d	ddd}g d}t | dt|ks|J t|d|ksJ tdgdddd
diksJ tdgdddd
diksJ 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_dicte   s    rw   c                   C   sl   t g ddg dksJ tg ddg dks4J tdgddd	d
gksNJ tdgddd	dgkshJ 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_polyx   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   s    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   s    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sbJ t tg ddtdg dfksJ t tg ddtdg dfksJ 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sHJ tg ddtg ks^J tg ddtg kstJ tg ddtdgksJ tg ddtdgksJ tdgddtd	gksJ tdgddtd
gksJ tdgddtg ksJ tdgddtg 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tg ksbJ tg ddtg kszJ 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sJ 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szJ 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s J tg g dtg ksJ tdgg dtdgks4J tg dgdtdgksPJ tdgdgdtg kslJ 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sFJ t	g g dtg ks^J t	g dgdtg ksxJ t	dgg dtg ksJ t	dgdgdtdgksJ t	dgdgdtdgksJ t	g dg ddtg dksJ t	g dg ddtg dksJ t	g dg ddtg dks:J t
g dtg ksPJ t
dgdtd	gksjJ 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sZJ tdgg ddtdgksxJ tdgg ddtg ksJ tg d	 tg dg d
} ddg}t dt| |fksJ t dt|ksJ t dt| ksJ t t fdd tg d	 tg dg d} g d}t dt| |fksdJ t dt|ks|J 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   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   s   t g dg dtS r   )r   rF   rY   rY   rY   rZ   r      r   c                   S   s   t g dg dtS r   r   rF   rY   rY   rY   rZ   r      r   c                   S   s   t g dg dtS r   r   rY   rY   rY   rZ   r      r   r]   r   rx   )r\   ra   r_   r^   r]   r   )r\   r]   r   rl   r_   c                      s   t  dtS Nrx   r   rF   rY   rt   rv   rY   rZ   r      r   )r]   r^   r_   r   )r\   r]   r   rk   c                      s   t  dtS 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    "r   c                  C   s   g d} t g dtg ksJ tg dtg g fks4J t | dtg dksLJ t | dtg dksdJ t| dt| g fks|J t| dtg ddgfksJ t| d	tddgg d
fksJ t| dtg | fksJ 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s0J t d| fdtg dksLJ 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sXJ t g dddtg dksvJ t g dd	dtg d
ksJ t g dddtg dksJ ttg ddtg ddtdgksJ ttg ddtg ddtddgksJ ttg ddtg ddtddgksDJ ttg ddtg ddtdd	gksvJ 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$    .2222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sXJ t tg tdgdtg dgdgfksJ t tdgtdgdtg dgdgfksJ t tg tddgdtg dgddgfksJ t tddgtg dtdgg ddgfksJ t tddgtddgdtg dgddgfksTJ 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48r   c                   C   sN  t tg tg dtg ks"J t tdgtg dtdgksHJ t tg tdgdtdgksnJ t tdgtdgdtdgksJ t tg tddgdtddgksJ t tddgtg dtddgksJ t tddgtddgdtddgksJ t tg dtg ddtddgksJJ d S )	Nrg   r^   r]   r   r_   r   r   rx   )r"   rF   r   rY   rY   rY   rZ   test_gf_gcdJ  s    "&&(**0r   c                   C   sB  t tg tg dtg ks"J t tdgtg dtg ksFJ t tg tdgdtg ksjJ t tdgtdgdtdgksJ t tg tddgdtg ksJ t tddgtg dtg ksJ t tddgtddgdtddgksJ t tg dtg ddtg dks>J d S )	Nrg   r^   r]   r   r_   r   r   )r]   r   r   r   rx   )r#   rF   r   rY   rY   rY   rZ   test_gf_lcmW  s    "$$(&&0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sVJ t tg tdgdtdgg dgfksJ t tdgtdgdtdgdgdgfksJ t tg tddgdtddgg dgfksJ t tddgtg dtddgdgg fksJ t tddgtddgdtddgdgdgfksVJ 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_cofactorsd  s    (..224  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sDJ t g ddtddgks`J t g ddtg ksxJ 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_diffs  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sDJ t dgddtdks\J t g dddtdksvJ t g dddtdksJ t g dddtdksJ t g d	ddtdksJ t g d	ddtd
ksJ t g d	ddtdksJ tg dg ddtg dksJ 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sTJ t ddgg dtg ksnJ t ddgddgdtddgksJ tg d} tg d}tg d}t ||dtg dksJ t||| dtg dksJ 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   sP  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sJ t|||d| dt g d	g d
fksJ t|||d| dt g ddgfksJ t|||d| dt g dg dfksJ t|||d| dt g dg dfks$J t|||d| dt g ddgfksLJ 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 s8J t tddtdtdu sTJ t tddtdtdu spJ t tddtdtdu sJ t tddtdtdu sJ t td	dtdtdu sJ d S )
Nr]   rg   Tr^   r_   ra   r\   rl   rx   )r/   r.   rF   rY   rY   rY   rZ   test_gf_irreducible  s    r   c                  C   sV  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 sXJ ttdgdtdu stJ 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gdtdu sJ ttddgdtdu sJ ttg ddtdu sJ tdd	 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 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 sRJ 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s2J t ddgdtdddgdfgfksXJ tg dtdu slJ tdgdtdu sJ tddgdtdu sJ tddddt} t| dtdu sJ t | dtdddgdfgfksJ g d} t| dtdu sJ t | dtdddgdfddgdfgfks,J t| dtg d	ksFJ 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sXJ 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   h1rY   rY   rZ   test_gf_frobenius_map  s    r   c                  C   sP  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s`J t|dt|kstJ t| dtddgg dg dgksJ 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sJ t|dt|ks$J t| dtddgg dg dgksLJ 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sFJ t| dt|ksZJ 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sJ t| dt|ksJ 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s"J t| dt|ks8J tg d} ddgdfg ddfg}t| dt|kstJ 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sJ 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sPJ d S )Nr   r   )r]   r]   r^   r^   r_   )rF   r   r9   r:   r   rY   rY   rZ   test_gf_edfg  s    r   c                  C   s	  t g dtdg fksJ t dgdtdg fks2J t ddgdtdddgdfgfksXJ tg dtdg fkspJ 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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sJ tdd tg dtdg fks4J tdgdtdg fksPJ tddgdtdddggfkstJ 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sHJ tdd t | |t|ksjJ tdd t | |t|ksJ dddgddgg d
gf}tdd t| |t|ksJ tdd t| |t|ksJ 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shJ 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sJ tdd t | |t|ksJ tdd t | |t|ksJ tddddtd } }dg ddfg ddfgf}tdd t | |t|ks,J tdd t | |t|ksNJ tdd t | |t|kspJ 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s6J tdd t | |t|ksXJ 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s$J tdd t | |t|ksFJ tdd t | |t|kshJ 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sJ ttt	d4t
  }tg d5} t| |td/u sJ dg d6dfg d7dfgf}tdd t | |t|ksJ tdd t | |t|k	sJ dg d6g d7gf}tdd t| |t|k	sTJ tdd t| |t|k	svJ 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   C  r   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_factoro  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sTJ tdddg dkslJ tdddg dksJ td	ddg dksJ tg dddgksJ tg dddd
gksJ tg ddg dksJ tg dddg dksJ tg dddg dks$J tg dddg dksBJ tg ddg dks^J tg dd d!d"gkszJ 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_csolveG  s(    

r   N)qZ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sympy.core.numbersrG   Zsympy.ntheory.generaterH   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