Ë
    7^(h+&  ã                   ó„   — d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZ d dlmZ  G d	„ d
«      ZexZZy)é    )ÚExpr)ÚDummy)Ú_sympify)ÚCoercionFailed)ÚPolyÚparallel_poly_from_expr)ÚQQ)ÚDomainMatrix)ÚDomainScalarc                   ó"  ‡ — e Zd ZdZddœd„Zed„ «       Zeˆ fd„«       Zd„ Zeddœd„«       Z	d	„ Z
d
„ Zed„ «       Zed„ «       Zed„ «       Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zed„ «       Zed„ «       Zd d„Zd„ Z d„ Z!ˆ xZ"S )!ÚMutablePolyDenseMatrixax  
    A mutable matrix of objects from poly module or to operate with them.

    Examples
    ========

    >>> from sympy.polys.polymatrix import PolyMatrix
    >>> from sympy import Symbol, Poly
    >>> x = Symbol('x')
    >>> pm1 = PolyMatrix([[Poly(x**2, x), Poly(-x, x)], [Poly(x**3, x), Poly(-1 + x, x)]])
    >>> v1 = PolyMatrix([[1, 0], [-1, 0]], x)
    >>> pm1*v1
    PolyMatrix([
    [    x**2 + x, 0],
    [x**3 - x + 1, 0]], ring=QQ[x])

    >>> pm1.ring
    ZZ[x]

    >>> v1*pm1
    PolyMatrix([
    [ x**2, -x],
    [-x**2,  x]], ring=QQ[x])

    >>> pm2 = PolyMatrix([[Poly(x**2, x, domain='QQ'), Poly(0, x, domain='QQ'), Poly(1, x, domain='QQ'),             Poly(x**3, x, domain='QQ'), Poly(0, x, domain='QQ'), Poly(-x**3, x, domain='QQ')]])
    >>> v2 = PolyMatrix([1, 0, 0, 0, 0, 0], x)
    >>> v2.ring
    QQ[x]
    >>> pm2*v2
    PolyMatrix([[x**2]], ring=QQ[x])

    N)Úringc          	      ó|  — |s|€t        d«      ‚ddg df\  }}}}�nPt        |d   t        «      ro|d   |dd  }}|sddg }}}�n)t        |d   t        t        f«      r2t	        |«      t	        |d   «      }}|D ��	cg c]  }|D ]  }	|	‘Œ Œ }}}	nÞt	        |«      d}}|}nÎ|d d D �
