
    Џkh                         d Z g ZddlmZ ddlZddlZddlmZm	Z	 ddl
mZmZmZmZ ddlmZmZ ddlmZ dd	lmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$ dd
l%m&Z& ddl'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2  G d deee&      Z3ddZ4d Z5y)z>Base class for sparse matrix formats using compressed storage.    )warnN)_prune_arraycopy_if_needed   )_spbaseissparsesparraySparseEfficiencyWarning)_data_matrix_minmax_mixin)_sparsetools)get_csr_submatrixcsr_sample_offsetscsr_todensecsr_sample_valuescsr_row_indexcsr_row_slicecsr_column_index1csr_column_index2csr_diagonal	expandptrcsr_has_canonical_formatcsr_eliminate_zeroscsr_sum_duplicatescsr_has_sorted_indicescsr_sort_indicescsr_matmat_maxnnz
csr_matmat)
IndexMixin)upcastupcast_char	to_nativeisshapegetdtype	isintlikedowncast_intp_indexget_sum_dtypecheck_shapeget_index_dtypebroadcast_shapesc                   4   e Zd ZdZd6dddZd7dZej
                  j                  e_        d7dZej                  j                  e_        d8dZd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd9dZej"                  j                  e_        d:dZej$                  j                  e_        d7dZd Zd Zd Zd Zd Zd;dZd Zd;dZd6dZd Zd Zd Zd Z d  Z!d! Z"d" Z#d# Z$d8d$Z%ejJ                  j                  e%_        d<d%Z&ejL                  j                  e&_        d& Z'e(d'e)fd(       Z*e*jV                  d)e)fd*       Z*d+ Z,e(d'e)fd,       Z-e-jV                  d)e)fd-       Z-d. Z.d/ Z/d0 Z0d1 Z1ejb                  j                  e1_        d8d2Z2d3 Z3d4 Z4d;d5Z5y)=
_cs_matrixzY
    base array/matrix class for compressed row- and column-oriented arrays/matrices
    Nmaxprintc                ~	   t        j                  | ||       t        |      r|j                  | j                  k(  r|r|j	                         }n|j                  | j                        }|j                  |j                  |j                  |j                  f\  | _        | _        | _        | _	        nt        |t              rt        || j                        rt        || j                        | _	        | j                  | j                         \  }}| j#                  t%        | j&                              }t)        j*                  dt-        |t.                    | _        t)        j*                  d|      | _        t)        j*                  |dz   |      | _        nt1        |      dk(  r\| j3                  |||	      }	|	j5                  | j                        }
|
\  | _        | _        | _        | _	        | j7                          nt1        |      d
k(  r|\  }}}d }|d|vrt%        |      }| j#                  ||f|d      }|st8        }t)        j:                  |||      | _        t)        j:                  |||      | _        t)        j:                  |||      | _        nt=        d| j>                  j@                   d|       	 t)        jB                  |      }t        | tF              r7|jH                  dk7  r(| j                  dk(  rt=        d|jH                   d      |jH                  dkD  rt=        d|jH                   d      | j3                  ||      }	|	j5                  | j                        }
|
\  | _        | _        | _        | _	        |t        || j                        | _	        no| j&                  c	 t1        | j                        dz
  }| j                  j%                         dz   }t        | j                  ||f      | j                        | _	        |-t-        |      }| j                  jK                  |d      | _        | jM                  d       y # tD        $ r+}t=        d| j>                  j@                   d|       |d }~ww xY w# tD        $ r}t=        d      |d }~ww xY w)Nr-   allow_ndmaxvalr   )defaultr   dtype   shaper6      T)r3   check_contentscopyr6   zunrecognized z constructor input: csczCSC arrays don't support zD input. Use 2DzCSR arrays don't yet support zD.z!unable to infer matrix dimensionsFr=   
full_check)'r   __init__r   formatr=   asformatindptrindicesdata_shape
isinstancetupler#   	_allow_ndr(   _swap_shape_as_2d_get_index_dtypemaxr9   npzerosr$   floatlen_coo_container_coo_to_compressedsum_duplicatesr   array
ValueError	__class____name__asarray	Exceptionr	   ndimastypecheck_format)selfarg1r9   r6   r=   r.   MN	idx_dtypecooarraysrG   rF   rE   r3   enewdtypes                    T/var/www/teggl/fontify/venv/lib/python3.12/site-packages/scipy/sparse/_compressed.pyrB   z_cs_matrix.__init__   s   dD8<D>{{dkk)dyy{}}T[[1T\\499dkkA=DKty$+ e$tdnn5 *$Hzz$"3"341 !11TZZ1I	HHQ(FG	!xx95 hhq1uI>t9>--d%u-MC 33DJJ?FHNEDKty$+'')Y!^.2+T7F "F(Qe^!$U $ 5 5w6G7=?C !6 !EI  -#%88G$i#PDL"$((6I"NDK "D FDI$}T^^5L5L4M N;;?&&B C C
Fzz$' $(TYY!^u@T #<TYYK!WXXyy1} #@2!NOO%%d%%8C++DJJ7F@F=DKty$+ %ednnEDKZZM$q(LL$$&* &djj!Q&84>>RDKH		(((>DIU+;  F =1H1H0I J77;f"> ?DEFF(  M !DE1LMs0   Q+ 5R" +	R4&RR"	R<+R77R<c                    |t        | j                  d         S | j                  dk(  r'|dv rt        | j                  d         S t        d      |dk  r|dz  }| j	                  |d|z
  f      \  }}| j	                  | j
                        \  }}|dk(  r*t        j                  t        | j                        |      S |dk(  rt        j                  | j                        S t        d      )Nr   r   rk   axis out of boundsr   r7   	minlength)intrE   r]   rX   rL   r9   rP   bincountr&   rF   diff)r`   axis_rc   s       ri   _getnnzz_cs_matrix._getnnzv   s    <t{{2''YY!^w4;;r?++122ax	jj$D!12GD!::djj)DAqqy{{#6t||#DPQRRwwt{{++122    c                    | j                          |t        j                  | j                        S | j                  dk(  r.|dvrt        d      t        j                  | j                        S |dk  r|dz  }| j                  |d|z
  f      \  }}|dk(  rx| j                  | j                        \  }}| j                  dk7  }|j                         r| j                  n| j                  |   }t        j                  t        |      |      S |dk(  r| j                  j                         rt        j                  | j                        S t        j                  | j                        }t        j                   |D cg c]'  \  }}t        j                  | j                  ||       ) c}}      S t        d      c c}}w )Nr   rl   rm   r   r7   rn   )rV   rP   count_nonzerorG   r]   rX   rL   r9   allrF   rq   r&   rr   rE   	itertoolspairwiserW   )	r`   rs   rt   rc   maskidxpairsijs	            ri   rx   z_cs_matrix.count_nonzero   sd   <##DII..99>7" !566##DII..!8AID**dAH-.a19::djj)DAq99>D"&((*$,,$,,t2DC;;2371EEQYyy}}wwt{{++&&t{{3E88%P$!QR--dii!n=PQQ122 Qs    ,F?
