
    sgto                     ,   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 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( Zqd) Zry*)+    )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                      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   rH   r   r   )UMpuESs         U/var/www/html/venv/lib/python3.12/site-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_intrh   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 )Nrf   ra   r   )ra   r   r   r   ra   re   )r   rg   r^   r\   test_gf_degreerj   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   ra   )r   r   r   ra   ra   rb   r   )r   ra   rb   r   )r   r   r   ra   rb   r   )r   rg   r^   r\   test_gf_striprm   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   ra      rU   ro   rp      ra   r      ra   r   )rU      rr   ra   r   )ra   ra   rt   ra   r   )r	   rg   r^   r\   test_gf_truncrv   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 )Nrq   ro   rs   )r
   rH   rg   r^   r\   test_gf_normalrx   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 )NrU   rb      )ro   rt   r   ra   rc   )ra   r   r   r   r   rb   r   r   r   r   r   rc   ro   r   )ro   re   rc   r   )ro   rc   r   )rt   r   r   r   r   r   r   r   ra   r   r   ra   
   T	symmetricrf   F)r   rH   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)ra   r      rb      r`   )ra   r   rb   rb   r   )ra   r   re   rb   rc   )ra   r   rf   rb   rd   r|   ro   Tr}   rf   F)r   r   rg   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   ra   rb   )r&   rH   rg   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'   rH   rg   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 )Nro   r   ra   rb   ra   rb   rc   re   )rb   rc   re   r`   )ra   r   rb      )r(   rH   maprg   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 )Nro   ra   r|   ra   rb   rc   )r|   	   r   r   rc   r   re   r   )ra   rb   rt   rl   r   )r   rc   r|   rb   )r   r   r|   )r   r   rb   rc   rb   ra   )rt   re   rb   )ra   r`   rt   )r   r   rt   ra   )ra   rb   r|   r   r   )r|   r   rc   rb   rc   r`   )rc   r   r   rt   ra   rb   )re   r   ra   r   	ra   r   rc   rb   re   rc   ra   rb   r   )rb   r   r   ra   r   	re   r   r   re   rt   r   ra   rc   r`   )ra   re   re   )r   rH   r   r   r   r   r   r   r   r   r   rg   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   ro   )r   rH   rg   r^   r\   <lambda>z"test_gf_division.<locals>.<lambda>       fYB&C r^   c                  *    t        g dg dt              S r   )r   rH   rg   r^   r\   r   z"test_gf_division.<locals>.<lambda>   r   r^   c                  *    t        g dg dt              S r   r   rH   rg   r^   r\   r   z"test_gf_division.<locals>.<lambda>   r   r^   c                  *    t        g dg dt              S r   r   rg   r^   r\   r   z"test_gf_division.<locals>.<lambda>   r   r^   ra   r   r   )r`   re   rc   rb   ra   r   )r`   ra   r   rt   rc   c                  (    t         dt              S Nr   r   rH   r   r   s   r\   r   z"test_gf_division.<locals>.<lambda>       Aq"(= r^   )ra   rb   rc   r   )r`   ra   r   rs   c                  (    t         dt              S r   r   r   s   r\   r   z"test_gf_division.<locals>.<lambda>  r   r^   )ra   rb   ra   ro   )rK   ZeroDivisionErrorr   rH   r   r   r   rF   )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)ra   rb   rc   re   r`   r`   ra   )ra   rb   rc   re   r`   r   rb   )ra   rb   rc   re   r`   r   r   r   r   rc   )rc   re   r`   )r   rH   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 )Nra   rb   rc   ro   )ra   r   rc   r`   rt   r   re   )re   r|   ra   r   rb   r|   )r   rH   )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)ra   r   r   ra   r   r   ro   ra   rb   )	ra   r   r   rb   r`   r   ra   r`   r   r`   )ra   r   r   r`   r   r   r|   rt   rb   r|   r   rt   r|   rt   rt   r   r`   rb   r`   r   r|   r   )!ra   r   r   r   r   r   rt   r   r|   ra   rb   r`   r|   r   r   r   ra   rb   r   r   rt   rb   r`   rb   r`   r   r   r   r|   r|   r   r`   r`   -   )ra   r   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   re   r   r   re   r|   r   r   r   r   r   r   r|   r   r   r|   rc   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rt   r   r   rt   re   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r|   r   r   r|   rc   r   r   r   r   r   r   re   r   r   re   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rt   r   r   r   r   r   r   rc   r   r   rc   rb   r   r   r   r   r   r   r|   r   r   r|   rc   r   r   r   r   r   r   r|   r   r   r|   rc   r   r   r   r   r   r   rb   r   r   rb   r`   r   r   r   r   r   r   re   r   r   re   r|   )rb   r   r   rc   r   re   )r    rH   r!   r   rg   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 )Nro   ra   rb   rt   rc   r   re   ra   r   r   ra   r   ra   r   r`   r   )r"   rH   r   rg   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 )	Nro   rb   ra   r   rc   r   r   r   )r#   rH   r   rg   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 )	Nro   rb   ra   r   rc   r   r   )ra   r   r   r   r   )r$   rH   r   rg   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 )
