a
    khto                     @   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   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   rG   r   r   )UMpuES rZ   P/var/www/auris/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   rZ   rZ   rZ   r[   test_gf_int9   s    rd   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 )Nrc   r^   r   )r^   r   r   r   r^   rb   )r   rZ   rZ   rZ   r[   test_gf_degreeB   s    re   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   rZ   rZ   rZ   r[   test_gf_stripI   s    rg   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^      rS   rh   ri      r^   r      r^   r   )rS      rk   r^   r   )r^   r^   rm   r^   r   )r   rZ   rZ   rZ   r[   test_gf_truncW   s    ro   c                   C   s    t g ddtg dksJ d S )Nrj   rh   rl   )r	   rG   rZ   rZ   rZ   r[   test_gf_normala   s    rp   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 )NrS   r_      )rh   rm   r   r^   r`   )r^   r   r   r   r   r_   r   r   r   r   r   r`   rh   r   )rh   rb   r`   r   )rh   r`   r   )rm   r   r   r   r   r   r   r   r^   r   r   r^   
   TZ	symmetricrc   F)r
   rG   r   )fFgrZ   rZ   r[   test_gf_from_to_dicte   s    rx   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   rb   r_   r`   )r^   r   rc   r_   ra   rs   rh   Trt   rc   F)r   r   rZ   rZ   rZ   r[   test_gf_from_to_int_polyx   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 Nr   r^   r_   )r%   rG   rZ   rZ   rZ   r[   
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&   rG   rZ   rZ   rZ   r[   
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 )Nrh   r   r^   r_   r^   r_   r`   rb   )r_   r`   rb   r]   )r^   ry   r_      )r'   rG   maprZ   rZ   rZ   r[   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 )Nrh   r^   rs   r^   r_   r`   )rs   	   r   r   r`   r   rb   r   )r^   r_   rm   rf   ry   )ry   r`   rs   r_   )r   r   rs   )r   r   r_   r`   r_   r^   )rm   rb   r_   )r^   r]   rm   )r   r   rm   r^   )r^   r_   rs   r   r   )rs   r   r`   r_   r`   r]   )r`   r   r   rm   r^   r_   )rb   r   r^   r   	r^   r   r`   r_   rb   r`   r^   r_   r   )r_   r   r   r^   ry   	rb   r   r   rb   rm   r   r^   r`   r]   )r^   rb   rb   )r   rG   r   r   r   r   r   r   r   r   r   rZ   rZ   rZ   r[   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   rh   )r   rG   rZ   rZ   rZ   r[   <lambda>       z"test_gf_division.<locals>.<lambda>c                   S   s   t g dg dtS r   )r   rG   rZ   rZ   rZ   r[   r      r   c                   S   s   t g dg dtS r   r   rG   rZ   rZ   rZ   r[   r      r   c                   S   s   t g dg dtS r   r   rZ   rZ   rZ   r[   r      r   r^   r   ry   )r]   rb   r`   r_   r^   r   )r]   r^   r   rm   r`   c                      s   t  dtS Nry   r   rG   rZ   ru   rw   rZ   r[   r      r   )r^   r_   r`   r   )r]   r^   r   rl   c                      s   t  dtS r   r   rZ   r   rZ   r[   r     r   )r^   r_   r^   rh   )rJ   ZeroDivisionErrorr   rG   r   r   r   rE   )qrrZ   r   r[   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`   rb   r]   r]   r^   )r^   r_   r`   rb   r]   r   r_   )r^   r_   r`   rb   r]   r   r   r   r   r`   )r`   rb   r]   )r   rG   r   ru   rZ   rZ   r[   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`   rh   )r^   r   r`   r]   rm   r   rb   )rb   rs   r^   r   r_   rs   )r   rG   )rv   rZ   rZ   r[   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   rh   r^   r_   )	r^   r   r   r_   r]   r   r^   r]   r   r]   )r^   r   r   r]   ry   r   rs   rm   r_   rs   r   rm   rs   rm   rm   r   r]   r_   r]   r   rs   r   )!r^   r   r   r   r   r   rm   r   rs   r^   r_   r]   rs   ry   ry   r   r^   r_   r   r   rm   r_   r]   r_   r]   ry   ry   r   rs   rs   ry   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   rb   r   r   rb   rs   r   r   r   r   r   r   rs   r   r   rs   r`   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rm   r   r   rm   rb   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rs   r   r   rs   r`   r   r   r   r   r   r   rb   r   r   rb   rs   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rm   r   r   r   r   r   r   r`   r   r   r`   r_   r   r   r   r   r   r   rs   r   r   rs   r`   r   r   r   r   r   r   rs   r   r   rs   r`   r   r   r   r   r   r   r_   r   r   r_   r]   r   r   r   r   r   r   rb   r   r   rb   rs   )r_   r   ry   r`   ry   rb   )r   rG   r    r   rZ   rZ   rZ   r[   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 )Nrh   r^   r_   rm   r`   r   rb   r^   r   ry   r^   ry   r^   ry   r]   ry   )r!   rG   r   rZ   rZ   rZ   r[   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 )	Nrh   r_   r^   r   r`   r   r   ry   )r"   rG   r   rZ   rZ   rZ   r[   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 )	Nrh   r_   r^   r   r`   r   r   )r^   r   r   r   ry   )r#   rG   r   rZ   rZ   rZ   r[   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 )
Nrh   r_   r^   r   r`   r   r   ry   r^   r   r^   )r$   rG   r   rZ   rZ   rZ   r[   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 )Nrh   ry   r`   ry   r`   r^   )r^   r   r   r   r   r   r   r   r   r   r   r^   )r-   rG   rZ   rZ   rZ   r[   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 )Nrb   rh   r      ry   r   r   r]   r   r`   r   )r   r^   r_   r`   )r^   rm   rm   r^   )r(   rG   r)   rZ   rZ   rZ   r[   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   rh   r^   r^   rb   r   r^   r^   r^   r^   )r^   r   r   r_   )r^   r   r   r]   r   r   ry   )r`   r   rm   rs   )r*   rG   r+   r   ru   rw   hrZ   rZ   r[   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   rh   )r]   r_   rs   r`   )r]   r`   r   rb   r_   )r]   r   r]   r`   )rs   r^   r]   ry   r`   )r^   rs   rm   r   ry   rb   )r^   r^   r   r]   )r]   r`   r   r   rs   )rG   r   r    r,   )ru   acbrZ   rZ   r[   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^   rh   Tr_   r`   rb   r]   rm   ry   )r/   r.   rG   rZ   rZ   rZ   r[   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 )Nry   rh   Tr`   r   FZGF_IRRED_METHODzben-orZrabinotherc                   S   s   t dgdtS )Nry   rh   )r/   rG   rZ   rZ   rZ   r[   r     r   z'test_gf_irreducible_p.<locals>.<lambda>)r^   r   r            rm   ry   ry   ry   rs   )r^   ry   r   ry   r   r   r   rh   r   rs   r   rk   )
r0   rG   r   r1   configsetupr/   rJ   KeyErrorr   r   rZ   rZ   r[   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 )Nrh   r   r^   T)rh   r   Fr^   r]   r   rb   r_   )r^   r`   r_   )r^   r   r   r_   r   r   r_   r   r   r^   r   r`   rm   )r2   rG   r4   r
   r3   r   rZ   rZ   r[   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`   )rG   r   rD   rC   r    )ru   rw   rV   r   r   h1rZ   rZ   r[   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   rc   r   r^   rh   )r^   r   r   r   r   r   )r`   r]   r   r   rm   r]   )r`   rm   rm   r^   rs   r   )r   rb   rs   r`   ry   r   )ry   r   rs   r   r   r   )r   rs   ry   r   rs   r   )r   r^   r^   r^   r^   r   )r   r   ry   r   r   r^   r^   r^   r]   r`   r   )	r^   r   r^   r   rs   rs   r   r_   r   )r^   r   r   r   r   r   r   r   )r_   r^   ry   rh   rs   rS   r]   rh   )r`   rm   rb   r`   r   rb   ry   r_   )rb   r`   rm   r]   r^   rm   r_   r`   )r_   rh   r   r   r`   r^   r`   rh   )rm   rh   r   rm   r_   ry   rs   r   )r]   rh   ry   rs   r   rh   ry   rS   )r`   r`   rS   r]   r   rh   r   rS   )r   r]   r]   r   r   r]   r^   r   )r   r   rh   r   rs   rS   r   r^   r   r`   )r^   r   rb   rS   )r^   r_   r`   rb   rm   )r   r5   rG   r6   r;   r   )ru   QVrZ   rZ   r[   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^   rc   )r   r   rh   )r^   r   r   r   r   rs   )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^   rm   )rm   r]   rb   r`   r^   )r^   r^   r   r^   r^   r   r^   r_   )r^   r_   r]      i  i  i  iE  i  rR   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 rb   r^   i;  i.s iYJ i,q ih r]   )	r
   rG   r7   r8   r   rI   intrH   evalf)ru   rw   rV   rZ   rZ   r[   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`   )rG   r   r9   r:   r   rZ   rZ   r[   test_gf_edfg  s    r   c                  C   s>   t g d} t g dg dg}t| dd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^   r^   r^   r   r   r^   )	r^   r^   r^   r   r^   r   r^   r^   r^   r   r_   )rG   r   r9   r   rZ   rZ   r[   test_issue_23174o  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 );Nrh   r   r^   ZGF_FACTOR_METHODZ	berlekampZ
