
    gto                     .   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) Zrd*S )+    )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 d S )N)1   L   A   )c   a   _   i i	 )i#  i$  i%  )>         )r   rH   r   r   )UMpuESs         ^/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/polys/tests/test_galoistools.pytest_gf_crtr]   )   s    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 d S )	Nr                  )r    r^   r\   test_gf_intrh   9   s    !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 d S )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                     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 d S )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III"$$$$QC==QCQFs""""LLL!!aS((((III)))++++LLL!!YYY....&&&''999444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 d S )	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"!$$$$&&&++yyy8888&&&++>>>>>>r^   c                  F    t          g ddt                    g dk    sJ d S )Nrq   ro   rs   )r
   rH   rg   r^   r\   test_gf_normalrx   a   s0    '''R00III======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 d S )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%00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 d S )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   s    ,,,a00OOOCCCC///1--1B1B1BBBBB2$d333t;;;;2$e44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 d S Nr   ra   rb   )r&   rH   rg   r^   r\   
test_gf_LCr      [    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 d S 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 d S )Nro   r   ra   rb   ra   rb   rc   re   )rb   rc   re   r`   )ra   r   rb      )r(   rH   maprg   r^   r\   test_gf_monicr      s    BF2JJB''Ar72222BFA3KKR((QH4444BFA3KKR((QH4444BF<<<(("b11a5FFFFFBF<<<(("b11a5FFFFFFFr^   c                  d   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 d S )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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4Ar2..)));;;;Ar2..***<<<<"b"b!!R''''1#r2r""qc))))"qc2r""qc))))1#sB##s****1#sB##s****1a&1#r2&&1a&00001#1vr2&&1a&0000)))ZZZR00III===="b"b!!R''''1#r2r""qc))))"qc2r""rd****1#sB##r))))1#sB##t++++1a&1#r2&&1a&00001#1vr2&&2r(2222)))ZZZR00III====		Aq6<<<R1 14D4D4DE E E E		Aq6<<<R1 14D4D4DE E E E "b"b!!R''''"qc2r""b((((1#r2r""b((((1#sB##s****1#sB##s****$$$lllB;; @' @' @' ' ' ' ',,, 2 2 2B;; @' @' @' ' ' ' ' ///???B;; @' @' @' ' ' ' ' "b"####1#r21#%%%%1a&"b!!YYY....///2r**.I.I.III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 d S )Nc                  4    t          g dg dt                    S Nr   ro   )r   rH   rg   r^   r\   <lambda>z"test_gf_division.<locals>.<lambda>       fYYYB&C&C r^   c                  4    t          g dg dt                    S r   )r   rH   rg   r^   r\   r   z"test_gf_division.<locals>.<lambda>   r   r^   c                  4    t          g dg dt                    S r   r   rH   rg   r^   r\   r   z"test_gf_division.<locals>.<lambda>   r   r^   c                  4    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                  2    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                  2    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CDDD
CCDDD
CCDDD
CCDDD1#yyy!R((R!I55551#yyy!R((QC////1#yyy!R((B....
!!!""A
yyyAA	
AA!Q21a&((((!Q2!####!Q2!####
 = = = = =>>>
!!!""A
|||A		A		A!Q21a&((((!Q2!####!Q2!####
 = = = = =>>>"&##RVQF^^R<<AFFF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 d S )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444Q2"7"7"77777Q21b'))))Q2<<<!"55555Q2Aq6999"5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 d S )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     sn    a&!1vqk"AQB#5#5#55555aVR$$(<(<(<<<<<<<r^   c                     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 d S )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4///1b"--@@@@///1b"--1L1L1LLLLL///1b"--KKKL L L L ///1b"--	, 	, 	,, , , , ///2r2..	 	 		 	 	 	 bf___--q"&2C2CRLLQRPSSSSSbf___--q"&2C2CRLLQRTUPVVVVVbf___--q"&2C2CRLLQRTUPVVVVVbf___--q"&2C2CRLLQRTUPVVVVVbf___--q"&2C2CRLLQRTUPVVVVVbf___--r26)))3D3Db"MMRSUVQWWWWWWWr^   c                     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 d S )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   BF2JJr

B33R}DDDDBFA3KKR44!b1#FFFFBF2JJsR44aS1#FFFFBFA3KKb"55"qcA3GGGGBF2JJ1vB77BaV;LLLLLBFAq6NNBF2JJB77QCaV;LLLLLBFAq6NNBFAq6NNB;;QC!Q?PPPPPBF999%%rvlll';';RDD!QRSQTWXZ[V\H]]]]]]]r^   c                  L   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 d S )	Nro   rb   ra   r   rc   r   r   r   )r#   rH   r   rg   r^   r\   test_gf_gcdr   J  s   "&**bfRjj"b11R7777"&!++rvbzz2r22qc9999"&**bfaSkk2r22qc9999"&!++rvqc{{B33s::::"&**bfaVnnb"55!Q????"&!Q.."&**b"55!Q????"&!Q.."&!Q.."b99aVCCCC"&##RVLLL%9%92rBBq!fLLL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 d S )	Nro   rb   ra   r   rc   r   r   )ra   r   r   r   r   )r$   rH   r   rg   r^   r\   test_gf_lcmr   W  s   "&**bfRjj"b11R7777"&!++rvbzz2r22b8888"&**bfaSkk2r22b8888"&!++rvqc{{B33s::::"&**bfaVnnb"55;;;;"&!Q.."&**b"55;;;;"&!Q.."&!Q.."b99aVCCCC"&##RVLLL%9%92rBBoooUUUUUUr^   c                     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 d S )
Nro   rb   ra   r   rc   r   r   r   ra   r   ra   )r%   rH   r   rg   r^   r\   test_gf_cofactorsr   d  s   r

BF2JJB77BB<GGGGsRVBZZR88aS1#rNJJJJr

BFA3KKR88aS"qcNJJJJsRVQC[["b99qcA3_LLLLr

BFAq6NNB;;AQC?PPPPP1vr

B;;AR?PPPPP1v1vB??	
AaSD    yyy))26,,,+?+?RHH
Q!Q#% % % % % %r^   c                  2   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 d S )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))))999b"%%!Q////777R@@BFFF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 d S )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@@@@LLL"b99\\\IIIIIIr^   c                  L   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 d S )	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     sI   b1a&"b))R////"q!fq!fb"55;;;;qc2r2&&1#----q!fb"b))R////q!fq!fb"--!Q7777
A
yyyA
|||AaB##'<'<'<<<<<!Q2r**mmm;;;;;;r^   c            	         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 d S )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1aAr2..	III   1aAr2..	%& & & &1aAr2..	}}}%& & & &1aAr2..	   1aAr2..	III   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 d S )
Nra   ro   Trb   rc   re   r`   rt   r   )r0   r/   rH   rg   r^   r\   test_gf_irreducibler     s'   N1b"55r2>>$FFFFN1b"55r2>>$FFFFN1b"55r2>>$FFFFN1b"55r2>>$FFFFN1b"55r2>>$FFFFN1b"55r2>>$FFFFN1b"55r2>>$FFFFFFr^   c                     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 d S )Nr   ro   Trc   r   FGF_IRRED_METHODzben-orrabinotherc                  0    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?   RVQC[["b11T9999RVQF^^R44<<<<RVIII..B775@@@@BFA3KKR00D8888BFAq6NNB33t;;;;BF999--r266%????
L"H---BFA3KKR00D8888BFAq6NNB33t;;;;BF999--r266%????
L"G,,,BFA3KKR00D8888BFAq6NNB33t;;;;BF999--r266%????
L"G,,,
8::;;;
L"###
44455A
77788Aq!RAQB''4////QB''4////QB''50000Ar2&&$....Ar2&&$....Ar2&&%//////r^   c                  B   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 d S )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     s1   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!!YYY....)))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 d S )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     s    
---..A
$$$%%A	A"1a,,AAq!R((A	Aq!Q	#	#B777777r^   c                  v   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 d S )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   222B77A																			A 
									A aR  A%%%%QB1$$$$2r""
QLLL)* * * * 	,,,--A
(((	%	%	%	!	!	!	!	!	!	#	#	#	#	#	#	%	%	%	$	$	$& 	' 	'A 
"	!	!	!	!	!	$	$	$	&A aR  A%%%%QB1$$$$2r""
Q01 1 1 1 1 1r^   c            	      8   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                                                                }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 d S )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%%BrFF++R44A


q	!
+
+
+Q	/	1A QB''1,,,,2r""a''''"Q%%BqEE**Ar22Aa&!
))Q


	#> > >?@
B	CA Q2&&!++++1b!!Q&&&&A2b66bee1"R&&II1bQQA
))Q
//1		A Q2&&!++++1b!!Q&&&&
>>>??Ac(A
9
9
91	=	?A QR((A----3##q((((
9S%"*++--..//00A!a((!R00A


Q	
E
E
Eq	I
0
0
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 d S )Nr   r   )ra   ra   rb   rb   rc   )rH   r   r:   r;   r   s     r\   test_gf_edfr   g  su    
A
			999%&&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 d S )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BBCCA
+++-H-H-HIJ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                                                                }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                                                                }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           d S ):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                  2    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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  sF   RR  QG++++aS"b!!aW,,,,aVR$$q!fa[M(:::::R$$B////!b"%%!R0000!QR((Q!QM9999
L#[111R$$B////!b"%%!R0000!QR((Q!QM9999
L#\222R$$B////!b"%%!R0000!QR((Q!QM9999
L#W---R,,B7777b"--!R8888AR00Q!QMAAAA6///""AqA	
q!fa[!fa[ii^ 	A L#[111Q2!####
L#\222Q2!####
L#W---Q2!####	
aVVYY 	A L#[111Ar""a''''
L#\222Ar""a''''
L#W---Ar""a''''555r::BqA	
q!fa[ii^llA  	!A L#[111Q2!####
L#\222Q2!####
L#W---Q2!####<<qA	
q!fa[Aq61+&'A
L#[111Q2!####
L#\222Q2!####
L#W---Q2!####---rqA	
q!fa[999a.+=+=+=q*ABCA
L#[111Q2!####
L#\222Q2!####
L#W---Q2!####Q1r2..qA	
BBBAFBBBAFH 	IA L#[111Q2!####
L#\222Q2!####
L#W---Q2!####RUUr!uu--r266qA	
q!fa[!fa[ii^ii^ii^ooq!ooq!)))1-***A.0 	1A L#[111Q2!####
L#\222Q2!####
L#W---Q2!####RUUr!uu--r266qA	
q!fa[ii^llAllA###Q'###Q'###Q'###Q'###Q'###Q'###Q'%%%q)%%%q)+ 	,A L#[111Q2!####
L#\222Q2!####
L#W---Q2!#### 	9S%"*++--..//00A!a((!R00AAq"%%%%	
#,,,a0---q1444a8: 	;A
 L#\222Q2!####
L#W---Q2!####	
+++,,,3335 	6A
 L#\222Ar""a''''
L#W---Ar""a''''
 	9S$)**,,--..//A
((())AAq"%%%%	
kkk1!!!1%' 	(A L#\222Q2!####
L#W---Q2!####	
[[[   " 	#A L#\222Ar""a''''
L#W---Ar""a''''
L#W---
866777
L#$$$$$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 ]d}t          t          d
dg|d
z
  |t                    d
|t                    }t          ||          t          t          d
|                    k    sJ et          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 d S )'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   LLL"%%----Q1%%!,,,,Q1%%++++Q1%%++++Q1%%8888QB'':::5555Q2&&*>*>*>>>>>"999a00QF::::"999a00B6666((((((Z3 B B&!QQ2661bAA&q!,,U1a[[0A0AAAAAAq))aS0000a((QF2222a((III5555Q AAAB B B Bq!,,<<<<q!,,????YYY$$(C(C(CCCCC%%%r**r2h6666YYY##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*     sd                                                                                                                                           8      - , , , , , " " " " " " ! ! ! ! ! ! , , , , , , ' ' ' ' ' '+ + +   + + +5 5 5? ? ?> > >< < <&= = =" " "" " "G G GKJ KJ KJ\ G  G  GF* * *= = =X X X>^ ^ ^
M 
M 
M
V 
V 
V% % %G G GJ J J"< < <   ,G G G&0 &0 &0R  B  '1 '1 '1T(' (' ('V* * */ / /U% U% U%p* * * * *r^   