Ë
    7^(hÊ  ã                   óB   — d Z ddlmZmZ d„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
y
)zCImplementation of matrix FGLM Groebner basis conversion algorithm. é    )Úmonomial_mulÚmonomial_divc           	      ó´  ‡‡‡‡‡‡— |j                   Š|j                  }|j                  ‰¬«      }t        | |«      }t	        || |«      }|j
                  gŠ‰j                  g‰j                  gt        |«      dz
  z  z   g}g }t        |«      D �	cg c]  }	|	df‘Œ }
}	|
j                  ˆˆfd„d¬«       |
j                  «       }t        t        |«      ‰«      }	 t        ‰«      }t        ||d      ||d      «      }t        ||«      Št        ˆˆfd„t        |t        |«      «      D «       «      r†|j                  t!        ‰|d      |d   «      ‰j                  «      }|j#                  t        |«      D �	ci c]  }	‰|	   ‰|	   “Œ c}	«      }||z
  j%                  |«      }|r©|j'                  |«       n—t)        |‰|«      }‰j'                  t!        ‰|d      |d   «      «       |j'                  |«       |
j+                  t        |«      D �	cg c]  }	|	|f‘Œ c}	«       t-        t/        |
«      «      }
|
j                  ˆˆfd„d¬«       |
D �‡�‡cg c]   \  ŠŠt        ˆˆˆfd	„|D «       «      sŒ‰‰f‘Œ" }
}}|
s.|D �cg c]  }|j1                  «       ‘Œ }}t3        |ˆfd
„d¬«      S |
j                  «       }�Œåc c}	w c c}	w c c}	w c c}}w c c}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
    )Úorderé   r   c                 ó:   •—  ‰t        ‰| d      | d   «      «      S ©Nr   r   ©Ú_incr_k©Úk_lÚO_toÚSs    €€úS/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/polys/fglmtools.pyú<lambda>zmatrix_fglm.<locals>.<lambda>!   s   ø€ ™4¤¨¨#¨a©&©	°3°q±6Ó :Ó;€ ó    T©ÚkeyÚreversec              3   óB   •K  — | ]  }‰|   ‰j                   k(  –— Œ y ­w©N)Úzero)Ú.0ÚiÚ_lambdaÚdomains     €€r   ú	<genexpr>zmatrix_fglm.<locals>.<genexpr>+   s   øè ø€ ÒK¨Qˆw�q‰z˜VŸ[™[Õ(ÑKùs   ƒc                 ó:   •—  ‰t        ‰| d      | d   «      «      S r	   r
   r   s    €€r   r   zmatrix_fglm.<locals>.<lambda>;   s   ø€ ¡4¬°°#°a±&±	¸3¸q¹6Ó(BÓ#C€ r   c              3   óh   •K  — | ])  }t        t        ‰‰   ‰«      |j                  «      d u –— Œ+ y ­wr   )r   r   ÚLM)r   Úgr   ÚkÚls     €€€r   r   zmatrix_fglm.<locals>.<genexpr>=   s.   øè ø€ Ò*cÐ\]¬<¼ÀÀ!ÁÀaÓ8HÈ!Ï$É$Ó+OÐSWÔ+WÑ*cùs   ƒ/2c                 ó(   •—  ‰| j                   «      S r   )r    )r!   r   s    €r   r   zmatrix_fglm.<locals>.<lambda>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_fglmrJ      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™$™  1 Q¡4¡Ó)ˆÜ˜a Ó#ˆäÔK´%¸¼3¸y»>Ó2JÔKÔKà—‘œw q¨¨1©¡w°°!±Ó5°v·z±zÓBˆBØ—>‘>¼UÀ1»XÖ"F¸ 1 Q¡4¨°©Ñ#3Ò"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 �q˜!’fÒ3Ô4Ü”S˜“V“ˆAØ�F‰FÔCÈTˆFÔRà"#×dÑd™˜˜A¤sÕ*cÐabÔ*cÕ'cˆa�ŠVÐdˆÑdáØ%&Ö( �!—'‘'•)Ð(ˆAÐ(Ü˜!Ó!5¸tÔDÐDà�E‰E‹Gˆñ; ùò 	'ùò #Gùò 4ùó eùò )s$   ÂK Å9KÈK
