ó
    Š*£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  o™S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[        XÎ5      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  o™U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    €€ÚR/home/mande/repo/quber/.venv/lib/python3.13/site-packages/sympy/polys/fglmtools.pyÚ<lambda>Úmatrix_fglm.<locals>.<lambda>!   s   ø€ ™4¤¨¨#¨a©&©	°3°q±6Ó :Ô;ó    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    øé € ÐKÒ2J¨Qˆw�q‰z˜VŸ[™[Ö(Ò2Jùs   ƒ"c                 ó:   >• T" [        TU S      U S   5      5      $ r	   r
   r   s    €€r   r   r   ;   s   ø€ ¡4¬°°#°a±&±	¸3¸q¹6Ó(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   øé € Ð*cÒabÐ\]¬<¼ÀÀ!ÁÀaÓ8HÈ!Ï$É$Ó+OÐSWÕ+WÒabùs   ƒ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Ø�J‰J€Eà�j‰j˜tˆjÐ$€Gä�q“€IÜ˜y¨TÓ2€Að 
�‰Ð€AØ
�*‰*ˆ˜Ÿ™˜¬¨Y«¸!Ñ);Ñ<Ñ	<Ð=€AØ
€Aä˜uœÓ&š�AˆQ‹™€AÐ&Ø‡F�FÕ;ÀT€FÑJØ	�‰‹€Aäœ˜Y›¨Ó0€Aà
Ü�‹FˆÜ˜˜A™$™  Q¡4¡Ó)ˆÜ˜aÓ#ˆäÕK´%¸¼3¸y»>Ô2JÓK×KÑKà—‘œw q¨¨1©¡w°°!±Ó5°v·z±zÓBˆBØ—>‘>¼UÀ1¼XÓ"FºX¸ 1 Q¡4¨°©Ò#3¹XÑ"FÓGˆDà�d‘×$Ñ$ WÓ-ˆAÞØ—‘˜”øô ˜˜7 AÓ&ˆAØ�H‰H”W˜Q˜q ™t™W a¨¡dÓ+Ô,Ø�H‰H�QŒKà�H‰H¤e¨E¤lÓ3¢l ˜!“f¡lÑ3Ô4Ü”S˜“V“ˆAØ�F‰FÕCÈTˆFÑRá"#Öd¢!™˜˜A¤sÖ*cÑabÓ*c×'c‹Vˆa�‹V¡!ˆÑdæÙ%&Ó(¢Q �!—'‘'–)¡QˆAÐ(Ü˜!Ô!5¸tÑDÐDà�E‰E‹Gˆò; ùò 	'ùò #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°°q±5°6°«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Ð+ä�1ŽXˆØ—*‘*ˆ‰ˆ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Õ5¤u¬S°«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±�A‰AÒ-ùs   ƒ”	)Úminr.   r-   )rH   r   rG   r$   Úrr[   s    `    r   r8   r8   W   s×   ø€ ô 	ÔA”u˜Q¤ G£Ô-ÓAÓA€Aä”3�w“<Ö ˆØ�6ÜKPÔQTÐUVÑUYÓQZÔK[Ó\ÒK[Àa�a‘D˜‘G˜q™t A™w¨°©Ñ3°w¸q±zÑAÔAÑK[Ñ\ˆA‹Dñ !ô +0´°A±D³	Ô*:Ó;Ò*: Qˆa‰D�‰G�g˜a‘jÔ Ñ*:Ñ;€A�DØ‘�q‘t€J€A�Dˆ!‰$à€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)   ø€ Ü�a�S˜1‘W ˜s‘] a S¨A°©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_matrixÚ3_representing_matrices.<locals>.representing_matrixr   sž   ø€ Ü16´s¸5³zÔ1BÓCÒ1B¨Aˆf�k‰kˆ]œS ›ZÔ'Ñ1BˆÐCä˜eÖ$‰DˆAØ—‘œl¨1Ó0°&·*±*Ó=×AÑAÀ!ÓDˆAà !§¡¦	‘�Ø—K‘K Ó&�Ø�!‘�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÷
ð 
ô 27°q¸1±u´Ó>²¨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Ó3°tÕ;Ú(ù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ß   ù€ ð �J‰J€Eá'(Ó)¢q !Ÿœ¡qÐÐ)Ø—/‘/Ð"€JØ€Eæ
Ø�N‰NÓˆØ�‰�QŒä16°t·z±zÔ1Bô +Ò1B¨AÜõ *Ù(ó*÷ *ó (œ' ! Qž-Ñ1Bˆð +ð 	×Ñ˜.Ô)Ø�‰˜E¨4ˆÑ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   