
    MZdm                     (   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 ZPd	 ZQd
 ZRd ZSd ZTd ZUd ZVd ZWd ZXd ZYd ZZd Z[d Z\d Z]d Z^d Z_d Z`d Zad Zbd Zcd Zdd Zed Zfd Zgd  Zhd! Zid" Zjd# Zkd$ Zld% Zmd& Znd' Zod( Zpd) Zqy*)+    )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                      g d} g d}d}d}t        | |t              |k(  sJ g d}g d}t        |t              |||fk(  sJ t        | ||||t              |k(  sJ y )N)1   L   A   )c   a   _   i i	 )i#  i$  i%  )>         )r   rG   r   r   )UMpuESs         D/usr/lib/python3/dist-packages/sympy/polys/tests/test_galoistools.pytest_gf_crtr\   )   sn    AAAA!Qq   AA1b>aAY&&&1aAq"%***    c                      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(  sJ y )	Nr                  )r    r]   r[   test_gf_intrg   9   sz    !Q<1!Q<1!Q<1!Q<2!Q<2!Q<1r]   c                      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 y )Nre   r`   r   )r`   r   r   r   r`   rd   )r   rf   r]   r[   test_gf_degreeri   B   sR    R=BaS>QaV!!!_%***r]   c                  R   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(  sJ t        g d      dgk(  sJ t        g d      g dk(  sJ t        g d      g dk(  sJ t        g d      g dk(  sJ y )Nr   )r   r   r   r`   )r   r   r   r`   r`   ra   r   )r   r`   ra   r   )r   r   r   r`   ra   r   )r   rf   r]   r[   test_gf_striprl   I   s    B<2QC=BI"$$$QC=QCQFs"""L!aS(((I)+++L!Y...&'9444r]   c                      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(  sJ t        g dd      g dk(  sJ y )	N   r`      rT   rn   ro      r`   r      r`   r   )rT      rq   r`   r   )r`   r`   rs   r`   r   )r	   rf   r]   r[   test_gf_truncru   W   s    Br!!!QC###RD"###RD"!$$$&+y888&+>>>r]   c                  8    t        g ddt              g dk(  sJ y )Nrp   rn   rr   )r
   rG   rf   r]   r[   test_gf_normalrw   a   s    'R0I===r]   c                  :   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(  sJ t        dgdd      d
dik(  sJ t        dgdd      d
dik(  sJ y )NrT   ra      )rn   rs   r   r`   rb   )r`   r   r   r   r   ra   r   r   r   r   r   rb   rn   r   )rn   rd   rb   r   )rn   rb   r   )rs   r   r   r   r   r   r   r   r`   r   r   r`   
   T	symmetricre   F)r   rG   r   )fFgs      r[   test_gf_from_to_dictr   e   s    A"A1A,A2r"a'''a!!!A!#AA!A,A2r"a'''a!!!rdB$/Ar7:::rdB%0QG;;;r]   c                      t        g dd      g dk(  sJ t        g dd      g dk(  sJ t        dgdd	      d
gk(  sJ t        dgdd	      dgk(  sJ y )N)r`   r      ra      r_   )r`   r   ra   ra   r   )r`   r   rd   ra   rb   )r`   r   re   ra   rc   r{   rn   Tr|   re   F)r   r   rf   r]   r[   test_gf_from_to_int_polyr   x   sd    ,a0OCCC/1-1BBBB2$d3t;;;2$e4<<<r]   c                      t        g t              dk(  sJ t        dgt              dk(  sJ t        ddgt              dk(  sJ y Nr   r`   ra   )r&   rG   rf   r]   r[   
test_gf_LCr      E    R=A!b>Q!Q!!!r]   c                      t        g t              dk(  sJ t        dgt              dk(  sJ t        ddgt              dk(  sJ y r   )r'   rG   rf   r]   r[   
test_gf_TCr      r   r]   c                     t        t        j                  g       dt              dg fk(  sJ t        t        j                  dg      dt              ddgfk(  sJ t        t        j                  dg      dt              ddgfk(  sJ t        t        j                  g d      dt              dg dfk(  sJ t        t        j                  g d      dt              dg dfk(  sJ y )Nrn   r   r`   ra   r`   ra   rb   rd   )ra   rb   rd   r_   )r`   r   ra      )r(   rG   maprf   r]   r[   test_gf_monicr      s    BFF2JB'Ar7222BFFA3KR(QH444BFFA3KR(QH444BFF<("b1a5FFFFBFF<("b1a5FFFFr]   c                  

   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(  sJ t        g ddt              dgk(  sJ t        dgddt              d	gk(  sJ t        dgddt              d
gk(  sJ t        dgddt              g k(  sJ 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(  sJ t	        g ddt              g k(  sJ t	        g ddt              g k(  sJ t	        dgddt              g k(  sJ t	        dgddt              dgk(  sJ t	        g d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(  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(  sJ t        dgdgdt              dgk(  sJ t        ddgdgdt              ddgk(  sJ t        dgddgdt              ddgk(  sJ 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(  sJ t        g dgdt              dgk(  sJ t        dgdgdt              g k(  sJ t        dgdgdt              dgk(  sJ t        ddgdgdt              ddgk(  sJ t        dgddgdt              ddgk(  sJ t        g d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 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(  sJ t        dgg dt              g k(  sJ t        dgdgdt              dgk(  sJ t        dgdgdt              dgk(  sJ 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g ddt              g dk(  sJ t        g dt              g k(  sJ t        dgdt              d	gk(  sJ t        ddgdt              g dk(  sJ t        g ddt              g dk(  sJ y )Nrn   r`   r{   r`   ra   rb   )r{   	   r   r   rb   r   rd   r   )r`   ra   rs   rk   r   )r   rb   r{   ra   )r   r   r{   )r   r   ra   rb   ra   r`   )rs   rd   ra   )r`   r_   rs   )r   r   rs   r`   )r`   ra   r{   r   r   )r{   r   rb   ra   rb   r_   )rb   r   r   rs   r`   ra   )rd   r   r`   r   	r`   r   rb   ra   rd   rb   r`   ra   r   )ra   r   r   r`   r   	rd   r   r   rd   rs   r   r`   rb   r_   )r`   rd   rd   )r   rG   r   r   r   r   r   r   r   r   r   rf   r]   r[   test_gf_arithr      s   "b"###1#r22$&&&)R$
222QB'2---QB'2---QB'A3...QB'A3...!aR(QC///!aR(QC///!aR(B...!aR(B...Ar2.);;;Ar2.);;;QB'2---QB'2---!aR(B...!aR(QC///Ar2."444Ar2.);;;Ar2.*<<<"b"b!R'''1#r2r"qc)))"qc2r"qc)))1#sB#s***1#sB#s***1a&1#r2&1a&0001#1vr2&1a&000)ZR0I==="b"b!R'''1#r2r"qc)))"qc2r"rd***1#sB#r)))1#sB#t+++1a&1#r2&1a&0001#1vr2&2r(222)ZR0I===Aq6<R14DE E EAq6<R14DE E E "b"b!R'''"qc2r"b(((1#r2r"b(((1#sB#s***1#sB#s***$lB; @' ' ' ', 2B; @' ' ' ' /?B; @' ' ' ' "b"###1#r21#%%%1a&"b!Y.../2r*.IIIIr]   c                     t        t        d        t        t        d        t        t        d        t        t        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(  sJ t        j                  g d      t        j                  g d      g d	} d
d
g}t        dt              | |fk(  sJ t	        dt              |k(  sJ t        dt              | k(  sJ t        t        fd       t        j                  g d      t        j                  g d      g d} g d}t        dt              | |fk(  sJ t	        dt              |k(  sJ t        dt              | k(  sJ t        t        fd       t        t        j                  g d      t        j                  ddg      dt              ddgk(  sJ y )Nc                  *    t        g dg dt              S Nr   rn   )r   rG   rf   r]   r[   <lambda>z"test_gf_division.<locals>.<lambda>       fYB&C r]   c                  *    t        g dg dt              S r   )r   rG   rf   r]   r[   r   z"test_gf_division.<locals>.<lambda>   r   r]   c                  *    t        g dg dt              S r   r   rG   rf   r]   r[   r   z"test_gf_division.<locals>.<lambda>   r   r]   c                  *    t        g dg dt              S r   r   rf   r]   r[   r   z"test_gf_division.<locals>.<lambda>   r   r]   r`   r   r   )r_   rd   rb   ra   r`   r   )r_   r`   r   rs   rb   c                  (    t         dt              S Nr   r   rG   r~   r   s   r[   r   z"test_gf_division.<locals>.<lambda>       Aq"(= r]   )r`   ra   rb   r   )r_   r`   r   rr   c                  (    t         dt              S r   r   r   s   r[   r   z"test_gf_division.<locals>.<lambda>  r   r]   )r`   ra   r`   rn   )rJ   ZeroDivisionErrorr   rG   r   r   r   rE   )qrr~   r   s     @@r[   test_gf_divisionr      s   
CD
CD
CD
CD1#y!R(R!I5551#y!R(QC///1#y!R(B...
!"A
yAA	
AA!Q21a&(((!Q2!###!Q2!###
 =>
!"A
|AAA!Q21a&(((!Q2!###!Q2!###
 =>"&&#RVVQF^R<AFFFr]   c                     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(  sJ t        | dt              | g fk(  sJ t        | dt              g ddgfk(  sJ t        | d	t              ddgg d
fk(  sJ t        | dt              g | fk(  sJ y )N)r`   ra   rb   rd   r_   r_   r`   )r`   ra   rb   rd   r_   r   ra   )r`   ra   rb   rd   r_   r   r   r   r   rb   )rb   rd   r_   )r   rG   r   r~   s    r[   test_gf_shiftr     s    ARB2%%%RBB8+++Q2"4444Q2"7777Q21b')))Q2<!"5555Q2Aq69"5555Q22q')))r]   c                      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 y )Nr`   ra   rb   rn   )r`   r   rb   r_   rs   r   rd   )rd   r{   r`   r   ra   r{   )r   rG   )r   s    r[   test_gf_expandr     sP    a&!1vqk"AQB#5555aVR$(<<<<r]   c                  t   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(  sJ t        g dddt              g dk(  sJ t        t        j                  g d      dt        j                  g d      dt              dgk(  sJ t        t        j                  g d      dt        j                  g d      dt              ddgk(  sJ t        t        j                  g d      dt        j                  g d      dt              ddgk(  sJ t        t        j                  g d      dt        j                  g d      dt              dd	gk(  sJ t        t        j                  g d      d	t        j                  g d      dt              ddgk(  sJ t        t        j                  g d      dt        j                  g d      dt              ddgk(  sJ y )N)r`   r   r   r`   r   r   rn   r`   ra   )	r`   r   r   ra   r_   r   r`   r_   r   r_   )r`   r   r   r_   r   r   r{   rs   ra   r{   r   rs   r{   rs   rs   r   r_   ra   r_   r   r{   r   )!r`   r   r   r   r   r   rs   r   r{   r`   ra   r_   r{   r   r   r   r`   ra   r   r   rs   ra   r_   ra   r_   r   r   r   r{   r{   r   r_   r_   -   )r`   r   r   r`   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rd   r   r   rd   r{   r   r   r   r   r   r   r{   r   r   r{   rb   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rs   r   r   rs   rd   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r{   r   r   r{   rb   r   r   r   r   r   r   rd   r   r   rd   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   rb   r   r   rb   ra   r   r   r   r   r   r   r{   r   r   r{   rb   r   r   r   r   r   r   r{   r   r   r{   rb   r   r   r   r   r   r   ra   r   r   ra   r_   r   r   r   r   r   r   rd   r   r   rd   r{   )ra   r   r   rb   r   rd   )r    rG   r!   r   rf   r]   r[   test_gf_poweringr     s   /1b"-!444/1b"-@@@/1b"-1LLLL/1b"-KL L L /1b"-	,, , , /2r2.		 	 	 bff_-q"&&2CRLQRPSSSSbff_-q"&&2CRLQRTUPVVVVbff_-q"&&2CRLQRTUPVVVVbff_-q"&&2CRLQRTUPVVVVbff_-q"&&2CRLQRTUPVVVVbff_-r266)3Db"MRSUVQWWWWr]   c                  N   t        t        j                  g       t        j                  g       dt              dgg g fk(  sJ t        t        j                  dg      t        j                  g       dt              dgg dgfk(  sJ t        t        j                  g       t        j                  dg      dt              g dgdgfk(  sJ t        t        j                  dg      t        j                  dg      dt              g dgdgfk(  sJ t        t        j                  g       t        j                  ddg      dt              g dgddgfk(  sJ t        t        j                  ddg      t        j                  g       dt              dgg ddgfk(  sJ t        t        j                  ddg      t        j                  ddg      dt              g dgddgfk(  sJ t        t        j                  g d      t        j                  g d	      dt              d
dgdgddgfk(  sJ y )Nrn   r`   ra   rs   rb   r   rd   r`   r   r   r`   r   r`   r   r_   r   )r"   rG   r   rf   r]   r[   test_gf_gcdexr   <  s   BFF2Jr
B3R}DDDBFFA3KR4!b1#FFFBFF2JsR4aS1#FFFBFFA3Kb"5"qcA3GGGBFF2J1vB7BaV;LLLLBFFAq6NBFF2JB7QCaV;LLLLBFFAq6NBFFAq6NB;QC!Q?PPPPBFF9%rvvl';RD!QRSQTWXZ[V\H]]]]r]   c                  
   t        t        j                  g       t        j                  g       dt              g k(  sJ t        t        j                  dg      t        j                  g       dt              dgk(  sJ t        t        j                  g       t        j                  dg      dt              dgk(  sJ t        t        j                  dg      t        j                  dg      dt              dgk(  sJ t        t        j                  g       t        j                  ddg      dt              ddgk(  sJ t        t        j                  ddg      t        j                  g       dt              ddgk(  sJ t        t        j                  ddg      t        j                  ddg      dt              ddgk(  sJ t        t        j                  g d      t        j                  g d      dt              ddgk(  sJ y )	Nrn   ra   r`   r   rb   r   r   r   )r#   rG   r   rf   r]   r[   test_gf_gcdr   J  sz   "&&*bffRj"b1R777"&&!+rvvbz2r2qc999"&&*bffaSk2r2qc999"&&!+rvvqc{B3s:::"&&*bffaVnb"5!Q???"&&!Q."&&*b"5!Q???"&&!Q."&&!Q."b9aVCCC"&&#RVVL%92rBq!fLLLr]   c                     t        t        j                  g       t        j                  g       dt              g k(  sJ t        t        j                  dg      t        j                  g       dt              g k(  sJ t        t        j                  g       t        j                  dg      dt              g k(  sJ t        t        j                  dg      t        j                  dg      dt              dgk(  sJ t        t        j                  g       t        j                  ddg      dt              g k(  sJ t        t        j                  ddg      t        j                  g       dt              g k(  sJ t        t        j                  ddg      t        j                  ddg      dt              ddgk(  sJ t        t        j                  g d      t        j                  g d      dt              g dk(  sJ y )	Nrn   ra   r`   r   rb   r   r   )r`   r   r   r   r   )r$   rG   r   rf   r]   r[   test_gf_lcmr   W  sj   "&&*bffRj"b1R777"&&!+rvvbz2r2b888"&&*bffaSk2r2b888"&&!+rvvqc{B3s:::"&&*bffaVnb"5;;;"&&!Q."&&*b"5;;;"&&!Q."&&!Q."b9aVCCC"&&#RVVL%92rBoUUUr]   c                  R   t        t        j                  g       t        j                  g       dt              g g g fk(  sJ t        t        j                  dg      t        j                  g       dt              dgdgg fk(  sJ t        t        j                  g       t        j                  dg      dt              dgg dgfk(  sJ t        t        j                  dg      t        j                  dg      dt              dgdgdgfk(  sJ t        t        j                  g       t        j                  ddg      dt              ddgg dgfk(  sJ t        t        j                  ddg      t        j                  g       dt              ddgdgg fk(  sJ t        t        j                  ddg      t        j                  ddg      dt              ddgdgdgfk(  sJ t        t        j                  g d      t        j                  g d      dt              ddgddgg d	fk(  sJ y )
Nrn   ra   r`   r   rb   r   r   r   r`   r   r`   )r%   rG   r   rf   r]   r[   test_gf_cofactorsr   d  s   r
BFF2JB7BB<GGGsRVVBZR8aS1#rNJJJr
BFFA3KR8aS"qcNJJJsRVVQC["b9qcA3_LLLr
BFFAq6NB;AQC?PPPP1vr
B;AR?PPPP1v1vB?	
AaSD   y)266,+?RH
Q!Q#% % %r]   c                      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(  sJ t        g ddt              g k(  sJ y )Nrn   r   rb   r   rb   r`   )r`   r   r   r   r   r   r   r   r   r   r   r`   )r.   rG   rf   r]   r[   test_gf_diffr   s  s    2r2"$$$A3B2%%%Aq62r"qc)))9b"%!Q///7R@BFFFr]   c                  &   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(  sJ t        g d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(  sJ t        g d	ddt              dk(  sJ t        g dg ddt              g dk(  sJ y )Nrd   rn   r      r   r   r   r_   r   rb   r   )r   r`   ra   rb   )r`   rs   rs   r`   )r)   rG   r*   rf   r]   r[   test_gf_evalr   }  s   2q"b!Q&&&2r2r"a'''A32r"a'''A3B#q(((.2r:a???.2r:a???.B;q@@@.2r:a???.2r:a???.B;q@@@L"b9\IIIr]   c                     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(  sJ t        ddgddgdt              ddgk(  sJ t        j                  g d      } t        j                  g d      }t        j                  g d      }t        ||dt              g dk(  sJ t        ||| dt              g dk(  sJ y )	Nr`   r   rn   r`   r`   rd   r   r`   r`   r`   r`   )r`   r   r   ra   )r`   r   r   r_   r   r   r   )rb   r   rs   r{   )r+   rG   r,   r   r~   r   hs      r[   test_gf_composer     s    b1a&"b)R///"q!fq!fb"5;;;qc2r2&1#---q!fb"b)R///q!fq!fb"-!Q777
A
yA
|AaB#'<<<<!Q2r*m;;;r]   c            	      J   t        j                  g d      } g d}t        j                  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(  sJ t        |||d| dt               g d	g d
fk(  sJ t        |||d| dt               g ddgfk(  sJ t        |||d| dt               g dg dfk(  sJ t        |||d| dt               g dg dfk(  sJ t        |||d| dt               g ddgfk(  sJ y )Nr   r   r`   r   rn   )r_   ra   r{   rb   )r_   rb   r   rd   ra   )r_   r   r_   rb   )r{   r`   r_   r   rb   )r`   r{   rs   r   r   rd   )r`   r`   r   r_   )r_   rb   r   r   r{   )rG   r   r!   r-   )r~   acbs       r[   test_gf_trace_mapr     si   
AA
1vA1b!R$A1aAr2.	I  1aAr2.	%& & &1aAr2.	}%& & &1aAr2.	  1aAr2.	I  1aAr2.	%& & &1aQB/	  r]   c                     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 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 sJ y )
Nr`   rn   Tra   rb   rd   r_   rs   r   )r0   r/   rG   rf   r]   r[   test_gf_irreducibler     s    N1b"5r2>$FFFN1b"5r2>$FFFN1b"5r2>$FFFN1b"5r2>$FFFN1b"5r2>$FFFN1b"5r2>$FFFN1b"5r2>$FFFr]   c                  8   t        t        j                  dg      dt              du sJ t        t        j                  ddg      dt              du sJ t        t        j                  g d      dt              du sJ t        t        j                  dg      dt              du sJ t        t        j                  ddg      dt              du sJ t        t        j                  g d      dt              du sJ t	        j
                  dd       t        t        j                  dg      dt              du sJ t        t        j                  ddg      dt              du sJ t        t        j                  g d      dt              du sJ t	        j
                  dd	       t        t        j                  dg      dt              du sJ t        t        j                  ddg      dt              du sJ t        t        j                  g d      dt              du sJ t	        j
                  dd
       t        t        d        t	        j
                  d       t        j                  g d      } t        j                  g d      }t        | |dt              }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 t        |dt              du sJ t        |dt              du sJ y )Nr   rn   Trb   r   FGF_IRRED_METHODzben-orrabinotherc                  &    t        dgdt              S )Nr   rn   )r0   rG   rf   r]   r[   r   z'test_gf_irreducible_p.<locals>.<lambda>  s    -qc2r: r]   )r`   r   r            rs   r   r   r   r{   )r`   r   r   r   r   r   r   rn   r   r{   r   rq   )
r1   rG   r   r2   configsetupr0   rJ   KeyErrorr   r   s      r[   test_gf_irreducible_pr     s   RVVQC["b1T999RVVQF^R4<<<RVVI.B75@@@BFFA3KR0D888BFFAq6NB3t;;;BFF9-r26%???
LL"H-BFFA3KR0D888BFFAq6NB3t;;;BFF9-r26%???
LL"G,BFFA3KR0D888BFFAq6NB3t;;;BFF9-r26%???
LL"G,
8:;
LL"#
45A
78Aq!RAQB'4///QB'4///QB'5000Ar2&$...Ar2&$...Ar2&%///r]   c                     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 sJ t        dgdt              du sJ t        ddgdt              du sJ 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(  sJ 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(  sJ t	        | dt              g d	k(  sJ g d
} t        | dt              dddgdfddgdfddgdfgfk(  sJ y )Nrn   r   r`   T)rn   r   Fr`   r_   r   rd   ra   )r`   rb   ra   )r`   r   r   ra   r   r   ra   r   r   r`   r   rb   rs   )r3   rG   r5   r   r4   r   s    r[   test_gf_squarefreer     s   r2r"q"g---sB#2w...1vr2&1A{m*<<<<BB4'''QCR D(((QFB#t+++!]B+AAr2%'''q"b!	
q!fb\N   	AAr2%'''q"b!	
q!fa[!fa[ 	   q"b!Y...)Aq!R 	
q!fa[!fa[!fa[ 	  r]   c                      t        j                  g d      } t        j                  g d      }d}t        ||t               }t        | |||t               }t	        | |||t               }||k(  sJ y )N)
ra   r   r`   r   ra   ra   r   ra   ra   ra   )
r`   r`   r   ra   r   r`   r   ra   r   r`   rb   )rG   r   rD   rC   r!   )r~   r   rW   r   r   h1s         r[   test_gf_frobenius_mapr     sb    
-.A
$%A	A"1a,AAq!R(A	Aq!Q	#B7N7r]   c                  (   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(  sJ t	        | dt              ddgg dg dgk(  sJ t        j
                  g d      } t        j
                  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(  sJ y )Nr`   r`   r   re   r   r`   rn   )r`   r   r   r   r   r   )rb   r_   r   r   rs   r_   )rb   rs   rs   r`   r{   r   )r   rd   r{   rb   r   r   )r   r   r{   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`   r   r`   r   r{   r{   r   ra   r   )r`   r   r   r   r   r   r   r   )ra   r`   r   rn   r{   rT   r_   rn   )rb   rs   rd   rb   r   rd   r   ra   )rd   rb   rs   r_   r`   rs   ra   rb   )ra   rn   r   r   rb   r`   rb   rn   )rs   rn   r   rs   ra   r   r{   r   )r_   rn   r   r{   r   rn   r   rT   )rb   rb   rT   r_   r   rn   r   rT   )r   r_   r_   r   r   r_   r`   r   )r   r   rn   r   r{   rT   r   r`   r   rb   )r`   r   rd   rT   )r`   ra   rb   rd   rs   )r   r6   rG   r7   r<   r   )r~   QVs      r[   test_gf_berlekampr     s:   2B7A							A 
			A aR A%%%QB1$$$2r"
QL)* * * 	,-A
(	%	!	!	#	#	%	$& 	'A 
"	!	$	&A aR A%%%QB1$$$2r"
Q01 1 1r]   c            	      .   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(  sJ t        | dt              |k(  sJ 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(  sJ t        j                  g d      } ddgdfg ddfg}t        | dt              |k(  sJ t        | dt              |k(  sJ t        t        t        dt        z  j                                           }t        dddd|t              } g ddfg ddfg ddfg}t        | |t              |k(  sJ t        | |t              |k(  sJ y )Nr`   re   )r   r   rn   )r`   r   r   r   r   r{   )r`   r   r   r   r   r`   r   r   r   r   r`   ra   ?   r   r   )r`   r`   r`   r`   r`   r`   r`   rb   )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`   rs   )rs   r_   rd   rb   r`   )r`   r`   r   r`   r`   r   r`   ra   )r`   ra   r_      i  i  i  iE  i  rS   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 rd   r`   i;  i.s iYJ i,q ih r_   )	r   rG   r8   r9   r   rI   intrH   evalf)r~   r   rW   s      r[   test_gf_ddfr   <  s0   "Q%BrF+R4A
q	!
+Q	/	1A QB'1,,,2r"a'''"Q%BqE*Ar2Aa&!
Q
	#>?@
B	CA Q2&!+++1b!Q&&&A2b6be1"R&I1bQA
Q
1		A Q2&!+++1b!Q&&&
>?Ac(A
91	=	?A QR(A---3#q(((
9S%"*++-./0A!a(!R0A
Q	
Eq	I
0!	4	6A Q2&!+++1b!Q&&&r]   c                      t        j                  g d      } t        j                  g dg dg      }t        | ddt               |k(  sJ t        | ddt               |k(  sJ y )Nr   r   )r`   r`   ra   ra   rb   )rG   r   r:   r;   r   s     r[   test_gf_edfr   g  sU    
A
	9%&AQ1b)Q...1a$)))r]   c                      t        j                  g d      } t        j                  g dg dg      }t        | ddt               |k(  sJ y )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   ra   )rG   r   r:   r   s     r[   test_issue_23174r   o  s?    
BCA
+-HIJAQ1b)Q...r]   c                  \   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(  sJ t        dgdt              dg fk(  sJ t        ddgdt              dddggfk(  sJ t        j                  dd       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gfk(  sJ t        j                  dd       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gfk(  sJ t        j                  dd       t        t        j
                  g       dt              dg fk(  sJ t        t        j
                  dg      dt              dg fk(  sJ t        t        j
                  ddg      dt              dddggfk(  sJ t        j
                  g d      d	}} dddgdfddgdfg d
dfgf}t        j                  dd       t        | |t              |k(  sJ t        j                  dd       t        | |t              |k(  sJ t        j                  dd       t        | |t              |k(  sJ dddgddgg d
gf}t        j                  dd       t        | |t              |k(  sJ t        j                  dd       t        | |t              |k(  sJ t        j                  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        j                  dd       t        | |t              |k(  sJ t        j                  dd       t        | |t              |k(  sJ t        j                  dd       t        | |t              |k(  sJ g dd}} dddgdfdd	gd	fgf}t        j                  dd       t        | |t              |k(  sJ t        j                  dd       t        | |t              |k(  sJ t        j                  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        j                  dd       t        | |t              |k(  sJ t        j                  dd       t        | |t              |k(  sJ t        j                  dd       t        | |t              |k(  sJ t        ddddt              d}} dg ddfg ddfgf}t        j                  dd       t        | |t              |k(  sJ t        j                  dd       t        | |t              |k(  sJ t        j                  dd       t        | |t              |k(  sJ 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        j                  dd       t        | |t              |k(  sJ t        j                  dd       t        | |t              |k(  sJ t        j                  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        j                  dd       t        | |t              |k(  sJ t        j                  dd       t        | |t              |k(  sJ t        j                  dd       t        | |t              |k(  sJ t        t        t        d-t        z  j                                           }t        dddd.|t              } t        | |t              d/u sJ dg d0dfg d1dfg d2dfg d3dfgf}t        j                  dd       t        | |t              |k(  sJ t        j                  dd       t        | |t              |k(  sJ dg d0g d1g d2g d3gf}t        j                  dd       t        | |t              |k(  sJ t        j                  dd       t        | |t              |k(  sJ t        t        t        d4t        z  j                                           }t        j
                  g d5      } t        | |t              d/u sJ dg d6dfg d7dfgf}t        j                  dd       t        | |t              |k(  sJ t        j                  dd       t        | |t              |k(  sJ dg d6g d7gf}t        j                  dd       t        | |t              |k(  sJ t        j                  dd       t        | |t              |k(  sJ t        j                  dd8       t        t        d9        t        j                  d       y ):Nrn   r   r`   GF_FACTOR_METHOD	berlekamp
zassenhausshoup)r`   r   r   r`   r   ra   r   r   r   r   r   )
r`   r`   r{   r`   r   r{   r{   r{   r   r   )r`   r   r_   )r`   rb   r   r   r_   ra   )    r   )r`   r   r   r   r   r   r   r   rb   r   r   r   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   r   )r`   ra   ra   )r`   r   ra   )r`   r   r_   r   r   )r`   r   rs   r   r   )	r`   r   r   r   r`   r   r   r   rs   )	r`   r   r   r   r{   r   r   r   rs   r   r   )r`   rd   r_   )r`   rs   r   ra   )r`   r   r   ra   )r`   r   r   r   r   r   rd   )r`   ra   r   r   rd   rs   rd   )r`   ra   rb   r   r   rs   rd   )r`   ra   rs   r   r   rd   rd   )r`   rb   rb   r`   rs   r   rd   )r`   r_   rs   r   r   rs   rd   )r`   rs   ra   r   r   r   rd   )r`   r{   rd   r   r{   r   rd   )r`   r{   r{   r`   rd   r   rd   r   r   Tr   )r`   i> i. iS it  )r`   iQ i  i:  iW{  r   r   )r`   ra   r_   r   )   '   &   )r`   ,   r   )r`   rn   ry         r   c                  (    t        ddgdt              S )Nr`   rn   )r>   rG   rf   r]   r[   r   z test_gf_factor.<locals>.<lambda>J  s    Y1vr26 r]   )r>   rG   r=   r   r   r   r   r   rI   r   rH   r   r5   rJ   r   )r~   rW   r   s      r[   test_gf_factorr  v  s[
   RR QG+++aS"b!aW,,,aVR$q!fa[M(::::R$B///!b"%!R000!QR(Q!QM999
LL#[1R$B///!b"%!R000!QR(Q!QM999
LL#\2R$B///!b"%!R000!QR(Q!QM999
LL#W-R,B777b"-!R888AR0Q!QMAAA66/"AqA	
q!fa[!fa[^ 	A LL#[1Q2!###
LL#\2Q2!###
LL#W-Q2!###	
aVV 	A LL#[1Ar"a'''
LL#\2Ar"a'''
LL#W-Ar"a'''5r:BqA	
q!fa[^A  	!A LL#[1Q2!###
LL#\2Q2!###
LL#W-Q2!###qA	
q!fa[Aq61+&'A
LL#[1Q2!###
LL#\2Q2!###
LL#W-Q2!###-rqA	
q!fa[9a.+=q*ABCA
LL#[1Q2!###
LL#\2Q2!###
LL#W-Q2!###Q1r2.qA	
BAFBAFH 	IA LL#[1Q2!###
LL#\2Q2!###
LL#W-Q2!###RUr!u-r26qA	
q!fa[!fa[^^^q!q!)1-*A.0 	1A LL#[1Q2!###
LL#\2Q2!###
LL#W-Q2!###RUr!u-r26qA	
q!fa[^AA#Q'#Q'#Q'#Q'#Q'#Q'#Q'%q)%q)+ 	,A LL#[1Q2!###
LL#\2Q2!###
LL#W-Q2!### 	9S%"*++-./0A!a(!R0AAq"%%%	
#,a0-q14a8: 	;A
 LL#\2Q2!###
LL#W-Q2!###	
+,35 	6A
 LL#\2Ar"a'''
LL#W-Ar"a'''
 	9S$)**,-./A
()AAq"%%%	
k1!1%' 	(A LL#\2Q2!###
LL#W-Q2!###	
[ " 	#A LL#\2Ar"a'''
LL#W-Ar"a'''
LL#W-
867
LL#$r]   c                     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(  sJ t        ddd      g dk(  sJ t        d	dd      g dk(  sJ t        g dd      dgk(  sJ t        g dd      dd
gk(  sJ t        g 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(  sJ t        g ddd      g dk(  sJ t        g dd      g dk(  sJ t        g dd       d!d"gk(  sJ t        g dd      g k(  sJ y )#N)r`   r   ra   rd   rn   i  rd   rb   r_   ra   r   rs   r`   )r   r`   ra   rb   rd   rT   r   )rd   r      r  )r   rb   rs   r   rT   r   )r`   rb   ra   rq   r   )r`   rb   r`   r_   )rb   rs   r   rb   )r   r`   ra   )r`   r`      )	rd   r   ro      (   rL   :   C   rM   )rb   r_   ra   ry   )r   2   rO   )rb   ra   ra   rL   )         )r`   r`   r      )r   rL   rM   p         )r`   rb   rd   r`   r	  <   r{   r	  )r?   r@   rA   rB   rf   r]   r[   test_gf_csolver  N  s   L"%---Q1%!,,,Q1%+++Q1%+++Q1%888QB':555Q2&*>>>>q)aS000a(QF222a(I555QAB B Bq!,<<<q!,???Y$(CCCC%r*r2h666Y#r)))r]   N)r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/   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\   rg   ri   rl   ru   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  rf   r]   r[   <module>r$     s-                  8 - " ! , '+ +5?><&=""GKJ\ GF*=X>^
M
V%GJ"< ,G&0RB'1T('V*/U%p*r]   