
    (ph                        S r / rSSKJr  SSKrSSKrSSKrSSKJ	r	J
r
  SSKJrJrJrJr  SSKJrJr  SSKJr  SS	KJrJrJrJrJrJrJrJr  SS
KJr  SSKJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(J)r)J*r*J+r+J,r,J-r-   " S S\\\5      r.SS jr/S r0g)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)
IndexMixin)upcastupcast_char	to_nativeisdenseisshapegetdtypeisscalarlike	isintlikedowncast_intp_indexget_sum_dtypecheck_shapeget_index_dtypebroadcast_shapesis_pydata_spmatrixc                   
   \ rS rSrSrSBSS.S jjrSCS jr\R                  R                  \l        SCS jr\R                  R                  \l        SDS jr	S	 r
S
 rS rS rS rS rS rS rS rS rS rS rS rS rS rSES jr\R2                  R                  \l        S rS r\R6                  R                  \l        S r\R8                  R                  \l        SFS jr\R:                  R                  \l        SCS jrS rS r S  r!S! r"S" r#SGS# jr$S$ r%SGS% jr&SBS& jr'S' r(S( r)S) r*S* r+S+ r,S, r-S- r.S. r/SDS/ jr0\R`                  R                  \0l        SHS0 jr1\Rb                  R                  \1l        S1 r2\3S2\44S3 j5       r5\5Rl                  S4\44S5 j5       r5S6 r7\3S2\44S7 j5       r8\8Rl                  S4\44S8 j5       r8S9 r9S: r:S; r;S< r<\Rx                  R                  \<l        SDS= jr=S> r>S? r?SGS@ jr@SArAg)I
