
    Riem                     *   d dl mZmZmZmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZB d dlCmDZD d dlEmFZG d dlHmIZI d dlJmKZK d dlLmMZM d dlNmOZO d ZPd	 ZQd
 ZRd ZSd ZTd ZUd ZVd ZWd ZXd ZYd ZZd Z[d Z\d Z]d Z^d Z_d Z`d Zad Zbd Zcd Zdd Zed Zfd Zgd  Zhd! Zid" Zjd# Zkd$ Zld% Zmd& Znd' Zod( Zpd) Zqd*S )+    )Bgf_crtgf_crt1gf_crt2gf_int	gf_degreegf_stripgf_trunc	gf_normalgf_from_dict
gf_to_dictgf_from_int_polygf_to_int_polygf_neggf_add_groundgf_sub_groundgf_mul_groundgf_addgf_sub
gf_add_mul
gf_sub_mulgf_mulgf_sqrgf_divgf_remgf_quogf_exquo	gf_lshift	gf_rshift	gf_expandgf_pow
gf_pow_modgf_gcdexgf_gcdgf_lcmgf_cofactorsgf_LCgf_TCgf_monicgf_evalgf_multi_eval
gf_composegf_compose_modgf_trace_mapgf_diffgf_irreduciblegf_irreducible_pgf_irred_p_ben_orgf_irred_p_rabingf_sqf_listgf_sqf_partgf_sqf_p
gf_Qmatrix	gf_Qbasisgf_ddf_zassenhausgf_ddf_shoupgf_edf_zassenhausgf_edf_shoupgf_berlekampgf_factor_sqf	gf_factorgf_valuelinear_congruencecsolve_prime	gf_csolvegf_frobenius_mapgf_frobenius_monomial_base)ExactQuotientFailed)
polyconfig)ZZ)pi)	nextprime)raisesc                      g d} g d}d}d}t          | |t                    |k    sJ g d}g d}t          |t                    |||fk    sJ t          | ||||t                    |k    sJ d S )N)1   L   A   )c   a   _   i i	 )i#  i$  i%  )>         )r   rG   r   r   )UMpuESs         Blib/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_intrg   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 )Nre   r`   r   )r`   r   r   r   r`   rd   )r   rf   r]   r[   test_gf_degreeri   B   sr    R==BaS>>QaV!!!!___%%******r]   c                     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   r`   )r   r   r   r`   r`   ra   r   )r   r`   ra   r   )r   r   r   r`   ra   r   )r   rf   r]   r[   test_gf_striprl   I   s   B<<2QC==B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   r`      rT   rn   ro      r`   r      r`   r   )rT      rq   r`   r   )r`   r`   rs   r`   r   )r	   rf   r]   r[   test_gf_truncru   W   s    Br!!!!QC####RD"####RD"!$$$$&&&++yyy8888&&&++>>>>>>r]   c                  F    t          g ddt                    g dk    sJ d S )Nrp   rn   rr   )r
   rG   rf   r]   r[   test_gf_normalrw   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 )NrT   ra      )rn   rs   r   r`   rb   )r`   r   r   r   r   ra   r   r   r   r   r   rb   rn   r   )rn   rd   rb   r   )rn   rb   r   )rs   r   r   r   r   r   r   r   r`   r   r   r`   
   T	symmetricre   F)r   rG   r   )fFgs      r[   test_gf_from_to_dictr   e   s   A"A1A,,,A2r""a''''a!!!!A!##AA!A,,,A2r""a''''a!!!!rdB$///Ar7::::rdB%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)r`   r      ra      r_   )r`   r   ra   ra   r   )r`   r   rd   ra   rb   )r`   r   re   ra   rc   r{   rn   Tr|   re   F)r   r   rf   r]   r[   test_gf_from_to_int_polyr   x   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   r`   ra   )r&   rG   rf   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'   rG   rf   r]   r[   
test_gf_TCr      r   r]   c                     t          t          j        g           dt                    dg fk    sJ t          t          j        dg          dt                    ddgfk    sJ t          t          j        dg          dt                    ddgfk    sJ t          t          j        g d          dt                    dg dfk    sJ t          t          j        g d          dt                    dg dfk    sJ d S )Nrn   r   r`   ra   r`   ra   rb   rd   )ra   rb   rd   r_   )r`   r   ra      )r(   rG   maprf   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 )Nrn   r`   r{   r`   ra   rb   )r{   	   r   r   rb   r   rd   r   )r`   ra   rs   rk   r   )r   rb   r{   ra   )r   r   r{   )r   r   ra   rb   ra   r`   )rs   rd   ra   )r`   r_   rs   )r   r   rs   r`   )r`   ra   r{   r   r   )r{   r   rb   ra   rb   r_   )rb   r   r   rs   r`   ra   )rd   r   r`   r   	r`   r   rb   ra   rd   rb   r`   ra   r   )ra   r   r   r`   r   	rd   r   r   rd   rs   r   r`   rb   r_   )r`   rd   rd   )r   rG   r   r   r   r   r   r   r   r   r   rf   r]   r[   test_gf_arithr      s   "b"####1#r22$&&&&)))R$$


222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   rn   )r   rG   rf   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   rG   rf   r]   r[   r   z"test_gf_division.<locals>.<lambda>   r   r]   c                  4    t          g dg dt                    S r   r   rG   rf   r]   r[   r   z"test_gf_division.<locals>.<lambda>   r   r]   c                  4    t          g dg dt                    S r   r   rf   r]   r[   r   z"test_gf_division.<locals>.<lambda>   r   r]   r`   r   r   )r_   rd   rb   ra   r`   r   )r_   r`   r   rs   rb   c                  2    t           dt                    S Nr   r   rG   r~   r   s   r[   r   z"test_gf_division.<locals>.<lambda>       Aq"(=(= r]   )r`   ra   rb   r   )r_   r`   r   rr   c                  2    t           dt                    S r   r   r   s   r[   r   z"test_gf_division.<locals>.<lambda>  r   r]   )r`   ra   r`   rn   )rJ   ZeroDivisionErrorr   rG   r   r   r   rE   )qrr~   r   s     @@r[   test_gf_divisionr      s   
C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)r`   ra   rb   rd   r_   r_   r`   )r`   ra   rb   rd   r_   r   ra   )r`   ra   rb   rd   r_   r   r   r   r   rb   )rb   rd   r_   )r   rG   r   r~   s    r[   test_gf_shiftr     s+   ARB2%%%%RBB8++++Q2"4"4"44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 )Nr`   ra   rb   rn   )r`   r   rb   r_   rs   r   rd   )rd   r{   r`   r   ra   r{   )r   rG   )r   s    r[   test_gf_expandr     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)r`   r   r   r`   r   r   rn   r`   ra   )	r`   r   r   ra   r_   r   r`   r_   r   r_   )r`   r   r   r_   r   r   r{   rs   ra   r{   r   rs   r{   rs   rs   r   r_   ra   r_   r   r{   r   )!r`   r   r   r   r   r   rs   r   r{   r`   ra   r_   r{   r   r   r   r`   ra   r   r   rs   ra   r_   ra   r_   r   r   r   r{   r{   r   r_   r_   -   )r`   r   r   r`   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rd   r   r   rd   r{   r   r   r   r   r   r   r{   r   r   r{   rb   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rs   r   r   rs   rd   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r{   r   r   r{   rb   r   r   r   r   r   r   rd   r   r   rd   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rs   r   r   r   r   r   r   rb   r   r   rb   ra   r   r   r   r   r   r   r{   r   r   r{   rb   r   r   r   r   r   r   r{   r   r   r{   rb   r   r   r   r   r   r   ra   r   r   ra   r_   r   r   r   r   r   r   rd   r   r   rd   r{   )ra   r   r   rb   r   rd   )r    rG   r!   r   rf   r]   r[   test_gf_poweringr     s   ///1b"--!444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 )Nrn   r`   ra   rs   rb   r   rd   r`   r   r   r`   r   r`   r   r_   r   )r"   rG   r   rf   r]   r[   test_gf_gcdexr   <  s   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 )	Nrn   ra   r`   r   rb   r   r   r   )r#   rG   r   rf   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 )	Nrn   ra   r`   r   rb   r   r   )r`   r   r   r   r   )r$   rG   r   rf   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 )
Nrn   ra   r`   r   rb   r   r   r   r`   r   r`   )r%   rG   r   rf   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 )Nrn   r   rb   r   rb   r`   )r`   r   r   r   r   r   r   r   r   r   r   r`   )r.   rG   rf   r]   r[   test_gf_diffr   s  s    2r2"$$$$A3B2%%%%Aq62r""qc))))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 )Nrd   rn   r      r   r   r   r_   r   rb   r   )r   r`   ra   rb   )r`   rs   rs   r`   )r)   rG   r*   rf   r]   r[   test_gf_evalr   }  s   2q"b!!Q&&&&2r2r""a''''A32r""a''''A3B##q((((...2r::a????...2r::a????...B;;q@@@@...2r::a????...2r::a????...B;;q@@@@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 )	Nr`   r   rn   r`   r`   rd   r   r`   r`   r`   r`   )r`   r   r   ra   )r`   r   r   r_   r   r   r   )rb   r   rs   r{   )r+   rG   r,   r   r~   r   hs      r[   test_gf_composer     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   r`   r   rn   )r_   ra   r{   rb   )r_   rb   r   rd   ra   )r_   r   r_   rb   )r{   r`   r_   r   rb   )r`   r{   rs   r   r   rd   )r`   r`   r   r_   )r_   rb   r   r   r{   )rG   r   r!   r-   )r~   acbs       r[   test_gf_trace_mapr     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 )
Nr`   rn   Tra   rb   rd   r_   rs   r   )r0   r/   rG   rf   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   rn   Trb   r   FGF_IRRED_METHODzben-orrabinotherc                  0    t          dgdt                    S )Nr   rn   )r0   rG   rf   r]   r[   r   z'test_gf_irreducible_p.<locals>.<lambda>  s    -qc2r:: r]   )r`   r   r            rs   r   r   r   r{   )r`   r   r   r   r   r   r   rn   r   r{   r   rq   )
r1   rG   r   r2   configsetupr0   rJ   KeyErrorr   r   s      r[   test_gf_irreducible_pr     s?   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 )Nrn   r   r`   T)rn   r   Fr`   r_   r   rd   ra   )r`   rb   ra   )r`   r   r   ra   r   r   ra   r   r   r`   r   rb   rs   )r3   rG   r5   r   r4   r   s    r[   test_gf_squarefreer     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)
ra   r   r`   r   ra   ra   r   ra   ra   ra   )
r`   r`   r   ra   r   r`   r   ra   r   r`   rb   )rG   r   rD   rC   r!   )r~   r   rW   r   r   h1s         r[   test_gf_frobenius_mapr     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r`   r`   r   re   r   r`   rn   )r`   r   r   r   r   r   )rb   r_   r   r   rs   r_   )rb   rs   rs   r`   r{   r   )r   rd   r{   rb   r   r   )r   r   r{   r   r   r   )r   r{   r   r   r{   r   )r   r`   r`   r`   r`   r   )r   r   r   r   r   r`   r`   r`   r_   rb   r   )	r`   r   r`   r   r{   r{   r   ra   r   )r`   r   r   r   r   r   r   r   )ra   r`   r   rn   r{   rT   r_   rn   )rb   rs   rd   rb   r   rd   r   ra   )rd   rb   rs   r_   r`   rs   ra   rb   )ra   rn   r   r   rb   r`   rb   rn   )rs   rn   r   rs   ra   r   r{   r   )r_   rn   r   r{   r   rn   r   rT   )rb   rb   rT   r_   r   rn   r   rT   )r   r_   r_   r   r   r_   r`   r   )r   r   rn   r   r{   rT   r   r`   r   rb   )r`   r   rd   rT   )r`   ra   rb   rd   rs   )r   r6   rG   r7   r<   r   )r~   QVs      r[   test_gf_berlekampr     s   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 )Nr`   re   )r   r   rn   )r`   r   r   r   r   r{   )r`   r   r   r   r   r`   r   r   r   r   r`   ra   ?   r   r   )r`   r`   r`   r`   r`   r`   r`   rb   )7r`   r`   r   r`   r`   r   r`   r   r`   r`   r   r`   r`   r   r   r   r   r   r   r   r   r`   r`   r   r`   r`   r   r`   r   r`   r`   r   r`   r`   r   r   r   r   r   r   r   r   r`   r`   r   r`   r`   r   r`   r   r`   r`   r   r`   r`   rs   )rs   r_   rd   rb   r`   )r`   r`   r   r`   r`   r   r`   ra   )r`   ra   r_      i  i  i  iE  i  rS   iA  i  )
r`   n   i/  i  i     r   F   i  z   r   i)     r   r`   r   r`   iX  i0
 )	r`   il  i	H i#*  i1  i  i  iW iI rd   r`   i;  i.s iYJ i,q ih r_   )	r   rG   r8   r9   r   rI   intrH   evalf)r~   r   rW   s      r[   test_gf_ddfr   <  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   )r`   r`   ra   ra   rb   )rG   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)r`   r`   r`   r`   r`   r`   r`   r`   r`   r`   r`   r`   r`   r`   r`   r`   r`   )	r`   r   r   r`   r`   r`   r   r   r`   )	r`   r`   r`   r   r`   r   r`   r`   r`   r   ra   )rG   r   r:   r   s     r[   test_issue_23174r   o  s_    
B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 ):Nrn   r   r`   GF_FACTOR_METHOD	berlekamp
zassenhausshoup)r`   r   r   r`   r   ra   r   r   r   r   r   )
r`   r`   r{   r`   r   r{   r{   r{   r   r   )r`   r   r_   )r`   rb   r   r   r_   ra   )    r   )r`   r   r   r   r   r   r   r   rb   r   r   r   r   r   r   r   r{   )r`   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r{   r   r_   rb   )r`   r   r   )r`   ra   ra   )r`   r   ra   )r`   r   r_   r   r   )r`   r   rs   r   r   )	r`   r   r   r   r`   r   r   r   rs   )	r`   r   r   r   r{   r   r   r   rs   r   r   )r`   rd   r_   )r`   rs   r   ra   )r`   r   r   ra   )r`   r   r   r   r   r   rd   )r`   ra   r   r   rd   rs   rd   )r`   ra   rb   r   r   rs   rd   )r`   ra   rs   r   r   rd   rd   )r`   rb   rb   r`   rs   r   rd   )r`   r_   rs   r   r   rs   rd   )r`   rs   ra   r   r   r   rd   )r`   r{   rd   r   r{   r   rd   )r`   r{   r{   r`   rd   r   rd   r   r   Tr   )r`   i> i. iS it  )r`   iQ i  i:  iW{  r   r   )r`   ra   r_   r   )   '   &   )r`   ,   r   )r`   rn   ry         r   c                  2    t          ddgdt                    S )Nr`   rn   )r>   rG   rf   r]   r[   r   z test_gf_factor.<locals>.<lambda>J  s    Y1vr266 r]   )r>   rG   r=   r   r   r   r   r   rI   r   rH   r   r5   rJ   r   )r~   rW   r   s      r[   test_gf_factorr  v  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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)r`   r   ra   rd   rn   i  rd   rb   r_   ra   r   rs   r`   )r   r`   ra   rb   rd   rT   r   )rd   r      r  )r   rb   rs   r   rT   r   )r`   rb   ra   rq   r   )r`   rb   r`   r_   )rb   rs   r   rb   )r   r`   ra   )r`   r`      )	rd   r   ro      (   rL   :   C   rM   )rb   r_   ra   ry   )r   2   rO   )rb   ra   ra   rL   )         )r`   r`   r      )r   rL   rM   p         )r`   rb   rd   r`   r	  <   r{   r	  )r?   r@   rA   rB   rf   r]   r[   test_gf_csolver  N  s;   LLL"%%----Q1%%!,,,,Q1%%++++Q1%%++++Q1%%8888QB'':::5555Q2&&*>*>*>>>>>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)rsympy.polys.galoistoolsr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   sympy.polys.polyerrorsrE   sympy.polysrF   r   sympy.polys.domainsrG   sympy.core.numbersrH   sympy.ntheory.generaterI   sympy.testing.pytestrJ   r\   rg   ri   rl   ru   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  rf   r]   r[   <module>r$     sZ                                                                                                                                         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]   