
     h2                         d Z ddlZddlmZ 	 eeej        fZn# e	$ r eej        fZY nw xY wd Z
 G d d          Zd Zd	 Zd
 ZddZd Zd ZdS )z*Indexing mixin for sparse matrix classes.
    N   )	isintlikec                     t          j        | |          \  }}| j        j        |j        _        |j        j        |j        _        ||f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flags	writeable)abxys       O/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/scipy/sparse/_index.py_broadcast_arraysr      sA     q!$$DAq)AG)AGa4K    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S )
IndexMixinzS
    This class provides common dispatching and validation logic for indexing.
    c                 2    | j         rt          d          dS )zWe do not currently support 1D sparse arrays.

        This function is called each time that a 1D array would
        result, raising an error instead.

        Once 1D sparse arrays are implemented, it should be removed.
        zcWe have not yet implemented 1D sparse slices; please index using explicit indices, e.g. `x[:, [0]]`N)	_is_arrayNotImplementedError)selfs    r   _raise_on_1d_array_slicez#IndexMixin._raise_on_1d_array_slice    s0     > 	%H  	 	r   c                    |                      |          \  }}t          |t                    rt          |t                    r|                     ||          S t          |t                    r*|                                  |                     ||          S |j        dk    r*|                                  |                     ||          S |j        dk    r|                     ||          S t          d          t          |t                    rt          |t                    r*|                                  | 
                    ||          S t          |t                    rC|t	          d           k    r||k    r|                                 S |                     ||          S |j        dk    r|                     ||          S t          d          |j        dk    rkt          |t                    r*|                                  |                     ||          S t          |t                    r|                     ||          S nt          |t                    r|                     ||          S t          |t                    rt          d          |j        d         dk    rN|j        dk    s|j        d         dk    r2|                     |d d df         |                                          S t'          ||          \  }}|j        |j        k    rt          d          |j        dk    r3|                     t-          j        |          j        | j                  S |                     ||          S )Nr      zindex results in >2 dimensionsr   'number of row and column indices differdtype)_validate_indices