cg c]  }
t        |
«      ‘Œ c}
t        t        t        gk(  r|d   |d   |d   |dd  f\  }}}}nˆ|d d D �
cg c]  }
t        |
«      ‘Œ c}
t        t        t        d„ «      gk(  rI|d   |d   |d   |dd  f\  }}}}t        |«      D ��cg c]  }t        |«      D ]  } |||«      ‘Œ Œ }}}nt        d«      ‚t	        |«      dk(  rt        |d   t        «      r|d   }| j                  |||||«      S c c}	}w c c}
w c c}
w c c}}w )	Nz6The ring needs to be specified for an empty PolyMatrixr   © é   é   é   c                   ó   — y©Nr   r   r   ó    úT/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/polys/polymatrix.pyú<lambda>z0MutablePolyDenseMatrix.__new__.<locals>.<lambda>G   s   � r   zInvalid arguments)	Ú	TypeErrorÚ
isinstanceÚlistÚtupleÚlenÚtypeÚintÚrangeÚ	from_list)Úclsr   ÚargsÚrowsÚcolsÚitemsÚgensÚelementsÚrowÚeÚaÚfuncÚiÚjs                 r   Ú__new__zMutablePolyDenseMatrix.__new__0   sà  € áàˆ|ÜÐ XÓYÐYØ&'¨¨B° lÑ#ˆD�$˜štÜ˜˜Q™¤Ô&Ø! !™W d¨1¨2 h�dˆHÙà$% q¨"˜E�d’Ü˜H Q™K¬$´¨Ô7ä  ›]¬C°¸±Ó,<�d�Ø&.×<˜s¸Ò<°1šÐ<˜Ð<�Ò<ô ! ›]¨A�d�Ø ‘Ø# B Q˜xÖ(˜!Œd�1�gÒ(¬S´#´tÐ,<Ò<à&*¨1¡g¨t°A©w¸¸Q¹ÀÀaÀbÀÐ&IÑ#ˆD�$˜™tØ# B Q˜xÖ(˜!Œd�1�gÒ(¬S´#´t¹I³Ð,GÒGà%)¨!¡W¨d°1©g°t¸A±wÀÀQÀRÀÐ%HÑ"ˆD�$˜˜dÜ).¨t«×J A¼eÀD»kÒJ¸‘T˜!˜Q•ZÐJ�ZÐJˆEÒJäÐ/Ó0Ð0ô ˆt‹9˜Š>œj¨¨a©´%Ô8Ø˜‘7ˆDð �}‰}˜T 4¨°°dÓ;Ð;ùó) =ùò
 )ùò )ùó Ks   Á;F(Â&F.Ã,F3Ä> F8c           
      óz  ‡‡— |D �cg c]  }t        |«      ‘Œ }}|rt        d„ |D «       «      rd}nd}|�1t        |t        «      r~t	        dt        «       |¬«      j                  }n]|r=|d   }|dd  D ]  }	|j                  |	«      \  }}
Œ |j                  |j                     }nt        ||d¬«      \  }}|d   |d	      }d}|rTt	        d|j                  |j                  ¬«      Š|j                  j                  Šˆˆfd
„}|D �cg c]
  } ||«      ‘Œ }}n/|j                  }|D �cg c]  } ||j                  «       «      ‘Œ }}t        |«      D ��cg c]$  }t        |«      D �cg c]  }|||z  |z      ‘Œ c}‘Œ& }}}t!        |||f|«      }| j#                  |«      S c c}w c c}w c c}w c c}w c c}}w )Nc              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­w©N)r   r   )Ú.0Úitems     r   ú	<genexpr>z3MutablePolyDenseMatrix.from_list.<locals>.<genexpr>Z   s   è ø€ ÒB°Dœ D¬$×/ÑBùs   ‚TFr   ©Údomainr   )Úfieldr7   r'   c                 óh   •—  ‰| j                  ‰«      d   j                  j                  «       «      S r   )ÚunifyÚrepÚto_list)ÚpÚp_ringÚto_rings    €€r   r   z2MutablePolyDenseMatrix.from_list.<locals>.<lambda>r   s(   ø€ ¡W¨Q¯W©W°V«_¸QÑ-?×-CÑ-C×-KÑ-KÓ-MÓ%N€ r   )r   Úallr   Ústrr   r   r7   r:   r'   r   Úsymbolsr   r!   Ú