Nro   rb   ra   r   rc   r   r   r   ra   r   ra   )r%   rH   r   rg   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 )Nro   r   rc   r   rc   ra   )ra   r   r   r   r   r   r   r   r   r   r   ra   )r.   rH   rg   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 )Nre   ro   r      r   r   r   r`   r   rc   r   )r   ra   rb   rc   )ra   rt   rt   ra   )r)   rH   r*   rg   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 )	Nra   r   ro   ra   ra   re   r   ra   ra   ra   ra   )ra   r   r   rb   )ra   r   r   r`   r   r   r   )rc   r   rt   r|   )r+   rH   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   ra   r   ro   )r`   rb   r|   rc   )r`   rc   r   re   rb   )r`   r   r`   rc   )r|   ra   r`   r   rc   )ra   r|   rt   r   r   re   )ra   ra   r   r`   )r`   rc   r   r   r|   )rH   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 )
Nra   ro   Trb   rc   re   r`   rt   r   )r0   r/   rH   rg   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   ro   Trc   r   FGF_IRRED_METHODzben-orrabinotherc                  &    t        dgdt              S )Nr   ro   )r0   rH   rg   r^   r\   r   z'test_gf_irreducible_p.<locals>.<lambda>  s    -qc2r: r^   )ra   r   r            rt   r   r   r   r|   )ra   r   r   r   r   r   r   ro   r   r|   r   rr   )
r1   rH   r   r2   configsetupr0   rK   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 )Nro   r   ra   T)ro   r   Fra   r`   r   re   rb   )ra   rc   rb   )ra   r   r   rb   r   r   rb   r   r   ra   r   rc   rt   )r3   rH   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)
rb   r   ra   r   rb   rb   r   rb   rb   rb   )
ra   ra   r   rb   r   ra   r   rb   r   ra   rc   )rH   r   rE   rD   r!   )r   r   rX   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ra   ra   r   rf   r   ra   ro   )ra   r   r   r   r   r   )rc   r`   r   r   rt   r`   )rc   rt   rt   ra   r|   r   )r   re   r|   rc   r   r   )r   r   r|   r   r   r   )r   r|   r   r   r|   r   )r   ra   ra   ra   ra   r   )r   r   r   r   r   ra   ra   ra   r`   rc   r   )	ra   r   ra   r   r|   r|   r   rb   r   )ra   r   r   r   r   r   r   r   )rb   ra   r   ro   r|   rU   r`   ro   )rc   rt   re   rc   r   re   r   rb   )re   rc   rt   r`   ra   rt   rb   rc   )rb   ro   r   r   rc   ra   rc   ro   )rt   ro   r   rt   rb   r   r|   r   )r`   ro   r   r|   r   ro   r   rU   )rc   rc   rU   r`   r   ro   r   rU   )r   r`   r`   r   r   r`   ra   r   )r   r   ro   r   r|   rU   r   ra   r   rc   )ra   r   re   rU   )ra   rb   rc   re   rt   )r   r6   rH   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 )Nra   rf   )r   r   ro   )ra   r   r   r   r   r|   )ra   r   r   r   r   ra   r   r   r   r   ra   rb   ?   r   r   )ra   ra   ra   ra   ra   ra   ra   rc   )7ra   ra   r   ra   ra   r   ra   r   ra   ra   r   ra   ra   r   r   r   r   r   r   r   r   ra   ra   r   ra   ra   r   ra   r   ra   ra   r   ra   ra   r   r   r   r   r   r   r   r   ra   ra   r   ra   ra   r   ra   r   ra   ra   r   ra   ra   rt   )rt   r`   re   rc   ra   )ra   ra   r   ra   ra   r   ra   rb   )ra   rb   r`      i  i  i  iE  i  rT   iA  i  )
ra   n   i/  i  i     r   F   i  z   r   i)     r   ra   r   ra   iX  i0
 )	ra   il  i	H i#*  i1  i  i  iW iI re   ra   i;  i.s iYJ i,q ih r`   )	r   rH   r8   r9   r   rJ   intrI   evalf)r   r   rX   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   )ra   ra   rb   rb   rc   )rH   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)ra   ra   ra   ra   ra   ra   ra   ra   ra   ra   ra   ra   ra   ra   ra   ra   ra   )	ra   r   r   ra   ra   ra   r   r   ra   )	ra   ra   ra   r   ra   r   ra   ra   ra   r   rb   )rH   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 ):Nro   r   ra   GF_FACTOR_METHOD	berlekamp