isinstance	INT_TYPES_get_intXintslicer   _get_intXslicendim_get_intXarray
IndexError_get_sliceXintcopy_get_sliceXslice_get_sliceXarray_get_arrayXint_get_arrayXsliceshape_get_columnXarrayravelr   size	__class__r   
atleast_2dr   _get_arrayXarray)r   keyrowcols       r   __getitem__zIndexMixin.__getitem__.   sL   ))#..S c9%% $	E#y)) 	5((c222C'' 5--///**3444Q--///**3444Q**3444=>>>U## 	E#y)) 7--///**3444C'' 7%++%%#**99;;&,,S#666Q,,S#666=>>>X]]#y)) 7--///**3444C'' 7,,S#6667 #y)) E**3444C'' E !ABBB1""A19J9J--c!!!A#h		DDD %S#..S9	!!FGGG8q==>>"-"4"4":$*>MMM$$S#...r   c                    |                      |          \  }}t          |t                    rnt          |t                    rYt          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        |          }t!          ||          \  }}|j        |j        k    rt#          d          ddlm}  ||          r|j        dk    r|d          }|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          |j        d         dk    s|j        d         dk    rd S |                    d	          }|                                 |                     |||           d S t          j        || j                  }|                                j        |                                j        k    rt          j        ||j                  }|j        dk    rd S |                    |j                  }|                     |||           d S )
Nr   r   z&Trying to assign a sequence to an itemr   r   )
isspmatrixzshape mismatch in assignmentT)r'   )r   r   r   r   asarrayr   r/   
ValueError_set_intXintflatr!   arangeindicesr,   
atleast_1dr#   r   r%   _baser8   tocoosum_duplicates_set_arrayXarray_sparsesqueezebroadcast_toreshape_set_arrayXarray)
r   r3   r   r4   r5   ijr8   broadcast_rowbroadcast_cols
             r   __setitem__zIndexMixin.__setitem__`   s1   ))#..Sc9%% 	*S)*D*D 	
1DJ///A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== 	+v{{dGdGGAJ!O?
aMGAJ!O?
aM" AagajAGAJ&>&>" '?&'gajAGAJ&>&> !?@@@wqzQ!'!*//T""A((Aq11111 
1DJ///Ayy{{ AIIKK$555OAqw//v{{		!'""A!!!Q*****r   c                    | j         \  }}t          |          \  }}t          |          r:t          |          }|| k     s||k    rt	          d|z            |dk     r||z  }n+t          |t                    s|                     ||          }t          |          r:t          |          }|| k     s||k    rt	          d|z            |dk     r||z  }n+t          |t                    s|                     ||          }||fS )Nzrow index (%d) out of ranger   zcolumn index (%d) out of range)r,   _unpack_indexr   intr%   r   r!   
_asindices)r   r3   MNr4   r5   s         r   r   zIndexMixin._validate_indices   s   z1 %%SS>> 	*c((CaRxx3!88 !>!DEEEQwwqC'' 	*//#q))CS>> 	*c((CaRxx3!88 !AC!GHHHQwwqC'' 	*//#q))CCxr   c                    	 t          j        |          }n/# t          t          t          f$ r}t          d          |d}~ww xY w|j        dvrt          d          |j        dk    r|S |                                }||k    rt          d|z            |	                                }|dk     rQ|| k     rt          d|z            ||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)r   r   zIndex dimension must be 1 or 2r   index (%d) out of range)r   r9   r:   	TypeErrorMemoryErrorr%   r#   r/   maxminr   owndatar'   )r   idxlengthr   emax_indxmin_indxs          r   rP   zIndexMixin._asindices   s   
	5
3AAI{3 	5 	5 	5_--14	5 6=>>>6Q;;H 5577v6ABBB5577a<<6'!! !:X!EFFFCxxqwxFFHHa!eHHHHHHs    A>Ac                     | j         \  }}t          |          }|| k     s||k    rt          d|z            |dk     r||z  }|                     |t	          d                    S )zGReturn a copy of row i of the matrix, as a (1 x n) row vector.
        rT   r   N)r,   rO   r%   r"   r!   r   rH   rQ   rR   s       r   getrowzIndexMixin.getrow   so     z1FFr66Q!VV6:;;;q55FA""1eDkk222r   c                     | j         \  }}t          |          }|| k     s||k    rt          d|z            |dk     r||z  }|                     t	          d          |          S )zMReturn a copy of column i of the matrix, as a (m x 1) column vector.
        rT   r   N)r,   rO   r%   r&   r!   r`   s       r   getcolzIndexMixin.getcol   so     z1FFr66Q!VV6:;;;q55FA""5;;222r   c                     t                      Nr   r   r4   r5   s      r   r    zIndexMixin._get_intXint       !###r   c                     t                      re   rf   rg   s      r   r$   zIndexMixin._get_intXarray   rh   r   c                     t                      re   rf   rg   s      r   r"   zIndexMixin._get_intXslice   rh   r   c                     t                      re   rf   rg   s      r   r&   zIndexMixin._get_sliceXint   rh   r   c                     t                      re   rf   rg   s      r   r(   zIndexMixin._get_sliceXslice   rh   r   c                     t                      re   rf   rg   s      r   r)   zIndexMixin._get_sliceXarray   rh   r   c                     t                      re   rf   rg   s      r   r*   zIndexMixin._get_arrayXint   rh   r   c                     t                      re   rf   rg   s      r   r+   zIndexMixin._get_arrayXslice   rh   r   c                     t                      re   rf   rg   s      r   r-   zIndexMixin._get_columnXarray   rh   r   c                     t                      re   rf   rg   s      r   r2   zIndexMixin._get_arrayXarray   rh   r   c                     t                      re   rf   r   r4   r5   r   s       r   r;   zIndexMixin._set_intXint   rh   r   c                     t                      re   rf   rs   s       r   rG   zIndexMixin._set_arrayXarray  rh   r   c                     t          j        |                                | j                  }t	          ||          \  }}|                     |||           d S )Nr   )r   r9   toarrayr   r   rG   )r   r4   r5   r   _s        r   rC   z"IndexMixin._set_arrayXarray_sparse  sQ    Jqyy{{$*555 C((1c3*****r   N)__name__