c                 :   | j                   j                  j                  dk7  r/t        d| j                   j                  j                   dd       | j
                  j                  j                  dk7  r/t        d| j
                  j                  j                   dd       | j                  j                  | j
                  j                  | j                   j                  fD ]  }|dk7  s	t        d       | j                  | j                        \  }}t        | j                         |dz   k7  r't        d	t        | j                          d
|dz          | j                   d   dk7  rt        d      t        | j
                        t        | j                        k7  rt        d      | j                   d   t        | j
                        kD  rt        d      | j                          |r+| j                  dkD  r| j
                  j                         |k\  rt        d|       | j
                  j                         dk  rt        d      t!        j"                  | j                         j                         dk  rt        d      | j%                  | j                   | j
                  f      }t!        j&                  | j                   |      | _         t!        j&                  | j
                  |      | _        t)        | j                        | _        yy)a  Check whether the array/matrix respects the CSR or CSC format.

        Parameters
        ----------
        full_check : bool, optional
            If `True`, run rigorous check, scanning arrays for valid values.
            Note that activating those check might copy arrays for casting,
            modifying indices and index pointers' inplace.
            If `False`, run basic checks on attributes. O(1) operations.
            Default is `True`.
        r   z$indptr array has non-integer dtype ()r:   
stacklevelz%indices array has non-integer dtype (r   z'data, indices, and indptr should be 1-Dzindex pointer size z should be r   z!index pointer should start with 0z*indices and data should have the same sizerk   zQLast value of index pointer should be less than the size of index and data arrayszindices must be < zindices must be >= 0z(indptr must be a non-decreasing sequencer5   N)rE   r6   kindr   namerF   rG   r]   rX   rL   rM   rS   prunennzrO   minrP   rr   rN   r[   r"   )r`   rA   xrb   rc   rd   s         ri   r_   z_cs_matrix.check_format   s    ;;!!S(78I8I8N8N7OqQ<<""c)89K9K9P9P8QQRS ))..$,,"3"3T[[5E5EF 	LAAv !JKK	L
 zz$++,1A%23t{{3C2DKPQTUPUwWXXKKNa@AA TYY/IJJKKOc$,,// A B B 	

xx!|<<##%*$'9!%=>><<##%)$%;<<774;;'++-1$%OPP--t{{DLL.IJI**T[[	BDK::dll)DDL!$)),DI rv   c                     | j                          | j                   || j                  |      d      }|j                          |S )zScalar version of self._binopt, for cases in which no new nonzeros
        are added. Produces a new sparse array in canonical form.
        Tr?   )rV   
_with_datarG   eliminate_zeros)r`   otheropress       ri   _scalar_binoptz_cs_matrix._scalar_binopt   s>     	oobE2o>
rv   c                 H   |j                   | j                   k7  r&t        d| j                    d|j                    d      t        | j                  j                  |j                  j                        }| j                  d      d   }t        j                  |||d      }|j                  j                  r|n|j                  }| j                  | j                        \  }}t        ||| j                  | j                  | j                  |       | j!                  |d	      S )
NzIncompatible shapes ( and r   CFr   T)r6   orderr=   Fr?   )r9   rX   r!   r6   charrL   rP   rW   flagsc_contiguousTrM   r   rE   rF   rG   
_container)r`   r   r6   r   resultyrb   rc   s           ri   
_add_densez_cs_matrix._add_dense   s    ;;$**$4TZZLekk]RSTUUDJJOOU[[-=-=>

4 #%uEEll//FVXXzz$++,1Aq$++t||TYYBvE22rv   c                 &    | j                  |d      S )N_plus__binoptr`   r   s     ri   _add_sparsez_cs_matrix._add_sparse  s    ||E8,,rv   c                 &    | j                  |d      S )N_minus_r   r   s     ri   _sub_sparsez_cs_matrix._sub_sparse  s    ||E9--rv   c                    t        |      r| j                  |j                  k(  r#| j                  |      }| j                  |d      S |j                  dk(  rS| j	                  |j                         d         }| j                  dk(  r |j                  d| j                  d   f      S |S |j                  dk(  r"| j	                  |j                         d         S | j                  dv r)|j	                  | j                  j                               S | j                  \  }}|j                  \  }}|dk(  r4|dk(  r/|j                  | j                  ||      j                               S |dk(  r4|dk(  r/| j                  |j                  ||      j                               S t        | t              }|dk(  rb||k(  r]t        |j                         j!                         |      }| j                  |      }| j                  dk(  r|S |j                  d|f      S |dk(  r>||k(  r9t        | j                         j!                         |      }	|j                  |	      S |dk(  r>||k(  r9t        |j                         j!                         |      }|j                  |       S |dk(  r>||k(  r9t        | j                         j!                         |      }
|
j                  |      S t#        d	| j                   d
|j                         t%        j&                  |      }|j                  dkD  r$t%        j(                  | j                         |      S |j*                  dk(  rp|j,                  t$        j.                  k(  rt0        S t3        | j                  |j                        }| j	                  |j4                  d         j                  |      S | j                  dv r]t3        | j                  |j                        }t%        j(                  | j                  j                         |      j                  |      S | j7                         }| j                  |j                  k(  rat%        j(                  |j                  ||j8                           }|j;                  t$        j<                        j!                         |_        |S t%        j>                  |      }| j                  d   dk(  s| j                  dk(  r|j                  d   dk(  r!t%        j(                  |j                  |      }nv|j                  d   | j                  d   k(  r2t%        j(                  |j                  |dd|j@                  f         }n%t#        d	| j                   d
|j                         | jC                  |j@                  |jD                  |j                  d   z        }t%        jF                  t%        jH                  |j                  d   |      |jD                        }t%        jJ                  |j@                  jM                  |d      |j                  d         }| jO                  |j;                  t$        j<                        j!                         ||ff|j                  d   | j                  d   fd      S | j                  d   dk(  r|j                  d   dk(  r(t%        j(                  |j                  dddf   |      }ny|j                  d   | j                  d   k(  r5t%        j(                  |j                  dddf   ||jP                           }n%t#        d	| j                   d
|j                         | jC                  |jP                  |jD                  |j                  d   z        }t%        jF                  |jP                  jM                  |d      |j                  d         }t%        jJ                  t%        jH                  |j                  d   |      |jD                        }| jO                  |j;                  t$        j<                        j!                         ||ff| j                  d   |j                  d   fd      S |j                  d   dk(  r_| j                  d   |j                  d   k(  r@t%        j(                  |j                  |dd|j@                  f   j!                               }n|j                  d   dk(  r[| j                  d   |j                  d   k(  r<t%        j(                  |j                  ||jP                     j!                               }n%t#        d	| j                   d
|j                         |j;                  t$        j<                        j!                         |_        |S )z?Element-wise multiplication by array/matrix, vector, or scalar._elmul_r   r   )r   r   r   r   r   )r   r   r7   inconsistent shapes r   rk   Nr2   r5   Fr?   r9   r=   ))r   r9   rY   r   _mul_scalartoarrayr]   reshaperG   sumrM   _matmul_sparsetocscrI   r	   _make_diagonal_csrravelrX   rP   
asanyarraymultiplysizer6   object_NotImplementedr*   flattocoocoordsviewndarray
atleast_2dcolrN   r   repeatarangetiler^   rT   row)r`   r   r   sMsNoMoNis_array	new_otherr=   new_selfbshaperetrG   other2drd   r   r   s                     ri   _multiply_2d_with_broadcastingz)_cs_matrix._multiply_2d_with_broadcasting  s    E?zzU[[(u-||E955{{f$))%--/$*?@99>!>>1djjm*<=={{d"''(:;;zz^+((99 &&FB''FBQw27++DLLR,@,F,F,HIIQw27**5==R+@+F+F+HII!$0HQw28.u}}/D/D/FQ	,,Y7!%avLV^^QG5LLQw28)$,,.*>*>*@(K++D11 Qw28.u}}/D/D/FQ	 //55Qw28-dlln.B.B.DhO..u553DJJ<uU[[MRSS e$::>;;t||~u55::?{{bjj(%%%djj%++>F##EJJqM2::6BB::'%djj%++>F;;tyy}}6>>vFFjjl::$;;sxxszz):;Dyy,224CHJ --&::a=Aa}}Q1${{388W5q!TZZ^3{{388WQZ-@A #7

|5!VWW--cgg58WWw}}Q?O5O . QI))BIIgmmA&6iH#''RC''#''...?qAQRC&&2::&,,.c
;}}Q'B8 '   ::a=A}}Q1${{388AtG#4g>q!TZZ]2{{388AtG#4gcgg6FG #7

|5!VWW--cgg58WWw}}Q?O5O . QI))CGGNN95NA7==QRCSTC''"))GMM!$4IFPC&&2::&,,.c
;zz!}gmmA&67 '   ==q TZZ]gmmA6F%F;;sxxCGG)<)B)B)DED]]1"tzz!}a8H'H;;sxx)9)?)?)ABD3DJJ<uU[[MRSS99RZZ(..0
rv   c           	      p   | j                   \  }}t        j                  |t        | j                  j
                  |j                  j
                              }t        t        | j                  dz         } |||| j                  | j                  | j                  ||       | j                  dk(  r|d   S |S )Nr5   _matvecr   r   )rM   rP   rQ   r!   r6   r   getattrr   rC   rE   rF   rG   r]   )r`   r   rb   rc   r   fns         ri   _matmul_vectorz_cs_matrix._matmul_vector  s      1 !;tzz@P@P#QR \4;;#:;
1adllDIIufE IINvay66rv   c                    | j                   \  }}|j                  d   }t        j                  ||ft	        | j
                  j                  |j
                  j                              }t        t        | j                  dz         } ||||| j                  | j                  | j                  |j                         |j                                | j                  dk(  r|j                  |f      S |S )Nrk   r5   _matvecsr   )rM   r9   rP   rQ   r!   r6   r   r   r   rC   rE   rF   rG   r   r]   r   )r`   r   rb   rc   n_vecsr   r   s          ri   _matmul_multivectorz_cs_matrix._matmul_multivector  s      1R1f+ +DJJOOU[[=M=M NP \4;;#;<
1adllDII;;=&,,.	* 99>>>6),,rv   c                    | j                   \  }}|j                  }|dk(  r*|j                  d|j                  d   f      j                  }|j                  dk(  r|j
                  n|j                  d   df\  }}d}| j                  dk(  r||fz  }|dk(  r||fz  }| j                  dk(  r|nd|dk(  r|ndf}| j                  |      }| j                  | j                  |j                  |j                  f}	| j                  ||f      \  }}| j                  | |f      \  }
}| j                  |	      }t        j                  |
j                  |      }t        j                  |
j                  |      }t        j                  |j                  |      }t        j                  |j                  |      }t        ||||||      }|dk(  rk|dk(  r5t        j                  dt        | j                   |j                               S | j                  |t        | j                   |j                               S | j                  |	|      }||k7  r|}t        j                  |
j                  |      }t        j                  |
j                  |      }t        j                  |j                  |      }t        j                  |j                  |      }t        j"                  |dz   |      }t        j"                  ||      }t        j"                  |t        | j                   |j                               }t%        |||||
j&                  |||j&                  |||       |dk(  rt        j                  |d         S | j                  |||f|      }||k7  r0|j(                  dk7  r|j+                         }|j                  |      }|S )	Nr   r   r7    r5   r2   r9   csr)rM   r]   r   r9   r   rH   rY   rE   rF   rL   rN   rP   r[   r   rW   r    r6   emptyr   rG   rC   tocsr)r`   r   rb   K1o_ndimK2rc   	new_shape
faux_shapeindex_arrayssord   s_indptr	s_indiceso_indptr	o_indicesr   new_idx_dtyperE   rF   rG   r   s                          ri   r   z_cs_matrix._matmul_sparse  s   !!2Q;MM1ekk!n"5688E %

