
    \h+&                         S SK Jr  S SKJr  S SKJr  S SKJr  S SKJ	r	J
r
  S SKJr  S SKJr  S SKJr   " S	 S
5      r\=rrg)    )Expr)Dummy)_sympify)CoercionFailed)Polyparallel_poly_from_expr)QQ)DomainMatrix)DomainScalarc                   2  ^  \ rS rSrSrSS.S jr\S 5       r\U 4S j5       rS r	\SS.S	 j5       r
S
 rS r\S 5       r\S 5       r\S 5       rS rS rS rS rS rS rS rS rS rS rS rS rS r\S 5       r\S 5       rS"S jr S r!S  r"S!r#U =r$$ )#MutablePolyDenseMatrix   a  
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          	         U(       d  Uc  [        S5      eSS/ S4u  p4pVGOg[        US   [        5      (       ay  US   USS  pgU(       d  SS/ pTnGO8[        US   [        [        45      (       a5  [	        U5      [	        US   5      pCU VV	s/ s H  o  H  oPM     M     nnn	O[	        U5      SpCUnOUS S  V
s/ s H  n
[        U
5      PM     sn
[        [        [        /:X  a  US   US   US   USS  4u  p4pVOUS S  V
s/ s H  n
[        U
5      PM     sn
[        [        [        S 5      /:X  aK  US   US   US   USS  4u  p4p[        U5       VVs/ s H  n[        U5        H
  o" X5      PM     M     nnnO[        S5      e[	        U5      S:X  a  [        US   [        5      (       a  US   nU R                  X4XVU5      $ s  sn	nf s  sn
f s  sn
f s  snnf )	Nz6The ring needs to be specified for an empty PolyMatrixr             c                      gNr   r   r       N/var/www/auris/envauris/lib/python3.13/site-packages/sympy/polys/polymatrix.py<lambda>0MutablePolyDenseMatrix.__new__.<locals>.<lambda>G   s    Ar   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__MutablePolyDenseMatrix.__new__0   s   | XYY&'Bl#DtQ&&!!Wd12hd$%q"EEHQK$77 ]C,<d&.<hs1h< !]Ad #BQx(x!d1gx(S#t,<<&*1gtAwQab&I#Dt#BQx(x!d1gx(S#tI,GG%)!Wd1gtAwQR%H"D).tJAeDkT!ZkZEJE/00 t9>ja%887D }}Td;;) =
 ) ) Ks   G9GG$Gc           
        ^^ U Vs/ s H  n[        U5      PM     nnU(       a  [        S U 5       5      (       a  SnOSnUb3  [        U[        5      (       a  [	        S[        5       US9R                  nO^U(       a>  US   nUSS   H  n	UR                  U	5      u  pM     UR                  UR                     nO[        X4SS9u  p;US   US	      nSnU(       aT  [	        SUR                  UR                  S9mUR                  R                  mUU4S
 jnU Vs/ s H
  o" U5      PM     nnO1UR                  nU Vs/ s H  o" UR                  5       5      PM     nn[        U5       VVs/ s H(  n[        U5       Vs/ s H  nUUU-  U-      PM     snPM*     nnn[!        UX4U5      nU R#                  U5      $ s  snf s  snf s  snf s  snf s  snnf )Nc              3   B   #    U  H  n[        U[        5      v   M     g 7fN)r   r   ).0items     r   	<genexpr>3MutablePolyDenseMatrix.from_list.<locals>.<genexpr>Z   s     BEDD$//Es   TFr   domainr   )fieldr;   r)   c                 h   > T" U R                  T5      S   R                  R                  5       5      $ r   )unifyrepto_list)pp_ringto_rings    r   r   2MutablePolyDenseMatrix.from_list.<locals>.<lambda>r   s&    WQWWV_Q-?-C-C-K-K-M%Nr   )r   allr   strr   r   r;   r>   r)   r   symbolsr   r#   
from_sympyas_exprr"   r
   from_dm)r$   r&   r'   r(   r)   r   r7   polysrA   p2_infoconvert_polyr*   convert_exprr,   r/   r0   elements_loldmrB   rC   s                       @@r   r#    MutablePolyDenseMatrix.from_listU   s    -22ED$E2SBEBBBEE $$$Auwt4;;aAABiwwr{1  88AFF#D1%TJKE>$v,/DE !T\\$++>Fii))GNL167AQH7H??L;@A5aQYY[15HA NSSW[Y[uT{C{!!D&1*-{C[Y,d;{{2E 34 8 B DYs)   G G G
/GGGGc                    > [         TU ]  U 5      nUR                  5       nUR                  nXl        X2l        UR                  Ul        UR                  Ul        U$ r5   )superr1   	to_sparser;   _dmr   rG   r)   )r$   rR   objR	__class__s       r   rJ   MutablePolyDenseMatrix.from_dm}   sJ    goc"\\^IIXX
99
r   c                 6    U R                   R                  5       $ r5   )rW   	to_Matrixselfs    r   r]    MutablePolyDenseMatrix.to_Matrix   s    xx!!##r   c                P    U " / UR                   QUR                  5       PUQ7SU06$ )Nr   )shapeflat)r$   otherr   r)   s       r   from_Matrix"MutablePolyDenseMatrix.from_Matrix   s)    @EKK@@@4@@r   c                 B    U R                  U R                  5       U5      $ r5   )re   r]   )r_   r)   s     r   set_gensMutablePolyDenseMatrix.set_gens   s     0$77r   c                     U R                   U R                  -  (       a0  S[        U R                  5       5      S S -   SU R                   S3-   $ SU R                    SU R                   SU R                   S3$ )Nr   z, ring=)zPolyMatrix(z, z, [], ring=)r&   r'   reprr]   r   r^   s    r   __repr__MutablePolyDenseMatrix.__repr__   si    99tyy D!123B77GDII;a:PPP 2dii[DII;aPPr   c                 .    U R                   R                  $ r5   )rW   rb   r^   s    r   rb   MutablePolyDenseMatrix.shape   s    xx~~r   c                      U R                   S   $ r   rb   r^   s    r   r&   MutablePolyDenseMatrix.rows       zz!}r   c                      U R                   S   $ Nr   rs   r^   s    r   r'   MutablePolyDenseMatrix.cols   ru   r   c                 4    U R                   U R                  -  $ r5   )r&   r'   r^   s    r   __len__MutablePolyDenseMatrix.__len__   s    yy499$$r   c                   ^  U 4S jnT R                   n[        U[        5      (       a+  UR                  5       U   nU Vs/ s H
  oR" U5      PM     sn$ [        U[        5      (       a0  [        UT R                  5      u  pgX6U4   nU" UR                  5      $ Uu  pg[        U[        5      (       a+  [        U[        5      (       a  U" X6U4   R                  5      $ T R                  X6U4   5      $ s  snf )Nc                    > TR                   R                  R                  nTR                   R                  R                  n[        U R	                  5       X!S9$ )Nr:   )rW   r;   rG   r   to_dict)vgroundr)   r_   s      r   to_poly3MutablePolyDenseMatrix.__getitem__.<locals>.to_poly   s<    XX__++F88??**D		T99r   )	rW   r   slicerc   r!   divmodr'   elementrJ   )	r_   keyr   rR   r(   r7   r/   r0   r,   s	   `        r   __getitem__"MutablePolyDenseMatrix.__getitem__   s    	:
 XXc5!!GGIcNE.34edGDMe44S!!#tyy)DAQ3A199%%a*Q"4"42d8++,,<<a4)) 5s    C2c                 t    [        U [        U5      5      (       d  [        $ U R                  UR                  :H  $ r5   )r   r    NotImplementedrW   r_   rd   s     r   __eq__MutablePolyDenseMatrix.__eq__   s,    $U,,!!xx599$$r   c                     [        U[        U 5      5      (       a(  U R                  U R                  UR                  -   5      $ [        $ r5   r   r    rJ   rW   r   r   s     r   __add__MutablePolyDenseMatrix.__add__   5    eT$Z((<<599 455r   c                     [        U[        U 5      5      (       a(  U R                  U R                  UR                  -
  5      $ [        $ r5   r   r   s     r   __sub__MutablePolyDenseMatrix.__sub__   r   r   c                    [        U[        U 5      5      (       a(  U R                  U R                  UR                  -  5      $ [        U[        5      (       a  [        U5      n[        U[        5      (       aF  U R                  n [        UR                  U5      U5      nU R                  U R                  U-  5      $ [        $ ! [        [        4 a    [        R                  " U5      n NLf = fr5   )r   r    rJ   rW   r!   r   r   r   r   rH   r   
ValueErrorr   )r_   rd   Kxother_dss       r   __mul__MutablePolyDenseMatrix.__mul__   s    eT$Z((<<599 455s##UOEeT""B:'e(<bA <<8 344 #J/ :'2259:s   C &C-,C-c                     [        U[        5      (       a  [        U5      n[        U[        5      (       a3  [        R
                  " U5      nU R                  X R                  -  5      $ [        $ r5   )	r   r!   r   r   r   rH   rJ   rW   r   )r_   rd   r   s      r   __rmul__MutablePolyDenseMatrix.__rmul__   sQ    eS!!UOEeT""#..u5H<<88 344r   c                    [        U[        5      (       a  UR                  5       nO [        U[        5      (       a  [	        U5      n[        U[
        5      (       d  [        $ U R                  R                  U5      nU R                  R                  SU-  U R                  5      n[        X R                  5      nU R                  U-  nU R                  U5      $ rw   )r   r   rI   r!   r   r   r   r;   rH   r   convert_fromr   rW   rJ   )r_   rd   inverserR   s       r   __truediv__"MutablePolyDenseMatrix.__truediv__   s    eT""MMOEs##UOE%&&!!&&u-))((5$++>w		2XX||Br   c                 :    U R                  U R                  * 5      $ r5   )rJ   rW   r^   s    r   __neg__MutablePolyDenseMatrix.__neg__   s    ||TXXI&&r   c                 T    U R                  U R                  R                  5       5      $ r5   )rJ   rW   	transposer^   s    r   r    MutablePolyDenseMatrix.transpose   s    ||DHH..011r   c                 z    [         R                  " U R                  UR                  5      nU R                  U5      $ r5   )r
   hstackrW   rJ   r_   rd   rR   s      r   row_joinMutablePolyDenseMatrix.row_join   +      5995||Br   c                 z    [         R                  " U R                  UR                  5      nU R                  U5      $ r5   )r
   vstackrW   rJ   r   s      r   col_joinMutablePolyDenseMatrix.col_join   r   r   c                 v    U R                  5       R                  U5      nU R                  X R                  5      $ r5   )r]   	applyfuncre   r)   )r_   r.   Ms      r   r    MutablePolyDenseMatrix.applyfunc   s.    NN&&t,99--r   c                 \    U R                  [        R                  " U[        U   5      5      $ r5   )rJ   r
   eyer	   )r$   nr)   s      r   r   MutablePolyDenseMatrix.eye  s"    {{<++Ar$x899r   c                 ^    U R                  [        R                  " X4[        U   5      5      $ r5   )rJ   r
   zerosr	   )r$   mr   r)   s       r   r   MutablePolyDenseMatrix.zeros  s$    {{<--qfbh?@@r   c                 ^   U R                   R                  (       a  [        S U  5       5      (       d  [        S5      eU R                  nUR                  UR                   R                   5      nUR                  5       u  pVUR                  UR                   5      nU R                  U5      U4$ )Nc              3   8   #    U  H  oR                   v   M     g 7fr5   	is_groundr6   rA   s     r   r8   .MutablePolyDenseMatrix.rref.<locals>.<genexpr>       ,G$Q[[$   z1PolyMatrix rref is only for ground field elements)r;   is_FieldrE   r   rW   
convert_torrefrJ   )r_   simplifynormalize_lastrR   	dm_grounddm_rrefpivotss          r   r   MutablePolyDenseMatrix.rref  s    $$,G$,G)G)GPQQXXMM"))"2"23	#..*$$RYY/||G$f,,r   c                    U R                   R                  (       a  [        S U  5       5      (       d  [        S5      eU R                  nU R                   U R
                  p2UR                  U5      R                  SS9R                  U5      nUR                  5       n[        UR                  S   5       Vs/ s H  oeS S 2U4   PM     nnU Vs/ s H  oR                  U5      PM     sn$ s  snf s  snf )Nc              3   8   #    U  H  oR                   v   M     g 7fr5   r   r   s     r   r8   3MutablePolyDenseMatrix.nullspace.<locals>.<genexpr>  r   r   z6PolyMatrix nullspace is only for ground field elementsT)divide_lastr   )r;   r   rE   r   rW   r   r   	nullspacer   r"   rb   rJ   )	r_   rR   Kr   dm_null_rowsdm_nullr/   dm_basisdmvecs	            r   r    MutablePolyDenseMatrix.nullspace  s    $$,G$,G)G)GUVVXXTYY2}}Q'11d1CNNrR((**/a0@*AB*AQAaCL*AB19:U#:: C:s   8C-C2c                 N    U R                   [        U R                  5       5      -
  $ r5   )r'   r   r   r^   s    r   rankMutablePolyDenseMatrix.rank!  s    yy3t~~/000r   r   )ignorer   )%__name__
__module____qualname____firstlineno____doc__r1   classmethodr#   rJ   r]   re   rh   rn   propertyrb   r&   r'   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __static_attributes____classcell__)rZ   s   @r   r   r      s!    D "& #<J % %N  $ ,0 A A8Q      %*.%


 '2  . : : A A-	;1 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1n "8 7 Jr   