
    (ph?                     h    S r SSKrSSKJr  SSKJrJr  \\R                  4r
S r " S S5      rS	 rg)
z0Indexing mixin for sparse array/matrix classes.
    N   )	isintlike)sparrayissparsec                     [         R                  " X5      u  p#U R                  R                  UR                  l        UR                  R                  UR                  l        X#4$ )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.
)npbroadcast_arraysflags	writeable)abxys       F/var/www/html/venv/lib/python3.13/site-packages/scipy/sparse/_index.py_broadcast_arraysr   
   sI     q$DA))AGG))AGG4K    c                       \ 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 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rg)
IndexMixin   zK
This class provides common dispatching and validation logic for indexing.
c                 
   U R                  U5      u  p#[        U5      S:X  Ga6  US   n[        U[        R                  5      (       a   UR
                  S:X  a  UR                  5       n[        U[        5      (       a  U R                  U5      nO8[        U[        5      (       a  U R                  U5      nOU R                  U5      n[        U [        5      (       d  U$ UR
                  S:X  a[  US:w  aU  [        U5      S:X  a  U R                  U/X0R                  S9$ [        U5      S:X  a  U R                  U//X0R                  S9$ UR                  U5      $ Uu  pg[        U[        5      (       a  [        U[        5      (       a  U R!                  Xg5      nGO{[        U[        5      (       a  U R#                  Xg5      nGOSUR$                  S:X  a  U R'                  Xg5      nGO0UR$                  S:X  a  U R'                  Xg5      nGO[)        S5      e[        U[        5      (       a  [        U[        5      (       a  U R+                  Xg5      nGO[        U[        5      (       a9  U[        S 5      :X  a  Xg:X  a  U R-                  5       nGOU R/                  Xg5      nGOwUR$                  S:X  a  U R1                  Xg5      nGOT[)        S5      e[        U[        5      (       a  U R3                  Xg5      nGO![        U[        5      (       a  U R5                  Xg5      nOUR$                  S:X  a^  UR
                  S   S:X  aK  UR$                  S:X  d  UR
                  S   S:X  a(  U R7                  US S 2S4   UR9                  5       5      nO[;        Xg5      u  pgUR
                  UR
                  :w  a  [)        S5      eUR<                  S:X  a9  U R                  [        R>                  " U5      R
                  U R                  S9nOU RA                  Xg5      n[        U [        5      (       d]  US:X  d  [        U5      S:X  a  UR$                  S:w  a  U$ [        U5      S:X  a  S	U-   nX5R
                  :X  a  U$ UR                  U5      $ UR
                  U:w  ap  U RB                  S
:X  aO  [        U5      S:w  a@  UR
                  S:X  a  U RE                  U/US9$ URG                  5       R                  U5      $ UR                  U5      $ U$ )Nr   r    )shapedtype   zindex results in >2 dimensions'number of row and column indices differr   )r   lilr   )$_validate_indiceslen
isinstancer   ndarrayr   item	INT_TYPES_get_intslice
_get_slice
_get_arrayr   	__class__r   reshape_get_intXint_get_intXslicendim_get_intXarray
IndexError_get_sliceXintcopy_get_sliceXslice_get_sliceXarray_get_arrayXint_get_arrayXslice_get_columnXarrayravelr   size
atleast_2d_get_arrayXarrayformat_coo_containertocoo)selfkeyindex	new_shapeidxresrowcols           r   __getitem__IndexMixin.__getitem__   s   11#6 u:?(C#rzz**99?((*C#y))mmC(C''ooc*ooc* dG,,
yyB9?y>Q&>>3%y

>SSy>Q&>>C5'**>UU;;y))  c9%%#y))''1C''))#3Q))#3Q))#3 !ABBU###y))))#3C''%+%#*))+C//9CQ++C5 !ABB#y))))#3C''++C5((a-CIIaLA$5XX]ciila&7,,SAY		D -S699		)$%NOO88q=..s);)A)A.TC//9C $((B3y>Q#6388q=
9~" 9,	#yy03Lckk)6LL 99	!{{e#I!(;99?..ui.HHyy{**955;;y))
r   c                 
   U R                  U5      u  p4[        U5      S:X  Ga  US   n[        U5      (       a  UR                  5       nO[        R
                  " X R                  S9n[        U[        5      (       a:  UR                  S:w  a  [        S5      eU R                  XRR                  S   5        g [        U[        5      (       a  [        UR                  U R                   S   5      6 n[        U5      nUS:X  a3  UR                  S:X  a#  U R                  US   UR                  S   5        g [        R"                  " UR                  U R                   S   5      6 nUR                   nOUR%                  5       R                   nUR%                  5       R                   U:w  a   [        R&                  " X%R                   5      nUR                  S:w  a  U R)                  XR5        g Uu  p[        U	[        5      (       an  [        U
[        5      (       aY  [        R
                  " X R                  S9nUR                  S:w  a  [        S5      eU R+                  XUR                  S   5        g [        U	[        5      (       a7  [        R"                  " U	R                  U R                   S   5      6 S S 2S 4   n	O[        R,                  " U	5      n	[        U
[        5      (       aP  [        R"                  " U
R                  U R                   S   5      6 S S S 24   n
U	R.                  S:X  a	  U	S S 2S 4   n	O[        R,                  " U
5      n
[1        X5      u  pUR                   UR                   :w  a  [3        S5      e[        U5      (       Ga$  SUR                   ;   a  g UR.                  S:X  a
  US    nUS    nUR5                  SS9R7                  UR8                  SS9nUR                   S   S:H  =(       a    UR                   S   S:g  nUR                   S   S:H  =(       a    UR                   S   S:g  nU(       d   UR                   S   UR                   S   :X  a'  U(       d+  UR                   S   UR                   S   :X  d  [        S	5      eUR;                  5         U R=                  XU5        g [        R
                  " X R                  S9nUR%                  5       R                   UR%                  5       R                   :w  a   [        R&                  " X+R                   5      nUR                  S:X  a  g UR7                  UR                   5      nU R?                  XU5        g )
Nr   r   r   z&Trying to assign a sequence to an itemr   F)r1   Tzshape mismatch in assignment) r   r    r   toarrayr   asarrayr   r!   r$   r8   
ValueError_set_intflatr&   rangeindicesr   arangesqueezebroadcast_to
_set_array_set_intXint
atleast_1dr-   r   r/   r=   r*   _shape_as_2dsum_duplicates_set_arrayXarray_sparse_set_arrayXarray)r>   r?   r   r@   _rB   	idx_rangeN	idx_shaperD   rE   ijbroadcast_rowbroadcast_cols                  r   __setitem__IndexMixin.__setitem__|   s    ))#. u:?(C{{IIKJJq

3#y))66Q;$%MNNc66!9-#u%% "3;;tzz!}#=>		N6affkMM)A,q	:iiTZZ]!;<II	KKM//	yy{  I-OOAyy1vv{' c9%%*S)*D*D

1JJ/Avv{ !IJJcq	2c5!!))S[[A78DAC--$Cc5!!))S[[A78qACxx1}!T'l--$C *77aggFGGA;;AGG|vv{dGdGU#++ANN+FAGGAJ!O?
aMGGAJ!O?
aM"aggajAGGAJ&>"aggajAGGAJ&> !?@@((q1 

1JJ/Ayy{  AIIK$5$55OOAww/vv{		!''"A!!!*r   c           	      P	  ^^ U[         L a%  [        S5      4U R                  -  U R                  4$ [	        U[
        5      (       d  U/nSn/ nSn[        U5       H  u  pVU[         L a  Ub  [        S5      eUnM   Uc  UR                  U5        M6  [	        U[        5      (       d  [        U5      (       a  UR                  U5        US-  nMs  [        X`R                  5      =nb!  UR                  U5        XGR                  -  nM  [        U5      (       a  [        S5      eUR                  [        R                  " U5      5        US-  nM     U R                  U-
  [        S5      /-  nU(       a"  Uc  UR                  U5        OUSU U-   X2S -   n/ n	Sn
/ m/ n[        U5       GH  u  pVUc  U	R                  S5        M  [	        U[        5      (       aX  TR                  U5        U R                  U
   n[!        [#        UR%                  U5      6 5      nU	R                  U5        U
S-  n
M  [        U5      (       a[  U R                  U
   nU* Us=::  a  U:  d  O  [        SU S35      e['        US:  a  Xn-   OU5      nTR                  U5        U
S-  n
M  UR(                  R*                  S:X  a  UnXR                  -   nU R                  X nUR                  U:w  a  [        S	U S
U SUR                   35      eTR                  UR-                  5       5        UR                  [#        X5      5        Un
GM  U R                  U
   nU R/                  Xn5      nTR                  U5        UR                  U
5        U
S-  n
GM     XR                  :  a  [        SU R                   SU
 S35      e[!        U5      S:  as  [1        U4S jU 5       6 m[3        U4S jTSS  5       5      (       a(  SR5                  S T 5       5      nSU 3n[        U5      e[7        TS   R                  5      U	-   n	O:[!        U5      S:X  a+  US   n[7        TU   R                  5      nU	SU U-   U	US -   n	[!        U	5      =nS:  a  [        SU S35      e[        T5      [        U	5      4$ )z8Returns two tuples: (index tuple, requested shape tuple)Nr   z(an index can only have a single ellipsisr   zoIndexing with sparse matrices is not supported except boolean indexing where matrix and index are equal shapes.zindex (z) out of ranger   zbool index z has shape z instead of zinvalid index ndim. Array is zD. Index needs Dc              3   .   >#    U  H
  nTU   v   M     g 7fNr   ).0r^   r@   s     r   	<genexpr>/IndexMixin._validate_indices.<locals>.<genexpr>)  s     ,M}!U1X}s   c              3   \   >#    U  H!  nTS    R                   UR                   :g  v   M#     g7f)r   Nr   )rh   ix
idx_arrayss     r   ri   rj   *  s$     L^r:a=&&"((2^s   ), c              3   L   #    U  H  n[        UR                  5      v   M     g 7frg   )strr   )rh   rl   s     r   ri   rj   +  s     !E*B#bhh--*s   "$zLshape mismatch: indexing arrays could not be broadcast together with shapes r   z*Only 1D or 2D arrays allowed. Index makes )Ellipsisr&   r-   r   r!   tuple	enumerater/   appendr   _compatible_boolean_indexr   r   rJ   extend_shaper    rN   rO   intr   kindnonzero
_asindicesr   anyjoinlist)r>   r?   	ellps_pos	index_1stprelim_ndimr^   rB   rl   ellip_slicesr]   
index_ndimarray_indicesMs	len_slicer\   tmp_ndim	mid_shapeshapesmsg	arr_index	arr_shaper-   rm   r@   s                         @@r   r   IndexMixin._validate_indices   sc    (?$K>DII-tzz99#u%%%C		nFAh($%OPP	  %C''9S>>  %q 1#yyAA"N  $ww&# () )
   C1q + %, 		K/E$K=@   .%jy1L@9ZCXX	 	
	*FA{  #C''S![[,s{{2 78	  +a
3KK
+cA$wse>%BCCS1W#'#6S!a
3&%/ KK
<	88y($%aSI;l288*U  RZZ\*$$U:%@A%
KK
+ooc-S!$$Z0a
C +D 		!/		{/*UVW  }!*,M},MNJLZ^LLL!E*!EE//5h8 o%Z]001I=I1$%a(IU9-334I!*9-	9Iij<QQI	N"Da'I$qQRRU|U9---r   c                     [         R                  " U5      nUR                  S;  a  [        S5      eUR                  S:X  a  U$ UR                  5       nXR:  a  [        SU-  5      eUR                  5       nUS:  aR  Xb* :  a  [        SU-  5      eX1L d  UR                  R                  (       d  UR                  5       nX3S:  ==   U-  ss'   U$ ! [        [        [        4 a  n[        S5      UeSnAff = f)zConvert `idx` to a valid index for an axis with a given length.

Subclasses that need special validation can override this method.
zinvalid indexN)r   r   zIndex dimension must be 1 or 2r   index (%d) out of range)r   rJ   rK   	TypeErrorMemoryErrorr/   r-   r8   maxminr
   owndatar1   )r>   rB   lengthr   emax_indxmin_indxs          r   r{   IndexMixin._asindices9  s    
	5

3A 66=>>66Q;H 5576ABB557a<'! !:X!EFFxqwwFFH!eHH+ I{3 	5_-14	5s   C C8'C33C8c                     U R                   u  p#[        U5      nX* :  d  X:  a  [        SU-  5      eUS:  a  X-  nU R                  U[	        S5      5      $ )zGReturn a copy of row i of the matrix, as a (1 x n) row vector.
        r   r   N)r   rx   r/   r,   r&   r>   r^   Mr\   s       r   _getrowIndexMixin._getrowW  sY     zzFr6QV6:;;q5FA""1eDk22r   c                     U R                   u  p#[        U5      nX* :  d  X:  a  [        SU-  5      eUS:  a  X-  nU R                  [	        S5      U5      $ )zMReturn a copy of column i of the matrix, as a (m x 1) column vector.
        r   r   N)r   rx   r/   r0   r&   r   s       r   _getcolIndexMixin._getcolb  sY     zzFr6QV6:;;q5FA""5;22r   c                     [        5       erg   NotImplementedErrorr>   rB   s     r   r%   IndexMixin._get_intm      !##r   c                     [        5       erg   r   r   s     r   r'   IndexMixin._get_slicep  r   r   c                     [        5       erg   r   r   s     r   r(   IndexMixin._get_arrays  r   r   c                     [        5       erg   r   r>   rD   rE   s      r   r+   IndexMixin._get_intXintv  r   r   c                     [        5       erg   r   r   s      r   r.   IndexMixin._get_intXarrayy  r   r   c                     [        5       erg   r   r   s      r   r,   IndexMixin._get_intXslice|  r   r   c                     [        5       erg   r   r   s      r   r0   IndexMixin._get_sliceXint  r   r   c                     [        5       erg   r   r   s      r   r2   IndexMixin._get_sliceXslice  r   r   c                     [        5       erg   r   r   s      r   r3   IndexMixin._get_sliceXarray  r   r   c                     [        5       erg   r   r   s      r   r4   IndexMixin._get_arrayXint  r   r   c                     [        5       erg   r   r   s      r   r5   IndexMixin._get_arrayXslice  r   r   c                     [        5       erg   r   r   s      r   r6   IndexMixin._get_columnXarray  r   r   c                     [        5       erg   r   r   s      r   r:   IndexMixin._get_arrayXarray  r   r   c                     [        5       erg   r   r>   rB   r   s      r   rL   IndexMixin._set_int  r   r   c                     [        5       erg   r   r   s      r   rS   IndexMixin._set_array  r   r   c                     [        5       erg   r   r>   rD   rE   r   s       r   rT   IndexMixin._set_intXint  r   r   c                     [        5       erg   r   r   s       r   rY   IndexMixin._set_arrayXarray  r   r   c                     [         R                  " UR                  5       U R                  S9n[	        X15      u  p4U R                  XU5        g )Nr   )r   rJ   rI   r   r   rY   )r>   rD   rE   r   rZ   s        r   rX   "IndexMixin._set_arrayXarray_sparse  s8    JJqyy{$**5 (c*r   r   N)__name__
__module____qualname____firstlineno____doc__rF   rb   r   r{   r   r   r%   r'   r(   r+   r.   r,   r0   r2   r3   r4   r5   r6   r:   rL   rS   rT   rY   rX   __static_attributes__r   r   r   r   r      s    ]~V+pc.J<	3	3$$$$$$$$$$$$$$$$$+r   r   c                 T   [        U S5      (       dk   [        [        U 5      S5      n[        U5       H/  n[	        U[
        5      (       a    O[        [        U5      S5      nM1     g[        R                  " U 5      n U R                  R                  S:X  a  U $ g! [         a     gf = f)zICheck for boolean array or array-like. peek before asarray for array-liker-   Nr   )hasattrnextiterrN   r!   boolr   r   
asanyarrayr   ry   )rB   desired_ndimrl   rZ   s       r   ru   ru     s     3		d3i&B<(b$''$r(D) )
  mmC 
yy~~
  		s   9B B 
B'&B')r   numpyr   _sputilsr   _baser   r   rx   integerr$   r   r   ru   r   r   r   <module>r      s8      $"**	K+ K+\r   