aekk!na5HA 	99>!IQ;!I99>aqv{!J
u%T\\5<<Ozz1a&!1zz4-(1)),7	::ahhi8JJqyy	:	::ahhi8JJqyy	:	1h	8YO!8Bxx

EKK)HII>>)6$**ekk3R>SS--l3-GI%%Izz!(()<H

199I>Izz!(()<H

199I>I!a%y1((3i0xx6$**ekk#BC1aYY7D	*
 ?88DG$$nndGV4JnG"zzU"iik++i(C
rv   c           
         | j                  | j                        \  }}| j                  || f      \  }}|| k  s||k\  r+t        j                  d| j                  j
                        S t        j                  t        |t        |d      z   |t        |d      z
        t        | j
                              }t        |||| j                  | j                  | j                  |       |S )Nr   r5   )rL   r9   rP   r   rG   r6   r   rO   r    r   rE   rF   )r`   krb   rc   rt   r   s         ri   diagonalz_cs_matrix.diagonal  s    zz$**%1zz1qb'"17a1f88ATYY__55HHSSAYC1I6fTZZ>PQQ1dkk4<<AFrv   c                    | j                   dk(  rt        | d      s|| j                  d      d   v rt        | j                        }t        j                  t        | j                        dz
  |      }| j                  t
        j                        \  }}|||<   | j                  |      }|dz  dk(  r|j                  }|j                  d||      S t        j                  | |||      S )	zSum the array/matrix over the given axis.  If the axis is None, sum
        over both rows and columns, returning a scalar.
        r7   	blocksize))r   rk   )r   r   r   r5   r   )rs   r6   out)r]   hasattrrL   r'   r6   rP   rQ   rS   rE   _minor_reduceadd_ascontainerr   r   r   )r`   rs   r6   r   	res_dtyper   major_indexvalues           ri   r   z_cs_matrix.sum  s     IIN74#=

