
    ?.i(G                     r    d Z ddlZddlmZ ddlmZmZ eej	        fZ
d Z G d d          Zd	 Zd
 Zd ZdS )z0Indexing mixin for sparse array/matrix classes.
    N   )	isintlike)sparrayissparsec                  z    t          j        |  }t          ||           D ]\  }}|j        j        |j        _        |S )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zipflags	writeable)arraysr	   xas       [/home/louicyp/clawd-clean/.venv-aircash/lib/python3.11/site-packages/scipy/sparse/_index.py_broadcast_arraysr   
   sH     *F3$f-- . .1G-    c                       e 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 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )
IndexMixinzS
    This class provides common dispatching and validation logic for indexing.
    c                     t          || j        | j                  \  }}}}t          |          dk    rt	          d| j         d          t          |          dk    rL|d         }t          |t          j                  r|j        dk    r|                                }t          |t                    r| 
                    |          }n@t          |t                    r|                     |          }n|                     |          }t          | t                    s|S |j        dk    ri|dk    rct          |          dk    r|                     |g|| j                  S t          |          dk    r|                     |gg|| j                  S |                    |          S |\  }}t          |t                    rt          |t                    r|                     ||          }nt          |t                    r|                     ||          }nq|j        dk    r|                     ||          }nN|j        dk    r|                     ||          }n+t	          d          t          |t                    rt          |t                    r|                     ||          }nt          |t                    rG|t          d           k    r||k    r|                                 }n|                     ||          }n~|j        dk    r|                     ||          }n[t	          d          t          |t                    r|                     ||          }nt          |t                    r|                     ||          }n|j        dk    ra|j        d         dk    rP|j        dk    s|j        d         dk    r4|                     |d d df         |                    d	                    }nt;          ||          \  }}|j        |j        k    rt	          d
          |j        dk    r4|                     t          j        |          j        | j                  }n|                      ||          }t          | t                    s`|dk    st          |          dk    r|j        dk    r|S t          |          dk    rd|z   }||j        k    r|n|                    |          S |j        |k    r}| j        dk    r]t          |          dk    rJ|j        dk    r| !                    |g|          S |"                                                    |          S |                    |          S |S )N   z/Indexing that leads to >2D is not supported by z% format. Try converting to COO formatr   r    )shapedtypezindex results in >2 dimensions'number of row and column indices differr   )r   lilr   )#_validate_indicesr   formatlen
IndexError
isinstancer   ndarrayitem	INT_TYPES_get_intslice
_get_slice
_get_arrayr   	__class__r   reshape_get_intXint_get_intXslicendim_get_intXarray_get_sliceXintcopy_get_sliceXslice_get_sliceXarray_get_arrayXint_get_arrayXslice_get_columnXarrayr   size
atleast_2d_get_arrayXarray_coo_containertocoo)	selfkeyindex	new_shape_idxresrowcols	            r   __getitem__zIndexMixin.__getitem__   sP   !23
DK!P!Py!Qy>>A S $S S S T T T u::??(C#rz** %9??((**C#y)) +mmC((C'' +ooc**ooc** dG,, 
yB9??y>>Q&&>>3%y
>SSSy>>Q&&>>C5'$*>UUU;;y))) S c9%% )	:#y)) 	C''S11C'' C))#s33Q))#s33Q))#s33 !ABBBU## 	:#y)) 
C))#s33C'' C%++%%#**))++CC//S99CCQ++C55 !ABBB#y)) :))#s33C'' :++C55(a--CIaLA$5$5x1}}	!(9(9,,SAYBHH -S#66S9	))$%NOOO8q==..s););)A.TTCC//S99C $(( 	MB3y>>Q#6#638q==
9~~"" 9,	#sy0033ckk)6L6LL 9	!!{e##I!(;(;9??..ui.HHHyy{{**9555;;y)))
r   c                 
   t          || j        | j                  \  }}}}t          |          dk    r|d         }t	          |          r|                                }nt          j        || j                  }t          |t                    r=|j        dk    rt          d          |                     ||j        d                    d S t          |t                    rt!          |                    | j        d                    }t          |          }|dk    r4|j        dk    r)|                     |d         |j        d                    d S t          j        |                    | j        d                    }|j        }	n|                                j        }	|                                j        |	k    rt          j        ||j                  }|j        dk    r|                     ||           d S |\  }
}t          |
t                    rt          |t                    r}t	          |          r|                                }nt          j        || j                  }|j        dk    rt          d          |                     |
||j        d                    d S t          |
t                    r7t          j        |
                    | j        d                    d d d f         }
nt          j        |
          }
t          |t                    rNt          j        |                    | j        d                    d d d f         }|
j        dk    r|
d d d f         }
nt          j        |          }t3          |
|          \  }}|j        |j        k    rt5          d          t	          |          rd|j        v rd S |j        dk    r|d          }|d          }|                    d                              |j        d          }|j        d         dk    o|j        d         dk    }|j        d         dk    o|j        d         dk    }|s|j        d         |j        d         k    r|s+|j        d         |j        d         k    st          d	          |                                 |                     |||           d S t          j        || j                  }|                                j        |                                j        k    rt          j        ||j                  }|j        dk    rd S |                    |j                  }|                      |||           d S )
Nr   r   r   z&Trying to assign a sequence to an itemr   F)r2   Tzshape mismatch in assignment)!r   r   r    r!   r   toarrayr   asarrayr   r#   r&   r8   
ValueError_set_intflatr(   rangeindices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?   r@   rA   rB   	idx_rangeN	idx_shaperD   rE   ijbroadcast_rowbroadcast_cols                   r   __setitem__zIndexMixin.__setitem__   s   !23
DK!P!Py!Q u::??(C{{ 4IIKKJq
333#y)) 6Q;;$%MNNNc16!9---#u%% 0 "3;;tz!}#=#=>		NN66afkkMM)A,q	:::FiTZ]!;!;<I		KKMM/	yy{{ I--OAsy11v{{Q'''F Sc9%% 	*S)*D*D 	{{ 4IIKKJq
333v{{ !IJJJc3q	222Fc5!! 	%)S[[A778DACC-$$Cc5!! 	%)S[[A778qqqACx1}}!!!T'l-$$C c**17agFGGGA;; 	+AG||v{{dGdGU##++AN+FFAGAJ!O?
aMGAJ!O?
aM" AagajAGAJ&>&>" '?&'gajAGAJ&>&> !?@@@((Aq11111 
1DJ///Ayy{{ AIIKK$555OAqw//v{{		!'""A!!!Q*****r   c                     | j         \  }}t          |          }|| k     s||k    rt          d| d          |dk     r||z  }|                     |t	          d                    S )zGReturn a copy of row i of the matrix, as a (1 x n) row vector.
        index () out of ranger   N)r   intr"   r.   r(   r=   r\   MrZ   s       r   _getrowzIndexMixin._getrow   su     z1FFr66Q!VV8q888999q55FA""1eDkk222r   c                     | j         \  }}t          |          }|| k     s||k    rt          d| d          |dk     r||z  }|                     t	          d          |          S )zMReturn a copy of column i of the matrix, as a (m x 1) column vector.
        rb   rc   r   N)r   rd   r"   r1   r(   re   s       r   _getcolzIndexMixin._getcol   su     z1FFr66Q!VV8q888999q55FA""5;;222r   c                     t                      NNotImplementedErrorr=   rB   s     r   r'   zIndexMixin._get_int       !###r   c                     t                      rk   rl   rn   s     r   r)   zIndexMixin._get_slice   ro   r   c                     t                      rk   rl   rn   s     r   r*   zIndexMixin._get_array   ro   r   c                     t                      rk   rl   r=   rD   rE   s      r   r-   zIndexMixin._get_intXint   ro   r   c                     t                      rk   rl   rs   s      r   r0   zIndexMixin._get_intXarray   ro   r   c                     t                      rk   rl   rs   s      r   r.   zIndexMixin._get_intXslice   ro   r   c                     t                      rk   rl   rs   s      r   r1   zIndexMixin._get_sliceXint  ro   r   c                     t                      rk   rl   rs   s      r   r3   zIndexMixin._get_sliceXslice  ro   r   c                     t                      rk   rl   rs   s      r   r4   zIndexMixin._get_sliceXarray  ro   r   c                     t                      rk   rl   rs   s      r   r5   zIndexMixin._get_arrayXint  ro   r   c                     t                      rk   rl   rs   s      r   r6   zIndexMixin._get_arrayXslice  ro   r   c                     t                      rk   rl   rs   s      r   r7   zIndexMixin._get_columnXarray  ro   r   c                     t                      rk   rl   rs   s      r   r:   zIndexMixin._get_arrayXarray  ro   r   c                     t                      rk   rl   r=   rB   r   s      r   rK   zIndexMixin._set_int  ro   r   c                     t                      rk   rl   r~   s      r   rR   zIndexMixin._set_array  ro   r   c                     t                      rk   rl   r=   rD   rE   r   s       r   rS   zIndexMixin._set_intXint  ro   r   c                     t                      rk   rl   r   s       r   rX   zIndexMixin._set_arrayXarray   ro   r   c                     t          j        |                                | j                  }t	          ||          \  }}|                     |||           d S )Nr   )r   rI   rH   r   r   rX   )r=   rD   rE   r   rA   s        r   rW   z"IndexMixin._set_arrayXarray_sparse#  sQ    Jqyy{{$*555 C((1c3*****r   N)__name__
__module____qualname____doc__rF   r`   rg   ri   r'   r)   r*   r-   r0   r.   r1   r3   r4   r5   r6   r7   r:   rK   rR   rS   rX   rW   r   r   r   r   r      sp        ` ` `DY+ Y+ Y+v	3 	3 	3	3 	3 	3$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $+ + + + +r   r   c           	      
   t          |          }| t          u rt          d          f|z  |g g fS t          | t                    s| g} d}g }d}t          |           D ]\  }}|t          u r|t          d          |}"||                    |           :t          |t                    st          |          r|                    |           |dz  }yt          ||          x}	 |                    |	           ||	j
        z  }t          |          rt          d          |                    t          j        |                     |dz  }||k    rt          d|  d| d| d	          ||z
  t          d          gz  }