from_sympyÚas_exprr    r
   Úfrom_dm)r"   r$   r%   r&   r'   r   r4   Úpolysr=   Úp2Ú_ÚinfoÚconvert_polyr(   Úconvert_exprr*   r-   r.   Úelements_lolÚdmr>   r?   s                       @@r   r!   z MutablePolyDenseMatrix.from_listU   sª  ù€ ð -2Ö2 D”˜$•Ð2ˆÐ2Ù”SÑB¸EÔBÔBØ‰EàˆEð Ðä˜$¤Ô$Ü˜Aœu›w¨tÔ4×;Ñ;‘ÙØ�a‘ˆAØ˜A˜B�iò #�Ø—w‘w˜r“{‘�‘1ð#à—8‘8˜AŸF™FÑ#‰Dä1°%¸ÀTÔJ‰KˆE�4Ø˜‘> $ v¡,Ñ/ˆDØˆEñ Ü˜!˜TŸ\™\°$·+±+Ô>ˆFØ—i‘i×)Ñ)ˆGÜNˆLØ16Ö7¨A™ Q�Ð7ˆHÑ7àŸ?™?ˆLØ;@ÖA°a™ Q§Y¡Y£[Õ1ÐAˆHÐAô NSÐSWË[×YÈ´u¸T³{ÖC°!˜ ! D¡&¨1¡*Ó-ÔCÐYˆÑYÜ˜,¨¨t¨°dÓ;ˆØ�{‰{˜2‹ÐùòE 3ùò4 8ùò Bùò DùÓYs)   ‡F#ÄF(Ä*F-ÅF7Å)F2Å;F7Æ2F7c                 ó¾   •— t         ‰| �  | «      }|j                  «       }|j                  }||_        ||_        |j                  |_        |j                  |_        |S r2   )Úsuperr/   Ú	to_sparser7   Ú_dmr   rB   r'   )r"   rM   ÚobjÚRÚ	__class__s       €r   rE   zMutablePolyDenseMatrix.from_dm}   sN   ø€ ä‰g‰o˜cÓ"ˆØ�\‰\‹^ˆØ�I‰IˆØˆŒØˆŒØ—X‘XˆŒ