#56q99%djj1I((3t{{+a/yAC!%!3!3BFF!;K$C##C(Cax1}ee77%S799;;t$eEErv   c                     || j                   }t        j                  t        j                  | j                              }|j                  |t        | j                  |               }||fS )a  Reduce nonzeros with a ufunc over the minor axis when non-empty

        Can be applied to a function of self.data by supplying data parameter.

        Warning: this does not call sum_duplicates()

        Returns
        -------
        major_index : array of ints
            Major indices where nonzero

        value : array of self.dtype
            Reduce result for nonzeros in each major_index
        )rG   rP   flatnonzerorr   rE   reduceatr&   )r`   ufuncrG   r   r   s        ri   r   z_cs_matrix._minor_reduce  sZ     <99DnnRWWT[[%9:t24;;{3KLNE!!rv   c                    | j                  | j                        \  }}| j                  ||f      \  }}t        ||| j                  | j                  | j
                  ||dz   ||dz   	      \  }}}	|	j                  | j                        S )Nr   r5   )rL   r9   r   rE   rF   rG   r   r6   )
r`   r   r   rb   rc   majorminorrE   rF   rG   s
             ri   _get_intXintz_cs_matrix._get_intXint  s~    zz$**%1zz3*-u 1q$++t||TYY519eUQY!0 xxdjjx))rv   c                     | j                  ||f      \  }}|j                  dv r"|j                  dv r| j                  ||d      S | j                  |      j	                  |      S )Nr   NTr?   )rL   step_get_submatrix_major_slice_minor_slicer`   r   r   r   r   s        ri   _get_sliceXslicez_cs_matrix._get_sliceXslice&  sc    zz3*-u::"uzzY'>&&ue$&??  '44U;;rv   c                    | j                   j                  }| j                  | j                        \  }}| j                  ||f      \  }}t	        j
                  ||      }t	        j
                  ||      }t	        j                  |j                  | j                        }t        ||| j                  | j                   | j                  |j                  |j                         |j                         |	       |j                  dk(  r| j                  |      S | j                  |j                  |j                              S )Nr5   r   )rF   r6   rL   r9   rP   r[   r   r   r   rE   rG   r   r]   r   rY   r   )	r`   r   r   rd   rb   rc   r   r   vals	            ri   _get_arrayXarrayz_cs_matrix._get_arrayXarray,  s    LL&&	zz$**%1zz3*-u

5	2

5	2hhuzz4!QT\\499**ekkmU[[]C	I::?$$S))~~ckk%++677rv   c                 n    | j                  ||f      \  }}| j                  |      j                  |      S N)rL   _major_index_fancy_minor_index_fancyr  s        ri   _get_columnXarrayz_cs_matrix._get_columnXarray;  s4    zz3*-u&&u-@@GGrv   c           	         | j                  | j                  | j                  f      }t        j                  ||      j                         }| j                  | j                        d   }t        |      }| j                  dk(  r| j                  ||f      n|f}|dk(  r| j                  || j                        S | j                  |dz      | j                  |   z
  j                  |      }t        j                  |dz   |      }t        j                  ||dd        |d   }	t        j                  |	|      }
t        j                  |	| j                        }t!        ||| j                  j                  |d	      | j                  j                  |d	      | j"                  |
|       | j                  ||
|f|d
      S )zBIndex along the major axis where idx is an array of ints.
        r5   r   r7   r   Nr   rk   Fr?   r   )rN   rE   rF   rP   r[   r   rL   rM   rS   r]   rY   r6   r^   rQ   cumsumr   r   rG   )r`   r}   rd   rF   rc   rb   r   row_nnz
res_indptrr   res_indicesres_datas               ri   r  z_cs_matrix._major_index_fancy@  s    ))4;;*EF	**S	288:JJt(()!,L*.))q.DJJ1v&qd	6>>)4::>>>;;w{+dkk'.BBJJ9UXXa!e95

		'z!"~.nhhs)488Ctzz2KKyu5LL	6II	
 ~~xjA$-E  ; 	;rv   c           
      h   |t        d      k(  r|r| j                         S | S | j                  | j                        \  }}|j	                  |      \  }}}t        t        |||            }| j                  dk(  r| j                  ||f      n|f}|dk(  r| j                  || j                        S ||}
}	|dk(  r|dk\  rd}
|dz   |dz   }}| j                  |||   | j                  |	|
|   z
  }| j                  j                  }t        j                  |dz   |      }t        j                  ||dd        |dk(  rot        | j                  |   | j                  |         }t        j                  | j                  |   |      }t        j                  | j                  |   |      }nm|d   }t        j                   ||      }t        j                   || j                        }t#        |||| j                  | j                  | j                  ||       | j                  |||f|d	
      S )z@Index along the major axis where idx is a slice object.
        Nr7   r   r5   rk   r   r  r?   Fr   )slicer=   rL   rM   rF   rS   ranger]   rY   r6   rE   rP   rQ   r  rW   rG   r   r   )r`   r}   r=   rb   rc   startstopr  r   start0stop0start1stop1r  rd   r  all_idxr  r  r   s                       ri   r  z_cs_matrix._major_slice`  s    %+"&499;0D0zz$++,1KKNtTeT4()*.))q.DJJ1v&qd	6>>)4::>>> t2:%1*E	4!8++fU4/0KKuT)*+LL&&	XXac3

		'z!"~.19DKK.D0ABG((4<<#8tDKxx		' 2>HR.C((3i8Kxx4::6H%tT[[$,,))[(< ~~xjA$-E  ; 	;rv   c           
         | j                  | j                  | j                  f      }| j                  j                  |d      }| j                  j                  |d      }t	        j
                  ||      j                         }| j                  | j                        \  }}t        |      }| j                  dk(  r| j                  ||f      n|f}|dk(  r| j                  || j                        S t	        j                  ||      }	t	        j                  | j                  |      }