|
r0||                    |
           n|d|         |
z   ||d         z   }g }d}g g }g }g }t          |          D ]U\  }}|8|                    t          |                     |                    d           @t          |t                    ra                    |           ||         }t          t          |                    |                     }|                    |           |dz  }t          |          rv||         }| |cxk    r|k     sn t          d
| d          t#          |dk     r||z   n|          }                    |           |                    |           |dz  };|j        j        dk    r||j
        z   }|||         }|j        |k    rt          d| d| d|j                                       |                                           |                    t          ||                     |                    t          ||                     |}||         }t-          |||          }                    |           |                    |           |                    |           |dz  }Wt          |          dk    rňfd|D             }	 t          j        | }nA# t0          $ r4 d                    d |D                       }d| }t          |          w xY wt          |          |d         |d         z
  dz   k    rt5          |          |z   }n|d         }|d|         t5          |          z   ||d         z   }nSt          |          dk    r@|d                  j        }|d         }|d|         t5          |          z   ||d         z   }t	                    t	          |          ||fS )a  Returns four sequences: (index, requested shape, arrays, nones)

    index : tuple of validated idx objects. bool arrays->nonzero(),
            arrays broadcast, ints and slices as they are, Nones removed
    requested shape : the shape of the indexed space, including Nones
    arr_pos : position within index of all arrays or ints (for array fancy indexing)
    none_pos : insert positions to put newaxis coords in indexed space.
    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<Too many indices for array or tuple index out of range. Key z needs zD. Array is Drb   rc   bzbool index z has shape z instead of c                 *    g | ]}|         j         S r   r   ).0r\   r?   s     r   