zassenhausZshoup)r^   r   r   r^   r   r_   r   r   r   r   r   )
r^   r^   rs   r^   r   rs   rs   rs   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   rs   )r^   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rs   r   r]   r`   )r^   r   r   )r^   r_   r_   )r^   r   r_   )r^   r   r]   r   ry   )r^   r   rm   r   ry   )	r^   r   r   r   r^   r   r   r   rm   )	r^   r   r   r   rs   r   r   r   rm   r   ry   )r^   rb   r]   )r^   rm   r   r_   )r^   r   r   r_   )r^   r   r   r   r   r   rb   )r^   r_   r   r   rb   rm   rb   )r^   r_   r`   r   r   rm   rb   )r^   r_   rm   r   r   rb   rb   )r^   r`   r`   r^   rm   r   rb   )r^   r]   rm   r   r   rm   rb   )r^   rm   r_   ry   r   r   rb   )r^   rs   rb   ry   rs   ry   rb   )r^   rs   rs   r^   rb   r   rb   r   r   Tr   )r^   i> i. iS it  )r^   iQ i  i:  iW{  r   r   )r^   r_   r]   r   )   '   &   )r^   ,   r   )r^   rh   rq         r   c                   S   s   t ddgdtS )Nr^   rh   )r=   rG   rZ   rZ   rZ   r[   r   J  r   z test_gf_factor.<locals>.<lambda>)r=   rG   r<   r   r   r   r   r
   rI   r   rH   r   r4   rJ   r   )ru   rV   rw   rZ   rZ   r[   test_gf_factorv  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dgksJ tg ddg ksJ ddlm}  | ddD ]@}ttd
dg|d
 |td
|t}t||tt	d
|ksJ qt
g dddgks>J t
g dddd
gksZJ t
g ddg dksvJ 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sJ tg d dg ks J d S )'N)r^   ry   r_   rb   rh   i  rb   r`   r]   r_   r   rm   r^   )r   r^   r_   r`   rb   rS   r   )rb   r      r   )r   r`   rm   r   rS   r   )r_   r`   r^   )r_   r   r^   )
primeranged   )r^   r`   r_   rk   ry   )r^   r`   r^   r]   )r`   rm   r   r`   )r   r^   r_   )r^   r^      )	rb   r   ri      (   rK   :   C   rL   )r`   r]   r_   rq   )r   2   rN   )r`   r_   r_   rK   )         )r^   r^   ry      )r   rK   rL   p         )r^   r`   rb   r^   r   <   rs   r   )r>   r?   r@   Zsympy.ntheoryr   r   r   rG   listrangerA   rB   )r   rV   ru   rZ   rZ   r[   test_gf_csolveN  s4     

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\   rd   re   rg   ro   rp   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   rZ   rZ   rZ   r[   <module>   sT    	

N#

)!
*+ Y