Ø—9‘9ˆŒØˆ
r   c                 ó6   — | j                   j                  «       S r2   )rQ   Ú	to_Matrix©Úselfs    r   rV   z MutablePolyDenseMatrix.to_Matrixˆ   s   € Ø�x‰x×!Ñ!Ó#Ð#r   c                óP   —  | g |j                   ¢|j                  «       ‘|¢­d|iŽS )Nr   )ÚshapeÚflat)r"   Úotherr   r'   s       r   Úfrom_Matrixz"MutablePolyDenseMatrix.from_Matrix‹   s)   € áÐ@�E—K‘KÐ@ §¡£Ð@°Ò@¸4Ñ@Ð@r   c                 óB   — | j                  | j                  «       |«      S r2   )r]   rV   )rX   r'   s     r   Úset_genszMutablePolyDenseMatrix.set_gens�   s   € Ø×Ñ §¡Ó 0°$Ó7Ð7r   c                 óè   — | j                   | j                  z  r0dt        | j                  «       «      d d z   d| j                  › d�z   S d| j                   › d| j                  › d| j                  › d�S )Nr   éÿÿÿÿz, ring=ú)zPolyMatrix(z, z, [], ring=)r$   r%   ÚreprrV   r   rW   s    r   Ú__repr__zMutablePolyDenseMatrix.__repr__’   si   € Ø�9‰9�t—y‘yÒ ØœD §¡Ó!1Ó2°3°BÐ7Ñ7¸GÀDÇIÁIÀ;ÈaÐ:PÑPÐPà  §¡ ¨2¨d¯i©i¨[¸ÀDÇIÁIÀ;ÈaÐPÐPr   c                 ó.   — | j                   j                  S r2   )rQ   rZ   rW   s    r   rZ   zMutablePolyDenseMatrix.shape˜   s   € à�x‰x�~‰~Ðr   c                 ó    — | j                   d   S r   ©rZ   rW   s    r   r$   zMutablePolyDenseMatrix.rowsœ   ó   € à�z‰z˜!‰}Ðr   c                 ó    — | j                   d   S ©Nr   rg   rW   s    r   r%   zMutablePolyDenseMatrix.cols    rh   r   c                 ó4   — | j                   | j                  z  S r2   )r$   r%   rW   s    r   Ú__len__zMutablePolyDenseMatrix.__len__¤   s   € Ø�y‰y˜4Ÿ9™9Ñ$Ð$r   c                 óÊ  ‡ — ˆ fd„}‰ j                   }t        |t        «      r)|j                  «       |   }|D �cg c]
  } ||«      ‘Œ c}S t        |t        «      r2t        |‰ j                  «      \  }}|||f   } ||j                  «      S |\  }}t        |t        «      r't        |t        «      r ||||f   j                  «      S ‰ j                  |||f   «      S c c}w )Nc                 ó¼   •— ‰j                   j                  j                  }‰j                   j                  j                  }t        | j	                  «       ||¬«      S )Nr6   )rQ   r7   rB   r   Úto_dict)ÚvÚgroundr'   rX   s      €r   Úto_polyz3MutablePolyDenseMatrix.__getitem__.<locals>.to_poly©   s>   ø€ Ø—X‘X—_‘_×+Ñ+ˆFØ—8‘8—?‘?×*Ñ*ˆDÜ˜Ÿ	™	› T°&Ô9Ð9r   )	rQ   r   Úslicer[   r   Údivmodr%   ÚelementrE   )	rX   Úkeyrr   rM   r&   r4   r-   r.   r*   s	   `        r   Ú__getitem__z"MutablePolyDenseMatrix.__getitem__§   sÌ   ø€ ô	:ð
 �X‰Xˆä�cœ5Ô!Ø—G‘G“I˜c‘NˆEØ.3Ö4 d‘G˜D•MÒ4Ð4Ü˜œSÔ!Ü˜#˜tŸy™yÓ)‰DˆAˆqØ�1�Q�3‘ˆAÙ˜1Ÿ9™9Ó%Ð%à‰ˆˆ1Ü�aœÔ¤*¨Q´Ô"4Ù˜2˜a ˜d™8×+Ñ+Ó,Ð,à—<‘<  1 a 4¡Ó)Ð)ùò 5s   ºC c                 ój   — t        | t        |«      «      st        S | j                  |j                  k(  S r2   )r   r   ÚNotImplementedrQ   ©rX   r\   s     r   Ú__eq__zMutablePolyDenseMatrix.__eq__¾   s)   € Ü˜$¤ U£Ô,Ü!Ð!Ø�x‰x˜5Ÿ9™9Ñ$Ð$r   c                 óˆ   — t        |t        | «      «      r(| j                  | j                  |j                  z   «      S t        S r2   ©r   r   rE   rQ   ry   rz   s     r   Ú__add__zMutablePolyDenseMatrix.__add__Ã   ó2   € Ü�eœT $›ZÔ(Ø—<‘< §¡¨5¯9©9Ñ 4Ó5Ð5ÜÐr   c                 óˆ   — t        |t        | «      «      r(| j                  | j                  |j                  z
  «      S t        S r2   r}   rz   s     r   Ú__sub__zMutablePolyDenseMatrix.__sub__È   r   r   c                 ó¾  — t        |t        | «      «      r(| j                  | j                  |j                  z  «      S t        |t        «      rt        |«      }t        |t        «      rF| j                  }	 t        |j                  |«      |«      }| j                  | j                  |z  «      S t        S # t        t        f$ r t        j                  |«      }Y ŒJw xY wr2   )r   r   rE   rQ   r   r   r   r   r   rC   r   Ú
ValueErrorry   )rX   r\   ÚKxÚother_dss       r   Ú__mul__zMutablePolyDenseMatrix.__mul__Í   s²   € Ü�eœT $›ZÔ(Ø—<‘< §¡¨5¯9©9Ñ 4Ó5Ð5Ü˜œsÔ#Ü˜U“OˆEÜ�eœTÔ"Ø—‘ˆBð:Ü'¨¯©°eÓ(<¸bÓA�ð —<‘< §¡¨8Ñ 3Ó4Ð4ÜÐøô #¤JÐ/ò :Ü'×2Ñ2°5Ó9’ð:ús   Á6B5 Â5$CÃCc                 óÊ   — t        |t        «      rt        |«      }t        |t        «      r3t	        j
                  |«      }| j                  || j                  z  «      S t        S r2   )	r   r   r   r   r   rC   rE   rQ   ry   )rX   r\   r…   s      r   Ú__rmul__zMutablePolyDenseMatrix.__rmul__Û   sM   € Ü�eœSÔ!Ü˜U“OˆEÜ�eœTÔ"Ü#×.Ñ.¨uÓ5ˆHØ—<‘< ¨4¯8©8Ñ 3Ó4Ð4ÜÐr   c                 óš  — t        |t        «      r|j                  «       }nt        |t        «      rt	        |«      }t        |t
        «      st        S | j                  j                  |«      }| j                  j                  d|z  | j                  «      }t        || j                  «      }| j                  |z  }| j                  |«      S rj   )r   r   rD   r   r   r   ry   r7   rC   r   Úconvert_fromr   rQ   rE   )rX   r\   ÚinverserM   s       r   Ú__truediv__z"MutablePolyDenseMatrix.__truediv__ã   s™   € ä�eœTÔ"Ø—M‘M“O‰EÜ˜œsÔ#Ü˜U“OˆEÜ˜%¤Ô&Ü!Ð!à—‘×&Ñ& uÓ-ˆØ—)‘)×(Ñ(¨¨5©°$·+±+Ó>ˆÜ˜w¨¯	©	Ó2ˆØ�X‰X˜ÑˆØ�|‰|˜BÓÐr   c                 ó:   — | j                  | j                   «      S r2   )rE   rQ   rW   s    r   Ú__neg__zMutablePolyDenseMatrix.__neg__ò   s   € Ø�|‰|˜TŸX™X˜IÓ&Ð&r   c                 óT   — | j                  | j                  j                  «       «      S r2   )rE   rQ   Ú	transposerW   s    r   r�   z MutablePolyDenseMatrix.transposeõ   s   € Ø�|‰|˜DŸH™H×.Ñ.Ó0Ó1Ð1r   c                 óx   — t        j                  | j                  |j                  «      }| j                  |«      S r2   )r
   ÚhstackrQ   rE   ©rX   r\   rM   s      r   Úrow_joinzMutablePolyDenseMatrix.row_joinø   ó+   € Ü× Ñ  §¡¨5¯9©9Ó5ˆØ�|‰|˜BÓÐr   c                 óx   — t        j                  | j                  |j                  «      }| j                  |«      S r2   )r
   ÚvstackrQ   rE   r“   s      r   Úcol_joinzMutablePolyDenseMatrix.col_joinü   r•   r   c                 óx   — | j                  «       j                  |«      }| j                  || j                  «      S r2   )rV   Ú	applyfuncr]   r'   )rX   r,   ÚMs      r   rš   z MutablePolyDenseMatrix.applyfunc   s0   € Ø�N‰NÓ×&Ñ& tÓ,ˆØ×Ñ  4§9¡9Ó-Ð-r   c                 óZ   — | j                  t        j                  |t        |   «      «      S r2   )rE   r
   Úeyer	   )r"   Únr'   s      r   r�   zMutablePolyDenseMatrix.eye  s"   € à�{‰{œ<×+Ñ+¨A¬r°$©xÓ8Ó9Ð9r   c                 ó^   — | j                  t        j                  ||ft        |   «      «      S r2   )rE   r
   Úzerosr	   )r"   Úmrž   r'   s       r   r    zMutablePolyDenseMatrix.zeros  s&   € à�{‰{œ<×-Ñ-¨q°!¨f´b¸±hÓ?Ó@Ð@r   c                 óL  — | j                   j                  rt        d„ | D «       «      st        d«      ‚| j                  }|j                  |j                   j                   «      }|j                  «       \  }}|j                  |j                   «      }| j                  |«      |fS )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr2   ©Ú	is_ground©r3   r=   s     r   r5   z.MutablePolyDenseMatrix.rref.<locals>.<genexpr>  ó   è ø€ Ò,G¸Q¨Q¯[­[Ñ,Gùó   ‚z1PolyMatrix rref is only for ground field elements)r7   Úis_Fieldr@   rƒ   rQ   Ú
convert_toÚrrefrE   )rX   ÚsimplifyÚnormalize_lastrM   Ú	dm_groundÚdm_rrefÚpivotss          r   r«   zMutablePolyDenseMatrix.rref  s�   € à—‘×$Ò$¬Ñ,GÀ$Ô,GÔ)GÜÐPÓQÐQØ�X‰XˆØ—M‘M "§)¡)×"2Ñ"2Ó3ˆ	Ø#Ÿ.™.Ó*‰ˆ�Ø×$Ñ$ R§Y¡YÓ/ˆØ�|‰|˜GÓ$ fÐ,Ð,r   c                 óÚ  — | j                   j                  rt        d„ | D «       «      st        d«      ‚| j                  }| j                   | j
                  }}|j                  |«      j                  d¬«      j                  |«      }|j                  «       }t        |j                  d   «      D �cg c]  }|d d …|f   ‘Œ }}|D �cg c]  }| j                  |«      ‘Œ c}S c c}w c c}w )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr2   r¤   r¦   s     r   r5   z3MutablePolyDenseMatrix.nullspace.<locals>.<genexpr>  r§   r¨   z6PolyMatrix nullspace is only for ground field elementsT)Údivide_lastr   )r7   r©   r@   rƒ   rQ   r   rª   Ú	nullspacer�   r    rZ   rE   )	rX   rM   ÚKr„   Údm_null_rowsÚdm_nullr-   Údm_basisÚdmvecs	            r   r´   z MutablePolyDenseMatrix.nullspace  sÃ   € à—‘×$Ò$¬Ñ,GÀ$Ô,GÔ)GÜÐUÓVÐVØ�X‰XˆØ—‘˜TŸY™Yˆ2ˆØ—}‘} QÓ'×1Ñ1¸dÐ1ÓC×NÑNÈrÓRˆØ×(Ñ(Ó*ˆÜ*/°·±¸aÑ0@Ó*AÖB Q�GšA˜a˜C“LÐBˆÐBØ19Ö:¨�—‘˜UÕ#Ò:Ð:ùò CùÚ:s   Â2C#ÃC(c                 óN   — | j                   t        | j                  «       «      z
  S r2   )r%   r   r´   rW   s    r   ÚrankzMutablePolyDenseMatrix.rank!  s   € Ø�y‰yœ3˜tŸ~™~Ó/Ó0Ñ0Ð0r   )Úignorer¼   )#Ú__name__Ú
__module__Ú__qualname__Ú__doc__r/   Úclassmethodr!   rE   rV   r]   r_   rd   ÚpropertyrZ   r$   r%   rl   rw   r{   r~   r�   r†   rˆ   rŒ   rŽ   r�   r”   r˜   rš   r�   r    r«   r´   r»   Ú__classcell__)rT   s   @r   r   r      s  ø„ ñ ðD "&ô #<ðJ ñ%ó ð%ðN óó ðò$ð Ø,0ó Aó ðAò8òQð ñó ðð ñó ðð ñó ðò%ò*ò.%ò
ò
ò
òò ò'ò2ò ò ò.ð ñ:ó ð:ð ñAó ðAó-ò	;ö1r   r   N)Úsympy.core.exprr   Úsympy.core.symbolr   Úsympy.core.sympifyr   Úsympy.polys.polyerrorsr   Úsympy.polys.polytoolsr   r   Úsympy.polys.domainsr	   Úsympy.polys.matricesr
   Ú!sympy.polys.matrices.domainscalarr   r   ÚMutablePolyMatrixÚ
PolyMatrixr   r   r   ú<module>rÎ      s7   ðÝ  Ý #Ý 'å 1ß ?Ý "å -Ý :÷U1ñ U1ðn "8Ð 7Ð ‘Jr   