<listcomp>z%_validate_indices.<locals>.<listcomp>  s    <<<eAhn<<<r    c              3   4   K   | ]}t          |          V  d S rk   )str)r   shps     r   	<genexpr>z$_validate_indices.<locals>.<genexpr>  s(      ==3c#hh======r   zLshape mismatch: indexing arrays could not be broadcast together with shapes r   )r!   Ellipsisr(   r#   tuple	enumerater"   appendr   _compatible_boolean_indexr/   r   r   rI   extendrM   rN   rd   r   kindr   nonzero
_asindicesbroadcast_shapesrJ   joinlist)r>   
self_shapeself_format	self_ndim	ellps_pos	index_1stprelim_ndimr\   rB   ixellip_slicesr[   
index_ndimarray_indicesnone_positionsarr_int_posMs	len_slicerZ   tmp_ndim	mid_shape
arr_shapes	arr_shapeshapesmsgarr_posr?   s                             @r   r   r   *  sD    JI
hd~	):r2==c5!! e IIKC..  3(??$ !KLLLII[S!!!!U## 	y~~ 	S!!!1KK-c9===bJR   27"KKc]] 	$% % %
 RZ__---1KKYEE E*E E8AE E E
 
 	
 +d}<L U\****!*9*-<y?TTI IJEMNKI&& $ $3;!!#i..111QU##  	LLJ'BE3;;r??344IY'''!OJJs^^ 	:&AB#MMMMMMMM !>3!>!>!>???qcAggc22CLLz***!OJJY^s""!CH,H":h#67IyI%% R!RR	RRsyRR   LL'''  z8!<!<===uZ::;;;!JJ:&AS![11CLLz***  ,,,!OJJ
=A<<<<m<<<
	"+Z8II 	" 	" 	"XX==*=====F4+14 4CS//!		" {B+a. @1 DEEY)3II!!nG!(7(+d9oo=	'((@SSII	]		q	 	 -*+1	a.hwh'$y//9Ighh<OO	<<y));FFs   Q >Rc                 Z   	 t          j        |           }n/# t          t          t          f$ r}t          d          |d}~ww xY w|dk    r	|j        dvs|dk    r"|j        dk    rt          d|j                   |dk    r|S |j        dk    r|S |                                }||k    rt          d| d	          |	                                }|dk     rR|| k     rt          d| d	          || u s|j
        j        s|                                }||dk     xx         |z  cc<   |S )
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coo)r   r   r   z$Index dimension must be 1 or 2. Got r   rb   rc   )r   rI   rJ   	TypeErrorMemoryErrorr"   r/   r8   maxminr   owndatar2   )rB   lengthr    r   emax_indxmin_indxs          r   r   r     s^   
1Z__	;/ 1 1 1))q01 27&00FeOOSTIIIJJJ 		w!||	 vvxxH6;8;;;<<<vvxxH!||vg?x???@@@99BH,9B
26


f


Is    A>Ac                 b   t          | d          s	 t          t          |           d          }t          |          D ]6}t	          |t
                    r n t          t          |          d          }7dS n# t          $ r Y dS w xY wt          j        |           } | j	        j
        dk    r| S dS )zICheck for boolean array or array-like. peek before asarray for array-liker/   Nr   )hasattrnextiterrM   r#   boolr   r   
asanyarrayr   r   )rB   desired_ndimr   rA   s       r   r   r     s     3 !		d3ii&&B<((  b$'' E$r((D))t   	 	 	44	 mC  
y~
4s   A#A8 8
BB)r   numpyr   _sputilsr   _baser   r   rd   integerr&   r   r   r   r   r   r   r   r   <module>r      s               $ $ $ $ $ $ $ $"*	  N+ N+ N+ N+ N+ N+ N+ N+bFG FG FGR     F    r   