t        |||||||	|
       t	        j                   |      j                  |d      }|
d   }t	        j"                  ||      }t	        j"                  || j                        }t%        ||	t        | j                        || j&                  ||       | j                  |||
f|d      S )zBIndex along the minor axis where idx is an array of ints.
        Fr?   r5   r7   r   rk   r   )rN   rF   rE   r^   rP   r[   r   rL   rM   rS   r]   rY   r6   rQ   
empty_liker   argsortr   r   rG   )r`   r}   rd   rF   rE   rb   rc   r   r   col_offsetsr  	col_orderr   r  r  s                  ri   r  z_cs_matrix._minor_index_fancy  s    ))4<<*EF	,,%%ie%<##IE#:jjI.446zz$++,1H*.))q.DJJ1v&qd	6>>)4::>>> hhq	2]]4;;i@
		
 JJsO**95*A	nhhs)488Ctzz2)[#dll2C!499k8	E~~xjA$-E  ; 	;rv   c                    |t        d      k(  r|r| j                         S | S | j                  | j                        \  }}|j	                  |      \  }}}t        t        |||            }|dk(  r.| j                  | j                  ||f      | j                        S |dk(  r| j                  ||      S | j                  t        j                  |||            S )z@Index along the minor axis where idx is a slice object.
        Nr   r5   r   )r   r=   )r  r=   rL   rM   rF   rS   r  rY   r6   r  r  rP   r   )r`   r}   r=   rb   rc   r  r  r  s           ri   r  z_cs_matrix._minor_slice  s     %+"&499;0D0zz$++,1KKNtTeT4()6>>$**aV"4DJJ>GG19&&St&<<&&ryyd'CDDrv   c                    | j                  | j                        \  }}t        ||      \  }}t        ||      \  }}	|dk(  r#|dk(  r||k(  r|	|k(  r|r| j                         S | S t	        ||| j
                  | j                  | j                  ||||		      \  }
}}| j                  ||z
  |	|z
  f      }| j                  dk(  r|d   f}| j                  |||
f|| j                  d      S )zbReturn a submatrix of this matrix.

        major, minor: None, int, or slice with step 1
        r   r   F)r9   r6   r=   )rL   rM   _process_slicer=   r   rE   rF   rG   r]   rY   r6   )r`   r   r   r=   rb   rc   i0i1j0j1rE   rF   rG   r9   s                 ri   r  z_cs_matrix._get_submatrix  s    
 zz$++,1q)Bq)B7rQw27rQw"&499;0D0 1q$++t||TYYBB!H 

BGR"W-.99>1XKE~~tWf5U$(JJU  < 	<rv   c                 V    | j                  ||f      \  }}| j                  |||       y r  rL   	_set_manyr`   r   r   r   r   r   s         ri   _set_intXintz_cs_matrix._set_intXint  (    zz3*%1q!Qrv   c                 V    | j                  ||f      \  }}| j                  |||       y r  r0  r2  s         ri   _set_arrayXarrayz_cs_matrix._set_arrayXarray  r4  rv   c                 R    | j                   | j                  ||f        |j                  \  }}|dk7  xr |j                  d   dk(  }|dk7  xr |j                  d   dk(  }|j                  |j                  }	}t        j                  |j                  | j                        }|j                  dk(  ry |r^t        j                  t        j                  |      t        |            }t        j                  |	|      }	t        j                  ||      }|r^t        j                  ||      }t        j                  t        j                  |      t        |	            }	t        j                  ||      }| j                  |||	f   |||	f   f      \  }
}| j                  |
||       y )Nr   r   r5   )
_zero_manyrL   r9   r   r   rP   r[   rG   r6   r   r   r   rS   r   r1  )r`   r   r   r   rb   rc   broadcast_rowbroadcast_colrcr   r   s               ri   _set_arrayXarray_sparsez"_cs_matrix._set_arrayXarray_sparse  sF   S#J/0yy1Q21771:?Q21771:?uuaee1JJqvvTZZ066Q;		"))A,A/A1A1A		!QA		!c!f-A		!QAzz3q!t9c!Q$i011q!Qrv   c           
      N   d| j                   v ry | j                  dk(  rt        d      | j                   \  }}|j                  dk(  }|dk  r|rt        ||z   |      }nt        ||z   |t	        |            }t        j                  | ||z
  | j                  j                        }t        j                  || j                  j                        }n|rt        |||z
        }nt        |||z
  t	        |            }t        j                  || j                  j                        }t        j                  |||z   | j                  j                        }|s|d t	        |       }t        j                  t        j                  || j                              j                         }	|	j                         j                   |j                         j                   k7  r t        j                  |	|j                         }	|	j                  dk(  ry | j                  ||f      \  }}| j                  ||f      \  }}|	j                  }
t        j                   |
| j                  j                        }t#        ||| j$                  | j                  |
|||      }|dk(  r6| j'                          t#        ||| j$                  | j                  |
|||       d|vr|	| j(                  |<   y |dk\  }| j*                  |j-                         z
  | j*                  dz  k  r9|	|   | j(                  ||   <   | }||   }||   }| j/                  |||	|          y | j1                         }|j3                  ||       |j5                  | j                        }|\  | _        | _        | _        }y )Nr   r   z"diagonals cant be set in 1d arraysr5   rk   gMbP?)r9   r]   NotImplementedErrorr   rS   rP   r   rF   r6   
atleast_1dr[   r   squeezebroadcast_tor   rL   r   r   rE   rV   rG   r   r   _insert_manyr   _setdiagrU   )r`   valuesr   rb   rc   	broadcast	max_indexr   r   r   	n_samplesoffsetsr   r|   re   rf   rt   s                    ri   rD  z_cs_matrix._setdiag  s   

