L iVdZdZgdZddlZddlZddlmZddlm Z m Z m Z ddl m Z dd lmZmZmZmZmZmZmZmZGd d e e eZd ZGd dee ZGddeeZy)zDictionary Of Keys based matrixzrestructuredtext en) dok_array dok_matrixisspmatrix_dokN)spmatrix)_spbasesparrayissparse) IndexMixin)isdensegetdtypeisshape isintlike isscalarlikeupcast upcast_scalar check_shapecBeZdZdZdZddZdZdZdZdZdZdZdZ dZ!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/d.Z0d/Z1d0Z2d1Z3d2Z4d?fd3 Z5d@d4Z6e jlje6_ d5Z7e jnje7_ e8dAd6Z9dBd7Z:e jtje:_ dBd8Z;e jvje;_ dBd9ZxZ?S)D _dok_basedok)rNmaxprintctj|||t|trQt ||j r:t ||j |_i|_t|t|_ yt|r|j|jk(r|r|jn|}n|j}||j!|d}|j|_t |j"|j |_t|j|_ y t%j&|}|j,dkDrt/d|j,d |j,d k(rX||j!|}t1|Dcic]\}}|d k7s ||c}}|_t|j|_ nM|j3||| j} | j|_t| j|_ t |j"|j |_y#t($r}t+d|d}~wwxYwcc}}w) Nrallow_nd)defaultFcopyzInvalid input format.rzDOK arrays don't yet support zD input.rrshapedtype)r__init__ isinstancetupler _allow_ndr_shape_dictr floatr"r formatrtodokastyper!npasarray Exception TypeErrorndim ValueError enumerate_coo_container) selfarg1r!r"rreivds W/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/scipy/sparse/_dok.pyr#z_dok_base.__init__sth7 dE "wtdnn'M%dT^^DDKDJ!%7DJ d^{{dkk)&*tyy{zz| {{5u{5DJ%djj4>>JDK!$**-DJ @zz$'yy1} #@ 8!TUUyyA~$;;u-D/8Itq!!q&adI %djj1 ''E'GMMOWW %agg. %djj4>>JDK @ 78a? @Js$+I I &I  I IIctd)Nz2Direct update to DOK sparse format is not allowed.)NotImplementedError)r5vals r;updatez_dok_base.update<s!"VWWcF| tdt|jS)Nz7_getnnz over an axis is not implemented for DOK format.)r=lenr(r5axiss r;_getnnzz_dok_base._getnnz@s(  %I 4::r@c\| tdtd|jDS)Nz=count_nonzero over an axis is not implemented for DOK format.c3&K|] }|dk7 ywrN).0xs r; z*_dok_base.count_nonzero..Ls1a161s)r=sumvaluesrCs r; count_nonzeroz_dok_base.count_nonzeroGs1  %O 14;;=111r@c,t|jSN)rBr(r5s r;__len__z_dok_base.__len__Qs4::r@c||jvSrQr(r5keys r; __contains__z_dok_base.__contains__Tsdjj  r@c:|jj||SrQ)r( setdefault)r5rWrs r;rZz_dok_base.setdefaultWszz$$S'22r@c|j|=yrQrUrVs r; __delitem__z_dok_base.__delitem__Zs JJsOr@c6|jjSrQ)r(clearrRs r;r^z_dok_base.clear]zz!!r@c4|jj|SrQ)r(pop)r5argss r;raz _dok_base.pop`stzz~~t$$r@ctd)Nz*reversed is not defined for dok_array type)r0rRs r; __reversed__z_dok_base.__reversed__csDEEr@cxt|jdt|j}td|Nz and z unsupported operand type for |: type__name__r0r5other type_namess r;__or__z_dok_base.__or__f;T ++,E$u+2F2F1GH ::,GHHr@cxt|jdt|j}td|rfrgrjs r;__ror__z_dok_base.__ror__jrnr@cxt|jdt|j}td|rfrgrjs r;__ior__z_dok_base.__ior__nrnr@c6|jjSrQ)r(popitemrRs r;rtz_dok_base.popitemrszz!!##r@c6|jjSrQ)r(itemsrRs r;rvz_dok_base.itemsur_r@c6|jjSrQ)r(keysrRs r;rxz_dok_base.keysxszz  r@c6|jjSrQ)r(rNrRs r;rNz_dok_base.values{szz  ""r@cN||jvr|j|St|r|jdk(r|f}|jt|k7rt d|d |D]}t|rJ tdt||jD}tdt||jDr t d|jdk(r|d }|jj||S#t t tf$r}t d|d}~wwxYw) z>This provides dict.get method functionality with type checkingrzIndex z! length needs to match self.shapez%Index must be or consist of integers.Nc3:K|]\}}|dkr||zn|ywrHrIrJr8Ms r;rLz _dok_base.get..s#KdaQUAE)Kc3:K|]\}}|dkxs||k\ywrHrIr|s r;rLz _dok_base.get..s"@41aq1uQ@r~zIndex out of bounds.r) r(rr1rB IndexErrorAssertionErrorr0r2r%zipr!anyget)r5rWrr8r7s r;rz _dok_base.get~s $** ::c? " S>dii1n&C 99C vcU*KLM M M $ |#| $Kc#tzz6JKK @3sDJJ+?@ @34 4 99>a&Czz~~c7++ :6 MDE1 L Ms#C?4C??D$ DD$cl|jj||jjdSNrr(rr"rh)r5idxs r;_get_intz_dok_base._get_ints$zz~~c4::??1#566r@c~t|j|jd}|jt |Sr)rangeindicesr! _get_arraylist)r5ri_ranges r; _get_slicez_dok_base._get_slices0TZZ]34tG}--r@cRtj|}|jdk(r_|jj t ||j jd}tj||j S|j|j|j }|jDcgc]}|jj |d }}|rt|jdk(r't|D]\}}|s ||j|<|Stjtjt||j}t|dk(r|dnt!|}t!||dD]\}}|s ||j|<|Scc}w)Nr)styper"rT)strict)r-r.r1r(rintr"rharray_dok_containerr!ravelrBr3 unravel_indexaranger)r5rr>new_dokr8dok_valsr9new_idxs r;rz_dok_base._get_arraysTjjo 88q=**..S4::??1+=>C88Ctzz2 2%%ciitzz%B25))+>QDJJNN1a(>> 399~"%h/-DAq+, a(- **299S]+CSYYO(+G (9'!*sG}$?-DAq+, a(-?s=#F$cp|jj||f|jjdSrrr5rowcols r; _get_intXintz_dok_base._get_intXints(zz~~sCj$**//!*<==r@c@|jt||dz|SNr_get_sliceXsliceslicers r;_get_intXslicez_dok_base._get_intXslices $$U3a%8#>>r@c@|j|t||dzSrrrs r;_get_sliceXintz_dok_base._get_sliceXints $$S%S1W*=>>r@c|j|jd\}}}|j|jd\}}}t|||} t|||} t| t| f} t|d| dz| dzk\r|j | | S|j | |j } |jD]} tt| d|z |\}}|dk7s |dks|| dk\r4tt| d|z |\}}|dk7s |dks|| dk\re|j| | j||f<| S)Nrrrr) rr!rrB_get_columnXarrayrr"rxdivmodrr()r5rr row_startrow_stoprow_step col_startcol_stopcol_step row_range col_ranger!newdokrWr8rijrjs r;rz_dok_base._get_sliceXslicesY(+ DJJqM(B% 8X(+ DJJqM(B% 8X)Xx8 )Xx8 YY0 t9E!H uQx/ /)))Y? ?$$U$**$=99; 1C3s1v;2H=EArQw!a%1a=3s1v;2H=EArQw!a%1a=!%CFLLA  1 r@cD|j|g|jSrQ)rrrs r;_get_intXarrayz_dok_base._get_intXarrays%%seSYY[99r@c|j|j|g}|jdkDr|j|jS|Sr)rrr1reshaper!)r5rrress r;_get_arrayXintz_dok_base._get_arrayXints?$$SYY[3%8 88a<;;syy) ) r@ctt|j|jd}|j ||Srrrrr!rrs r;_get_sliceXarrayz_dok_base._get_sliceXarray55#++djjm456%%c3//r@ctt|j|jd}|j ||Srrrs r;_get_arrayXslicez_dok_base._get_arrayXslicerr@c|jt|t|f|j}t|D]J\}}t|D]7\}}|jj ||fd}|s'||j||f<9L|S)Nrr)rrBr"r3r(r) r5rrrr8rrcr9s r;rz_dok_base._get_columnXarrays$$c#hC%9$LcN +DAq!# +1JJNNAq61-)*FLLA& + +  r@cttjtj||\}}|j |j |j }tjt|j dt|j dD]8}|jj||||fd}|s*||j|<:|S)Nrrr) mapr- atleast_2dbroadcast_arraysrr!r" itertoolsproductrr(r)r5rrr8rrrWr9s r;_get_arrayXarrayz_dok_base._get_arrayXarrays2==""5"5c3"?@1$$QWWDJJ$?$$U1771:%6aggaj8IJ &C ##/3A$% S! & r@c`|r||j|<y||jvr|j|=yyrQrU)r5rrKs r;_set_intz_dok_base._set_ints. DJJsO DJJ  3r@c|j}|j}t|t|k7rHt|dk(r/tjt||d|j}n t dt ||D]3\}}|r||j|<||jvs'|j|=5y)Nrrrz*Need len(index)==len(data) or len(data)==1)rrBr-fullr"r2rr()r5rrKidx_setx_setr8r9s r; _set_arrayz_dok_base._set_arrays))+  w<3u: %5zQG eAhdjjIKLL' "DAq ! 1 djjJJqM  "r@ch||f}|r||j|<y||jvr|j|=yyrQrU)r5rrrKrWs r; _set_intXintz_dok_base._set_intXint s7Cj DJJsO DJJ  3r@cttt|j}ttt|j}|j}|jj t t |||tj|dk(dD],}||||f}|j|dk(s |j|=.yr) rrrrr(r?rr-nonzero)r5rrrKr8rWs r;_set_arrayXarrayz_dok_base._set_arrayXarrays3sCIIK()3sCIIK() GGI #c#smQ/0AF#A& $Aq63q6"Czz#!#JJsO  $r@cft|rt|j|}|j|j|t j |jDcgc] }t|c}D])}|jj|d|z}|s%||<+St|rN|j|jk7r tdt|j|j}|j|j||jj_|jdk(r|j}ni|j!}|j"dk(r$t%|j&d|j(}n&t%t%|j&|j(}t+j,d5jj/fd|DdddSt1|r|j3|zSt4Scc}w#1swYSxYw) Nrrz Matrix dimensions are not equal.rrignore)overc38K|]\}}|||zfywrQrI)rJkr9news r;rLz$_dok_base.__add__..7s! ETQ!SVaZ Es)rrr"rr!rrrr(rr r2rrr*rvtocoor1rcoordsdatar-errstater?r todenseNotImplemented)r5rk res_dtyper:rWaijo_itemsrs @r;__add__z_dok_base.__add__s  %djj%8I%%djj %BC ((TZZ*H58*HI #jjnnS!,u4"CH #0 )e_{{djj( !CDDtzz5;;7I%%djj %BC )CI||u$++- 99>!%,,q/5::>G!#u||"4ejjAG(+ F   EW EE F  U^,,.5(C " !/+I$ F  sH! %H&&H0c ||zSrQrIr5rks r;__radd__z_dok_base.__radd__>s e|r@c|jjdk(r td|j|j|j}|j j d|jD|S)Nbz2Negating a sparse boolean matrix is not supported.rc3,K|] \}}|| fywrQrI)rJrr9s r;rLz$_dok_base.__neg__..Gs:TQ!aR:s)r"kindr=rr!r(r?rvr5rs r;__neg__z_dok_base.__neg__Asd ::??c !%D !!$**DJJ!? :TZZ\:: r@ct|j}|j|j|}|jj fd|j D|S)Nrc32K|]\}}||zfywrQrIrJrr9rks r;rLz(_dok_base._mul_scalar..NsBTQ1a%i.B)rr"rr!r(r?rvr5rkrrs ` r; _mul_scalarz_dok_base._mul_scalarJsO!$**e4 !!$**I!> BTZZ\BC r@ctjj}jdk(rtrzjdk(r"j j z}n.j j jdz}|tfd|DStr(|tfdjDStStjjd|}jD]\\}}}||xx||zz cc<|S)Nrrrc3\K|]#}j|j|z%ywrQrU)rJrrkr5s r;rLz+_dok_base._matmul_vector..[s&$RTZZ]U[[^%C$Rs),c34K|]\}}||zywrQrIrs r;rLz+_dok_base._matmul_vector..]s$KdaU1X\$Kr)rr"r1r r*rxrrrMr rvrr-zerosr!)r5rkrrxresultr8rr9s`` r;_matmul_vectorz_dok_base._matmul_vectorQs4::u{{3  99><<5(99;5D99;)=)=a)@@D $RT$R!RSS $Kdjjl$K!KLL%%$**Q-y9 &IFQA 1IU1X %I & r@ct|jj}|jdk(r,tfd|jj DS|j d}jdk(r|fn|j df}tj||}|j D]\\}}}||xx||zz cc<|S)Nrc34K|]\}}||zywrQrI)rJrr9rks r;rLz0_dok_base._matmul_multivector..lsC1q58|Crrr) rr"r1rMr(rvr!r-r) r5rk result_dtyper} new_shaperr8rr9s ` r;_matmul_multivectorz_dok_base._matmul_multivectorgsdjj%++6 99>C 0@0@0BCC C JJqM!JJ!OQD!U[[^1D )<8 &IFQA 1IU1X %I & r@ctr4|jjfd|jD|StS)Nc32K|]\}}||zfywrQrIrs r;rLz%_dok_base.__imul__..xFAq!e)nFrrr(r?rvrrs `r;__imul__z_dok_base.__imul__v4   JJ  FF FKr@ctrgt|j}|j|j|}|j j fd|jD|S|jz S)Nrc32K|]\}}||z fywrQrIrs r;rLz(_dok_base.__truediv__..r r) rrr"rr!r(r?rvtocsrrs ` r; __truediv__z_dok_base.__truediv__|sh  %djj%8I%%djj %BC II  FF GJzz|e##r@ctr4|jjfd|jD|StS)Nc32K|]\}}||z fywrQrIrs r;rLz)_dok_base.__itruediv__..r rr rs `r; __itruediv__z_dok_base.__itruediv__r r@c,tj|SrQ)dict __reduce__rRs r;rz_dok_base.__reduce__st$$r@cV|jdk(rt| |Std)Nrz diagonal requires two dimensions)r1superdiagonalr2)r5r __class__s r;rz_dok_base.diagonals* 99>7#A& &;<s r;rLz&_dok_base.transpose..s"V3E=D%#E4=#.Vs) r1rr2r!rr"r(r?rv)r5axesrr}Nrs r; transposez_dok_base.transposes 99>99;   >  zz1!!1a& !F VVW r@c|j|j|j}|jj |j|SNr)rr!r"r(r?rs r;rz_dok_base.copys:!!$**DJJ!? $ r@ctj||}ttt |t rt dt |D}nt|dzf}||t|}||_ |S)Nc38K|]}t|dzyw)rN)max)rJrs r;rLz%_dok_base.fromkeys..s<3#c(Q,.s!Rrr{{2YcBBRs"%r T)r6r4r!r"_get_index_dtyper&r-r3rNr1rrxr%has_canonical_format)r5rrindsrAr5r6s @@r;rz_dok_base.tocooshh !8&&tzz&D D))TZZ)A {{4;;= #F$(IIMsDIIK  ~RTRR   vdjj  S!%r@c*|r|jS|SrQrr5rs r;r+z_dok_base.todoks 99;  r@cz|jdk(r td|jdj|S)Nrz%tocsr() not valid for 1d sparse arrayFr)r1r=rtocscr<s r;r>z_dok_base.tocscs8 99>%&MN Nzzuz%+++66r@ct||j}t|t|jk7rt|j dk(r:|d}t |jD]}||k\s |j|=||_y|\}}|j\}}||ks||kr;t |jD]\}}||k\s||k\s|j||f=!||_y)Nrr) rr&rBr!r=r1rr(r'rx)r5r!newNr8newMr}r rs r;resizez_dok_base.resizesEDNN; u:TZZ (% % 99>9D$**% &9 1  & DK  dzz1 !8taxTYY[) )19T  1a4( ) r@chtj|}|j|k7r{|j|j|}tjt |j j|}tt|j ||_|S|r|jS|Sr#) r-r"rr!rrr(rNrrr)r5r"castingrrrs r;r,z_dok_base.astypes :: ((5(AF88D!2!2!45UCDDJJ 56FLM 99;  r@)NNFrQ)g)r)NF)r)F)unsafeT)@ri __module__ __qualname___formatr&r#r?rErOr__doc__rSrXrZr\r^rardrmrprrrtrvrxrNrrrrrrrrrrrrrrrrrrrrrrrrr rrrrr!r classmethodr'rr+r>rCr, __classcell__)rs@r;rrsGI%KT%KNX2oo--GO#1199M!3"%FIII$"!#,*7.*>??.: 00   "  $>,  $ % =   ))11I <<''DL MM))EM MM))EM7 MM))EM.^^++FN r@rc"t|tS)aIs `x` of dok_array type? Parameters ---------- x object to check for being a dok matrix Returns ------- bool True if `x` is a dok matrix, False otherwise Examples -------- >>> from scipy.sparse import dok_array, dok_matrix, coo_matrix, isspmatrix_dok >>> isspmatrix_dok(dok_matrix([[5]])) True >>> isspmatrix_dok(dok_array([[5]])) False >>> isspmatrix_dok(coo_matrix([[5]])) False )r$r)rKs r;rrs. a $$r@ceZdZdZy)ra! Dictionary Of Keys based sparse array. This is an efficient structure for constructing sparse arrays incrementally. This can be instantiated in several ways: dok_array(D) where D is a 2-D ndarray dok_array(S) with another sparse array or matrix S (equivalent to S.todok()) dok_array((M,N), [dtype]) create the array with initial shape (M,N) dtype is optional, defaulting to dtype='d' Attributes ---------- dtype : dtype Data type of the array shape : 2-tuple Shape of the array ndim : int Number of dimensions (this is always 2) nnz Number of nonzero elements size T Notes ----- Sparse arrays can be used in arithmetic operations: they support addition, subtraction, multiplication, division, and matrix power. - Allows for efficient O(1) access of individual elements. - Duplicates are not allowed. - Can be efficiently converted to a coo_array once constructed. Examples -------- >>> import numpy as np >>> from scipy.sparse import dok_array >>> S = dok_array((5, 5), dtype=np.float32) >>> for i in range(5): ... for j in range(5): ... S[i, j] = i + j # Update element N)rirGrHrJrIr@r;rrs1r@rcHeZdZdZdZdZeeeZdZdZ dZ dZ y ) ra/ Dictionary Of Keys based sparse matrix. This is an efficient structure for constructing sparse matrices incrementally. This can be instantiated in several ways: dok_matrix(D) where D is a 2-D ndarray dok_matrix(S) with another sparse array or matrix S (equivalent to S.todok()) dok_matrix((M,N), [dtype]) create the matrix with initial shape (M,N) dtype is optional, defaulting to dtype='d' Attributes ---------- dtype : dtype Data type of the matrix shape : 2-tuple Shape of the matrix ndim : int Number of dimensions (this is always 2) nnz Number of nonzero elements size T Notes ----- Sparse matrices can be used in arithmetic operations: they support addition, subtraction, multiplication, division, and matrix power. - Allows for efficient O(1) access of individual elements. - Duplicates are not allowed. - Can be efficiently converted to a coo_matrix once constructed. Examples -------- >>> import numpy as np >>> from scipy.sparse import dok_matrix >>> S = dok_matrix((5, 5), dtype=np.float32) >>> for i in range(5): ... for j in range(5): ... S[i, j] = i + j # Update element c~|j|dj|j}|j|_y)NFr)rasformatr*__dict__)r5r! new_matrixs r; set_shapezdok_matrix.set_shapes0\\%e\4==dkkJ "++ r@c|jS)zGet shape of a sparse matrix.)r'rRs r; get_shapezdok_matrix.get_shapes {{r@)fgetfsetc6|jjSrQ)r(rdrRs r;rdzdok_matrix.__reversed__szz&&((r@crt|tr|j|jzS|j|zSrQr$rr(rs r;rmzdok_matrix.__or__. eY ':: + +zzE!!r@crt|tr|j|jzS|j|zSrQr[rs r;rpzdok_matrix.__ror__r\r@ct|tr!|xj|jzc_|S|xj|zc_|SrQr[rs r;rrzdok_matrix.__ior__s: eY ' JJ%++ %J  JJ% J r@N) rirGrHrJrTrVpropertyr!rdrmrprrrIr@r;rrMs41f, )) 4E)" " r@r)rJ __docformat____all__rnumpyr-_matrixr_baserr r _indexr _sputilsr r rrrrrrrrrrrrIr@r;rgsj%% 7--;;;iTiX%62 72jP9Pr@