_cs_matrix   zQ
base array/matrix class for compressed row- and column-oriented arrays/matrices
Nmaxprintc                l	   [         R                  " XUS9  [        U5      (       a  UR                  U R                  :X  a  U(       a  UR	                  5       nOUR                  U R                  5      nUR                  UR                  UR                  UR                  4u  U l        U l        U l        U l	        GO[        U[        5      (       Ga  [        XR                  S9(       a  [        XR                  S9U l	        U R                  U R                   5      u  pgU R#                  [%        U R&                  5      S9n[(        R*                  " S[-        U[.        S95      U l        [(        R*                  " SU5      U l        [(        R*                  " US-   US9U l        GO[1        U5      S:X  aX  U R3                  XUS	9n	U	R5                  U R                  5      n
U
u  U l        U l        U l        U l	        U R7                  5         GO[1        U5      S
:X  a  Uu  pnS nUb  SU;  a  [%        U5      nU R#                  X4USS9nU(       d  [8        n[(        R:                  " XUS9U l        [(        R:                  " XUS9U l        [(        R:                  " XUS9U l        O[=        SU R>                  R@                   SU 35      e [(        RB                  " U5      n[        U [F        5      (       a9  URH                  S:w  a)  U R                  S:X  a  [=        SURH                   S35      eURH                  S:  a  [=        SURH                   S35      eU R3                  XS9n	U	R5                  U R                  5      n
U
u  U l        U l        U l        U l	        Ub  [        X R                  S9U l	        OlU R&                  c_   [1        U R                  5      S-
  nU R                  R%                  5       S-   n[        U R                  Xg45      U R                  S9U l	        Ub*  [-        U5      nU R                  RK                  USS9U l        U RM                  SS9  g ! [D         a+  n[=        SU R>                  R@                   SU 35      UeS nAff = f! [D         a  n[=        S5      UeS nAff = f)Nr(   allow_ndmaxvalr   )defaultr   dtype   shaper1      T)r.   check_contentscopyr1   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r8   
full_check)'r   __init__r   formatr8   asformatindptrindicesdata_shape
isinstancetupler   	_allow_ndr!   _swap_shape_as_2d_get_index_dtypemaxr4   npzerosr   floatlen_coo_container_coo_to_compressedsum_duplicatesr   array
ValueError	__class____name__asarray	Exceptionr	   ndimastypecheck_format)selfarg1r4   r1   r8   r)   MN	idx_dtypecooarraysrB   rA   r@   r.   enewdtypes                    K/var/www/html/venv/lib/python3.13/site-packages/scipy/sparse/_compressed.pyr=   _cs_matrix.__init__   s   d8<D>>{{dkk)dyy{}}T[[1T\\499dkkA=DKty$+ e$$tnn5 *$Hzz$"3"34 !11TZZ1I	HHQ(FG	!xx95 hhq1uI>t9>--du-MC 33DJJ?FHNEDKty$+'')Y!^.2+TF "F(Qe^!$U $ 5 5w6G7=?C !6 !EI  -#%88Gi#PDL"$((6I"NDK " 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$+ %ennEDKZZM$q(LL$$&* &djj!&84>>RDKH		(((>DIU+;  F =1H1H0I J77;f"> ?DEFF(  M !DE1LMs0   	Q  5R  
R*&RR
R3"R..R3c                    Uc  [        U R                  S   5      $ U R                  S:X  a)  US;   a  [        U R                  S   5      $ [        S5      eUS:  a  US-  nU R	                  USU-
  45      u  pU R	                  U R
                  5      u  p#US:X  a(  [        R                  " [        U R                  5      US9$ US:X  a   [        R                  " U R                  5      $ [        S5      e)Nr   r   rg   axis out of boundsr   r2   	minlength)intr@   rX   rS   rG   r4   rK   bincountr   rA   diff)r[   axis_r^   s       rd   _getnnz_cs_matrix._getnnzu   s    <t{{2''YY!^w4;;r?++122ax	jj$D!12GD::djj)DAqy{{#6t||#DPQRRwwt{{++122    c                    U R                  5         Uc   [        R                  " U R                  5      $ U R                  S:X  a1  US;  a  [        S5      e[        R                  " U R                  5      $ US:  a  US-  nU R                  USU-
  45      u  pUS:X  az  U R                  U R                  5      u  p#U R                  S:g  nUR                  5       (       a  U R                  OU R                  U   n[        R                  " [        U5      US9$ US:X  a  U R                  R                  5       (       a   [        R                  " U R                  5      $ [        R                  " U R                  5      n[        R                   " U VVs/ s H'  u  px[        R                  " U R                  Xx 5      PM)     snn5      $ [        S5      es  snnf )Nr   rh   ri   r   r2   rj   )rQ   rK   count_nonzerorB   rX   rS   rG   r4   allrA   rm   r   rn   r@   	itertoolspairwiserR   )	r[   ro   rp   r^   maskidxpairsijs	            rd   ru   _cs_matrix.count_nonzero   sd   <##DII..99>7" !566##DII..!8AID**dAH-.19::djj)DA99>D"&((**$,,$,,t2DC;;2371EEQYyy}}wwt{{++&&t{{3E88%P%$!R--diin=%PQQ122 Qs   .G
c                 J   U R                   R                  R                  S:w  a,  [        SU R                   R                  R                   S3SS9  U R
                  R                  R                  S:w  a,  [        SU R
                  R                  R                   S3SS9  U R                  R                  U R
                  R                  U R                   R                  4 H  nUS:w  d  M  [        S5      e   U R                  U R                  5      u  p4[        U R                   5      US-   :w  a'  [        S	[        U R                   5       S
US-    35      eU R                   S   S:w  a  [        S5      e[        U R
                  5      [        U R                  5      :w  a  [        S5      eU R                   S   [        U R
                  5      :  a  [        S5      eU R                  5         U(       Ga,  U R                  S:  a  U R
                  R                  5       U:  a  [        SU 35      eU R
                  R                  5       S:  a  [        S5      e[         R"                  " U R                   5      R                  5       S:  a  [        S5      eU R%                  U R                   U R
                  45      n[         R&                  " U R                   US9U l         [         R&                  " U R
                  US9U l        [)        U R                  5      U l        gg)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 ()r5   
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 sizerg   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 sequencer0   N)r@   r1   kindr   namerA   rB   rX   rS   rG   rH   rN   prunennzrJ   minrK   rn   rI   rV   r   )r[   r<   xr]   r^   r_   s         rd   rZ   _cs_matrix.check_format   sz    ;;!!S(78I8I8N8N7OqQ<<""c)89K9K9P9P8QQRS ))..$,,"3"3T[[5E5EFAAv !JKK G
 zz$++,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 rs   c                     U R                  5         U R                  U" U R                  U5      SS9nUR                  5         U$ )z}Scalar version of self._binopt, for cases in which no new nonzeros
are added. Produces a new sparse array in canonical form.
Tr:   )rQ   
_with_datarB   eliminate_zeros)r[   otheropress       rd   _scalar_binopt_cs_matrix._scalar_binopt   s>     	oobE2o>
rs   c                    [        U5      (       a  [        R                  " U5      (       a(  U R                  U R                  [        R
                  S9$ US:X  ao  [        S[        SS9  U R                  [        R                  " U R                  [        R
                  S95      nU R                  U[        R                  5      nX#-
  $ U R                  U[        R                  5      $ [        U5      (       a  U R                  5       U:H  $ [        U5      (       a  [         $ [#        U5      (       a  [        S[        SS9  U R                  UR                  :w  a  gU R$                  UR$                  :w  a  UR'                  U R$                  5      nU R)                  US5      nU R                  [        R                  " U R                  [        R
                  S95      nX$-
  $ [         $ )	Nr0   r   zOComparing a sparse matrix with 0 using == is inefficient, try using != instead.r5   r   zHComparing sparse matrices using == is inefficient, try using != instead.F_ne_)r   rK   isnanrT   r4   bool_r   r
   onesr   operatorneeqr   todenser$   NotImplementedr   r>   r?   _binopt)r[   r   all_trueinvr   s        rd   __eq___cs_matrix.__eq__   sd   xx~~djj~AAz /0G !#  >>"''$**BHH*MN))%=~%**5(++>>U^^<<>U**&&!!e__  !8QH zzU[[(,t{{3,,uf-C~~bggdjj&IJH>!!!rs   c                 ~   [        U5      (       a  [        R                  " U5      (       aM  [        S[        SS9  U R                  [        R                  " U R                  [        R                  S95      nU$ US:w  ao  [        S[        SS9  U R                  [        R                  " U R                  5      [        R                  S9nU R                  U[        R                  5      nX#-
  $ U R                  U[        R                  5      $ [        U5      (       a  U R                  5       U:g  $ [        U5      (       a  [         $ [#        U5      (       ab  U R                  UR                  :w  a  gU R$                  UR$                  :w  a  UR'                  U R$                  5      nU R)                  US5      $ [         $ )	Nz:Comparing a sparse matrix with nan using != is inefficientr5   r   r0   r   z^Comparing a sparse matrix with a nonzero scalar using != is inefficient, try using == instead.Tr   )r   rK   r   r   r
   rT   r   r4   r   r   r   r   r   r   r   r$   r   r   r>   r?   r   )r[   r   r   r   s       rd   __ne___cs_matrix.__ne__  sF   xx $%<L>>"''$**BHH*MN! >,<  >>"''$***=RXX>N))%=~%**5(++>>U^^<<>U**&&!!e__zzU[[(,t{{3<<v..!!rs   c                    [        U5      (       a  SU:X  a  US;   a  [        S5      eU" SU5      (       au  [        U[        SS9  [        R
                  " U R                  [        R                  " U5      S9nUR                  U5        U R                  U5      nU R                  XS5      $ U R                  X5      $ [        U5      (       a  U" U R                  5       U5      $ [        U5      (       a  U R                  UR                  :w  a  [        S5      eU R                   UR                   :w  a  UR#                  U R                   5      nUS;  a  U R                  X5      $ [        S	[        SS9  U R                  [        R$                  " U R                  [        R&                  S95      nU R                  XS
:X  a  SOS5      nXg-
  $ [(        $ )Nr   )_le__ge_z >= and <= don't work with 0.r5   r   r0   inconsistent shapes)r   r   zUComparing sparse matrices using >= and <= is inefficient, using <, >, or !=, instead.r   _gt__lt_)r   NotImplementedErrorr   r
   rK   emptyr4   result_typefillrT   r   r   r   r   r   rS   r>   r?   r   r   r   )r[   r   r   op_namebad_scalar_msg	other_arrr   r   s           rd   _inequality_cs_matrix._inequality7  sl   Ezg)99)*IJJAu^%<KHHTZZr~~e7LM	u% NN95	||I77**555U^^dllne,,e__zzU[[( !677,t{{3..||E33 /(Q8 ~~bggdjj&IJH,,u60AfvNC>!!!rs   c                 F    U R                  U[        R                  SS5      $ )Nr   zgComparing a sparse matrix with a scalar greater than zero using < is inefficient, try using >= instead.)r   r   ltr[   r   s     rd   __lt___cs_matrix.__lt__Z  $    x{{F!89 	9rs   c                 F    U R                  U[        R                  SS5      $ )Nr   zdComparing a sparse matrix with a scalar less than zero using > is inefficient, try using <= instead.)r   r   gtr   s     rd   __gt___cs_matrix.__gt__`  r   rs   c                 F    U R                  U[        R                  SS5      $ )Nr   zgComparing a sparse matrix with a scalar greater than zero using <= is inefficient, try using > instead.)r   r   ler   s     rd   __le___cs_matrix.__le__f  $    x{{F!78 	8rs   c                 F    U R                  U[        R                  SS5      $ )Nr   zdComparing a sparse matrix with a scalar less than zero using >= is inefficient, try using < instead.)r   r   ger   s     rd   __ge___cs_matrix.__ge__l  r   rs   c                 D   UR                   U R                   :w  a&  [        SU R                    SUR                    S35      e[        U R                  R                  UR                  R                  5      nU R                  S5      S   n[        R                  " XUSS9nUR                  R                  (       a  UOUR                  nU R                  U R                  5      u  pg[        XgU R                  U R                  U R                  U5        U R!                  USS	9$ )
NzIncompatible shapes (z and r   CFr   T)r1   orderr8   Fr:   )r4   rS   r   r1   charrG   rK   rR   flagsc_contiguousTrH   r   r@   rA   rB   
_container)r[   r   r1   r   resultyr]   r^   s           rd   
_add_dense_cs_matrix._add_densev  s    ;;$**$4TZZLekk]RSTUUDJJOOU[[-=-=>

4 #%EEll//FVXXzz$++,A$++t||TYYBvE22rs   c                 &    U R                  US5      $ )N_plus_r   r   s     rd   _add_sparse_cs_matrix._add_sparse  s    ||E8,,rs   c                 &    U R                  US5      $ )N_minus_r   r   s     rd   _sub_sparse_cs_matrix._sub_sparse  s    ||E9--rs   c                 :   [        U5      (       a  U R                  U5      $ [        U5      (       Ga  U R                  UR                  :X  a#  U R	                  U5      nU R                  US5      $ UR                  S:X  aT  U R                  UR                  5       S   5      nU R                  S:X  a   UR                  SU R                  S   45      $ U$ UR                  S:X  a"  U R                  UR                  5       S   5      $ U R                  S;   a)  UR                  U R                  R                  5       5      $ U R                  u  p4UR                  u  pVUS:X  a4  US:X  a.  UR                  U R                  X45      R                  5       5      $ US:X  a4  US:X  a.  U R                  UR                  XV5      R                  5       5      $ [        U [        5      nUS:X  ac  XF:X  a^  [!        UR                  5       R#                  5       U5      nU R                  U5      nU R                  S:X  a  U$ UR                  SU45      $ US:X  a>  XF:X  a9  [!        U R                  5       R#                  5       U5      n	UR                  U	5      $ US:X  a>  X5:X  a9  [!        UR                  5       R#                  5       U5      nUR                  U 5      $ US:X  a>  X5:X  a9  [!        U R                  5       R#                  5       U5      n
U
R                  U5      $ [%        S	5      e[&        R(                  " U5      nUR                  S:  a%  [&        R*                  " U R                  5       U5      $ UR,                  S:X  aq  UR.                  [&        R0                  :X  a  [2        $ [5        U R                  UR                  5      nU R                  UR6                  S   5      R                  U5      $ U R                  S;   a^  [5        U R                  UR                  5      n[&        R*                  " U R                  R                  5       U5      R                  U5      $ U R9                  5       nU R                  UR                  :X  aa  [&        R*                  " UR                  XR:                     5      nUR=                  [&        R>                  5      R#                  5       Ul	        U$ [&        R@                  " U5      nU R                  S   S:X  d  U R                  S:X  Ga  UR                  S   S:X  a"  [&        R*                  " UR                  U5      nO^UR                  S   U R                  S
   :X  a3  [&        R*                  " UR                  USS2URB                  4   5      nO[%        S	5      eU RE                  URB                  URF                  UR                  S   -  S9n[&        RH                  " [&        RJ                  " UR                  S   US9URF                  5      n[&        RL                  " URB                  RO                  USS9UR                  S   5      nU RQ                  UR=                  [&        R>                  5      R#                  5       UU44UR                  S   U R                  S
   4SS9$ U R                  S   S:X  Ga  UR                  S   S:X  a)  [&        R*                  " UR                  SS2S4   U5      nO`UR                  S   U R                  S   :X  a5  [&        R*                  " UR                  SS2S4   XRR                     5      nO[%        S	5      eU RE                  URR                  URF                  UR                  S   -  S9n[&        RH                  " URR                  RO                  USS9UR                  S   5      n[&        RL                  " [&        RJ                  " UR                  S   US9URF                  5      nU RQ                  UR=                  [&        R>                  5      R#                  5       UU44U R                  S   UR                  S   4SS9$ UR                  S   S:X  aa  U R                  S   UR                  S   :X  aA  [&        R*                  " UR                  USS2URB                  4   R#                  5       5      nOzUR                  S   S:X  a\  U R                  S   UR                  S   :X  a<  [&        R*                  " UR                  XRR                     R#                  5       5      nO[%        S	5      eUR=                  [&        R>                  5      R#                  5       Ul	        U$ )z=Point-wise multiplication by array/matrix, vector, or scalar._elmul_r   r   )r   r   r   r   r   )r   r   r2   r   rg   Nr-   r0   Fr:   r4   r8   )*r   _mul_scalarr   r4   rT   r   toarrayrX   reshaperB   sumrH   _matmul_sparsetocscrD   r	   _make_diagonal_csrravelrS   rK   
asanyarraymultiplysizer1   object_r   r#   flattocoocoordsviewndarray
atleast_2dcolrI   r   repeatarangetilerY   rO   row)r[   r   r   sMsNoMoNis_array	new_otherr8   new_selfbshaperetrB   other2dr_   r   r   s                     rd   r   _cs_matrix.multiply  sW    ##E**E??zzU[[(u-||E955{{f$))%--/$*?@99>!>>1djjm*<=={{d"''(:;;zz^+((99 &&FB''FBQw27++DLL,@,F,F,HIIQw27**5==+@+F+F+HII!$0HQw28.u}}/D/D/FQ	,,Y7!%avLV^^QG5LLQw28)$,,.*>*>*@(K++D11 Qw28.u}}/D/D/FQ	 //55Qw28-dlln.B.B.DhO..u55233 e$::>;;t||~u55::?{{bjj(%%%djj%++>F##EJJqM2::6BB::'%djj%++>F;;tyy}}6>>vFFjjl::$;;sxxzz):;Dyy,224CHJ --&::a=Aa}}Q1${{388W5q!TZZ^3{{388WQZ-@A !677--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#4ggg6FG !677--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23399RZZ(..0
rs   c           	      h   U R                   u  p#[        R                  " U[        U R                  R
                  UR                  R
                  5      S9n[        [        U R                  S-   5      nU" X#U R                  U R                  U R                  X5        U R                  S:X  a  US   $ U$ )Nr0   _matvecr   r   )rH   rK   rL   r   r1   r   getattrr   r>   r@   rA   rB   rX   )r[   r   r]   r^   r   fns         rd   _matmul_vector_cs_matrix._matmul_vector  s       !;tzz@P@P#QR \4;;#:;
1dllDIIuE IINvay66rs   c                    U R                   u  p#UR                  S   n[        R                  " X$4[	        U R
                  R                  UR
                  R                  5      S9n[        [        U R                  S-   5      nU" X#X@R                  U R                  U R                  UR                  5       UR                  5       5        U R                  S:X  a  UR                  U45      $ U$ )Nrg   r0   _matvecsr   )rH   r4   rK   rL   r   r1   r   r  r   r>   r@   rA   rB   r   rX   r   )r[   r   r]   r^   n_vecsr   r  s          rd   _matmul_multivector_cs_matrix._matmul_multivector  s      R1+ +DJJOOU[[=M=M NP \4;;#;<
1dllDII;;=&,,.	* 99>>>6),,rs   c                    U R                   u  p#UR                  nUS:X  a*  UR                  SUR                  S   45      R                  nUR                  S:X  a  UR
                  OUR                  S   S4u  pVSnU R                  S:X  a  Xr4-  nUS:X  a  Xv4-  nU R                  S:X  a  UOSUS:X  a  UOS4nU R                  X&45      S   n	U R                  U5      nU R                  U R                  U R                  UR                  UR                  45      n
[        [        U R                  S-   5      nU" X&[        R                  " U R                  U
S9[        R                  " U R                  U
S9[        R                  " UR                  U
S9[        R                  " UR                  U
S95      nUS:X  ag  US:X  a3  [        R                   " S[#        U R$                  UR$                  5      S9$ U R                  U[#        U R$                  UR$                  5      S9$ U R                  U R                  U R                  UR                  UR                  4US9n
[        R&                  " U	S-   U
S9n[        R&                  " XS9n[        R&                  " U[#        U R$                  UR$                  5      S9n[        [        U R                  S-   5      nU" X&[        R                  " U R                  U
S9[        R                  " U R                  U
S9U R(                  [        R                  " UR                  U
S9[        R                  " UR                  U
S9UR(                  XU5        US:X  a  [        R                   " US   5      $ U R                  XU4US	9nX:w  a1  UR                  S
:w  a  UR+                  5       nUR                  U5      nU$ )Nr   r   r2    _matmat_maxnnzr0   r-   _matmatr4   csr)rH   rX   r   r4   r   rC   rG   rT   rI   r@   rA   r  r   r>   rK   rV   rR   r   r1   r   rB   tocsr)r[   r   r]   K1o_ndimK2r^   	new_shape
faux_shape	major_dimr_   r  r   r@   rA   rB   r   s                    rd   r   _cs_matrix._matmul_sparse"  s   !!Q;MM1ekk!n"5688E %

aekk!na5H 	99>IQ;I99>aqv{!J
JJv&q)	u%))4;;%*\\5==+B C	 \4;;1A#ABDKKy9DLL	:ELL	:EMM;	=
 !8Bxx

EKK)HII>>)6$**ekk3R>SS))4;;%*\\5==+B+. * 0	 )a-y9((30xx6$**ekk#BC\4;;#:;
1DKKy9::dll)499::ell)4::emm95::D	" ?88DG$$nndV4JnG"zzU"iik++i(C
rs   c           
         U R                   u  p#X* ::  d  X:  a)  [        R                  " SU R                  R                  S9$ [        [        U R                  S-   5      n[        R                  " [        U[        US5      -   U[        US5      -
  5      [        U R                  5      S9nU" XR                   S   U R                   S   U R                  U R                  U R                  U5        U$ )Nr   r0   	_diagonalr   )r4   rK   r   rB   r1   r  r   r>   r   rJ   r   r@   rA   )r[   krowscolsr  r   s         rd   diagonal_cs_matrix.diagonal^  s    ZZ
:88ATYY__55\4;;#<=HHSAq	)4#a)+;<!$**-/
1jjmTZZ]DKK99a	rs   c                    [        U5      (       Ga   U" U5      (       a  [        S[        SS9  [        R                  " U R
                  [        R                  " U5      R                  S9nUR                  U5        U R                  U5      nU R                  XS5      $ U R                  5         U" U R                  [        R                  " U5      5      nU R                  X`R                  U R                  4UR                  U R
                  S9nU$ [        U5      (       a  U" U R!                  5       U5      $ [#        U5      (       a  U R                  X5      $ [%        S5      e)NzITaking maximum (minimum) with > 0 (< 0) number results to a dense matrix.r5   r   r0   )r1   r4   zOperands not compatible.)r   r   r
   rK   r   r4   rV   r1   r   rT   r   rQ   rB   rA   r@   r   r   r   rS   )r[   r   npopr   dense_checkr   new_datamats           rd   _maximum_minimum_cs_matrix._maximum_minimumo  s   5!! +,C !# HHTZZrzz%7H7N7NO	u% NN95	||I77##%		2::e+<=nnhdkk%J+3>> % M
U^^..e__<<//788rs   c                 H    U R                  U[        R                  SS 5      $ )N	_maximum_c                 4    [         R                  " U 5      S:  $ Nr   rK   rV   r   s    rd   <lambda>$_cs_matrix.maximum.<locals>.<lambda>      BJJqMA<Mrs   )r'  rK   maximumr   s     rd   r2  _cs_matrix.maximum  %    $$UBJJ%02MO 	Ors   c                 H    U R                  U[        R                  SS 5      $ )N	_minimum_c                 4    [         R                  " U 5      S:  $ r,  r-  r.  s    rd   r/  $_cs_matrix.minimum.<locals>.<lambda>  r1  rs   )r'  rK   minimumr   s     rd   r9  _cs_matrix.minimum  r4  rs   c                    U R                   S:X  a  [        U S5      (       d  XR                  S5      S   ;   a  [        U R                  5      n[
        R                  " [        U R                  5      S-
  US9nU R                  [
        R                  5      u  pgXuU'   U R                  U5      nUS-  S:X  a  UR                  nUR                  SX#S9$ [        R                  " XX#S9$ )	ztSum the array/matrix over the given axis.  If the axis is None, sum
over both rows and columns, returning a scalar.
r2   	blocksize))r   rg   )r   r   r   r0   r  )ro   r1   out)rX   hasattrrG   r    r1   rK   rL   rN   r@   _minor_reduceadd_ascontainerr   r   r   )r[   ro   r1   r>  	res_dtyper   major_indexvalues           rd   r   _cs_matrix.sum  s     IIN74#=#=

#56q99%djj1I((3t{{+a/yAC!%!3!3BFF!;K$##C(Cax1}ee77%799 ;;teEErs   c                     Uc  U R                   n[        R                  " [        R                  " U R                  5      5      nUR                  U[        U R                  U   5      5      nX44$ )aS  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
)rB   rK   flatnonzerorn   r@   reduceatr   )r[   ufuncrB   rD  rE  s        rd   r@  _cs_matrix._minor_reduce  sX     <99DnnRWWT[[%9:t24;;{3KLN!!rs   c                    U R                  U R                  5      u  p4U R                  X45      u  pV[        X4U R                  U R                  U R
                  XUS-   XfS-   5	      u  pxn	U	R                  U R                  S9$ )Nr   r0   )rG   r4   r   r@   rA   rB   r   r1   )
r[   r   r   r]   r^   majorminorr@   rA   rB   s
             rd   _get_intXint_cs_matrix._get_intXint  sp    zz$**%zz3*- 1$++t||TYY19eQY!0 xxdjjx))rs   c                     U R                  X45      u  p4UR                  S;   a   UR                  S;   a  U R                  X4SS9$ U R                  U5      R	                  U5      $ )Nr   NTr:   )rG   step_get_submatrix_major_slice_minor_slicer[   r   r   rM  rN  s        rd   _get_sliceXslice_cs_matrix._get_sliceXslice  s]    zz3*-::"uzzY'>&&u$&??  '44U;;rs   c                 t   U R                   R                  nU R                  U R                  5      u  pEU R                  X45      u  pg[        R
                  " XcS9n[        R
                  " XsS9n[        R                  " UR                  U R                  S9n[        XEU R                  U R                   U R                  UR                  UR                  5       UR                  5       U5	        UR                  S:X  a  U R                  U5      $ U R                  UR                  UR                  5      5      $ )Nr0   r   )rA   r1   rG   r4   rK   rV   r   r   r   r@   rB   r   rX   rB  rT   r   )	r[   r   r   r_   r]   r^   rM  rN  vals	            rd   _get_arrayXarray_cs_matrix._get_arrayXarray  s    LL&&	zz$**%zz3*-

52

52hhuzz4!T\\499**ekkmU[[]C	I::?$$S))~~ckk%++677rs   c                 j    U R                  X45      u  p4U R                  U5      R                  U5      $ N)rG   _major_index_fancy_minor_index_fancyrW  s        rd   _get_columnXarray_cs_matrix._get_columnXarray  s0    zz3*-&&u-@@GGrs   c           
      X   U R                  U R                  U R                  45      n[        R                  " XS9R                  5       nU R                  U R                  5      S   n[        U5      nU R                  S:X  a  U R                  XT45      OU4nUS:X  a  U R                  X`R                  S9$ U R                  US-      U R                  U   -
  R                  U5      n[        R                  " US-   US9n[        R                  " XxSS S9  US   n	[        R                  " XS9n
[        R                  " XR                  S9n[!        UUU R                  R                  USS	9U R                  R                  USS	9U R"                  U
U5        U R                  XU4USS
9$ )zBIndex along the major axis where idx is an array of ints.
        r0   r   r2   r   Nr>  rg   Fr:   r   )rI   r@   rA   rK   rV   r   rG   rH   rN   rX   rT   r1   rY   rL   cumsumr   r   rB   )r[   rz   r_   rA   r^   r]   r  row_nnz
res_indptrr   res_indicesres_datas               rd   r`  _cs_matrix._major_index_fancy  s{    ))4;;*EF	**S288:JJt(()!,L*.))q.DJJv&qd	6>>)::>>>;;w{+dkk'.BBJJ9UXXa!e95

		'!"~.nhhs488Czz2KKyu5LL	6II	
 ~~xjA$-E  ; 	;rs   c           
      @   U[        S5      :X  a  U(       a  U R                  5       $ U $ U R                  U R                  5      u  p4UR	                  U5      u  pVn[        [        XVU5      5      nU R                  S:X  a  U R                  X445      OU4nUS:X  a  U R                  XR                  S9$ XVpUS:X  a  US:  a  Sn
US-   US-   pU R                  XU2   U R                  XU2   -
  nU R                  R                  n[        R                  " US-   US9n[        R                  " XSS S9  US:X  ak  [        U R                  U   U R                  U   5      n[        R                  " U R                  U   US9n[        R                  " U R                  U   US9nOgUS   n[        R                   " UUS9n[        R                   " UU R                  S9n[#        XVXpR                  U R                  U R                  UU5        U R                  UUU4US	S
9$ )z@Index along the major axis where idx is a slice object.
        Nr2   r   r0   rg   r   re  r:   Fr   )slicer8   rG   rH   rA   rN   rangerX   rT   r1   r@   rK   rL   rf  rR   rB   r   r   )r[   rz   r8   r]   r^   startstoprS  r  start0stop0start1stop1rg  r_   rh  all_idxri  rj  r   s                       rd   rU  _cs_matrix._major_slice  s    %+"&499;0D0zz$++,KKNTe4()*.))q.DJJv&qd	6>>)::>>> 2:%1*E	4!8++f4/0KKT)*+LL&&	XXac3

		'!"~.19DKK.D0ABG((4<<#8tDKxx		' 2>HR.C((3i8Kxx4::6H%t[[$,,))[(< ~~xjA$-E  ; 	;rs   c           
         U R                  U R                  U R                  45      nU R                  R                  USS9nU R                  R                  USS9n[        R
                  " XS9R                  5       nU R                  U R                  5      u  pV[        U5      nU R                  S:X  a  U R                  XW45      OU4nUS:X  a  U R                  XR                  S9$ [        R                  " XbS9n	[        R                  " U R                  US9n
[        UUUUUUU	U
5        [        R                   " U5      R                  USS9nU
S   n[        R"                  " XS9n[        R"                  " XR                  S9n[%        X[        U R                  5      X0R&                  X5        U R                  XU
4USS9$ )zBIndex along the minor axis where idx is an array of ints.
        Fr:   r0   r2   r   rg   r   )rI   rA   r@   rY   rK   rV   r   rG   rH   rN   rX   rT   r1   rL   
empty_liker   argsortr   r   rB   )r[   rz   r_   rA   r@   r]   r^   r  r  col_offsetsrh  	col_orderr   ri  rj  s                  rd   ra  _cs_matrix._minor_index_fancy3  s    ))4<<*EF	,,%%ie%<##IE#:jj.446zz$++,H*.))q.DJJv&qd	6>>)::>>> hhq2]]4;;i@
		
 JJsO**95*A	nhhs488Czz2)#dll2C!99k	E~~xjA$-E  ; 	;rs   c                    U[        S5      :X  a  U(       a  U R                  5       $ U $ U R                  U R                  5      u  p4UR	                  U5      u  pVn[        [        XVU5      5      nUS:X  a*  U R                  U R                  X445      U R                  S9$ US:X  a  U R                  XS9$ U R                  [        R                  " XVU5      5      $ )z@Index along the minor axis where idx is a slice object.
        Nr   r0   r   )rN  r8   )rm  r8   rG   rH   rA   rN   rn  rT   r1   rT  ra  rK   r   )r[   rz   r8   r]   r^   ro  rp  rS  s           rd   rV  _cs_matrix._minor_sliceZ  s     %+"&499;0D0zz$++,KKNTe4()6>>$**aV"4DJJ>GG19&&S&<<&&ryyd'CDDrs   c                    U R                  U R                  5      u  pE[        X5      u  pg[        X%5      u  pUS:X  a)  US:X  a#  Xt:X  a  X:X  a  U(       a  U R                  5       $ U $ [	        XEU R
                  U R                  U R                  XgX5	      u  pnU R                  Xv-
  X-
  45      nU R                  S:X  a  US   4nU R                  XU
4UU R                  SS9$ )zRReturn a submatrix of this matrix.

major, minor: None, int, or slice with step 1
r   r   F)r4   r1   r8   )rG   rH   _process_slicer8   r   r@   rA   rB   rX   rT   r1   )r[   rM  rN  r8   r]   r^   i0i1j0j1r@   rA   rB   r4   s                 rd   rT  _cs_matrix._get_submatrixj  s    
 zz$++,))7rQw27rw"&499;0D0 1$++t||TYY!H 

BGRW-.99>1XKE~~tf5U$(JJU  < 	<rs   c                 P    U R                  X45      u  pEU R                  XEU5        g r_  rG   	_set_manyr[   r   r   r   r|   r}   s         rd   _set_intXint_cs_matrix._set_intXint  "    zz3*%qQrs   c                 P    U R                  X45      u  pEU R                  XEU5        g r_  r  r  s         rd   _set_arrayXarray_cs_matrix._set_arrayXarray  r  rs   c                 r   U R                   " U R                  X45      6   UR                  u  pEUS:g  =(       a    UR                  S   S:H  nUS:g  =(       a    UR                  S   S:H  nUR                  UR                  p[
        R                  " UR                  U R                  S9nUR                  S:X  a  g U(       a`  [
        R                  " [
        R                  " U5      [        U5      5      n[
        R                  " X5      n	[
        R                  " X45      nU(       a`  [
        R                  " X5      n[
        R                  " [
        R                  " U5      [        U	5      5      n	[
        R                  " X55      nU R                  XU	4   X(U	4   45      u  pU R                  XU5        g )Nr   r   r0   )
_zero_manyrG   r4   r   r   rK   rV   rB   r1   r   r   r   rN   r   r  )r[   r   r   r   r]   r^   broadcast_rowbroadcast_colrcr|   r}   s               rd   _set_arrayXarray_sparse"_cs_matrix._set_arrayXarray_sparse  s.   SJ/0yyQ21771:?Q21771:?uuaee1JJqvvTZZ066Q;		"))A,A/AAA		!A		!c!f-A		!Azz3!t9cQ$i01qQrs   c           
      4   SU R                   ;   a  g U R                  S:X  a  [        S5      eU R                   u  p4UR                  S:H  nUS:  a  U(       a  [        X2-   U5      nO[        X2-   U[	        U5      5      n[
        R                  " U* Xb-
  U R                  R                  S9n[
        R                  " X`R                  R                  S9nOU(       a  [        X4U-
  5      nO[        X4U-
  [	        U5      5      n[
        R                  " X`R                  R                  S9n[
        R                  " X"U-   U R                  R                  S9nU(       d  US [	        U5       n[
        R                  " [
        R                  " XR                  S95      R                  5       n	U	R                  5       R                   UR                  5       R                   :w  a   [
        R                  " XR                   5      n	U	R                  S:X  a  g U R                  X445      u  p4U R                  Xx45      u  pxU	R                  n
[
        R                   " XR                  R                  S9n[#        X4U R$                  U R                  U
XxU5      nUS:X  a4  U R'                  5         [#        X4U R$                  U R                  U
XxU5        SU;  a  XR(                  U'   g US:  nU R*                  UR-                  5       -
  U R*                  S-  :  a3  X   U R(                  X   '   U) nX}   nX   nU R/                  XxX   5        g U R1                  5       nUR3                  X5        UR5                  U R                  5      nUu  U l        U l        U l        ng )Nr   r   z"diagonals cant be set in 1d arraysr0   rg   gMbP?)r4   rX   r   r   rN   rK   r   rA   r1   
atleast_1drV   r   squeezebroadcast_tor   rG   r   r   r@   rQ   rB   r   r   _insert_manyr   _setdiagrP   )r[   valuesr  r]   r^   	broadcast	max_indexr|   r}   r   	n_samplesoffsetsr   ry   r`   ra   rp   s                    rd   r  _cs_matrix._setdiag  s   

?99>%&JKKzz[[A%	q5qM	q#f+6			1"im4<<3E3EFA		)<<+=+=>A q5M	q5#f+6			)<<+=+=>A		!]$,,2D2DEAGSV_FMM"**V::>?EEG99;		 1 1177+A66Q;zz1&!zz1&!FF	((9LL,>,>? t{{DLL)!"w0!8!qT[[$,,	 W.W!"IIg1 88dhhj 488e#33'(wDIIgm$5DAAaAG, **,CLL#++DJJ7F6<3DKty!rs   c                    U R                  U R                  5      u  p4S n[        R                  " [        R                  " XR
                  R                  S95      R                  5       n[        R                  " [        R                  " X R
                  R                  S95      R                  5       nU" X5        U" X$5        XX44$ )Nc                     U R                  5       nX!:  a  [        SU SU S35      eU R                  5       nX!* :  a  [        SU SU S35      eg )Nzindex (z) out of range (>= r   z) out of range (< -)rJ   
IndexErrorr   )rA   boundrz   s      rd   check_bounds1_cs_matrix._prepare_indices.<locals>.check_bounds  s_    ++-C| 73%/B5'!KLL++-CV| 73%/B5'!KLL rs   r0   )rG   rH   rK   r  rV   rA   r1   r   )r[   r|   r}   r]   r^   r  s         rd   _prepare_indices_cs_matrix._prepare_indices  s    zz$++,	M MM"**Qll.@.@ABHHJMM"**Qll.@.@ABHHJQQQzrs   c           
         U R                  X5      u  ppE[        R                  " [        R                  " X0R                  S95      R                  5       nUR                  n[        R                  " X`R                  R                  S9n[        XEU R                  U R                  UXU5      nUS:X  a4  U R                  5         [        XEU R                  U R                  UXU5        SU;  a  X0R                  U'   g[        SU R                  R                   S3[         SS9  US:  n	X9   U R                  Xy   '   U	) n	X   nXS	:  ==   U-  ss'   X)   nX"S	:  ==   U-  ss'   U R#                  XX9   5        g)
zwSets value at each (i, j) to x

Here (i,j) index major and minor respectively, and must not contain
duplicate entries.
r0   r   rg   Nz%Changing the sparsity structure of a z. is expensive. lil and dok are more efficient.r5   r   r   )r  rK   r  rV   r1   r   r   r   rA   r   r@   rQ   rB   r   rT   rU   r
   r  )
r[   r|   r}   r   r]   r^   r  r  r   ry   s
             rd   r  _cs_matrix._set_many  sS    **10
aMM"**Qjj9:@@BFF	((9LL,>,>? t{{DLL)!"w0!8!qT[[$,,	 W. W!"IIg 89P9P8Q R? ?(Q8 R<D'(wDIIgm$5DA!eHMHA!eHMHaAG,rs   c           
      v   U R                  X5      u  pp4[        U5      n[        R                  " XPR                  R
                  S9n[        X4U R                  U R                  UXU5      nUS:X  a4  U R                  5         [        X4U R                  U R                  UXU5        SU R                  XfS:     '   g)zrSets value at each (i, j) to zero, preserving sparsity structure.

Here (i,j) index major and minor respectively.
r0   r   r   rg   N)
r  rN   rK   r   rA   r1   r   r@   rQ   rB   )r[   r|   r}   r]   r^   r  r  r   s           rd   r  _cs_matrix._zero_many  s    
 **10
aF	((9LL,>,>? t{{DLL)!"w0!8!qT[[$,,	 W. ,-		'B,'(rs   c           	      J   [         R                  " USS9nUR                  USS9nUR                  USS9nUR                  USS9nU R                  nU R	                  U R
                  U R                  4U R                  S   UR                  -   S9n[         R                  " U R                  US9U l        [         R                  " U R
                  US9U l        [         R                  " XS9n[         R                  " X&S9n/ n/ n[         R                  " USS	9u  p[         R                  " U
[        U5      5      n
[         R                  " U
5      nS
n[        [        XU
SS 5      5       GH  u  nu  pnU R                  U   nU R                  U   nUR                  U R
                  UU 5        UR                  U R                  UU 5        [         R                  " X/U SSS2   SS	9u  nn[        U5      UU-
  :X  a'  UR                  X/U 5        UR                  X?U 5        OEUR                  X/U SSS2   U   5        UR                  X?U SSS2   U   5        [        U5      X'   UnGM     U R                  W   nUR                  U R
                  US 5        UR                  U R                  US 5        [         R                   " U5      U l        [         R                   " U5      U l        [         R"                  " U R                  R$                  US9nU" S
5      US
'   [         R                  " U R                  5      nUU	==   U-  ss'   UUSS& [         R&                  " UUS9U l        U(       a  SU l        U R)                  5         U R+                  SS9  g)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)moderg   r-   r0   T)return_indexr   r   Nre  Fr;   )rK   ry  takehas_sorted_indicesrI   rA   r@   r   rV   uniqueappendrN   rn   	enumerateziprB   concatenater   r4   rf  sort_indicesrZ   )r[   r|   r}   r   r   do_sortr_   indices_parts
data_partsui	ui_indptrnew_nnzsprevr  iijsjero  rp  uj	uj_indptrnnzsindptr_diffs                          rd   r  _cs_matrix._insert_many0  s"    

1;/FF5vF&FF5vF&FF5vF&)) ))4<<*E,0KKOaff,D * G	jjI>zz$,,i@JJq*JJq* 
		!$7IIiQ0	779%(RIabM)JKOA|KK%E;;r?D  eD!9:diid34 IIa2httn4HMB	2w"r'!$$Q"X.!!!r(+$$Q"Xdd^I%>?!!!r(4R4.";<!"gD#  L( BT\\%&12$))EF+, ~~m4NN:.	xx));A,Qggdkk*B8#QRii$/&+D#U+rs   c                 $   U R                   S:X  aB  U R                  5       nU R                  UR                  UR                  44UR
                  US9$ U R                  U R
                  5      u  p4U R                  n[        R                  " [        U5      U R                  R                  S9n[        R                  " X0R                  U5        U R                  Xe45      nU R                  U R                  U4U R
                  XR                  S9$ )Nr   r:   r0   r7   )rX   r  rO   rB   rA   r4   rG   rK   r   rN   r1   r   	expandptrr@   )r[   r8   r  r  	minor_dimminor_indicesmajor_indicesr   s           rd   r   _cs_matrix.tocoo|  s    99>**,C&&3;;.'A399SW&XX#zz$**5	]!34<<;M;MNy++}E]:;""YY$jj # 
 	
rs   c                    Uc  Uc  U R                  S5      S   nU R                  X5      nUR                  R                  (       d&  UR                  R                  (       d  [        S5      eUR                  R                  (       a  U R                  5       nUnOU R                  5       nUR                  nUR                  UR                  5      u  pV[        XVUR                  UR                  UR                  U5        U$ )Ncfr   z&Output array must be C or F contiguous)rG   _process_toarray_argsr   r   f_contiguousrS   r  r   r   rH   r   r@   rA   rB   )r[   r   r>  r   r   r]   r^   s          rd   r   _cs_matrix.toarray  s    ;5=JJt$Q'E((4		&&#))*@*@EFF99!!

AA

AAwwq~~&A!((AIIqvvq9
rs   c                     U R                  U R                  5      u  p[        R                  " XU R                  U R
                  U R                  5        U R                  5         g)zLRemove zero entries from the array/matrix

This is an *in place* operation.
N)rG   rH   r   csr_eliminate_zerosr@   rA   rB   r   r[   r]   r^   s      rd   r   _cs_matrix.eliminate_zeros  sC    
 zz$++,((t{{DLL$))T

rs   returnc                 &   [        U SS5      (       d  SU l        U R                  $ [        U S5      (       dP  [        [        R
                  " [        U R                  5      S-
  U R                  U R                  5      5      U l	        U R                  $ )a"  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?  boolr   csr_has_canonical_formatrN   r@   rA   has_canonical_formatr[   s    rd   r  _cs_matrix.has_canonical_format  s     t2D99).D& ))) 677(,55$q($++t||E)D% )))rs   r[  c                 B    [        U5      U l        U(       a  SU l        g g )NT)r  r  r  r[   r[  s     rd   r  r    s    %)#Y"&*D# rs   c                    U R                   (       a  gU R                  5         U R                  U R                  5      u  p[        R
                  " XU R                  U R                  U R                  5        U R                  5         SU l         g)zVEliminate duplicate entries by adding them together

This is an *in place* operation.
NT)
r  r  rG   rH   r   csr_sum_duplicatesr@   rA   rB   r   r  s      rd   rQ   _cs_matrix.sum_duplicates  sc    
 $$zz$++,''dkk4<<S

$(!rs   c                     [        U S5      (       dP  [        [        R                  " [	        U R
                  5      S-
  U R
                  U R                  5      5      U l        U R                  $ )zWhether the indices are sorted

Returns
    - True: if the indices of the array/matrix are in sorted order
    - False: otherwise
r  r   )r?  r  r   csr_has_sorted_indicesrN   r@   rA   r  r  s    rd   r  _cs_matrix.has_sorted_indices  sY     t233'+33$q($++t||E(D$ '''rs   c                 $    [        U5      U l        g r_  )r  r  r  s     rd   r  r    s    #'9 rs   c                 F    U R                  5       nUR                  5         U$ )z?Return a copy of this array/matrix with sorted indices
        )r8   r  )r[   As     rd   sorted_indices_cs_matrix.sorted_indices  s     IIK	rs   c                     U R                   (       dU  [        R                  " [        U R                  5      S-
  U R                  U R
                  U R                  5        SU l         gg)z9Sort the indices of this array/matrix *in place*
        r   TN)r  r   csr_sort_indicesrN   r@   rA   rB   r  s    rd   r  _cs_matrix.sort_indices  sL     &&))#dkk*:Q*>*.,,		C&*D# 'rs   c                    U R                  U R                  5      S   n[        U R                  5      US-   :w  a  [	        S5      e[        U R
                  5      U R                  :  a  [	        S5      e[        U R                  5      U R                  :  a  [	        S5      e[        U R
                  SU R                   5      U l        [        U R                  SU R                   5      U l        g)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)	rG   rH   rN   r@   rS   rA   r   rB   r   )r[   r  s     rd   r   _cs_matrix.prune  s     JJt001!4	t{{y1},?@@t||txx'HIItyy>DHH$EFF#DLL$(($;< 9DHH!56	rs   c                    [        XR                  S9n[        U S5      (       a}  U R                  u  p#[	        US   U5      u  pE[	        US   U5      u  pgU(       d  U(       a  [        SU R                   SU 35      eU R                  S   U-  U R                  S   U-  pOFU R                  [        U5      S:  a  UOSUS   45      u  pFU R                  U R                  5      u  pXH:  aZ  U R                  S U R                  U    U l
        U R                  S U R                  U    U l        U R                  S US-    U l        O\XH:  aW  [        R                  " U R                  US-   5      U l        U R                  US-   S  R                  U R                  U   5        Xi:  a  U R                  U:  n
[        R                   " U
5      (       d  U R                  U
   U l
        U R                  U
   U l        U R#                  [        R$                  U
5      u  pU R                  R                  S5        XR                  SS  U'   [        R&                  " U R                  U R                  S9  Xl        g )Nr+   r<  r   r   zshape must be divisible into z blocks. Got re  )r!   rF   r?  r<  divmodrS   r4   rG   rN   rH   rA   r@   rB   rK   resizer   rv   r@  rA  rf  rC   )r[   r4   bmbnnew_Mrmnew_Nrnr]   r^   ry   rD  r[  s                rd   r  _cs_matrix.resize  s   ENN;4%%^^FBuQx,IEuQx,IER #@@P#0"9 : :::a=B&

1(;q::s5z!|e!U1XOLE::d//0DA9<<(;U);<DL		"54;;u#56DI++juqy1DKY))DKK;DKKKA$$T[[^49<<%'D66$<<#||D1 IIdO	#'#5#5bffd#C   #/2AB,		$++4;;7rs   c                 4   U(       aW  U R                  XR                  R                  5       U R                  R                  5       4U R                  UR
                  S9$ U R                  XR                  U R                  4U R                  UR
                  S9$ )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.
r3   )rT   rA   r8   r@   r4   r1   )r[   rB   r8   s      rd   r   _cs_matrix._with_data:  s    
 >>4):):)<#';;#3#3#5#7(,

(,

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

$** " F Frs   c                    U R                  U5      n[        [        U R                  U-   U R                  -   5      nU R                  UR                  -   nU R                  U R                  U R                  UR                  UR                  4US9n[        R                  " U R                  R                  US9n[        R                  " XES9n/ SQnX(;   a$  [        R                  " U[        R                  S9n	O3[        R                  " U[        U R                  UR                  5      S9n	U R                  u  pU" X[        R                  " U R                  US9[        R                  " U R                  US9U R                   [        R                  " UR                  US9[        R                  " UR                  US9UR                   XgU	5        U R                  XU4U R                  S9nUR#                  5         U$ )z5apply the binary operation fn to two sparse matrices.r-   r0   )r   r   r   r   r   r  )rT   r  r   r>   r   rI   r@   rA   rK   r   r4   r   r   r1   rH   rV   rB   r   )r[   r   r   r  maxnnzr_   r@   rA   bool_opsrB   r]   r^   r  s                rd   r   _cs_matrix._binoptH  s}   u% \4;;#3dkk#ABEII%))4;;%*\\5==+B+1 * 3	 $++++9=((63;>88F"((3D88F&U[[*IJD  
1::dkk3::dll)499::ell)4::emm95::D	" NND62$**NE		rs   c                 6   UR                   U R                   :w  a  [        S5      eU R                  US5      n[        R                  " UR
                  [        R                  5      (       a  [        R                  " U R                   U R
                  S9nUR                  [        R                  5        UR                  5       nU R                  S:X  a  US   4nSX4'   UR                  5       nUR                  X2R                  '   U R                  U5      $ UnU$ )z/
Divide this matrix by a second sparse matrix.
r   _eldiv_r0   r   rg   r   )r4   rS   r   rK   
issubdtyper1   inexactr   r   nannonzerorX   r   rB   r   r   )r[   r   r  r>  r   s        rd   _divide_sparse_cs_matrix._divide_sparsek  s     ;;$**$233LL	*=="**--
 ((4::TZZ8CHHRVV]]_FyyA~ *CK	AFFCM??3'' CJrs   c                    U R                   U:X  a  U(       a  U R                  5       $ U $ [        XR                  S9n[	        U R                   U5      U:w  a  [        S5      e[        U R                   5      S:X  a  [        U5      S:X  a  U R                  5         U R                  S:X  a  U R                  XR                  SS9$ US   n[        R                  " X0R                  S   5      n[        R                  " SU5      n[        R                  " SU/5      nU R!                  XEU4USS9$ U R"                  n[        U5      S:w  a  [        U5      n[        S	U S
35      eU R                  S:X  a  U R                  XR                  SS9$ U R                  5         U R%                  U5      u  pU R%                  U5      u  p['        S U 5       5      (       av  [        R                  " X-  U R                  S   5      n[        R(                  " [        R                  " U5      U	5      n[        R                  " S[        U5      S-   U5      nOU
S:X  a  X:X  az  [        R(                  " U R                  U	5      n[        R(                  " U R*                  U	5      n[        R                  " S[        U5      S-   [        U R                  5      5      nOyUS:X  as  X:X  an  [        R,                  " U R                  U5      n[        R(                  " [        R                  " U5      [        U R                  5      5      nU R.                  U-  nU R                  WWW4USS9$ )Nr+   zcannot be broadcastr   r   F)r1   r8   r   r2   z0CSR/CSC broadcast_to cannot have shape >2D. Got Dc              3   *   #    U  H	  oS :H  v   M     g7frR  r  ).0ss     rd   	<genexpr>+_cs_matrix._broadcast_to.<locals>.<genexpr>  s     )y!Avys   )r4   r8   r!   rF   r#   rS   rN   rQ   r   rT   r1   rK   fullrB   r   rR   _csr_containerrH   rG   rv   r   rA   r   r@   )r[   r4   r8   r^   rB   rA   r@   	old_shaperX   r]   r   r   s               rd   _broadcast_to_cs_matrix._broadcast_to  s   ::"&499;0D0E^^=DJJ.%7233tzz?aCJ!O!xx1}~~e::E~JJaA771iil+Dii!nGXXq!f%F&&v'>eRW&XX %%	u:?u:DOPTvUVWXX88q=>>%zz>FFzz% I&)y)))7715$))A,/DggbiilA.GYYq#d)a-3F1W77499a(DggdllA.GYYq#d)a-TYY@F1W99TYY*DggbiilC		N;G[[1_F~~tWf5U~OOrs   )r  r  rC   rB   r  r  rA   r@   )NNFr_  )T)r   )NNNF)NN)BrU   
__module____qualname____firstlineno____doc__r=   rq   r   ru   rZ   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r   r'  r2  r9  r   r@  rO  rX  r\  rb  r`  rU  ra  rV  rT  r  r  r  r  r  r  r  r  r   r   r   propertyr  r  setterrQ   r  r  r  r   r  r   r   r  r  __static_attributes__r  rs   rd   r&   r&      s`   V,T V,p3$ oo--GO34 $1199M7-F""H "D!"F9988	3-.y~
7 :x	 ''//H9.O oo--GOO oo--GO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rs   r&   c                     SSK JnJn  U(       a  UOUn[        U 5      n[	        US9n[
        R                  " US-   US9nUSS nU" XU4XD4S9$ )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_matrixr-   r0   Nrg   r  )_csrr#  r$  rN   r"   rK   r   )rB   r   r#  r$  r^   r_   r@   rA   s           rd   r   r     sV     ,%	:ID	Aq)IYYq1uI.FSbkGdV,QF;;rs   c                 >   U c  SUp2X#4$ [        U [        5      (       a3  U R                  U5      u  p#nUS:w  a  [        S5      e[	        X#5      nX#4$ [        U 5      (       a2  U S:  a  X-  n X S-   p2US:  d  X1:  a  [        SU SU SU 35      e X#4$ [        S5      e)Nr   r   z$slicing with step != 1 not supportedzindex out of bounds: 0 <= z < z <= zexpected slice or scalar)rD   rm  rA   rS   r   r   r  	TypeError)slnumr  r  strides        rd   r  r    s    	zCB 6M 
B		CQ;CDD[ 6M 
26IB!VB6RX9"SDNOO 
 6M 233rs   r  )1r  __all__warningsr   rw   r   numpyrK   scipy._lib._utilr   r   _baser   r   r	   r
   _datar   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&   r   r  r  rs   rd   <module>r4     sr    D
     9 F F . A A A + + + +_P}j _PD-<"rs   