?99>%&JKKzz1[[A%	q5AqM	Aq#f+6			1"i!m4<<3E3EFA		)4<<+=+=>A 1q5M	1q5#f+6			)4<<+=+=>A		!Q]$,,2D2DEAGSV_FMM"**V4::>?EEG99;		 1 11177+A66Q;zz1a&!1zz1a&!1FF	((9DLL,>,>? At{{DLL)!"Aw0!8!q!T[[$,,	 !W.W!"DIIg1 88dhhj 488e#33'(wDIIgdm$5D$A$AaAdG, **,CLL#++DJJ7F6<3DKty!rv   c                    | j                  | j                        \  }}d }t        j                  t        j                  || j
                  j                              j                         }t        j                  t        j                  || j
                  j                              j                         } |||        |||       ||||fS )Nc                     | j                         }||k\  rt        d| d| d      | j                         }|| k  rt        d| d| d      y )Nzindex (z) out of range (>= r   z) out of range (< -)rO   
IndexErrorr   )rF   boundr}   s      ri   check_boundsz1_cs_matrix._prepare_indices.<locals>.check_bounds<  sc    ++-Ce| 73%/B5'!KLL++-CeV| 73%/B5'!KLL rv   r5   )rL   rM   rP   r@  r[   rF   r6   r   )r`   r   r   rb   rc   rN  s         ri   _prepare_indicesz_cs_matrix._prepare_indices9  s    zz$++,1	M MM"**Qdll.@.@ABHHJMM"**Qdll.@.@ABHHJQQ!Qzrv   c           
         | j                  ||      \  }}}}t        j                  t        j                  || j                              j                         }|j                  }t        j                  || j                  j                        }t        ||| j                  | j                  ||||      }|dk(  r6| j                          t        ||| j                  | j                  ||||       d|vr|| j                  |<   yt        d| j                  j                   dt         d       |dkD  }	||	   | j                  ||	   <   |	 }	||	   }||d	k  xx   |z  cc<   ||	   }||d	k  xx   |z  cc<   | j#                  ||||	          y)
zSets value at each (i, j) to x

        Here (i,j) index major and minor respectively, and must not contain
        duplicate entries.
        r5   r   rk   Nz%Changing the sparsity structure of a z. is expensive. lil and dok are more efficient.r:   r   r   )rO  rP   r@  r[   r6   r   r   r   rF   r   rE   rV   rG   r   rY   rZ   r
   rC  )
r`   r   r   r   rb   rc   rH  rI  r   r|   s
             ri   r1  z_cs_matrix._set_manyJ  sw    **1a0
1aMM"**Qdjj9:@@BFF	((9DLL,>,>? At{{DLL)!"Aw0!8!q!T[[$,,	 !W. W!"DIIg 89P9P8Q R? ?(Q8 R<D'(wDIIgdm$5D$Aa!eHMH$Aa!eHMHaAdG,rv   c           
         | j                  ||      \  }}}}t        |      }t        j                  || j                  j
                        }t        ||| j                  | j                  ||||      }|dk(  r6| j                          t        ||| j                  | j                  ||||       d| j                  ||dkD     <   y)zSets value at each (i, j) to zero, preserving sparsity structure.

        Here (i,j) index major and minor respectively.
        r5   r   r   rk   N)
rO  rS   rP   r   rF   r6   r   rE   rV   rG   )r`   r   r   rb   rc   rH  rI  r   s           ri   r8  z_cs_matrix._zero_manyq  s    
 **1a0
1aF	((9DLL,>,>? At{{DLL)!"Aw0!8!q!T[[$,,	 !W. ,-		''B,'(rv   c           	         t        j                  |d      }|j                  |d      }|j                  |d      }|j                  |d      }| j                  }| j	                  | j
                  | j                  f| j                  d   |j                  z         }t        j                  | j                  |      | _        t        j                  | j
                  |      | _        t        j                  ||      }t        j                  ||      }g }g }t        j                  |d	      \  }	}
t        j                  |
t        |            }
t        j                  |
      }d
}t        t        |	|
|
dd             D ]  \  }\  }}}| j                  |   }| j                  |   }|j                  | j
                  ||        |j                  | j                  ||        t        j                  ||| ddd   d	      \  }}t        |      ||z
  k(  r)|j                  |||        |j                  |||        nH|j                  ||| ddd   |          |j                  ||| ddd   |          t        |      ||<   |} | j                     }|j                  | j
                  |d        |j                  | j                  |d        t        j                   |      | _        t        j                   |      | _        t        j"                  | j                  j$                  |      } |d
      |d
<   t        j                  | j                        }||	xx   |z  cc<   ||dd t        j&                  ||      | _        |rd| _        | j)                          | j+                  d       y)a:  Inserts new nonzero at each (i, j) with value x

        Here (i,j) index major and minor respectively.
        i, j and x must be non-empty, 1d arrays.
        Inserts each major group (e.g. all entries per row) at a time.
        Maintains has_sorted_indices property.
        Modifies i, j, x in place.
        	mergesort)r   clip)moderk   r2   r5   T)return_indexr   r   Nr  Fr@   )rP   r%  takehas_sorted_indicesrN   rF   rE   r   r[   uniqueappendrS   rr   	enumerateziprG   concatenater   r9   r  sort_indicesr_   )r`   r   r   r   r   do_sortrd   indices_parts
data_partsui	ui_indptrnew_nnzsprevr<  iijsjer  r  uj	uj_indptrnnzsindptr_diffs                          ri   rC  z_cs_matrix._insert_many  s<    

1;/FF5vF&FF5vF&FF5vF&)) ))4<<*E,0KKOaff,D * G	jjI>zz$,,i@JJq	*JJq	* 
		!$7IIIiQ0	779%(RIabM)JK 	OA|BKK%E;;r?D  eD!9:diid34 IIa2httn4HMB	2w"r'!$$Qr"X.!!!Br(+$$Qr"Xdd^I%>?!!!Br(4R4.";<!"gD#	( BT\\%&12$))EF+, ~~m4NN:.	xx));A,Qggdkk*B8#QRii$/&+D#U+rv   c                 $   | j                   dk(  rE| j                         }| j                  |j                  |j                  ff|j
                  |      S | j                  | j
                        \  }}| j                  }t        j                  t        |      | j                  j                        }t        || j                  |       | j                  ||f      }| j                  | j                  |f| j
                  || j                        S )Nr   r?   r5   r<   )r]   r   rT   rG   rF   r9   rL   rP   r   rS   r6   r   rE   )r`   r=   r   	major_dim	minor_dimminor_indicesmajor_indicesr   s           ri   r   z_cs_matrix.tocoo  s    99>**,C&&3;;.'A399SW&XX#zz$**5	9]!34<<;M;MN)T[[-8]M:;""YY$djj # 
 	
rv   c                    ||| j                  d      d   }| j                  ||      }|j                  j                  s!|j                  j                  st        d      |j                  j                  r| j                         }|}n| j                         }|j                  }|j                  |j                        \  }}t        |||j                  |j                  |j                  |       |S )Ncfr   z&Output array must be C or F contiguous)rL   _process_toarray_argsr   r   f_contiguousrX   r   r   r   rM   r   rE   rF   rG   )r`   r   r   r   r   rb   rc   s          ri   r   z_cs_matrix.toarray  s    ;5=JJt$Q'E((4		&&#))*@*@EFF99!!

