o
    o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   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   rG   r   r   )UMpuES rZ   v/var/www/html/construction_image-detection-poc/venv/lib/python3.10/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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   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sJ t g ddks%J 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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   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s)J t g ddg dks6J t g ddg dksCJ 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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 )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	symmetricrc   F)r
   rG   r   )fFgrZ   rZ   r[   test_gf_from_to_dicte   s    ry   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   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      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   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 )Nrh   r   r^   r_   r^   r_   r`   rb   )r_   r`   rb   r]   )r^   rz   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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 )Nrh   r^   rs   r^   r_   r`   )rs   	   r   r   r`   r   rb   r   )r^   r_   rm   rf   rz   )rz   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^   rz   	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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   rh   )r   rG   rZ   rZ   rZ   r[   <lambda>       z"test_gf_division.<locals>.<lambda>c                   S   r   r   )r   rG   rZ   rZ   rZ   r[   r      r   c                   S   r   r   r   rG   rZ   rZ   rZ   r[   r      r   c                   S   r   r   r   rZ   rZ   rZ   r[   r      r   r^   r   rz   )r]   rb   r`   r_   r^   r   )r]   r^   r   rm   r`   c                         t  dtS Nrz   r   rG   rZ   rv   rx   rZ   r[   r          )r^   r_   r`   r   )r]   r^   r   rl   c                      r   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   "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`   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   rv   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sJ t d| fdtg dks&J d S )Nr^   r_   r`   rh   )r^   r   r`   r]   rm   r   rb   )rb   rs   r^   r   r_   rs   )r   rG   )rw   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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   rh   r^   r_   )	r^   r   r   r_   r]   r   r^   r]   r   r]   )r^   r   r   r]   rz   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   rz   rz   r   r^   r_   r   r   rm   r_   r]   r_   r]   rz   rz   r   rs   rs   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   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   rz   r`   rz   rb   )r   rG   r    r   rZ   rZ   rZ   r[   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 )Nrh   r^   r_   rm   r`   r   rb   r^   r   rz   r^   rz   r^   rz   r]   rz   )r!   rG   r   rZ   rZ   rZ   r[   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 )	Nrh   r_   r^   r   r`   r   r   rz   )r"   rG   r   rZ   rZ   rZ   r[   test_gf_gcdJ  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 )	Nrh   r_   r^   r   r`   r   r   )r^   r   r   r   rz   )r#   rG   r   rZ   rZ   rZ   r[   test_gf_lcmW  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 )
Nrh   r_   r^   r   r`   r   r   rz   r^   r   r^   )r$   rG   r   rZ   rZ   rZ   r[   test_gf_cofactorsd  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 )Nrh   rz   r`   rz   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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 )Nrb   rh   r      rz   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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   rh   r^   r^   rb   r   r^   r^   r^   r^   )r^   r   r   r_   )r^   r   r   r]   r   r   rz   )r`   r   rm   rs   )r*   rG   r+   r   rv   rx   hrZ   rZ   r[   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   rh   )r]   r_   rs   r`   )r]   r`   r   rb   r_   )r]   r   r]   r`   )rs   r^   r]   rz   r`   )r^   rs   rm   r   rz   rb   )r^   r^   r   r]   )r]   r`   r   r   rs   )rG   r   r    r,   )rv   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 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^   rh   Tr_   r`   rb   r]   rm   rz   )r/   r.   rG   rZ   rZ   rZ   r[   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 )Nrz   rh   Tr`   r   FGF_IRRED_METHODzben-orrabinotherc                   S   s   t dgdtS )Nrz   rh   )r/   rG   rZ   rZ   rZ   r[   r     r   z'test_gf_irreducible_p.<locals>.<lambda>)r^   r   r            rm   rz   rz   rz   rs   )r^   rz   r   rz   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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 )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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`   )rG   r   rD   rC   r    )rv   rx   rV   r   r   h1rZ   rZ   r[   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   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`   rz   r   )rz   r   rs   r   r   r   )r   rs   rz   r   rs   r   )r   r^   r^   r^   r^   r   )r   r   rz   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^   rz   rh   rs   rS   r]   rh   )r`   rm   rb   r`   r   rb   rz   r_   )rb   r`   rm   r]   r^   rm   r_   r`   )r_   rh   r   r   r`   r^   r`   rh   )rm   rh   r   rm   r_   rz   rs   r   )r]   rh   rz   rs   r   rh   rz   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   )rv   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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^   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)rv   rx   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s(J 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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 );Nrh   r   r^   GF_FACTOR_METHOD	berlekamp
zassenhaus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   rz   )r^   r   rm   r   rz   )	r^   r   r   r   r^   r   r   r   rm   )	r^   r   r   r   rs   r   r   r   rm   r   rz   )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_   rz   r   r   rb   )r^   rs   rb   rz   rs   rz   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  s    z test_gf_factor.<locals>.<lambda>)r=   rG   r<   r   r   r   r   r
   rI   r   rH   r   r4   rJ   r   )rv   rV   rx   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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dgks[J tg ddg ksfJ ddlm}  | ddD ] }ttd
dg|d
 |td
|t}t||tt	d
|ksJ qqt
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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sJ d S )'N)r^   rz   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   rz   )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^   rz      )r   rK   rL   p         )r^   r`   rb   r^   r   <   rs   r   )r>   r?   r@   sympy.ntheoryr   r   r   rG   listrangerA   rB   )r   rV   rv   rZ   rZ   r[   test_gf_csolveN  s4    
r   N)s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   sympy.polys.polyerrorsrE   sympy.polysrF   r   sympy.polys.domainsrG   sympy.core.numbersrH   sympy.ntheory.generaterI   sympy.testing.pytestrJ   r\   rd   re   rg   ro   rp   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   rZ   rZ   rZ   r[   <module>   sV     	

N#

)!
*+ Y