
    g                     D    d Z ddlmZmZ d Zd Zd Zd Zd Zd Z	d	 Z
d
S )zCImplementation of matrix FGLM Groebner basis conversion algorithm.     )monomial_mulmonomial_divc           	         |j         |j        }|                              }t          | |          }t	          || |          }|j        gj        gj        gt          |          dz
  z  z   g}g d t          |          D             }|
                    fdd           |                                }	t          t          |                    }
	 t                    t          ||	d                  ||	d                            }t          |
|          t          fdt          t          |                    D                       r|                    t!          |	d                  |	d                   j                  }|                    fd	t                    D                       }||z
                      |          }|r                    |           nt)          |
          }
                    t!          |	d                  |	d                              |                    |           |                    fd
t          |          D                        t-          t/          |                    }|
                    fdd           fd|D             }|s!d D             t1          fdd          S |                                }	 )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
    )order   c                     g | ]}|d fS )r    ).0is     Q/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/polys/fglmtools.py
<listcomp>zmatrix_fglm.<locals>.<listcomp>    s    &&&A!Q&&&    c                 Z     t          | d                  | d                             S Nr   r   _incr_kk_lO_toSs    r   <lambda>zmatrix_fglm.<locals>.<lambda>!   s'    44#a&	3q6 : :;; r   Tkeyreverser   c              3   :   K   | ]}|         j         k    V  d S Nzero)r
   r   _lambdadomains     r   	<genexpr>zmatrix_fglm.<locals>.<genexpr>+   s.      KKQwqzV[(KKKKKKr   c                 .    i | ]}|         |         S r	   r	   )r
   r   r   r   s     r   
<dictcomp>zmatrix_fglm.<locals>.<dictcomp>.   s#    "F"F"F1Q4"F"F"Fr   c                     g | ]}|fS r	   r	   )r
   r   ss     r   r   zmatrix_fglm.<locals>.<listcomp>9   s    333q!f333r   c                 Z     t          | d                  | d                             S r   r   r   s    r   r   zmatrix_fglm.<locals>.<lambda>;   s'    44#a&	3q6(B(B#C#C r   c                 \    g | ]&\  t          fd D                       "f'S )c              3   n   K   | ]/}t          t                             |j                  d u V  0d S r   )r   r   LM)r
   gr   kls     r   r!   z)matrix_fglm.<locals>.<listcomp>.<genexpr>=   sD      *c*c\]<!a8H8H!$+O+OSW+W*c*c*c*c*c*cr   )all)r
   r+   r,   Gr   s    @@r   r   zmatrix_fglm.<locals>.<listcomp>=   sL    dddAs*c*c*c*c*c*cab*c*c*c'c'cdaVdddr   c                 6    g | ]}|                                 S r	   )monicr
   r*   s     r   r   zmatrix_fglm.<locals>.<listcomp>@   s     (((!''))(((r   c                 $     | j                   S r   r)   )r*   r   s    r   r   zmatrix_fglm.<locals>.<lambda>A   s    44:: r   )r    ngensclone_basis_representing_matrices
zero_monomoner   lenrangesortpop_identity_matrix_matrix_mulr-   term_newr   	from_dictset_ringappend_updateextendlistsetsorted)Fringr   r4   ring_to	old_basisMVLtPvltrestr*   r.   r   r   r    r%   s     `            @@@@@r   matrix_fglmrU      s    [FJEjjtj$$Gq$Iy!T22A 
A
*Y!);<	<=A
A&&u&&&AFF;;;;;TFJJJ	AY00AFF!A$1Q4))a##KKKKK%3y>>2J2JKKKKK 	Swq1w!55vzBBB>>"F"F"F"F"FU1XX"F"F"FGGDd$$W--A  7A&&AHHWQqtWad++,,,HHQKKKHH3333eEll333444SVVAFFCCCCCTFRRRddddd!ddd 	E((Q(((A!!5!5!5!5tDDDDEEGG;r   c                     t          t          | d |                   | |         dz   gz   t          | |dz   d                    z             S )Nr   )tuplerF   )mr+   s     r   r   r   F   sD    ae!qz)D1q566OO;<<<r   c                       fdt                     D             }t                     D ]}j        ||         |<   |S )Nc                 &    g | ]}j         gz  S r	   r   )r
   _r    ns     r   r   z$_identity_matrix.<locals>.<listcomp>K   s!    +++Q&+q+++r   )r;   r9   )r\   r    rM   r   s   ``  r   r>   r>   J   sQ    +++++%((+++A1XX  *!QHr   c                      fd| D             S )Nc           
      ~    g | ]8t          fd t          t                              D                       9S )c              3   :   K   | ]}|         |         z  V  d S r   r	   )r
   r   rowrR   s     r   r!   z)_matrix_mul.<locals>.<listcomp>.<genexpr>T   s/      55!A1555555r   )sumr;   r:   )r
   r`   rR   s    @r   r   z_matrix_mul.<locals>.<listcomp>T   sF    CCC#C55555uSVV}}55555CCCr   r	   )rM   rR   s    `r   r?   r?   S   s    CCCCCCCCr   c           	         t          fdt          | t                              D                       t          t                              D ]<k    r4fdt          t                                       D             <   =fdt          t                                       D             <   |                   c<   | <   S )zE
    Update ``P`` such that for the updated `P'` `P' v = e_{s}`.
    c              3   4   K   | ]}|         d k    |V  dS )r   Nr	   )r
   jr   s     r   r!   z_update.<locals>.<genexpr>[   s+      AA!qAAAr   c                 n    g | ]1}         |                  |                  z           z  z
  2S r	   r	   )r
   rd   rQ   r   r+   rs     r   r   z_update.<locals>.<listcomp>_   s@    \\\aAaDGqtAw3wqzAA\\\r   c                 >    g | ]}         |                  z  S r	   r	   )r
   rd   rQ   r   r+   s     r   r   z_update.<locals>.<listcomp>a   s*    ;;;QAaDGgaj ;;;r   )minr;   r:   )r%   r   rQ   r+   rf   s    ``@@r   rD   rD   W   s     	AAAAuQG--AAAAAA3w<<   ] ]66\\\\\\\5QTUVWXUYQZQZK[K[\\\AaD;;;;;;%AaD		*:*:;;;AaD1qtJAaD!A$Hr   c                      j         j        dz
  fd fdfdt          dz             D             S )zn
    Compute the matrices corresponding to the linear maps `m \mapsto
    x_i m` for all variables `x_i`.
    r   c                 F    t          dg| z  dgz   dg| z
  z  z             S )Nr   r   )rW   )r   us    r   varz#_representing_matrices.<locals>.varo   s,    aS1Ws]aSAE]2333r   c                 p   	