AA

AAwwq~~&1Aq!((AIIqvvq9
rv   c                     | j                  | j                        \  }}t        ||| j                  | j                  | j
                         | j                          y)z\Remove zero entries from the array/matrix

        This is an *in place* operation.
        N)rL   rM   r   rE   rF   rG   r   r`   rb   rc   s      ri   r   z_cs_matrix.eliminate_zeros  sA    
 zz$++,1Aq$++t||TYYG

rv   returnc                     t        | dd      sd| _        | j                  S t        | d      sGt        | j                        dz
  }t        t        || j                  | j                              | _        | j                  S )aZ  Whether the array/matrix has sorted indices and no duplicates

        Returns
            - True: if the above applies
            - False: otherwise

        has_canonical_format implies has_sorted_indices, so if the latter flag
        is False, so will the former be; if the former is found True, the
        latter flag is also set.
        _has_sorted_indicesTF_has_canonical_formatr   )	r   r{  r   rS   rE   boolr   rF   has_canonical_formatr`   rb   s     ri   r}  z_cs_matrix.has_canonical_format  sv     t2D9).D& ))) 67DKK 1$A(,(DKKF)D% )))rv   r  c                 8    t        |      | _        |rd| _        y y )NT)r|  r{  rX  r`   r  s     ri   r}  z_cs_matrix.has_canonical_format  s    %)#Y"&*D# rv   c                    | j                   ry| j                          | j                  | j                        \  }}t	        ||| j
                  | j                  | j                         | j                          d| _         y)zfEliminate duplicate entries by adding them together

        This is an *in place* operation.
        NT)	r}  r^  rL   rM   r   rE   rF   rG   r   rw  s      ri   rV   z_cs_matrix.sum_duplicates  sa    
 $$zz$++,11adllDIIF

$(!rv   c                     t        | d      sGt        | j                        dz
  }t        t	        || j                  | j
                              | _        | j                  S )zWhether the indices are sorted

        Returns
            - True: if the indices of the array/matrix are in sorted order
            - False: otherwise
        rz  r   )r   rS   rE   r|  r   rF   rz  r~  s     ri   rX  z_cs_matrix.has_sorted_indices-  sQ     t23DKK 1$A'+&q$++t||D(D$ '''rv   c                 $    t        |      | _        y r  )r|  rz  r  s     ri   rX  z_cs_matrix.has_sorted_indices=  s    #'9 rv   c                 F    | j                         }|j                          |S )z?Return a copy of this array/matrix with sorted indices
        )r=   r^  )r`   As     ri   sorted_indicesz_cs_matrix.sorted_indicesB  s     IIK	rv   c                     | j                   sLt        | j                        dz
  }t        || j                  | j                  | j
                         d| _         yy)z9Sort the indices of this array/matrix *in place*
        r   TN)rX  rS   rE   r   rF   rG   r~  s     ri   r^  z_cs_matrix.sort_indicesM  sG     &&DKK 1$AQT\\499E&*D# 'rv   c                    | j                  | j                        d   }t        | j                        |dz   k7  rt	        d      t        | j
                        | j                  k  rt	        d      t        | j                        | j                  k  rt	        d      t        | j
                  d| j                         | _        t        | j                  d| j                         | _        y)z8Remove empty space after all non-zero elements.
        r   r   z index pointer has invalid lengthz)indices array has fewer than nnz elementsz&data array has fewer than nnz elementsN)	rL   rM   rS   rE   rX   rF   r   rG   r   )r`   rn  s     ri   r   z_cs_matrix.pruneU  s     JJt001!4	t{{y1},?@@t||txx'HIItyy>DHH$EFF#DLL$(($;< 9DHH!56	rv   c                    t        || j                        }t        | d      rw| j                  \  }}t	        |d   |      \  }}t	        |d   |      \  }}|s|rt        d| j                   d|       | j                  d   |z  | j                  d   |z  }	}nG| j                  t        |      dkD  r|nd|d   f      \  }}| j                  | j                        \  }}	||k  rZ| j                  d | j                  |    | _
        | j                  d | j                  |    | _        | j                  d |dz    | _        n[||kD  rVt        j                  | j                  |dz         | _        | j                  |dz   d  j                  | j                  |          ||	k  r| j                  |k  }
t        j                   |
      s| j                  |
   | _
        | j                  |
   | _        | j#                  t        j$                  |
      \  }}| j                  j                  d       || j                  dd  |<   t        j&                  | j                  | j                         || _        y )Nr0   r   r   r   zshape must be divisible into z blocks. Got r  )r(   rK   r   r   divmodrX   r9   rL   rS   rM   rF   rE   rG   rP   resizefillry   r   r   r  rH   )r`   r9   bmbnnew_Mrmnew_Nrnrb   rc   r|   r   r  s                ri   r  z_cs_matrix.resized  s   EDNN;4%^^FBuQx,IE2uQx,IE2R #@@P#0"9 : :::a=B&