ÉKÉ5KÊKc                 óh   — t        t        | d | «      | |   dz   gz   t        | |dz   d  «      z   «      S )Nr   )Útupler8   )Úmr"   s     r   r   r   F   s9   € Ü”�a˜˜�e“  !¡ q¡˜zÑ)¬D°°1°q±5°6°«OÑ;Ó<Ð<r   c                 ó    — t        | «      D �cg c]  }|j                  g| z  ‘Œ }}t        | «      D ]  }|j                  ||   |<   Œ |S c c}w r   )r,   r   r*   )Únr   Ú_r@   r   s        r   r/   r/   J   sS   € Ü"'¨£(Ö+˜Qˆ&�+‰+ˆ�q‹Ð+€AÐ+ä�1‹Xò ˆØ—*‘*ˆˆ!‰ˆQŠðð €Hùò 	,s   ŽAc                 ó|   ‡‡— | D �‡cg c])  Št        ˆˆfd„t        t        ‰«      «      D «       «      ‘Œ+ c}S c c}w )Nc              3   ó4   •K  — | ]  }‰|   ‰|   z  –— Œ y ­wr   © )r   r   ÚrowrG   s     €€r   r   z_matrix_mul.<locals>.<genexpr>T   s   øè ø€ Ò5 !��A‘˜˜1™•Ñ5ùs   ƒ)Úsumr,   r+   )r@   rG   rT   s    ``r   r0   r0   S   s*   ù€ ØAB×C¸#ŒCÔ5¤u¬S°«V£}Ô5Õ5ÒCÐCùÒCs   ˆ.9c           	      ó¸  ‡— t        ˆfd„t        | t        ‰«      «      D «       «      }t        t        ‰«      «      D ]K  }||k7  sŒ	t        t        ||   «      «      D �cg c]  }||   |   ||   |   ‰|   z  ‰|   z  z
  ‘Œ! c}||<   ŒM t        t        ||   «      «      D �cg c]  }||   |   ‰|   z  ‘Œ c}||<   ||    ||   c||<   || <   |S c c}w c c}w )zE
    Update ``P`` such that for the updated `P'` `P' v = e_{s}`.
    c              3   ó4   •K  — | ]  }‰|   d k7  sŒ|–— Œ y­w)r   NrS   )r   Újr   s     €r   r   z_update.<locals>.<genexpr>[   s   øè ø€ ÒA�!°¸±¸q³ŒAÑAùs   ƒ‘)Úminr,   r+   )rF   r   rE   r"   ÚrrX   s    `    r   r6   r6   W   së   ø€ ô 	ÓA”u˜Q¤ G£Ó-ÔAÓA€Aä”3�w“<Ó ò ]ˆØ�‹6ÜKPÔQTÐUVÐWXÑUYÓQZÓK[Ö\Àa�A�a‘D˜‘G˜q ™t A™w¨°©Ñ3°w¸q±zÑAÓAÒ\ˆAˆaŠDð]ô +0´°A°a±D³	Ó*:Ö; QˆAˆa‰D�‰G�g˜a‘jÓ Ò;€A€a�DØ�1‘�q˜‘t€J€A€a�Dˆ!ˆA‰$à€Hùò ]ùâ;s   Á$CÂ$Cc                 ó¶   ‡ ‡‡‡‡— ‰j                   Š‰j                  dz
  Šˆfd„}ˆˆ ˆˆfd„}t        ‰dz   «      D �cg c]  } | ||«      «      ‘Œ c}S c c}w )zn
    Compute the matrices corresponding to the linear maps `m \mapsto
    x_i m` for all variables `x_i`.
    r   c                 ó>   •— t        dg| z  dgz   dg‰| z
  z  z   «      S )Nr   r   )rL   )r   Úus    €r   Úvarz#_representing_matrices.<locals>.varo   s)   ø€ Ü�a�S˜1‘W ˜s‘] a S¨A°©E¡]Ñ2Ó3Ð3r   c                 ót  •— t        t        ‰
«      «      D �cg c]  }‰j                  gt        ‰
«      z  ‘Œ }}t        ‰
«      D ]k  \  }}‰j	                  t        | |«      ‰j                  «      j                  ‰	«      }|j                  «       D ]  \  }}‰
j                  |«      }|||   |<   Œ  Œm |S c c}w r   )
r,   r+   r   Ú	enumerater2   r   r*   ÚremÚtermsÚindex)rM   rP   r@   r   rG   rZ   ÚmonomÚcoeffrX   rB   Úbasisr   r=   s            €€€€r   Úrepresenting_matrixz3_representing_matrices.<locals>.representing_matrixr   s­   ø€ Ü16´s¸5³zÓ1BÖC¨Aˆf�k‰kˆ]œS ›ZÓ'ÐCˆÐCä˜eÓ$ò 	 ‰DˆAˆqØ—‘œl¨1¨aÓ0°&·*±*Ó=×AÑAÀ!ÓDˆAà !§¡£	ò  ‘��uØ—K‘K Ó&�Ø��!‘�Q’ñ ð	 ð ˆùò Ds   ˜ B5)r   r%   r,   )rf   rB   r=   r^   rg   r   r   r]   s   ```   @@r   r(   r(   g   sM   ü€ ð
 �[‰[€FØ�
‰
�1‰€Aô4÷
ô 27°q¸1±u³Ö>¨AÑ¡ A£Õ'Ò>Ð>ùÒ>s   ¾Ac                 óÜ  ‡‡	— |j                   }| D �cg c]  }|j                  ‘Œ }}|j                  g}g }|rŠ|j                  «       Š	|j	                  ‰	«       t        |j                  «      D �‡cg c]#  Št        ˆˆ	fd„|D «       «      rt        ‰	‰«      ‘Œ% }}|j                  |«       |j                  |d¬«       |rŒŠt        t        |«      «      }t        ||¬«      S c c}w c c}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)`.
    c              3   óN   •K  — | ]  }t        t        ‰‰«      |«      d u –— Œ y ­wr   )r   r   )r   Úlmgr"   rD   s     €€r   r   z_basis.<locals>.<genexpr>’   s+   øè ø€ ò *Øô  ¤¨¨1£¨sÓ3°tÔ;ñ *ùs   ƒ"%Tr   )r   )r   r    r)   r.   r5   r,   r%   r1   r   r7   r-   r8   r9   r;   )
rB   r=   r   r!   Úleading_monomialsÚ
candidatesrf   r"   Únew_candidatesrD   s
          ` @r   r'   r'   �   sÝ   ù€ ð �J‰J€Eà'(Ö) !˜Ÿ›Ð)ÐÐ)Ø—/‘/Ð"€JØ€Eá
Ø�N‰NÓˆØ�‰�QŒä16°t·z±zÓ1B÷ +¨AÜô *Ø(ô*ô *ô " ! Q�-ð +ˆð +ð 	×Ñ˜.Ô)Ø�‰˜E¨4ˆÔ0ò ô ”�U“Ó€Eä�%˜UÔ#Ð#ùò! *ùò+s   “C$Á2(C)N)Ú__doc__Úsympy.polys.monomialsr   r   rJ   r   r/   r0   r6   r(   r'   rS   r   r   ú<module>rp      s2   ðÙ I÷ =ò=ò@=òòDòò ?ó4$r   