
    \hto                     ,   S SK JrJrJrJrJrJrJrJrJ	r	J
r
JrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0J1r1J2r2J3r3J4r4J5r5J6r6J7r7J8r8J9r9J:r:J;r;J<r<J=r=J>r>J?r?J@r@JArAJBrBJCrC  S SKDJErE  S SKFJGrH  S SKIJJrJ  S SKKJLrL  S SKMJNrN  S SKOJPrP  S rQS	 rRS
 rSS rTS rUS rVS rWS rXS rYS rZS r[S r\S r]S r^S r_S r`S raS rbS rcS rdS reS rfS rgS rhS  riS! rjS" rkS# rlS$ rmS% rnS& roS' rpS( rqS) rrg*)+    )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                      / SQn / SQnSnSn[        X[        5      U:X  d   e/ SQn/ SQn[        U[        5      X$U4:X  d   e[        XX$U[        5      U:X  d   eg )N)1   L   A   )c   a   _   i i	 )i#  i$  i%  )>         )r   rH   r   r   )UMpuESs         Z/var/www/auris/envauris/lib/python3.13/site-packages/sympy/polys/tests/test_galoistools.pytest_gf_crtr]   )   sf    AAAA!q   AA1b>aAY&&&1q"%***    c                      [        SS5      S:X  d   e[        SS5      S:X  d   e[        SS5      S:X  d   e[        SS5      S:X  d   e[        SS5      S:X  d   e[        SS5      S:X  d   eg )	Nr                  )r    r^   r\   test_gf_intrh   9   sz    !Q<1!Q<1!Q<1!Q<2!Q<2!Q<1r^   c                      [        / 5      S:X  d   e[        S/5      S:X  d   e[        SS/5      S:X  d   e[        / SQ5      S:X  d   eg )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                  d   [        / 5      / :X  d   e[        S/5      / :X  d   e[        / SQ5      / :X  d   e[        S/5      S/:X  d   e[        SS/5      S/:X  d   e[        / SQ5      S/:X  d   e[        / SQ5      / SQ:X  d   e[        / SQ5      / SQ:X  d   e[        / SQ5      / SQ:X  d   eg )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                      [        / S5      / :X  d   e[        S/S5      S/:X  d   e[        S/S5      / :X  d   e[        S/S5      S/:X  d   e[        / SQS5      / SQ:X  d   e[        / SQS5      / SQ:X  d   eg )	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                  :    [        / SQS[        5      / SQ:X  d   eg )Nrq   ro   rs   )r
   rH   rg   r^   r\   test_gf_normalrx   a   s    'R0I===r^   c                  :   SSSS.n SSSS.n/ SQn[        U S[        5      U:X  d   e[        US5      U:X  d   eS	S
SSS.n S	SSS.n/ SQn[        U S[        5      U:X  d   e[        US5      U:X  d   e[        S/SSS9S
S0:X  d   e[        S/SSS9S
S0:X  d   eg )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                      [        / SQS5      / SQ:X  d   e[        / SQS5      / SQ:X  d   e[        S/SSS	9S
/:X  d   e[        S/SSS	9S/:X  d   eg )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                      [        / [        5      S:X  d   e[        S/[        5      S:X  d   e[        SS/[        5      S:X  d   eg Nr   ra   rb   )r&   rH   rg   r^   r\   
test_gf_LCr      E    R=A!b>Q!Q!!!r^   c                      [        / [        5      S:X  d   e[        S/[        5      S:X  d   e[        SS/[        5      S:X  d   eg r   )r'   rH   rg   r^   r\   
test_gf_TCr      r   r^   c                     [        [        R                  " / 5      S[        5      S/ 4:X  d   e[        [        R                  " S/5      S[        5      SS/4:X  d   e[        [        R                  " S/5      S[        5      SS/4:X  d   e[        [        R                  " / SQ5      S[        5      S/ SQ4:X  d   e[        [        R                  " / SQ5      S[        5      S/ SQ4:X  d   eg )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                  n
   [        / S[        5      / :X  d   e[        S/S[        5      S/:X  d   e[        / SQS[        5      / SQ:X  d   e[        / SS[        5      / :X  d   e[        / SS[        5      / :X  d   e[        / SS[        5      S/:X  d   e[        / SS[        5      S/:X  d   e[        S/SS[        5      S	/:X  d   e[        S/SS[        5      S
/:X  d   e[        S/SS[        5      / :X  d   e[        S/SS[        5      / :X  d   e[        / SQSS[        5      / SQ:X  d   e[        / SQSS[        5      / SQ:X  d   e[	        / SS[        5      / :X  d   e[	        / SS[        5      / :X  d   e[	        S/SS[        5      / :X  d   e[	        S/SS[        5      S/:X  d   e[	        / SQSS[        5      / :X  d   e[	        / SQSS[        5      / SQ:X  d   e[	        / SQSS[        5      / SQ:X  d   e[        / / S[        5      / :X  d   e[        S// S[        5      S/:X  d   e[        / S/S[        5      S/:X  d   e[        S/S/S[        5      S/:X  d   e[        S/S/S[        5      S/:X  d   e[        SS/S/S[        5      SS/:X  d   e[        S/SS/S[        5      SS/:X  d   e[        / SQ/ SQS[        5      / SQ:X  d   e[        / / S[        5      / :X  d   e[        S// S[        5      S/:X  d   e[        / S/S[        5      S/:X  d   e[        S/S/S[        5      / :X  d   e[        S/S/S[        5      S/:X  d   e[        SS/S/S[        5      SS/:X  d   e[        S/SS/S[        5      SS/:X  d   e[        / SQ/ SQS[        5      / SQ:X  d   e[        / SQSS// SQS[        5      / SQ:X  d   e[        / SQSS// SQS[        5      / SQ:X  d   e[        / / S[        5      / :X  d   e[        / S/S[        5      / :X  d   e[        S// S[        5      / :X  d   e[        S/S/S[        5      S/:X  d   e[        S/S/S[        5      S/:X  d   e[        / SQ/ SQS[        5      / SQ:X  d   e[        / SQ/ SQS[        5      / SQ:X  d   e[        / SQ/ SQS[        5      / SQ:X  d   e[        / S[        5      / :X  d   e[        S/S[        5      S	/:X  d   e[        SS/S[        5      / SQ:X  d   e[        / SQS[        5      / SQ:X  d   eg )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                    ^^ [        [        S 5        [        [        S 5        [        [        S 5        [        [        S 5        [        S// SQS[        5      / S/4:X  d   e[	        S// SQS[        5      S/:X  d   e[        S// SQS[        5      / :X  d   e[        R                  " / SQ5      m[        R                  " / SQ5      m/ S	Qn S
S
/n[        TTS[        5      X4:X  d   e[	        TTS[        5      U:X  d   e[        TTS[        5      U :X  d   e[        [        UU4S j5        [        R                  " / SQ5      m[        R                  " / SQ5      m/ SQn / SQn[        TTS[        5      X4:X  d   e[	        TTS[        5      U:X  d   e[        TTS[        5      U :X  d   e[        [        UU4S j5        [        [        R                  " / SQ5      [        R                  " SS/5      S[        5      SS/:X  d   eg )Nc                  *    [        / SQ/ S[        5      $ Nr   ro   )r   rH   rg   r^   r\   <lambda>"test_gf_division.<locals>.<lambda>       fYB&Cr^   c                  *    [        / SQ/ S[        5      $ r   )r   rH   rg   r^   r\   r   r      r   r^   c                  *    [        / SQ/ S[        5      $ r   r   rH   rg   r^   r\   r   r      r   r^   c                  *    [        / SQ/ S[        5      $ r   r   rg   r^   r\   r   r      r   r^   ra   r   r   )r`   re   rc   rb   ra   r   )r`   ra   r   rt   rc   c                  (   > [        T TS[        5      $ Nr   r   rH   r   r   s   r\   r   r          Aq"(=r^   )ra   rb   rc   r   )r`   ra   r   rs   c                  (   > [        T TS[        5      $ r   r   r   s   r\   r   r     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1&(((!Q2!###!Q2!###
 =>
!"A
|AAA!Q21&(((!Q2!###!Q2!###
 =>"&&#RVVQF^R<AFFFr^   c                     / SQn [        / S[        5      / :X  d   e[        / S[        5      / / 4:X  d   e[        U S[        5      / SQ:X  d   e[        U S[        5      / SQ:X  d   e[        U S[        5      U / 4:X  d   e[        U S[        5      / SQS/4:X  d   e[        U S	[        5      SS// S
Q4:X  d   e[        U S[        5      / U 4:X  d   eg )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                      SS/S4SS/S4/n [        U S[        5      / SQ:X  d   e[        SU 4S[        5      / SQ:X  d   eg )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                     [        / SQSS[        5      S/:X  d   e[        / SQSS[        5      / SQ:X  d   e[        / SQSS[        5      / SQ:X  d   e[        / SQSS[        5      / SQ:X  d   e[        / SQS	S[        5      / S
Q:X  d   e[        / SQSS[        5      / SQ:X  d   e[        [        R                  " / SQ5      S[        R                  " / SQ5      S[        5      S/:X  d   e[        [        R                  " / SQ5      S[        R                  " / SQ5      S[        5      SS/:X  d   e[        [        R                  " / SQ5      S[        R                  " / SQ5      S[        5      SS/:X  d   e[        [        R                  " / SQ5      S[        R                  " / SQ5      S[        5      SS	/:X  d   e[        [        R                  " / SQ5      S	[        R                  " / SQ5      S[        5      SS/:X  d   e[        [        R                  " / SQ5      S[        R                  " / SQ5      S[        5      SS/:X  d   eg )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                  ~   [        [        R                  " / 5      [        R                  " / 5      S[        5      S// / 4:X  d   e[        [        R                  " S/5      [        R                  " / 5      S[        5      S// S/4:X  d   e[        [        R                  " / 5      [        R                  " S/5      S[        5      / S/S/4:X  d   e[        [        R                  " S/5      [        R                  " S/5      S[        5      / S/S/4:X  d   e[        [        R                  " / 5      [        R                  " SS/5      S[        5      / S/SS/4:X  d   e[        [        R                  " SS/5      [        R                  " / 5      S[        5      S// SS/4:X  d   e[        [        R                  " SS/5      [        R                  " SS/5      S[        5      / S/SS/4:X  d   e[        [        R                  " / SQ5      [        R                  " / S	Q5      S[        5      S
S/S/SS/4:X  d   eg )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                  :   [        [        R                  " / 5      [        R                  " / 5      S[        5      / :X  d   e[        [        R                  " S/5      [        R                  " / 5      S[        5      S/:X  d   e[        [        R                  " / 5      [        R                  " S/5      S[        5      S/:X  d   e[        [        R                  " S/5      [        R                  " S/5      S[        5      S/:X  d   e[        [        R                  " / 5      [        R                  " SS/5      S[        5      SS/:X  d   e[        [        R                  " SS/5      [        R                  " / 5      S[        5      SS/:X  d   e[        [        R                  " SS/5      [        R                  " SS/5      S[        5      SS/:X  d   e[        [        R                  " / SQ5      [        R                  " / SQ5      S[        5      SS/:X  d   eg )	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                  .   [        [        R                  " / 5      [        R                  " / 5      S[        5      / :X  d   e[        [        R                  " S/5      [        R                  " / 5      S[        5      / :X  d   e[        [        R                  " / 5      [        R                  " S/5      S[        5      / :X  d   e[        [        R                  " S/5      [        R                  " S/5      S[        5      S/:X  d   e[        [        R                  " / 5      [        R                  " SS/5      S[        5      / :X  d   e[        [        R                  " SS/5      [        R                  " / 5      S[        5      / :X  d   e[        [        R                  " SS/5      [        R                  " SS/5      S[        5      SS/:X  d   e[        [        R                  " / SQ5      [        R                  " / SQ5      S[        5      / SQ:X  d   eg )	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                  " / 5      [        R                  " / 5      S[        5      / / / 4:X  d   e[        [        R                  " S/5      [        R                  " / 5      S[        5      S/S// 4:X  d   e[        [        R                  " / 5      [        R                  " S/5      S[        5      S// S/4:X  d   e[        [        R                  " S/5      [        R                  " S/5      S[        5      S/S/S/4:X  d   e[        [        R                  " / 5      [        R                  " SS/5      S[        5      SS// S/4:X  d   e[        [        R                  " SS/5      [        R                  " / 5      S[        5      SS/S// 4:X  d   e[        [        R                  " SS/5      [        R                  " SS/5      S[        5      SS/S/S/4:X  d   e[        [        R                  " / SQ5      [        R                  " / SQ5      S[        5      SS/SS// S	Q4:X  d   eg )
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                      [        / S[        5      / :X  d   e[        S/S[        5      / :X  d   e[        SS/S[        5      S/:X  d   e[        / SQS[        5      SS/:X  d   e[        / SQS[        5      / :X  d   eg )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                  <   [        / SS[        5      S:X  d   e[        / SS[        5      S:X  d   e[        S/SS[        5      S:X  d   e[        S/SS[        5      S:X  d   e[        / SQSS[        5      S:X  d   e[        / SQSS[        5      S:X  d   e[        / SQSS[        5      S:X  d   e[        / S	QSS[        5      S:X  d   e[        / S	QSS[        5      S
:X  d   e[        / S	QSS[        5      S:X  d   e[        / SQ/ SQS[        5      / SQ:X  d   eg )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                     [        / SS/S[        5      / :X  d   e[        / SS/SS/S[        5      / :X  d   e[        S// S[        5      S/:X  d   e[        SS// S[        5      / :X  d   e[        SS/SS/S[        5      SS/:X  d   e[        R                  " / SQ5      n [        R                  " / SQ5      n[        R                  " / SQ5      n[        XS[        5      / SQ:X  d   e[        XU S[        5      / SQ:X  d   eg )	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aB#'<<<<!2r*m;;;r^   c            	      N   [         R                  " / SQ5      n / SQn[         R                  " SS/5      n[        USU S[         5      n[        XUSU S[         5      / SQ/ SQ4:X  d   e[        XUSU S[         5      / SQ/ SQ4:X  d   e[        XUSU S[         5      / S	Q/ S
Q4:X  d   e[        XUSU S[         5      / SQS/4:X  d   e[        XUSU S[         5      / SQ/ SQ4:X  d   e[        XUSU S[         5      / SQ/ SQ4:X  d   e[        XUSU S[         5      / SQS/4:X  d   eg )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     s[   
AA
1vA1b!R$AaAr2.	I  aAr2.	%& & &aAr2.	}%& & &aAr2.	  aAr2.	I  aAr2.	%& & &aQB/	  r^   c                  
   [        [        SS[        5      S[        5      SL d   e[        [        SS[        5      S[        5      SL d   e[        [        SS[        5      S[        5      SL d   e[        [        SS[        5      S[        5      SL d   e[        [        SS[        5      S[        5      SL d   e[        [        SS[        5      S[        5      SL d   e[        [        S	S[        5      S[        5      SL d   eg )
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                  ~   [        [        R                  " S/5      S[        5      SL d   e[        [        R                  " SS/5      S[        5      SL d   e[        [        R                  " / SQ5      S[        5      SL d   e[        [        R                  " S/5      S[        5      SL d   e[        [        R                  " SS/5      S[        5      SL d   e[        [        R                  " / SQ5      S[        5      SL d   e[        R
                  " SS5        [        [        R                  " S/5      S[        5      SL d   e[        [        R                  " SS/5      S[        5      SL d   e[        [        R                  " / SQ5      S[        5      SL d   e[        R
                  " SS	5        [        [        R                  " S/5      S[        5      SL d   e[        [        R                  " SS/5      S[        5      SL d   e[        [        R                  " / SQ5      S[        5      SL d   e[        R
                  " SS
5        [        [        S 5        [        R
                  " S5        [        R                  " / SQ5      n [        R                  " / SQ5      n[        XS[        5      n[        U S[        5      SL d   e[        US[        5      SL d   e[        US[        5      SL d   e[        U S[        5      SL d   e[        US[        5      SL d   e[        US[        5      SL d   eg )Nr   ro   Trc   r   FGF_IRRED_METHODzben-orrabinotherc                  &    [        S/S[        5      $ )Nr   ro   )r0   rH   rg   r^   r\   r   '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qRAQB'4///QB'4///QB'5000Ar2&$...Ar2&$...Ar2&%///r^   c                     [        / S[        5      S/ 4:X  d   e[        S/S[        5      S/ 4:X  d   e[        SS/S[        5      SSS/S4/4:X  d   e[        / S[        5      SL d   e[        S/S[        5      SL d   e[        SS/S[        5      SL d   e[        SSS.S[        5      n [        U S[        5      SL d   e[        U S[        5      SSS/S4/4:X  d   e/ SQn [        U S[        5      SL d   e[        U S[        5      SSS/S4SS/S4/4:X  d   e[	        U S[        5      / S	Q:X  d   e/ S
Qn [        U S[        5      SSS/S4SS/S4SS/S4/4:X  d   eg )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                      [         R                  " / SQ5      n [         R                  " / SQ5      nSn[        X[         5      n[        XX2[         5      n[	        XX[         5      nXE:X  d   eg )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     sV    
-.A
$%A	A"1,AqR(A	A!	#B7N7r^   c                  8   [        / SQS5      n / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/n/ SQ/ S	Q/ S
Q/n[        U S[        5      U:X  d   e[        US[        5      U:X  d   e[	        U S[        5      SS// SQ/ SQ/:X  d   e[        R
                  " / SQ5      n [        R
                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      n/ SQ/ SQ/ SQ/n[        U S[        5      U:X  d   e[        US[        5      U:X  d   e[	        U S[        5      SS// SQ/ SQ/:X  d   eg )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            	      @   [        [        S5      [        S5      S.S[        5      n / SQS4/ SQS4/n[        U S[        5      U:X  d   e[        U S[        5      U:X  d   e[        [        S5      [        S5      S.S[        5      n SS/S4/ S	QS4/ S
QS4/ SQS4/n[        U S[        5      U:X  d   e[        U S[        5      U:X  d   e[        [        S5      [        S5      [        S5      [        S5      [        S5      S.S[        5      n / SQS4/ SQS4/n[        U S[        5      U:X  d   e[        U S[        5      U:X  d   e[        R                  " / SQ5      n SS/S4/ SQS4/n[        U S[        5      U:X  d   e[        U S[        5      U:X  d   e[        [        [        S[        -  R                  5       5      5      5      n[        SSSS.U[        5      n / SQS4/ SQS4/ SQS4/n[        X[        5      U:X  d   e[        X[        5      U:X  d   eg )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   <  s,   "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 Q2&!+++b!Q&&&r^   c                      [         R                  " / SQ5      n [         R                  " / SQ/ SQ/5      n[        U SS[         5      U:X  d   e[        U SS[         5      U:X  d   eg )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                      [         R                  " / SQ5      n [         R                  " / SQ/ SQ/5      n[        U SS[         5      U:X  d   eg )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                     [        / S[        5      S/ 4:X  d   e[        S/S[        5      S/ 4:X  d   e[        SS/S[        5      SSS/S4/4:X  d   e[        / S[        5      S/ 4:X  d   e[        S/S[        5      S/ 4:X  d   e[        SS/S[        5      SSS//4:X  d   e[        R                  " SS5        [        / S[        5      S/ 4:X  d   e[        S/S[        5      S/ 4:X  d   e[        SS/S[        5      SSS//4:X  d   e[        R                  " SS5        [        / S[        5      S/ 4:X  d   e[        S/S[        5      S/ 4:X  d   e[        SS/S[        5      SSS//4:X  d   e[        R                  " SS5        [        [        R
                  " / 5      S[        5      S/ 4:X  d   e[        [        R
                  " S/5      S[        5      S/ 4:X  d   e[        [        R
                  " SS/5      S[        5      SSS//4:X  d   e[        R
                  " / SQ5      S	pSSS/S4SS/S4/ S
QS4/4n[        R                  " SS5        [        X[        5      U:X  d   e[        R                  " SS5        [        X[        5      U:X  d   e[        R                  " SS5        [        X[        5      U:X  d   eSSS/SS// S
Q/4n[        R                  " SS5        [        X[        5      U:X  d   e[        R                  " SS5        [        X[        5      U:X  d   e[        R                  " SS5        [        X[        5      U:X  d   e[        / SQS5      SpSSS/S4/ SQS4/ SQS4/4n[        R                  " SS5        [        X[        5      U:X  d   e[        R                  " SS5        [        X[        5      U:X  d   e[        R                  " SS5        [        X[        5      U:X  d   e/ SQSpSSS/S4SS	/S	4/4n[        R                  " SS5        [        X[        5      U:X  d   e[        R                  " SS5        [        X[        5      U:X  d   e[        R                  " SS5        [        X[        5      U:X  d   e/ SQSpSSS/S	4/ SQS4/ SQS4/4n[        R                  " SS5        [        X[        5      U:X  d   e[        R                  " SS5        [        X[        5      U:X  d   e[        R                  " SS5        [        X[        5      U:X  d   e[        SSS.S[        5      SpS/ SQS4/ SQS4/4n[        R                  " SS5        [        X[        5      U:X  d   e[        R                  " SS5        [        X[        5      U:X  d   e[        R                  " SS5        [        X[        5      U:X  d   e[        [        S5      [        S5      S.S[        5      SpSSS/S4SS/S4/ SQS4/ SQS4/ SQS4/ SQS4/ SQS4/ SQS4/ SQS4/	4n[        R                  " SS5        [        X[        5      U:X  d   e[        R                  " SS5        [        X[        5      U:X  d   e[        R                  " SS5        [        X[        5      U:X  d   e[        [        S5      [        S5      S.S[        5      SpSSS /S4/ S!QS4/ S"QS4/ S#QS4/ S$QS4/ S%QS4/ S&QS4/ S'QS4/ S(QS4/ S)QS4/ S*QS4/ S+QS4/ S,QS4/4n[        R                  " SS5        [        X[        5      U:X  d   e[        R                  " SS5        [        X[        5      U:X  d   e[        R                  " SS5        [        X[        5      U:X  d   e[        [        [        S-[        -  R                  5       5      5      5      n[        SSSS..U[        5      n [        X[        5      S/L d   eS/ S0QS4/ S1QS4/ S2QS4/ S3QS4/4n[        R                  " SS5        [        X[        5      U:X  d   e[        R                  " SS5        [        X[        5      U:X  d   eS/ S0Q/ S1Q/ S2Q/ S3Q/4n[        R                  " SS5        [        X[        5      U:X  d   e[        R                  " SS5        [        X[        5      U:X  d   e[        [        [        S4[        -  R                  5       5      5      5      n[        R
                  " / S5Q5      n [        X[        5      S/L d   eS/ S6QS4/ S7QS4/4n[        R                  " SS5        [        X[        5      U:X  d   e[        R                  " SS5        [        X[        5      U:X  d   eS/ S6Q/ S7Q/4n[        R                  " SS5        [        X[        5      U:X  d   e[        R                  " SS5        [        X[        5      U:X  d   e[        R                  " SS85        [        [        S9 5        [        R                  " S5        g ):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                  (    [        SS/S[        5      $ )Nra   ro   )r>   rH   rg   r^   r\   r    test_gf_factor.<locals>.<lambda>J  s    Y1vr26r^   )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/"Aq	
q!fa[!fa[^ 	A LL#[1Q2!###
LL#\2Q2!###
LL#W-Q2!###	
aVV 	A LL#[1r"a'''
LL#\2r"a'''
LL#W-r"a'''5r:Bq	
q!fa[^A  	!A LL#[1Q2!###
LL#\2Q2!###
LL#W-Q2!###q	
q!fa[Aq61+&'A
LL#[1Q2!###
LL#\2Q2!###
LL#W-Q2!###-rq	
q!fa[9a.+=q*ABCA
LL#[1Q2!###
LL#\2Q2!###
LL#W-Q2!###Q1r2.q	
BAFBAFH 	IA LL#[1Q2!###
LL#\2Q2!###
LL#W-Q2!###RUr!u-r26q	
q!fa[!fa[^^^q!q!)1-*A.0 	1A LL#[1Q2!###
LL#\2Q2!###
LL#W-Q2!###RUr!u-r26q	
q!fa[^AA#Q'#Q'#Q'#Q'#Q'#Q'#Q'%q)%q)+ 	,A LL#[1Q2!###
LL#\2Q2!###
LL#W-Q2!### 	9S%"*++-./0A!a(!R0AA"%%%	
#,a0-q14a8: 	;A
 LL#\2Q2!###
LL#W-Q2!###	
+,35 	6A
 LL#\2r"a'''
LL#W-r"a'''
 	9S$)**,-./A
()AA"%%%	
k1!1%' 	(A LL#\2Q2!###
LL#W-Q2!###	
[ " 	#A LL#\2r"a'''
LL#W-r"a'''
LL#W-
867
LL#$r^   c            	         [        / SQS5      S:X  d   e[        SSS5      S/:X  d   e[        SSS5      / :X  d   e[        S	S
S5      / :X  d   e[        SSS5      / SQ:X  d   e[        SSS5      / SQ:X  d   e[        S	SS5      / SQ:X  d   e[        / SQS5      SS/:X  d   e[        / SQS5      / :X  d   eSSKJn   U " SS5       HN  n[        [        S
S/US
-
  U[        5      S
U[        5      n[        X!5      [        [        S
U5      5      :X  a  MN   e   [        / SQS5      S/:X  d   e[        / SQS5      SS
/:X  d   e[        / SQS5      / SQ:X  d   e[        / SQSS5      / SQ:X  d   e[        / SQSS5      / SQ:X  d   e[        / SQSS5      / SQ:X  d   e[        / S QS!5      / S"Q:X  d   e[        / S#QS$5      S%S&/:X  d   e[        / S QS5      / :X  d   eg )'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&!QQ261bA&q,U1a[0AAAA  
 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^   