L i?hdZddlZddlmZddlmZmZeejfZ dZ GddZ d Z y) z0Indexing mixin for sparse array/matrix classes. N) isintlike)sparrayissparsectj||\}}|jj|j_|jj|j_||fS)a  Same as np.broadcast_arrays(a, b) but old writeability rules. NumPy >= 1.17.0 transitions broadcast_arrays to return read-only arrays. Set writeability explicitly to avoid warnings. Retain the old writeability rules, as our Cython code assumes the old behavior. )npbroadcast_arraysflags writeable)abxys Y/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/scipy/sparse/_index.py_broadcast_arraysr sO   q! $DAq))AGG))AGG a4KceZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdZdZdZdZdZdZy) IndexMixinzS This class provides common dispatching and validation logic for indexing. c |j|\}}t|dk(r%|d}t|tjr|j dk(r|j }t|tr|j|}n3t|tr|j|}n|j|}t|ts|S|j dk(r`|dk7r[t|dk(r|j|g||jSt|dk(r |j|gg||jS|j|S|\}}t|trt|tr|j!||}n`t|tr|j#||}n<|j$dk(r|j'||}n|j$dk(r|j'||}nt)dt|trt|tr|j+||}nt|tr9|tdk(r||k(r|j-}n|j/||}nn|j$dk(r|j1||}nKt)dt|tr|j3||}nt|tr|j5||}n|j$dk(r[|j ddk(rI|j$dk(s|j ddk(r(|j7|dddf|j9}nt;||\}}|j |j k7r t)d|j<dk(r;|jtj>|j |j}n|jA||}t|tsY|dk(st|dk(r|j$dk7r|St|dk(rd |z}||j k(r|S|j|S|j |k7rp|jBd k(rPt|dk7rB|j dk(r|jE|g| S|jGj|S|j|S|S) Nrr)shapedtypezindex results in >2 dimensions'number of row and column indices differr)rlilr)$_validate_indiceslen isinstancerndarrayritem INT_TYPES_get_intslice _get_slice _get_arrayr __class__rreshape _get_intXint_get_intXslicendim_get_intXarray IndexError_get_sliceXintcopy_get_sliceXslice_get_sliceXarray_get_arrayXint_get_arrayXslice_get_columnXarrayravelrsize atleast_2d_get_arrayXarrayformat_coo_containertocoo)selfkeyindex new_shapeidxresrowcols r __getitem__zIndexMixin.__getitem__s11#6y u:?(C#rzz*99?((*C#y)mmC(C'ooc*ooc*dG, yyB9?y>Q&>>3%y >SSy>Q&>>C5'$**>UU;;y) )S c9 %#y)''S1C'))#s3Q))#s3Q))#s3 !ABB U ##y)))#s3C'%+%#*))+C//S9CQ++C5 !ABB#y)))#s3C'++C5((a-CIIaLA$5XX]ciila&7,,SAY D-S#6S99 )$%NOO88q=..s);)A)A.TC//S9C$(B3y>Q#6388q= 9~" 9, #syy03 Lckk)6L L 99 !{{e#I!(;99?..ui.HHyy{**955;;y) ) rc^ |j|\}}t|dk(r|d}t|r|j}n!t j ||j }t|tr:|jdk7r td|j||jdyt|trt|j|j d}t|}|dk(r2|jdk(r#|j|d|jdyt j"|j|j d}|j }n|j%j }|j%j |k7r t j&||j }|jdk7r|j)||y|\} } t| trlt| tr\t j ||j }|jdk7r td|j+| | |jdyt| tr6t j"| j|j ddddf} nt j,| } t| trNt j"| j|j ddddf} | j.dk(r| dddf} nt j,| } t1| | \} } | j | j k7r t3dt|rd|j vry| j.dk(r | d} | d} |j5dj7|j8d}|j ddk(xr| j ddk7} |j ddk(xr| j ddk7}| s|j d| j dk(r!|s*|j d| j dk(s td |j;|j=| | |yt j ||j }|j%j | j%j k7r t j&|| j }|jdk(ry|j7| j }|j?| | |y) Nrrrz&Trying to assign a sequence to an itemrF)r0Tzshape mismatch in assignment) rrrtoarrayrasarrayrr r#r7 ValueError_set_intflatr%rangeindicesrarangesqueeze broadcast_to _set_array _set_intXint atleast_1dr,rr.r<r) _shape_as_2dsum_duplicates_set_arrayXarray_sparse_set_arrayXarray)r=r>rr?_rA idx_rangeN idx_shaperCrDij broadcast_row broadcast_cols r __setitem__zIndexMixin.__setitem__|s))#.q u:?(C{IIKJJq 3#y)66Q;$%MNN c166!9-#u%"3;;tzz!}#=>  N6affkMM)A,q :iiTZZ]!;<II KKM// yy{  I-OOAsyy1vv{Q' S c9 %*S)*D 1DJJ/Avv{ !IJJ   c3q 2  c5 !))S[[A78DAC--$C c5 !))S[[A78qACxx1}!T'l--$C c*1 77agg FG G A;AGG|vv{dGdGU#++ANN+FAGGAJ!O? aMGGAJ!O? aM"aggajAGGAJ&>"aggajAGGAJ&> !?@@     ( (Aq 1 1DJJ/Ayy{  AIIK$5$55OOAqww/vv{ !''"A  ! !!Q *rc |tur%tdf|jz|jfSt |t s|g}d}g}d}t |D]\}}|tur| td|}||j|2t |ts t|r|j||dz }dt||jx}!|j|||jz }t|r td|jtj||dz }|j|z tdgz}|r"||j|n|d||z||dz}g} d} gg} t |D]\}}|| jdt |trWj||j| } t!t#|j%| } | j| | dz } t|rX|j| }| |cxkr|ksntd|dt'|dkr||zn|}j|| dz } |j(j*dk(r|}| |jz}|j| |}|j|k7rtd |d |d |jj|j-| jt#| ||} |j| }|j/||}j|| j| | dz } | |jkDrtd |jd | dt!| dkDrlt1fd| Dt3fdddDr(dj5dD}d|}t|t7dj| z} n9t!| dk(r+| d}t7|j}| d||z| |dz} t!| x}dkDrtd|dt t | fS)z8Returns two tuples: (index tuple, requested shape tuple)Nrz(an index can only have a single ellipsisrzoIndexing with sparse matrices is not supported except boolean indexing where matrix and index are equal shapes.index () out of ranger z bool index z has shape z instead of zinvalid index ndim. Array is zD. Index needs Dc3(K|] }| ywNr).0r\r?s r z/IndexMixin._validate_indices..)s,M!U1X,Msc3VK|] }dj|jk7"yw)rNr)rgix idx_arrayss rrhz/IndexMixin._validate_indices..*s$Lr:a=&&"((2Ls&) c3FK|]}t|jywrf)strr)rgrjs rrhz/IndexMixin._validate_indices..+s!EB#bhh-!Es!zLshape mismatch: indexing arrays could not be broadcast together with shapes rz*Only 1D or 2D arrays allowed. Index makes )Ellipsisr%r,rr tuple enumerater.appendr_compatible_boolean_indexrrrHextend_shaperrLrMintrkindnonzero _asindicesranyjoinlist)r=r> ellps_pos index_1st prelim_ndimr\rArj ellip_slicesr[ index_ndim array_indicesMs len_slicerZtmp_ndim mid_shapeshapesmsg arr_index arr_shaper,rkr?s @@rrzIndexMixin._validate_indicessq (?$K>DII-tzz9 9#u%%C   n !FAsh($%OPP   %C'9S>  %q 1#tyyAA"N  $rww& # ())   C1q + !, K/E$K=@    .%jy1L@9YZCXX     *! FAs{  #C' S![[,s{{2 78   +a 3KK +c A $wse>%BCCS1W#'#6 S!a 3&%/ KK 8< 88y($%aS I;l288*U RZZ\*$$U:x%@A% KK +ooc1- S!$$Z0a C! D  !/ {/*UVW  }  !*,M},MNJLZ^LL!E*!EE//5h8 o%Z]001I=I  1 $%a(IU9-334I!*9- 9Iij > 66Q;H557 v wxj?@ @557 a<6'! 78*N!CDDCxqwwFFH a!eH H+I{3 5_-1 4 5sC C0 C++C0c|j\}}t|}|| ks||k\rtd|d|dkr||z }|j|t dS)zGReturn a copy of row i of the matrix, as a (1 x n) row vector. rbrcrN)rrvr.r+r%r=r\MrZs r_getrowzIndexMixin._getrowWsdzz1 F r6Q!Vwqc89 9 q5 FA""1eDk22rc|j\}}t|}|| ks||k\rtd|d|dkr||z }|jt d|S)zMReturn a copy of column i of the matrix, as a (m x 1) column vector. rbrcrN)rrvr.r/r%rs r_getcolzIndexMixin._getcolbsdzz1 F r6Q!Vwqc89 9 q5 FA""5;22rctrfNotImplementedErrorr=rAs rr$zIndexMixin._get_intm !##rctrfrrs rr&zIndexMixin._get_sliceprrctrfrrs rr'zIndexMixin._get_arraysrrctrfrr=rCrDs rr*zIndexMixin._get_intXintvrrctrfrrs rr-zIndexMixin._get_intXarrayyrrctrfrrs rr+zIndexMixin._get_intXslice|rrctrfrrs rr/zIndexMixin._get_sliceXintrrctrfrrs rr1zIndexMixin._get_sliceXslicerrctrfrrs rr2zIndexMixin._get_sliceXarrayrrctrfrrs rr3zIndexMixin._get_arrayXintrrctrfrrs rr4zIndexMixin._get_arrayXslicerrctrfrrs rr5zIndexMixin._get_columnXarrayrrctrfrrs rr9zIndexMixin._get_arrayXarrayrrctrfrr=rArs rrJzIndexMixin._set_intrrctrfrrs rrQzIndexMixin._set_arrayrrctrfrr=rCrDrs rrRzIndexMixin._set_intXintrrctrfrrs rrWzIndexMixin._set_arrayXarrayrrctj|j|j}t ||\}}|j |||y)Nr)rrHrGrrrW)r=rCrDrrXs rrVz"IndexMixin._set_arrayXarray_sparses> JJqyy{$** 5 C(1 c3*rN)__name__ __module__ __qualname____doc__rEr`rryrrr$r&r'r*r-r+r/r1r2r3r4r5r9rJrQrRrWrVrrrrrs]~V+pc.J< 3 3$$$$$$$$$$$$$$$$$+rrc8t|dsd tt|d}t|D])}t |t rntt|d}+y tj|}|jjdk(r|Sy#t $rYywxYw)zICheck for boolean array or array-like. peek before asarray for array-liker,Nr ) hasattrnextiterrLr boolrr asanyarrayrrw)rA desired_ndimrjrXs rrsrss 3  d3i&B<( b$'$r(D)  mmC  yy~~   sA B BB)rnumpyr_sputilsr_baserrrvintegerr#rrrsrrrrs8$ "**   K+K+\ r