1(;qA::s5z!|e!U1XOLE5::d//0DAq19<<(;U);<DL		"54;;u#56DI++juqy1DKQY))DKK;DKKKA$$T[[^419<<%'D66$<#||D1 IIdO	#'#5#5bffd#C S  #/2AB,		$++4;;7rv   c                 :   |r[| j                  || j                  j                         | j                  j                         f| j                  |j
                        S | j                  || j                  | j                  f| j                  |j
                        S )zReturns a matrix with the same sparsity structure as self,
        but with different data.  By default the structure arrays
        (i.e. .indptr and .indices) are copied.
        r8   )rY   rF   r=   rE   r9   r6   )r`   rG   r=   s      ri   r   z_cs_matrix._with_data  s    
 >>4):):)<#';;#3#3#5#7(,

(,

 " 4 4
 >>4t{{"C(,

$** " F Frv   c                 .   | j                  |      }t        t        d|z   dz         }| j                  |j                  z   }| j	                  | j
                  | j                  |j
                  |j                  f|      }t        j                  | j
                  j                  |      }t        j                  ||      }g d}||v r&t        j                  |t        j                        }	n5t        j                  |t        | j                  |j                              }	| j                  | j                        \  }
} ||
|t        j                  | j
                  |      t        j                  | j                  |      | j                   t        j                  |j
                  |      t        j                  |j                  |      |j                   |||	       | j                  |	||f| j                        }|j#                          |S )z5apply the binary operation fn to two sparse matrices.r   r2   r5   )_ne__lt__gt__le__ge_r   )rY   r   r   r   rN   rE   rF   rP   r   r9   bool_r    r6   rL   rM   r[   rG   r   )r`   r   r   r   maxnnzrd   rE   rF   bool_opsrG   rb   rc   r  s                ri   r   z_cs_matrix._binopt  s   u% \52:#56EII%))4;;%*\\5==+B+1 * 3	 $++++9=((63;>88F"((3D88F&U[[*IJDzz$++,1
1a::dkk3::dll)499::ell)4::emm95::7D	" NND'62$**NE		rv   c                 b   |j                   | j                   k7  r%t        d| j                    d|j                          | j                  |d      }t        j                  |j
                  t        j                        rt        j                  | j                   | j
                        }|j                  t        j                         |j                         }| j                  dk(  r|d   f}d||<   |j                         }|j                  ||j                  <   | j                  |      S |}|S )z?
        Divide this matrix by a second sparse matrix.
        r   r   _eldiv_r5   r   rk   r   )r9   rX   r   rP   
issubdtyper6   inexactr   r  nannonzeror]   r   rG   r   r   )r`   r   r;  r   r   s        ri   _divide_sparsez_cs_matrix._divide_sparse  s     ;;$**$3DJJ<uU[[MRSSLL	*=="**-
 ((4::TZZ8CHHRVV]]_FyyA~ *CK	AFFCM??3'' CJrv   c                    | j                   |k(  r|r| j                         S | S t        || j                        }t	        | j                   |      |k7  rt        d      t        | j                         dk(  rt        |      dk(  r| j                          | j                  dk(  r| j                  || j                  d      S |d   }t        j                  || j                  d         }t        j                  d|      }t        j                  d|g      }| j!                  |||f|d      S | j"                  }t        |      dk7  rt        |      }t        d	| d
      | j                  dk(  r| j                  || j                  d      S | j                          | j%                  |      \  }	}| j%                  |      \  }
}t'        d |D              rst        j                  |	|z  | j                  d         }t        j(                  t        j                  |      |	      }t        j                  dt        |      dz   |      }n|
dk(  r|||k(  rwt        j(                  | j                  |	      }t        j(                  | j*                  |	      }t        j                  dt        |      dz   t        | j                              }nu|dk(  rp|
|	k(  rkt        j,                  | j                  |      }t        j(                  t        j                  |      t        | j                              }| j.                  |z  }| j                  f|d      S )Nr0   zcannot be broadcastr   r   F)r6   r=   r   r7   z0CSR/CSC broadcast_to cannot have shape >2D. Got Dc              3   &   K   | ]	  }|d k(    ywr  r   ).0r   s     ri   	<genexpr>z+_cs_matrix._broadcast_to.<locals>.<genexpr>  s     )!qAv)s   )r9   r=   r(   rK   r*   rX   rS   rV   r   rY   r6   rP   fullrG   r   rW   _csr_containerrM   rL   ry   r   rF   r   rE   )r`   r9   r=   rc   rG   rF   rE   	old_shaper]   rb   r   r   s               ri   _broadcast_toz_cs_matrix._broadcast_to  s   ::"&499;0D0ET^^=DJJ.%7233tzz?aCJ!O!xx1}~~e4::E~JJaA771diil+Dii!nGXXq!f%F&&gv'>eRW&XX %%	u:?u:DOPTvUVWXX88q=>>%tzz>FFzz% 1I&B)y))771q5$))A,/DggbiilA.GYYq#d)a-3F1Wq77499a(DggdllA.GYYq#d)a-TYY@F1Wq99TYY*DggbiilC		N;G[[1_F~~tWf5U~OOrv   )NNFr  )T)r   )NNNF)NN)6rZ   
__module____qualname____doc__rB   ru   r   rx   r_   r   r   r   r   r   r   r   r   r   r   r   r  r	  r  r  r  r  r  r  r  r3  r6  r=  rD  rO  r1  r8  rC  r   r   r   propertyr|  r}  setterrV   rX  r  r^  r   r  r   r   r  r  r   rv   ri   r,   r,      s   V,T V,p3$ oo--GO34 $1199M7-F	3-.vx
7 ;z ''//HF, ++%%CK"4*<8H
;@&;P%;NE <*   2B=H"%-N-(F,X
 MM))EM" oo--GO *d * *,   + + !+
) (D ( ( -d - -+7!F ^^++FNF!F80Prv   r,   c                     ddl m}m} |r|n|}t        |       }t	        |      }t        j                  |dz   |      }|dd } || ||f||f      S )zbuild diagonal csc_array/csr_array => self._csr_container

    Parameter `data` should be a raveled numpy array holding the
    values on the diagonal of the resulting sparse matrix.
    r   )	csr_array
csr_matrixr2   r5   Nrk   r   )_csrr  r  rS   r)   rP   r   )rG   r   r  r  rc   rd   rE   rF   s           ri   r   r     sZ     ,%	:ID	Aq)IYYq1uI.FSbkGdGV,QF;;rv   c                 2   | d|}}||fS t        | t              r5| j                  |      \  }}}|dk7  rt        d      t	        ||      }||fS t        |       r3| dk  r| |z  } | | dz   }}|dk  s||kD  rt        d| d| d|       ||fS t        d      )Nr   r   z$slicing with step != 1 not supportedzindex out of bounds: 0 <= z < z <= zexpected slice or scalar)rI   r  rF   rX   r   r%   rL  	TypeError)slnumr+  r,  strides        ri   r*  r*    s    	zCB r6M 
B	CBQ;CDDR[ r6M 
26#IBR!VB6R#X9"SDNOO r6M 233rv   r  )6r  __all__warningsr   rz   numpyrP   scipy._lib._utilr   r   _baser   r   r	   r
   _datar   r    r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   _indexr   _sputilsr    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r,   r   r*  r   rv   ri   <module>r     sz    D
    9 F F . : : : : : V V V V
rP}j rPj'<"rv   