__module____qualname____doc__r   r6   rL   r   rP   ra   rc   r    r$   r"   r&   r(   r)   r*   r+   r-   r2   r;   rG   rC    r   r   r   r      sL          0/ 0/ 0/d2+ 2+ 2+h  0  <	3 	3 	3	3 	3 	3$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $+ + + + +r   r   c                 >   ddl m}m} t          | |t          j        f          r/| j        dk    r$| j        j        dk    r| 	                                S t          |           } t          | t                    rSt          |           dk    r| \  }}nt          |           dk    r| d         t          d          }}nzt          d          t          |           }|| t          d          }}nH|j        dk     rt!          |          t          d          fS |j        dk    r|	                                S  ||          s ||          rt          d          t          |          }t          |          }|t!          |          }|t!          |          }||fS )	z Parse index. Always return a tuple of the form (row, col).
    Valid type for row/col is integer, slice, or array of integers.
    r   )spmatrixr8   r   r   r   Nzinvalid number of indiceszoIndexing with sparse matrices is not supported except boolean indexing where matrix and index are equal shapes.)r@   r~   r8   r   r   ndarrayr#   r   kindnonzero_check_ellipsistuplelenr!   r%   _compatible_boolean_index_boolean_index_to_array)indexr~   r8   r4   r5   rZ   bool_rowbool_cols           r   rN   rN     s   
 ,+++++++58RZ011 J!OO 0C 7 7}} E""E % !u::??HCZZ1__QxtCC8999'..;eDkkCCX\\*3//t<<X]];;== z# !**S// !  ! ! 	! )--H(--H%h//%h//8Or   c                    | t           u rt          d          t          d          fS t          | t                    s| S t	          |           D ]\  }}|t           u r|} n| S t          |           dk    rt          d          t          d          fS t          |           dk    ra|dk    rD| d         t           u rt          d          t          d          fS t          d          | d         fS | d         t          d          fS g }| |dz   d         D ] }|t           ur|                    |           !|t          |          z   }t          dd|z
            }| d|         t          d          f|z  z   t          |          z   S )z6Process indices with Ellipsis. Returns modified index.Nr   r   r   )Ellipsisr!   r   r   	enumerater   appendrW   )r   rI   vfirst_ellipsistailndnslices          r   r   r   9  s   dU4[[))eU##  %    1==NE   5zzQdU4[[))
5zzQQQx8##dU4[[11$KKq**a%++&& D>!#$$%  HKKNNN	#d))	#BAF^^F.!U4[[N6$99E$KKGGr   c                 R    t          j        |           } | j        j        dk    r| S dS )z8Returns a compatible array if elements are boolean.
    r   N)r   
asanyarrayr   r   rZ   s    r   _maybe_bool_ndarrayr   `  s,     -

C
y~
4r   r   c                     |dk     rdS 	 t          t          |           d          }n# t          $ r Y dS w xY wt          |t                    rdS t          ||dz
            S )zQReturns True if first element of the incompatible
    array type is boolean.
    r   NT)nextiterrU   r   bool_first_element_bool)rZ   max_dimfirsts      r   r   r   i  s{     {{tT#YY%%   tt% tugai000s   ( 
66c                 b    t          | d          st          |           rt          |           S dS )ztReturns a boolean index array that can be converted to
    integer array. Returns None if no such array exists.
    r#   N)hasattrr   r   r   s    r   r   r   x  s9    
 sF (2377 ("3'''4r   c                 j    | j         dk    rt          d          t          j        |           d         S )Nr   zinvalid index shaper   )r#   r%   r   wherer   s    r   r   r     s/    
x!||.///8C==r   )r   )r{   numpyr   _sputilsr   rO   longintegerr   	NameErrorr   r   rN   r   r   r   r   r   r|   r   r   <module>r      s             "dBJ'II " " "bj!III"
  l+ l+ l+ l+ l+ l+ l+ l+^+ + +\$H $H $HN  1 1 1 1      s   
 **