zassenhausshoup)ra   r   r   ra   r   rb   r   r   r   r   r   )
ra   ra   r|   ra   r   r|   r|   r|   r   r   )ra   r   r`   )ra   rc   r   r   r`   rb   )    r   )ra   r   r   r   r   r   r   r   rc   r   r   r   r   r   r   r   r|   )ra   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r|   r   r`   rc   )ra   r   r   )ra   rb   rb   )ra   r   rb   )ra   r   r`   r   r   )ra   r   rt   r   r   )	ra   r   r   r   ra   r   r   r   rt   )	ra   r   r   r   r|   r   r   r   rt   r   r   )ra   re   r`   )ra   rt   r   rb   )ra   r   r   rb   )ra   r   r   r   r   r   re   )ra   rb   r   r   re   rt   re   )ra   rb   rc   r   r   rt   re   )ra   rb   rt   r   r   re   re   )ra   rc   rc   ra   rt   r   re   )ra   r`   rt   r   r   rt   re   )ra   rt   rb   r   r   r   re   )ra   r|   re   r   r|   r   re   )ra   r|   r|   ra   re   r   re   r   r   Tr   )ra   i> i. iS it  )ra   iQ i  i:  iW{  r   r   )ra   rb   r`   r   )   '   &   )ra   ,   r   )ra   ro   rz         r   c                  (    t        ddgdt              S )Nra   ro   )r>   rH   rg   r^   r\   r   z test_gf_factor.<locals>.<lambda>J  s    Y1vr26 r^   )r>   rH   r=   r   r   r   r   r   rJ   r   rI   r   r5   rK   r   )r   rX   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dgk(  sJ t        g dd      g k(  sJ ddlm}   | dd      D ]M  }t        t        d
dg|d
z
  |t              d
|t              }t        ||      t        t        d
|            k(  rMJ  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)ra   r   rb   re   ro   i  re   rc   r`   rb   r   rt   ra   )r   ra   rb   rc   re   rU   r   )re   r      r	  )r   rc   rt   r   rU   r   )rb   rc   ra   )rb   r   ra   )
primeranged   )ra   rc   rb   rr   r   )ra   rc   ra   r`   )rc   rt   r   rc   )r   ra   rb   )ra   ra      )	re   r   rp      (   rM   :   C   rN   )rc   r`   rb   rz   )r   2   rP   )rc   rb   rb   rM   )         )ra   ra   r      )r   rM   rN   p         )ra   rc   re   ra   r
  <   r|   r
  )r?   r@   rA   sympy.ntheoryr  r   r    rH   listrangerB   rC   )r  rX   r   s      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&*>>>>"9a0QF:::"9a0B666(3 B&!QQ261bA&q!,U1a[0AAAAB
 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)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/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   sympy.polys.polyerrorsrF   sympy.polysrG   r   sympy.polys.domainsrH   sympy.core.numbersrI   sympy.ntheory.generaterJ   sympy.testing.pytestrK   r]   rh   rj   rm   rv   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r"  rg   r^   r\   <module>r*     s2                   8 - " ! , '+ +5?><&=""GKJ\ GF*=X>^
M
V%GJ"< ,G&0RB'1T('V*/U%p*r^   