fdt          t          	                    D             }t          	          D ]{\  }}                    t	          | |          
j                                                }|                                D ]%\  }}	                    |          }|||         |<   &||S )Nc                 @    g | ]}j         gt                    z  S r	   )r   r:   )r
   r[   basisr    s     r   r   zG_representing_matrices.<locals>.representing_matrix.<locals>.<listcomp>s   s(    CCCAfk]SZZ'CCCr   )	r;   r:   	enumerater@   r   r9   remtermsindex)rX   rM   r   rR   rf   monomcoeffrd   r.   ro   r    rJ   s           r   representing_matrixz3_representing_matrices.<locals>.representing_matrixr   s    CCCCCs5zz1B1BCCCe$$ 	  	 DAql1a00&*==AA!DDA !		    uKK&&!Q  r   c                 8    g | ]}  |                    S r	   r	   )r
   r   rv   rl   s     r   r   z*_representing_matrices.<locals>.<listcomp>~   s-    >>>AA''>>>r   )r    r4   r;   )ro   r.   rJ   r    rv   rk   rl   s   ```@@@@r   r7   r7   g   s    
 [F
1A4 4 4 4 4
 
 
 
 
 
 
 
 ?>>>>q1u>>>>r   c                    |j         }d | D             |j        g}g }|rx|                                |                               fdt	          |j                  D             }|                    |           |                    |d           |xt          t          |                    }t          ||          S )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                     g | ]	}|j         
S r	   r3   r1   s     r   r   z_basis.<locals>.<listcomp>   s    )))!)))r   c                 j    g | ].t          fd D                       t                    /S )c              3   X   K   | ]$}t          t                    |          d u V  %d S r   )r   r   )r
   lmgr+   rP   s     r   r!   z$_basis.<locals>.<listcomp>.<genexpr>   sN       * *  1s33t; * * * * * *r   )r-   r   )r
   r+   leading_monomialsrP   s    @r   r   z_basis.<locals>.<listcomp>   sk     + + +A * * * * *(* * * * *+'!Q-- + + +r   Tr   )r   )r   r8   r=   rC   r;   r4   rE   r<   rF   rG   rH   )r.   rJ   r   
candidatesro   new_candidatesr}   rP   s         @@r   r6   r6      s     JE))q)))/"JE
 1NNQ+ + + + +tz1B1B + + + 	.)))E4000  1 UE%U####r   N)__doc__sympy.polys.monomialsr   r   rU   r   r>   r?   rD   r7   r6   r	   r   r   <module>r      s    I I = < < < < < < <= = =@= = =  D D D   ? ? ?4$ $ $ $ $r   