K i+&ddlmZddlmZddlmZddlmZddlm Z m Z ddl m Z ddl mZddlmZGd d ZexZZy ) )Expr)Dummy)_sympify)CoercionFailed)Polyparallel_poly_from_expr)QQ) DomainMatrix) DomainScalarc"eZdZdZdddZedZefdZdZedddZ d Z d Z e d Z e d Ze d ZdZdZdZdZdZdZdZdZdZdZdZdZdZedZedZd dZdZ dZ!xZ"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| tdddgdf\}}}}nPt|dtro|d|dd}}|sddg}}}n)t|dttfr2t |t |d}}|D cgc] }|D]} |  }}} nt |d}}|}n|ddD cgc] } t | c} t t tgk(r|d|d|d|ddf\}}}}n|ddD cgc] } t | c} t t t dgk(rI|d|d|d|ddf\}}} }t|D cgc]} t|D] } | | |  }} } n tdt |dk(rt|dtr|d}|j|||||Scc} }wcc} wcc} wcc} } w) Nz6The ring needs to be specified for an empty PolyMatrixrcyNrrr\/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sympy/polys/polymatrix.pyz0MutablePolyDenseMatrix.__new__..GsrzInvalid arguments) TypeError isinstancelisttuplelentypeintrange from_list)clsrargsrowscolsitemsgenselementsroweafuncijs r__new__zMutablePolyDenseMatrix.__new__0s| XYY&'Bl #D$t Q &!!Wd12hdH$%q"EdHQK$7 ]C ,ja%87D}}T4d;;)= ))Ks;F(&F.,F3> F8c z|Dcgc] }t|}}|rtd|Drd}nd}|1t|tr~t dt |j }n]|r=|d}|ddD]} |j| \}} |j |j}nt||d\}} | d| d }d}|rTt d|j|j |jjfd } |Dcgc] }| | } }n/|j}|Dcgc]}||j} }t|Dcgc]$}t|Dcgc] }| ||z|zc}&}}}t!|||f|}|j#|Scc}wcc}wcc}wcc}wcc}}w) Nc3<K|]}t|tywN)rr).0items r z3MutablePolyDenseMatrix.from_list..ZsBDD$/BsTFrdomainr)fieldr7r'ch|jdjjSr)unifyrepto_list)pp_ringto_rings rrz2MutablePolyDenseMatrix.from_list..rs(WQWWV_Q-?-C-C-K-K-M%Nr)rallrstrrrr7r:r'rsymbolsrr! from_sympyas_exprr r from_dm)r"r$r%r&r'rr4polysr=p2_info convert_polyr( convert_exprr*r-r. elements_loldmr>r?s @@rr!z MutablePolyDenseMatrix.from_listUs-22D$22 SBEBBEE  $$Auwt4;; aAABi #wwr{1 #88AFF#D1%TJKE4>$v,/DE !T\\$++>Fii))GNL167A Q7H7??L;@Aa QYY[1AHANSSW[YuT{C!!D&1*-CY Y ,t d ;{{2E348BDYs)F#F(*F-F7)F2 ;F72F7ct||}|j}|j}||_||_|j|_|j |_|Sr2)superr/ to_sparser7_dmrrBr')r"rMobjR __class__s rrEzMutablePolyDenseMatrix.from_dm}sNgoc" \\^ IIXX 99 rc6|jjSr2)rQ to_Matrixselfs rrVz MutablePolyDenseMatrix.to_Matrixsxx!!##rcP|g|j|j|d|iS)Nr)shapeflat)r"otherrr's r from_Matrixz"MutablePolyDenseMatrix.from_Matrixs)@EKK@@@4@@rcB|j|j|Sr2)r]rV)rXr's rset_genszMutablePolyDenseMatrix.set_genss 0$77rc|j|jzr0dt|jddzd|jdzSd|jd|jd|jdS)Nrz, ring=)z PolyMatrix(z, z , [], ring=)r$r%reprrVrrWs r__repr__zMutablePolyDenseMatrix.__repr__si 99tyy D!123B77GDII;a:PP P  2dii[ DII;aP Prc.|jjSr2)rQrZrWs rrZzMutablePolyDenseMatrix.shapesxx~~rc |jdSrrZrWs rr$zMutablePolyDenseMatrix.rowszz!}rc |jdSNrrgrWs rr%zMutablePolyDenseMatrix.colsrhrc4|j|jzSr2)r$r%rWs r__len__zMutablePolyDenseMatrix.__len__syy499$$rcfd}j}t|tr)|j|}|Dcgc] }|| c}St|tr2t |j \}}|||f}||jS|\}}t|tr't|tr||||fjSj|||fScc}w)Ncjjj}jjj}t|j ||S)Nr6)rQr7rBrto_dict)vgroundr'rXs rto_polyz3MutablePolyDenseMatrix.__getitem__..to_polys>XX__++F88??**D T&9 9r) rQrslicer[rdivmodr%elementrE) rXkeyrrrMr&r4r-r.r*s ` r __getitem__z"MutablePolyDenseMatrix.__getitem__s : XX c5 !GGIcNE.34dGDM4 4 S !#tyy)DAq1Q3A199% %1 a *Q"42ad8++, ,<<1a4) )5sC cjt|t|stS|j|jk(Sr2)rrNotImplementedrQrXr\s r__eq__zMutablePolyDenseMatrix.__eq__s)$U ,! !xx599$$rct|t|r(|j|j|jzStSr2rrrErQryrzs r__add__zMutablePolyDenseMatrix.__add__2 eT$Z (<<599 45 5rct|t|r(|j|j|jz StSr2r}rzs r__sub__zMutablePolyDenseMatrix.__sub__rrct|t|r(|j|j|jzSt|tr t |}t|t rF|j} t|j||}|j|j|zStS#ttf$rtj|}YJwxYwr2) rrrErQrrrrr rCr ValueErrorry)rXr\Kxother_dss r__mul__zMutablePolyDenseMatrix.__mul__s eT$Z (<<599 45 5 s #UOE eT "B :' e(w 2 XX ||Brc:|j|j Sr2)rErQrWs r__neg__zMutablePolyDenseMatrix.__neg__s||TXXI&&rcT|j|jjSr2)rErQ transposerWs rrz MutablePolyDenseMatrix.transposes||DHH..011rcxtj|j|j}|j|Sr2)r hstackrQrErXr\rMs rrow_joinzMutablePolyDenseMatrix.row_join+  599 5||Brcxtj|j|j}|j|Sr2)r vstackrQrErs rcol_joinzMutablePolyDenseMatrix.col_joinrrcx|jj|}|j||jSr2)rV applyfuncr]r')rXr,Ms rrz MutablePolyDenseMatrix.applyfuncs0 NN  & &t ,499--rcZ|jtj|t|Sr2)rEr eyer )r"nr's rrzMutablePolyDenseMatrix.eyes"{{<++Ar$x899rc^|jtj||ft|Sr2)rEr zerosr )r"mrr's rrzMutablePolyDenseMatrix.zeross&{{<--q!fbh?@@rcL|jjrtd|Ds td|j}|j |jj}|j \}}|j |j}|j||fS)Nc34K|]}|jywr2 is_groundr3r=s rr5z.MutablePolyDenseMatrix.rref..,GQQ[[,Gz1PolyMatrix rref is only for ground field elements)r7is_Fieldr@rrQ convert_torrefrE)rXsimplifynormalize_lastrM dm_grounddm_rrefpivotss rrzMutablePolyDenseMatrix.rref s $$,G$,G)GPQ Q XXMM"))"2"23 #..*$$RYY/||G$f,,rc|jjrtd|Ds td|j}|j|j }}|j |jdj |}|j}t|jdDcgc] }|dd|f }}|Dcgc]}|j|c}Scc}wcc}w)Nc34K|]}|jywr2rrs rr5z3MutablePolyDenseMatrix.nullspace..rrz6PolyMatrix nullspace is only for ground field elementsT) divide_lastr) r7rr@rrQrr nullspacerr rZrE) rXrMKr dm_null_rowsdm_nullr-dm_basisdmvecs rrz MutablePolyDenseMatrix.nullspaces $$,G$,G)GUV V XX TYY2}}Q'11d1CNNrR ((**/ a0@*ABQGAaCLBB19: U#::C:s 2C#C(cN|jt|jz Sr2)r%rrrWs rrankzMutablePolyDenseMatrix.rank!syy3t~~/000r)ignorer)#__name__ __module__ __qualname____doc__r/ classmethodr!rErVr]r_rdpropertyrZr$r%rlrwr{r~rrrrrrrrrrrrrr __classcell__)rTs@rr r s D"&#rs7 #'1?"-:U1U1n"87Jr