K iBdZddlmZmZdZdZdZdZdZdZ d Z y ) zCImplementation of matrix FGLM Groebner basis conversion algorithm. ) monomial_mul monomial_divc |j|j}|j}t||}t |||}|j gj gjgt|dz zzg}g}t|D cgc]} | df} } | jfdd| j} tt|} t} t|| d|| d}t| |tfdt| t|Dr|jt!| d| dj }|j#t| D cic] } | |  c} }||z j%|}|r|j'|nt)| | } j't!| d| d|j'|| j+t|D cgc]} | | fc} t-t/| } | jfdd| Dcgc] \tfd |Dsf"} }}| s.|Dcgc]}|j1}}t3|fd dS| j} cc} wcc} wcc} wcc}}wcc}w) aZ Converts the reduced Groebner basis ``F`` of a zero-dimensional ideal w.r.t. ``O_from`` to a reduced Groebner basis w.r.t. ``O_to``. References ========== .. [1] J.C. Faugere, P. Gianni, D. Lazard, T. Mora (1994). Efficient Computation of Zero-dimensional Groebner Bases by Change of Ordering )orderrc:t|d|dSNrr_incr_kk_lO_toSs [/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sympy/polys/fglmtools.pyzmatrix_fglm..!s4#a& 3q6 :;Tkeyreversec3BK|]}|jk(ywN)zero).0i_lambdadomains r zmatrix_fglm..+sKQwqzV[[(Ksc:t|d|dSr r r s rrzmatrix_fglm..;s4#a& 3q6(B#Crc3hK|])}tt|jdu+ywr)rr LM)rgrkls rrzmatrix_fglm..=s.*c\]<!a8H!$$+OSW+W*cs/2c(|jSr)r )r!rs rrzmatrix_fglm..As4:r)rngensclone_basis_representing_matrices zero_monomonerlenrangesortpop_identity_matrix _matrix_mulallterm_newr from_dictset_ringappend_updateextendlistsetmonicsorted)Fringrr%ring_to old_basisMVGrLtPsvltrestr!r"r#rrrs ` ``@@@r matrix_fglmrJs{[[F JJEjjtj$Gq$Iy!T2A A ** Y!);< <=A Au&A!Q&A&FF;TFJ AY0A  F !A$1Q4 )a# K%3y>2JK Kwq1w!5vzzBB>>U1X"F1Q4#3"FGDd$$W-A 7A&A HHWQqtWad+ , HHQK HHeEl3q!f3 4SV A FFCTF R"# d dAs*cab*c'caV d d%&(!'')(A(!!5tD D EEG;  '#G4 e)s$ K9K K K5KKchtt|d|||dzgzt||dzdzS)Nr)tupler8)mr"s rr r Fs9 ae!qz)D1q56O; <.Ts5!A1 5s)sumr,r+)r@rGrTs ``rr0r0Ss*AB C#C5uSV}5 5 CC Cs.9c tfdt|tD}ttD]K}||k7s tt||Dcgc]}|||||||z|z z !c}||<Mtt||Dcgc]}||||z c}||<||||c||<||<|Scc}wcc}w)zE Update ``P`` such that for the updated `P'` `P' v = e_{s}`. c34K|]}|dk7s |yw)rNrS)rjrs rrz_update..[s A!qA As )minr,r+)rFrrEr"rrXs ` rr6r6Ws AuQG - AAA 3w< ] 6KPQTUVWXUYQZK[\aAaDGqtAw3wqzAA\AaD]+0AaD *: ;QAaDGgaj ;AaD1qtJAaD!A$ H ] ;s $C$Ccjjdz fd}fd}tdzDcgc]}|||c}Scc}w)zn Compute the matrices corresponding to the linear maps `m \mapsto x_i m` for all variables `x_i`. rc>tdg|zdgzdg|z zzS)Nrr)rL)rus rvarz#_representing_matrices..varos)aS1Ws]aSAE]233rcttt Dcgc]} jgt z}}t D]k\}} j t || j j }|jD]\}} j|}||||< m|Scc}wr) r,r+r enumerater2rr*remtermsindex) rMrPr@rrGrZmonomcoeffrXrBbasisrr=s rrepresenting_matrixz3_representing_matrices..representing_matrixrs16s5z1B CAfkk]SZ ' C Ce$ DAq l1a0&**=AA!DA !  uKK&!Q   Ds B5)rr%r,)rfrBr=r^rgrrr]s``` @@rr(r(gsM [[F 1 A4 27q1u >A A ' >> >sAc |j}|Dcgc]}|j}}|jg}g}|r|j |j t |j Dcgc]#t fd|Dr t %}}|j||j|d|rtt|}t||Scc}wcc}w)z Computes a list of monomials which are not divisible by the leading monomials wrt to ``O`` of ``G``. These monomials are a basis of `K[X_1, \ldots, X_n]/(G)`. c3NK|]}tt|duywr)rr )rlmgr"rDs rrz_basis..s+* 1 s3t;*s"%Tr)r)rr r)r.r5r,r%r1r r7r-r8r9r;) rBr=rr!leading_monomials candidatesrfr"new_candidatesrDs ` @rr'r's JJE'()!))//"J E  NN  Q16tzz1B+A*(**"!Q-++ .)E40  U E %U ##!*+s C$2(C)N) __doc__sympy.polys.monomialsrrrJr r/r0r6r(r'rSrrrps2I==@= D  ?4$r