
    \h                     B    S r SSKJrJr  S rS rS rS rS rS r	S	 r
g
)zCImplementation of matrix FGLM Groebner basis conversion algorithm.     )monomial_mulmonomial_divc           	        ^^^^^^ UR                   mUR                  nUR                  TS9n[        X5      n[	        XPU5      nUR
                  /mTR                  /TR                  /[        U5      S-
  -  -   /n/ n[        U5       V	s/ s H  oS4PM     n
n	U
R                  UU4S jSS9  U
R                  5       n[        [        U5      T5      n [        T5      n[        XkS      X{S      5      n[        X5      m[        UU4S j[        U[        U5      5       5       5      (       a  UR                  [!        TUS      US   5      TR                  5      nUR#                  [        U5       V	s0 s H  n	TU	   TU	   _M     sn	5      nUU-
  R%                  U5      nU(       a  UR'                  U5        O[)        UTU5      nTR'                  [!        TUS      US   5      5        UR'                  U5        U
R+                  [        U5       V	s/ s H  oU4PM     sn	5        [-        [/        U
5      5      n
U
R                  UU4S jSS9  U
 V^V^s/ s H(  u  mm[        UUU4S	 jU 5       5      (       d  M$  TT4PM*     n
nnU
(       d/  U Vs/ s H  nUR1                  5       PM     nn[3        UU4S
 jSS9$ U
R                  5       nGM  s  sn	f s  sn	f s  sn	f s  snnf s  snf )a6  
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
)order   r   c                 :   > T" [        TU S      U S   5      5      $ Nr   r   _incr_kk_lO_toSs    M/var/www/auris/envauris/lib/python3.13/site-packages/sympy/polys/fglmtools.py<lambda>matrix_fglm.<locals>.<lambda>!   s    4#a&	3q6 :;    Tkeyreversec              3   H   >#    U  H  nTU   TR                   :H  v   M     g 7fN)zero).0i_lambdadomains     r   	<genexpr>matrix_fglm.<locals>.<genexpr>+   s      K2JQwqzV[[(2Js   "c                 :   > T" [        TU S      U S   5      5      $ r	   r
   r   s    r   r   r   ;   s    4#a&	3q6(B#Cr   c              3   n   >#    U  H*  n[        [        TT   T5      UR                  5      S L v   M,     g 7fr   )r   r   LM)r   gr   kls     r   r   r   =   s0     *cab\]<!a8H!$$+OSW+Wabs   25c                 (   > T" U R                   5      $ r   )r"   )r#   r   s    r   r   r   A   s    4:r   )r   ngensclone_basis_representing_matrices
zero_monomoner   lenrangesortpop_identity_matrix_matrix_mulallterm_newr   	from_dictset_ringappend_updateextendlistsetmonicsorted)Fringr   r'   ring_to	old_basisMVGr   LtPsvltrestr#   r$   r%   r   r   r   s     `               ``@@@r   matrix_fglmrL      s{    [[FJJEjjtj$GqIyT2A 
A
**Y!);<	<=A
Au&AQA&FF;TFJ	AY0A
FA$Q4)a#K%3y>2JKKKwq1w!5vzzBB>>U1X"FX1Q4#3X"FGDd$$W-A 7A&AHHWQqtWad+,HHQKHHeEl3l!fl34SVAFFCTFR"#d!As*cab*c'cVaV!d%&(Q!'')QA(!!5tDDEEG;  	' #G 4 e )s$   K7KK!#K&K&K,c                 d    [        [        U S U 5      X   S-   /-   [        XS-   S  5      -   5      $ )Nr   )tupler:   )mr$   s     r   r   r   F   s5    aeqz)Dq56O;<<r   c                     [        U 5       Vs/ s H  o!R                  /U -  PM     nn[        U 5       H  nUR                  X4   U'   M     U$ s  snf r   )r.   r   r,   )nr   _rB   r   s        r   r1   r1   J   sK    "'(+(Q++q(A+1X**Q  H 	,s   Ac                    ^^ U  V^s/ s H+  m[        UU4S j[        [        T5      5       5       5      PM-     sn$ s  snf )Nc              3   :   >#    U  H  nTU   TU   -  v   M     g 7fr    )r   r   rowrI   s     r   r   _matrix_mul.<locals>.<genexpr>T   s     5}!A1}s   )sumr.   r-   )rB   rI   rV   s    ``r   r2   r2   S   s.    ABC#C5uSV}55CCCs   2=c           	        ^ [        U4S j[        U [        T5      5       5       5      n[        [        T5      5       HL  nXC:w  d  M
  [        [        X$   5      5       Vs/ s H  oRU   U   X#   U   TU   -  TU   -  -
  PM      snX$'   MN     [        [        X#   5      5       Vs/ s H  oRU   U   TU   -  PM     snX#'   X    X#   sX#'   X '   U$ s  snf s  snf )z=
Update ``P`` such that for the updated `P'` `P' v = e_{s}`.
c              3   >   >#    U  H  nTU   S :w  d  M  Uv   M     g7f)r   NrU   )r   jr   s     r   r   _update.<locals>.<genexpr>[   s     A-!qAA-s   	)minr.   r-   )rH   r   rG   r$   rr[   s    `    r   r8   r8   W   s     	AuQG-AAA3w< 6KPQTUVUYQZK[\K[aaDGqtAw3wqzAAK[\AD ! +0AD	*:;*:QaDGgaj *:;ADqtJAD!$H ];s    %C&Cc                    ^ ^^^^ TR                   mTR                  S-
  mU4S jnUU UU4S jn[        TS-   5       Vs/ s H  oT" U" U5      5      PM     sn$ s  snf )zb
Compute the matrices corresponding to the linear maps `m \mapsto
x_i m` for all variables `x_i`.
r   c                 >   > [        S/U -  S/-   S/TU -
  -  -   5      $ )Nr   r   )rN   )r   us    r   var#_representing_matrices.<locals>.varo   s)    aS1Ws]aSAE]233r   c                 z  > [        [        T
5      5       Vs/ s H  nTR                  /[        T
5      -  PM     nn[        T
5       Hj  u  p4TR	                  [        X5      TR                  5      R                  T	5      nUR                  5        H  u  pgT
R                  U5      nXrU   U'   M     Ml     U$ s  snf r   )
r.   r-   r   	enumerater4   r   r,   remtermsindex)rO   rR   rB   r   rI   r^   monomcoeffr[   rD   basisr   r?   s            r   representing_matrix3_representing_matrices.<locals>.representing_matrixr   s    16s5z1BC1BAfkk]SZ'1BCe$DAl10&**=AA!DA !	KK&!Q !* %  Ds   #B8)r   r'   r.   )rk   rD   r?   rb   rl   r   r   ra   s   ```   @@r   r*   r*   g   sV    
 [[F

1A4
 
 27q1u>AA'>>>s    Ac                   ^^	 UR                   nU  Vs/ s H  o3R                  PM     nnUR                  /n/ nU(       a  UR                  5       m	UR	                  T	5        [        UR                  5       V^s/ s H,  m[        UU	4S jU 5       5      (       d  M   [        T	T5      PM.     nnUR                  U5        UR                  USS9  U(       a  M  [        [        U5      5      n[        XbS9$ s  snf s  snf )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)`.
c              3   T   >#    U  H  n[        [        TT5      U5      S L v   M     g 7fr   )r   r   )r   lmgr$   rF   s     r   r   _basis.<locals>.<genexpr>   s*      *(  1s3t;(s   %(Tr   )r   )r   r"   r+   r0   r7   r.   r'   r3   r   r9   r/   r:   r;   r=   )
rD   r?   r   r#   leading_monomials
candidatesrk   r$   new_candidatesrF   s
          ` @r   r)   r)      s     JJE'()q!q)//"JE
NNQ16tzz1B +1BA *(* * ('!Q-1B + 	.)E40 * UE%##! *+s   C59C:C:N)__doc__sympy.polys.monomialsr   r   rL   r   r1   r2   r8   r*   r)   rU   r   r   <module>rw      s2    I ==@=D ?4$r   