§
    OŠtjÊ  ã                   ó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‰                     |¦  «         nÀt)          ‰‰|
¦  «        }
‰                     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     úS/var/www/html/CA-Chatbot/venv/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'   ø€ ˜4˜4¥¨¨#¨a¬&¬	°3°q´6Ñ :Ô :Ñ;Ô;€ 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ÐK¨Qˆw�qŒz˜Vœ[Ò(Ð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¸ 1 Q¤4¨°¬Ð"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'   ø€  4 4­°°#°a´&´	¸3¸q¼6Ñ(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Ð\]­<½ÀÀ!ÄÀaÑ8HÔ8HÈ!Ì$Ñ+OÔ+OÐSWÐ+WÐ*cÐ*cÐ*cÐ*cÐ*cÐ*cr   )Úall)r
   r+   r,   ÚGr   s    @@€€r   r   zmatrix_fglm.<locals>.<listcomp>=   sL   øøø€ ÐdÐdÐd™˜˜A¥sÐ*cÐ*cÐ*cÐ*cÐ*cÐ*cÐabÐ*cÑ*cÔ*cÑ'cÔ'cÐdˆa�ˆ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   ø€ ¨4¨4°´©:¬:€ 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ØŒJ€Eà�jŠj˜tˆjÑ$Ô$€Gå�q˜$‘”€IÝ˜y¨!¨TÑ2Ô2€Að 
ŒÐ€AØ
Œ*ˆ˜œ˜­¨Y©¬¸!Ñ);Ñ<Ñ	<Ð=€AØ
€Aà&Ð&�˜u™œÐ&Ñ&Ô&€AØ‡F‚FÐ;Ð;Ð;Ð;Ð;ÀT€FÑJÔJÐJØ	�Š‰Œ€Aå�˜Y™œ¨Ñ0Ô0€AðÝ�‰FŒFˆÝ˜˜!˜Aœ$œ  1 Q¤4¤Ñ)Ô)ˆÝ˜a Ñ#Ô#ˆåÐKÐKÐKÐKÐKµ%¸½3¸y¹>¼>Ñ2JÔ2JÐKÑKÔKÑKÔKð 	Sà—’�w q¨¨1¬¤w°°!´Ñ5Ô5°v´zÑBÔBˆBØ—>’>Ð"FÐ"FÐ"FÐ"FÐ"F½UÀ1¹X¼XÐ"FÑ"FÔ"FÑGÔGˆDà�d‘×$Ò$ WÑ-Ô-ˆAØð Ø—’˜‘”�øõ ˜˜7 AÑ&Ô&ˆAØ�HŠH•W˜Q˜q œtœW a¨¤dÑ+Ô+Ñ,Ô,Ð,Ø�HŠH�Q‰KŒKˆKà�HŠHÐ3Ð3Ð3Ð3¥e¨E¡l¤lÐ3Ñ3Ô3Ñ4Ô4Ð4Ý•S˜‘V”V‘”ˆAØ�FŠFÐCÐCÐCÐCÐCÈTˆFÑRÔRÐRàdÐdÐdÐdÐd !ÐdÑdÔdˆàð 	EØ(Ð( QÐ(Ñ(Ô(ˆAÝ˜!Ð!5Ð!5Ð!5Ð!5¸tÐDÑDÔDÐDà�EŠE‰GŒGˆñ;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°°1°q±5°6°6´©O¬OÑ;Ñ<Ô<Ð<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å�1‰XŒXð ð ˆØ”*ˆˆ!Œˆ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Ð5¥u­S°©V¬V¡}¤}Ð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@   ø€ Ð\Ð\Ð\Àa�A�a”D˜”G˜q œt Aœw¨°¬Ñ3°w¸q´zÑAÑAÐ\Ð\Ð\r   c                 ó>   •— g | ]}‰‰         |         ‰‰         z  ‘ŒS r	   r	   )r
   rd   rQ   r   r+   s     €€€r   r   z_update.<locals>.<listcomp>a   s*   ø€ Ð;Ð;Ð; QˆAˆaŒD�ŒG�g˜a”jÑ Ð;Ð;Ð;r   )Úminr;   r:   )r%   r   rQ   r+   rf   s    ``@@r   rD   rD   W   sö   øøøø€ õ 	ÐAÐAÐAÐA•u˜Q¥ G¡¤Ñ-Ô-ÐAÑAÔAÑAÔA€Aå•3�w‘<”<Ñ Ô ð ]ð ]ˆØ�Š6ˆ6Ø\Ð\Ð\Ð\Ð\Ð\Ð\Í5ÕQTÐUVÐWXÔUYÑQZÔQZÑK[ÔK[Ð\Ñ\Ô\ˆAˆa‰Døà;Ð;Ð;Ð;Ð;Ð;­%µ°A°a´D±	´	Ñ*:Ô*:Ð;Ñ;Ô;€A€a�DØ�1”�q˜”t€J€A€a�Dˆ!ˆ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,   ø€ Ý�a�S˜1‘W ˜s‘] a S¨A°©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ÐC¨AˆfŒkˆ]�S ™ZœZÑ'Ð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µµs¸5±z´zÑ1BÔ1BÐCÑCÔCˆå˜eÑ$Ô$ð 	 ð 	 ‰DˆAˆqØ—’�l¨1¨aÑ0Ô0°&´*Ñ=Ô=×AÒAÀ!ÑDÔDˆAà !§¢¡	¤	ð  ð  ‘��uØ—K’K Ñ&Ô&�Ø��!”�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ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð ?Ð>Ð>Ð>Ð>µ°q¸1±u±´Ð>Ñ>Ô>Ð>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Ô3°tÐ;ð *ð *ð *ð *ð *ð *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ê   øø€ ð ŒJ€Eà)Ð) qÐ)Ñ)Ô)ÐØ”/Ð"€JØ€Eà
ð 1Ø�NŠNÑÔˆØ�Š�Q‰Œˆð+ð +ð +ð +ð +µ°t´zÑ1BÔ1Bð +ñ +ô +ˆð 	×Ò˜.Ñ)Ô)Ð)Ø�Š˜E¨4ˆÑ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   