Ë
    þ�Djää  ã                   ó   — 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 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*  G d„ deee«      Z+dd„Z,d„ Z-y)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Úis_pydata_spmatrixc                   ó¢  — e Zd ZdZd@d„ZdAd„Zej
                  j                  e_        dBd„Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdCd„Zej.                  j                  e_        d„ Zd„ Zej2                  j                  e_        d„ Zej4                  j                  e_        dDd„Zej6                  j                  e_        dAd„Zd„ Zd„ Zd„ Zd„ Z d„ Z!d „ Z"dEd!„Z#d"„ Z$dEd#„Z%d@d$„Z&d%„ Z'd&„ Z(d'„ Z)d(„ Z*d)„ Z+d*„ Z,d+„ Z-d,„ Z.d-„ Z/d.„ Z0dBd/„Z1ejb                  j                  e1_        dFd0„Z2ejd                  j                  e2_        d1„ Z3e4d2e5fd3„«       Z6e6jn                  d4e5fd5„«       Z6d6„ Z8e4d2e5fd7„«       Z9e9jn                  d4e5fd8„«       Z9d9„ Z:d:„ Z;d;„ Z<d<„ Z=ejz                  j                  e=_        dBd=„Z>d>„ Z?d?„ Z@y)GÚ
_cs_matrixzY
    base array/matrix class for compressed row- and column-oriented arrays/matrices
    Nc                 óä  — t        j                  | |«       t        | t        «      }t	        |«      r�|j
                  | j
                  k(  r|r|j                  «       }n|j                  | j
                  «      }|j                  |j                  |j                  |j                  f\  | _        | _	        | _
        | _        �n«t        |t        «      �rôt        ||¬«      r»t        ||¬«      | _        | j                  | j                   «      \  }}| j#                  t%        | j&                  «      ¬«      }t)        j*                  dt-        |t.        ¬«      «      | _
        t)        j*                  d|«      | _	        t)        j*                  |dz   |¬«      | _        �nÒt1        |«      dk(  r\| j3                  |||¬«      }	|	j5                  | j                  «      }
|
\  | _        | _	        | _
        | _        | j7                  «        �nht1        |«      d	k(  r�|\  }}}d }|�d|vrt%        |«      }| j#                  ||f|d
¬«      }|st8        }t)        j:                  |||¬«      | _	        t)        j:                  |||¬«      | _        t)        j:                  |||¬«      | _
        nËt=        d| j>                  j@                  › d|› �«      ‚	 t)        jB                  |«      }t        | t        «      r7|jF                  dk  r(| j
                  dk(  rt=        d|jF                  › d�«      ‚| j3                  ||¬«      }	|	j5                  | j                  «      }
|
\  | _        | _	        | _
        | _        |�t        ||¬«      | _        ne| j&                  €Y	 t1        | j                  «      dz
  }| j                  j%                  «       dz   }t        | j                  ||f«      |¬«      | _        |�"| j                  jI                  |d¬«      | _
        | jK                  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)N©Úallow_1d©Úmaxvalr   )Údefaultr   ©Údtypeé   ©Úshaper,   é   T)r)   Úcheck_contents©Úcopyr,   zunrecognized z constructor input: ÚcsczCSC arrays don't support zD input. Use 2Dz!unable to infer matrix dimensionsF©r3   ©Ú
full_check)&r   Ú__init__Ú
isinstancer	   r   Úformatr3   ÚasformatÚindptrÚindicesÚdataÚ_shapeÚtupler   r!   Ú_swapÚ_shape_as_2dÚ_get_index_dtypeÚmaxr/   ÚnpÚzerosr   ÚfloatÚlenÚ_coo_containerÚ_coo_to_compressedÚsum_duplicatesr   ÚarrayÚ
ValueErrorÚ	__class__Ú__name__ÚasarrayÚ	ExceptionÚndimÚastypeÚcheck_format)ÚselfÚarg1r/   r,   r3   Úis_arrayÚMÚNÚ	idx_dtypeÚcooÚarraysr>   r=   r<   r)   ÚeÚmajor_dÚminor_ds                     ú\C:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\scipy/sparse/_compressed.pyr8   z_cs_matrix.__init__   sá  € Ü×Ñ˜d DÔ)Ü˜d¤GÓ,ˆä�DŒ>Ø�{‰{˜dŸk™kÒ)©dØ—y‘y“{‘à—}‘} T§[¡[Ó1�à—‘˜TŸ\™\¨4¯9©9°d·k±kðAÑ=ˆDŒK˜œ t¤y°$¶+ô ˜œeÕ$Ü�t hÕ/ô *¨$¸ÔB�”Ø—z‘z $×"3Ñ"3Ó4‘��1ð !×1Ñ1¼¸T¿Z¹Z»Ð1ÓI�	ÜŸH™H Q¬°ÄÔ(FÓG�”	Ü!Ÿx™x¨¨9Ó5�”Ü Ÿh™h q¨1¡u°IÔ>�–ä�t“9 ’>à×-Ñ-¨d¸%ÀuÐ-ÓM�CØ ×3Ñ3°D·J±JÓ?�FØHNÑE�D”K ¤¨t¬y¸$¼+Ø×'Ñ'Ö)Ü˜“Y !’^à.2Ñ+�T˜7 Fð "�FØÐ(¨Q°e©^Ü!$ U£˜Ø $× 5Ñ 5°wÀÐ6GØ7=Ø?Cð !6ó !E�Iñ  Ü-˜Ü#%§8¡8¨G¸$ÀiÔ#P�D”LÜ"$§(¡(¨6¸ÀIÔ"N�D”KÜ "§¡¨°DÀÔ F�D•Iä$ }°T·^±^×5LÑ5LÐ4Mð N;Ø;?¸&ð&Bó Cð Cð
FÜ—z‘z $Ó'�ô ˜$¤Ô(¨T¯Y©Y¸ª]¸t¿{¹{ÈeÒ?SÜ Ø/°·	±	¨{¸/ÐJóð ð ×%Ñ% d°%Ð%Ó8ˆCØ×+Ñ+¨D¯J©JÓ7ˆFØ@FÑ=ˆDŒK˜œ t¤y°$´+ð ÐÜ% e°hÔ?ˆD�KØ�Z‰ZÐðMÜ˜dŸk™kÓ*¨QÑ.�ØŸ,™,×*Ñ*Ó,¨qÑ0�ô & d§j¡j°'¸7Ð1CÓ&DÈxÔXˆDŒKàÐØŸ	™	×(Ñ(¨°UÐ(Ó;ˆDŒIà×Ñ UÐÕ+øô7 ò FÜ  =°·±×1HÑ1HÐ0Ið J7Ø7;°fð">ó ?ØDEðFûðFûô& ò MÜ Ð!DÓEÈ1ÐLûðMús0   ËP Î5Q Ð	QÐ'&QÑQÑ	Q/ÑQ*Ñ*Q/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«      ‚)Néÿÿÿÿr   )r   rb   zaxis out of boundsr   r-   )Ú	minlength)Úintr<   rR   rM   rA   r/   rE   Úbincountr   r=   Údiff)rU   ÚaxisÚ_rY   s       r`   Ú_getnnzz_cs_matrix._getnnzr   sÙ   € Øˆ<Ü�t—{‘{ 2‘Ó'Ð'Ø�Y‰Y˜!Š^Ø�w‰Ü˜4Ÿ;™; r™?Ó+Ð+ÜÐ1Ó2Ð2à�aŠxØ˜‘	�Ø—j‘j $¨¨D©Ð!1Ó2‰GˆD�!Ø—:‘:˜dŸj™jÓ)‰DˆAˆqØ�qŠyÜ—{‘{Ô#6°t·|±|Ó#DØ-.ô0ð 0à˜’Ü—w‘w˜tŸ{™{Ó+Ð+ÜÐ1Ó2Ð2ó    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`.
        Úiz$indptr array has non-integer dtype (ú)r0   ©Ú
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 sizerb   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 sequencer+   N)r<   r,   Úkindr   Únamer=   r>   rR   rM   rA   rB   rH   ÚpruneÚnnzrD   ÚminrE   rf   rC   rP   r   )rU   r7   ÚxrX   rY   rZ   s         r`   rT   z_cs_matrix.check_format‡   s‚  € ð �;‰;×Ñ×!Ñ! SÒ(ÜÐ7¸¿¹×8IÑ8I×8NÑ8NÐ7OÈqÐQØõà�<‰<×Ñ×"Ñ" cÒ)ÜÐ8¸¿¹×9KÑ9K×9PÑ9PÐ8QÐQRÐSØõð —)‘)—.‘. $§,¡,×"3Ñ"3°T·[±[×5EÑ5EÐFò 	LˆAØ�A‹vÜ Ð!JÓKÐKð	Lð
 �z‰z˜$×+Ñ+Ó,‰ˆˆ1ä�—‘Ó  A¡Ò%ÜÐ2´3°t·{±{Ó3CÐ2DÀKÐPQÐTUÑPUÈwÐWÓXÐXØ�K‰K˜‰N˜aÒÜÐ@ÓAÐAô �—‘Ó¤ T§Y¡Y£Ò/ÜÐIÓJÐJØ�K‰K˜‰Oœc $§,¡,Ó/Ò/Üð Aó Bð Bð 	�
‰
Œâà�x‰x˜!Š|Ø—<‘<×#Ñ#Ó%¨Ò*Ü$Ð'9¸!¸Ð%=Ó>Ð>Ø—<‘<×#Ñ#Ó%¨Ò)Ü$Ð%;Ó<Ð<Ü—7‘7˜4Ÿ;™;Ó'×+Ñ+Ó-°Ò1Ü$Ð%OÓPÐPà×-Ñ-¨t¯{©{¸D¿L¹LÐ.IÓJˆIÜŸ*™* T§[¡[¸	ÔBˆDŒKÜŸ:™: d§l¡l¸)ÔDˆDŒLÜ! $§)¡)Ó,ˆD�Ið rj   c                 óŽ   — | j                  «        | j                   || j                  |«      d¬«      }|j                  «        |S )z�Scalar version of self._binopt, for cases in which no new nonzeros
        are added. Produces a new sparse array in canonical form.
        Tr5   )rK   Ú
_with_datar>   Úeliminate_zeros)rU   ÚotherÚopÚress       r`   Ú_scalar_binoptz_cs_matrix._scalar_binoptÊ   s>   € ð 	×ÑÔØ�o‰o™b §¡¨EÓ2¸ˆoÓ>ˆØ×ÑÔØˆ
rj   c                 ó¶  — t        |«      rÚt        j                  |«      r+| j                  | j                  t        j
                  ¬«      S |dk(  rut        dt        d¬«       | j                  t        j                  | j                  t        j
                  ¬«      «      }| j                  |t        j                  «      }||z
  S | j                  |t        j                  «      S t        |«      r| j                  «       |k(  S t        |«      rt         S t#        |«      rµt        dt        d¬«       | j                  |j                  k7  ry| j$                  |j$                  k7  r|j'                  | j$                  «      }| j)                  |d«      }| j                  t        j                  | j                  t        j
                  ¬«      «      }||z
  S t         S )	Nr+   r   zOComparing a sparse matrix with 0 using == is inefficient, try using != instead.r0   rn   zHComparing sparse matrices using == is inefficient, try using != instead.FÚ_ne_)r   rE   ÚisnanrN   r/   Úbool_r   r
   Úonesr|   ÚoperatorÚneÚeqr   Útodenser"   ÚNotImplementedr   r:   r;   Ú_binopt)rU   ry   Úall_trueÚinvr{   s        r`   Ú__eq__z_cs_matrix.__eq__Ó   s\  € ä˜ÔÜ�x‰x˜ŒØ—~‘~ d§j¡j¼¿¹�~ÓAÐAà˜ŠzÜð /Ü0GØ !õ#ð  Ÿ>™>¬"¯'©'°$·*±*ÄBÇHÁHÔ*MÓN�Ø×)Ñ)¨%´·±Ó=�Ø #‘~Ð%à×*Ñ*¨5´(·+±+Ó>Ð>ä�UŒ^Ø—<‘<“> UÑ*Ð*ä Ô&Ü!Ð!ä�eŒ_Üð  Ü!8ÀQõHð �z‰z˜UŸ[™[Ò(ØØ—‘ §¡Ò,ØŸ™ t§{¡{Ó3�Ø—,‘,˜u fÓ-ˆCØ—~‘~¤b§g¡g¨d¯j©jÄÇÁÔ&IÓJˆHØ˜c‘>Ð!ä!Ð!rj   c                 ó\  — t        |«      �rt        j                  |«      rRt        dt        d¬«       | j                  t        j                  | j                  t        j                  ¬«      «      }|S |dk7  rut        dt        d¬«       | j                  t        j                  | j                  «      t        j                  ¬«      }| j                  |t        j                  «      }||z
  S | j                  |t        j                  «      S t        |«      r| j                  «       |k7  S t        |«      rt         S t#        |«      r`| j                  |j                  k7  ry| j$                  |j$                  k7  r|j'                  | j$                  «      }| j)                  |d«      S t         S )	Nz:Comparing a sparse matrix with nan using != is inefficientr0   rn   r+   r   z^Comparing a sparse matrix with a nonzero scalar using != is inefficient, try using == instead.Tr~   )r   rE   r   r   r
   rN   r�   r/   r€   r|   r‚   r„   rƒ   r   r…   r"   r†   r   r:   r;   r‡   )rU   ry   rˆ   r‰   s       r`   Ú__ne__z_cs_matrix.__ne__÷   s<  € ä˜ÕÜ�x‰x˜ŒÜð $Ü%<ÈõLàŸ>™>¬"¯'©'°$·*±*ÄBÇHÁHÔ*MÓN�Ø�Ø˜!’Üð >ä,¸õ<ð  Ÿ>™>¬"¯'©'°$·*±*Ó*=ÄRÇXÁX˜>ÓN�Ø×)Ñ)¨%´·±Ó=�Ø #‘~Ð%à×*Ñ*¨5´(·+±+Ó>Ð>ä�UŒ^Ø—<‘<“> UÑ*Ð*ä Ô&Ü!Ð!ä�eŒ_à�z‰z˜UŸ[™[Ò(ØØ—‘ §¡Ò,ØŸ™ t§{¡{Ó3�Ø—<‘<  vÓ.Ð.ä!Ð!rj   c                 óˆ  — t        |«      r©d|k(  r|dv rt        d«      ‚ |d|«      rzt        |t        d¬«       t	        j
                  | j                  t	        j                  |«      ¬«      }|j                  |«       | j                  |«      }| j                  ||«      S | j                  ||«      S t        |«      r || j                  «       |«      S t        |«      rÜ| j                  |j                  k7  rt        d«      ‚| j                   |j                   k7  r|j#                  | j                   «      }|dvr| j                  ||«      S t        d	t        d¬«       | j                  t	        j$                  | j                  t        j&                  ¬«      «      }| j                  ||d
k(  rdnd«      }||z
  S t(        S )Nr   )Ú_le_Ú_ge_z >= and <= don't work with 0.r0   rn   r+   úinconsistent shapes)r�   rŽ   zUComparing sparse matrices using >= and <= is inefficient, using <, >, or !=, instead.rŽ   Ú_gt_Ú_lt_)r   ÚNotImplementedErrorr   r
   rE   Úemptyr/   Úresult_typeÚfillrN   r‡   r|   r   r…   r   rM   r:   r;   r�   r€   r†   )rU   ry   rz   Úop_nameÚbad_scalar_msgÚ	other_arrrˆ   r{   s           r`   Ú_inequalityz_cs_matrix._inequality  sm  € ä˜ÔØ�EŠz˜gÐ)9Ñ9Ü)Ð*IÓJÐJÙ�A�u”Ü�^Ô%<ÈÕKÜŸH™H T§Z¡Z´r·~±~ÀeÓ7LÔM�	Ø—‘˜uÔ%Ø ŸN™N¨9Ó5�	Ø—|‘| I¨wÓ7Ð7à×*Ñ*¨5°"Ó5Ð5ä�UŒ^Ù�d—l‘l“n eÓ,Ð,ä�eŒ_à�z‰z˜UŸ[™[Ò(Ü Ð!6Ó7Ð7Ø—‘ §¡Ò,ØŸ™ t§{¡{Ó3�ØÐ.Ñ.Ø—|‘| E¨7Ó3Ð3äð /ä(°Qõ8ð —~‘~¤b§g¡g¨d¯j©jÄÇÁÔ&IÓJˆHØ—,‘,˜u°¸6Ò0A¡fÀvÓNˆCØ˜c‘>Ð!ä!Ð!rj   c                 óF   — | j                  |t        j                  dd«      S )Nr’   zgComparing a sparse matrix with a scalar greater than zero using < is inefficient, try using >= instead.)rš   r‚   Últ©rU   ry   s     r`   Ú__lt__z_cs_matrix.__lt__<  ó$   € Ø×Ñ ¤x§{¡{°Fð!8ó9ð 	9rj   c                 óF   — | j                  |t        j                  dd«      S )Nr‘   zdComparing a sparse matrix with a scalar less than zero using > is inefficient, try using <= instead.)rš   r‚   Úgtr�   s     r`   Ú__gt__z_cs_matrix.__gt__B  rŸ   rj   c                 óF   — | j                  |t        j                  dd«      S )NrŽ   zgComparing a sparse matrix with a scalar greater than zero using <= is inefficient, try using > instead.)rš   r‚   Úler�   s     r`   Ú__le__z_cs_matrix.__le__H  ó$   € Ø×Ñ ¤x§{¡{°Fð!7ó8ð 	8rj   c                 óF   — | j                  |t        j                  dd«      S )Nr�   zdComparing a sparse matrix with a scalar less than zero using >= is inefficient, try using < instead.)rš   r‚   Úger�   s     r`   Ú__ge__z_cs_matrix.__ge__N  r¦   rj   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 (z and rm   ÚCFr   T)r,   Úorderr3   Fr5   )r/   rM   r   r,   ÚcharrA   rE   rL   ÚflagsÚc_contiguousÚTrB   r   r<   r=   r>   Ú
_container)rU   ry   r,   r¬   ÚresultÚyrX   rY   s           r`   Ú
_add_densez_cs_matrix._add_denseX  sÛ   € Ø�;‰;˜$Ÿ*™*Ò$ÜÐ4°T·Z±Z°LÀÀeÇkÁkÀ]ÐRSÐTÓUÐUÜ˜DŸJ™JŸO™O¨U¯[©[×-=Ñ-=Ó>ˆØ—
‘
˜4Ó  Ñ#ˆÜ—‘˜% u°EÀÔEˆØ—l‘l×/Ò/‰F°V·X±XˆØ�z‰z˜$×+Ñ+Ó,‰ˆˆ1Ü�A�q˜$Ÿ+™+ t§|¡|°T·Y±YÀÔBØ�‰˜v¨EˆÓ2Ð2rj   c                 ó&   — | j                  |d«      S )NÚ_plus_©r‡   r�   s     r`   Ú_add_sparsez_cs_matrix._add_sparsec  s   € Ø�|‰|˜E 8Ó,Ð,rj   c                 ó&   — | j                  |d«      S )NÚ_minus_r·   r�   s     r`   Ú_sub_sparsez_cs_matrix._sub_sparsef  s   € Ø�|‰|˜E 9Ó-Ð-rj   c                 ó  — t        |«      r| j                  |«      S 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	«      ‚t'        j(                  |«      }|j                  dkD  r$t'        j*                  | j                  «       |«      S |j,                  dk(  rz|j.                  t&        j0                  k(  rt2        S t'        j4                  | j                  |j                  «      }| j                  |j6                  d   «      j                  |«      S | j                  dv rgt'        j4                  | j                  |j                  «      }t'        j*                  | j                  j                  «       |«      j                  |«      S | j9                  «       }| j                  |j                  k(  rat'        j*                  |j                  ||j:                     «      }|j=                  t&        j>                  «      j#                  «       |_	        |S t'        j@                  |«      }| j                  d   dk(  s| j                  dk(  �r[|j                  d   dk(  r!t'        j*                  |j                  |«      }n\|j                  d   | j                  d
   k(  r2t'        j*                  |j                  |dd…|jB                  f   «      }nt%        d	«      ‚t'        jD                  t'        jF                  |j                  d   «      |jH                  «      }t'        jJ                  |jB                  |j                  d   «      }| jM                  |j=                  t&        j>                  «      j#                  «       ||ff|j                  d   | j                  d
   fd¬«      S | j                  d   dk(  �rn|j                  d   dk(  r(t'        j*                  |j                  dd…df   |«      }n_|j                  d   | j                  d   k(  r5t'        j*                  |j                  dd…df   ||jN                     «      }nt%        d	«      ‚t'        jD                  |jN                  |j                  d   «      }t'        jJ                  t'        jF                  |j                  d   «      tQ        |jB                  «      «      }| jM                  |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…|jB                  f   j#                  «       «      }nx|j                  d   dk(  r[| j                  d   |j                  d   k(  r<t'        j*                  |j                  ||jN                     j#                  «       «      }nt%        d	«      ‚|j=                  t&        j>                  «      j#                  «       |_	        |S )z=Point-wise multiplication by array/matrix, vector, or scalar.Ú_elmul_©r   r   )r   r   r   r   ©r   )r¿   r¾   r-   r�   rb   NF©r/   r3   ))r   Ú_mul_scalarr   r/   rN   r‡   ÚtoarrayrR   Úreshaper>   ÚsumrB   Ú_matmul_sparseÚtocscr9   r	   Ú_make_diagonal_csrÚravelrM   rE   Ú
asanyarrayÚmultiplyÚsizer,   Úobject_r†   Úbroadcast_shapesÚflatÚtocooÚcoordsÚviewÚndarrayÚ
atleast_2dÚcolÚrepeatÚarangers   ÚtilerI   ÚrowrH   )rU   ry   r²   ÚsMÚsNÚoMÚoNrW   Ú	new_otherr3   Únew_selfÚbshapeÚretr>   Úother2drØ   rÔ   s                    r`   rÊ   z_cs_matrix.multiplyi  s÷  € ô ˜ÔØ×#Ñ# EÓ*Ð*ä�E�?Ø�z‰z˜UŸ[™[Ò(ØŸ™ uÓ-�Ø—|‘| E¨9Ó5Ð5à�{‰{˜fÒ$Ø×)Ñ)¨%¯-©-«/¸$Ñ*?Ó@�Ø—9‘9 ’>Ø!Ÿ>™>¨1¨d¯j©j¸©mÐ*<Ó=Ð=Ø�Ø�{‰{˜dÒ"Ø×'Ñ'¨¯©«¸Ñ(:Ó;Ð;Ø�z‰z˜^Ñ+Ø×(Ñ(¨¯©¯©«Ó9Ð9ð ×&Ñ&‰FˆB�Ø×'Ñ'‰FˆB�à�QŠw˜2 š7Ø×+Ñ+¨D¯L©L¸¸RÓ,@×,FÑ,FÓ,HÓIÐIØ�QŠw˜2 š7Ø×*Ñ*¨5¯=©=¸¸RÓ+@×+FÑ+FÓ+HÓIÐIä! $¬Ó0ˆHà�QŠw˜2 š8Ü.¨u¯}©}«×/DÑ/DÓ/FÈÓQ�	Ø×,Ñ,¨YÓ7�Ø!%§¡¨a¢�vÐL°V·^±^ÀQÈÀGÓ5LÐLà�QŠw˜2 š8Ü)¨$¯,©,«.×*>Ñ*>Ó*@À(ÓK�Ø×+Ñ+¨DÓ1Ð1ð �QŠw˜2 š8Ü.¨u¯}©}«×/DÑ/DÓ/FÈÓQ�	Ø ×/Ñ/°Ó5Ð5à�QŠw˜2 š8Ü-¨d¯l©l«n×.BÑ.BÓ.DÀhÓO�Ø×.Ñ.¨uÓ5Ð5ÜÐ2Ó3Ð3ô —‘˜eÓ$ˆà�:‰:˜Š>Ü—;‘;˜tŸ|™|›~¨uÓ5Ð5à�:‰:˜Š?Ø�{‰{œbŸj™jÒ(ä%Ð%Ü×(Ñ(¨¯©°U·[±[ÓAˆFØ×#Ñ# E§J¡J¨q¡MÓ2×:Ñ:¸6ÓBÐBà�:‰:˜Ñ'Ü×(Ñ(¨¯©°U·[±[ÓAˆFÜ—;‘;˜tŸy™yŸ}™}›°Ó6×>Ñ>¸vÓFÐFà�j‰j‹lˆà�:‰:˜Ÿ™Ò$Ü—;‘;˜sŸx™x¨¨s¯z©zÑ):Ó;ˆDØ—y‘y¤§¡Ó,×2Ñ2Ó4ˆCŒHØˆJô —-‘- Ó&ˆà�:‰:�a‰=˜AÒ §¡¨a£Ø�}‰}˜QÑ 1Ò$Ü—{‘{ 3§8¡8¨WÓ5‘Ø—‘˜qÑ! T§Z¡Z°¡^Ò3Ü—{‘{ 3§8¡8¨W²Q¸¿¹°ZÑ-@ÓA‘ä Ð!6Ó7Ð7Ü—)‘)œBŸI™I g§m¡m°AÑ&6Ó7¸¿¹ÓAˆCÜ—'‘'˜#Ÿ'™' 7§=¡=°Ñ#3Ó4ˆCØ×&Ñ&Ø—‘œ2Ÿ:™:Ó&×,Ñ,Ó.°°c°
Ð;Ø—}‘} QÑ'¨¯©°B©Ð8Øð 'ó ð ð �:‰:�a‰=˜AÓØ�}‰}˜QÑ 1Ò$Ü—{‘{ 3§8¡8ªA¨t¨GÑ#4°gÓ>‘Ø—‘˜qÑ! T§Z¡Z°¡]Ò2Ü—{‘{ 3§8¡8ªA¨t¨GÑ#4°g¸c¿g¹gÑ6FÓG‘ä Ð!6Ó7Ð7Ü—)‘)˜CŸG™G W§]¡]°1Ñ%5Ó6ˆCÜ—'‘'œ"Ÿ)™) G§M¡M°!Ñ$4Ó5´s¸3¿7¹7³|ÓDˆCØ×&Ñ&Ø—‘œ2Ÿ:™:Ó&×,Ñ,Ó.°°c°
Ð;Ø—z‘z !‘} g§m¡m°AÑ&6Ð7Øð 'ó ð ð �=‰=˜Ñ˜qÒ  T§Z¡Z°¡]°g·m±mÀAÑ6FÒ%FÜ—;‘;˜sŸx™x¨²°C·G±G°Ñ)<×)BÑ)BÓ)DÓE‰Dà�]‰]˜1Ñ Ò" t§z¡z°!¡}¸¿¹ÀaÑ8HÒ'HÜ—;‘;˜sŸx™x¨°·±Ñ)9×)?Ñ)?Ó)AÓB‰DäÐ2Ó3Ð3Ø—9‘9œRŸZ™ZÓ(×.Ñ.Ó0ˆŒØˆ
rj   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 )Nr+   Ú_matvecr   r   )rB   rE   rF   r   r,   r­   Úgetattrr   r:   r<   r=   r>   rR   )rU   ry   rX   rY   r²   Úfns         r`   Ú_matmul_vectorz_cs_matrix._matmul_vectorä  sŒ   € Ø× Ñ ‰ˆˆ1ô —‘˜!¤;¨t¯z©z¯©ÀÇÁ×@PÑ@PÓ#QÔRˆô ”\ 4§;¡;°Ñ#:Ó;ˆÙ
ˆ1ˆa�—‘˜dŸl™l¨D¯I©I°u¸fÔEà ŸI™I¨šNˆv�a‰yÐ6°Ð6rj   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 )Nrb   r+   Ú_matvecsr   )rB   r/   rE   rF   r   r,   r­   rä   r   r:   r<   r=   r>   rÈ   rR   rÃ   )rU   ry   rX   rY   Ún_vecsr²   rå   s          r`   Ú_matmul_multivectorz_cs_matrix._matmul_multivectorð  sº   € Ø× Ñ ‰ˆˆ1Ø—‘˜R‘ˆä—‘˜1˜f˜+Ü +¨D¯J©J¯O©O¸U¿[¹[×=MÑ=MÓ NôPˆô ”\ 4§;¡;°Ñ#;Ó<ˆÙ
ˆ1ˆa�˜Ÿ™ d§l¡l°D·I±IØ�;‰;‹=˜&Ÿ,™,›.ô	*ð �9‰9˜Š>Ø—>‘> 6 )Ó,Ð,Øˆrj   c                 ó  — | j                   \  }}|j                  }|dk(  r*|j                  d|j                  d   f«      j                  }|j
                  \  }}d}| j                  dk(  r||fz  }|dk(  r||fz  }| j                  ||f«      d   }| j                  |«      }| j                  | j                  | j                  |j                  |j                  f«      }	t        t        | j                  dz   «      }
 |
||t        j                  | j                  |	¬«      t        j                  | j                  |	¬«      t        j                  |j                  |	¬«      t        j                  |j                  |	¬«      «      }|dk(  rk|dk(  r5t        j                   dt#        | j$                  |j$                  «      ¬«      S | j                  |t#        | j$                  |j$                  «      ¬«      S | j                  | j                  | j                  |j                  |j                  f|¬«      }	t        j&                  |dz   |	¬«      }t        j&                  ||	¬«      }t        j&                  |t#        | j$                  |j$                  «      ¬«      }t        t        | j                  dz   «      }
 |
||t        j                  | j                  |	¬«      t        j                  | j                  |	¬«      | j(                  t        j                  |j                  |	¬«      t        j                  |j                  |	¬«      |j(                  |||«       |dk(  rt        j                   |d   «      S | j                  |||f|¬	«      S )
Nr   r   © r-   Ú_matmat_maxnnzr+   r(   Ú_matmat©r/   )rB   rR   rÃ   r/   r°   r?   rA   rN   rC   r<   r=   rä   r   r:   rE   rP   rL   r   r,   r”   r>   )rU   ry   rX   ÚK1Úo_ndimÚK2rY   Ú	new_shapeÚ	major_dimrZ   rå   rs   r<   r=   r>   s                  r`   rÅ   z_cs_matrix._matmul_sparse   sÄ  € Ø×!Ñ!‰ˆˆ2à—‘ˆØ�QŠ;à—M‘M 1 e§k¡k°!¡nÐ"5Ó6×8Ñ8ˆEØ—‘‰ˆˆAð ˆ	Ø�9‰9˜Š>Ø˜!˜ÑˆIØ�QŠ;Ø˜!˜ÑˆIà—J‘J  1˜vÓ& qÑ)ˆ	Ø—‘˜uÓ%ˆà×)Ñ)¨4¯;©;¸¿¹Ø%*§\¡\°5·=±=ð+Bó Cˆ	ô ”\ 4§;¡;Ð1AÑ#AÓBˆÙ��AÜ—‘˜DŸK™K¨yÔ9Ü—‘˜DŸL™L°	Ô:Ü—‘˜EŸL™L°	Ô:Ü—‘˜EŸM™M°Ô;ó	=ˆð
 �!Š8Ø˜BŠÜ—x‘x ¬°·
±
¸E¿K¹KÓ)HÔIÐIØ—>‘> )´6¸$¿*¹*ÀeÇkÁkÓ3R�>ÓSÐSà×)Ñ)¨4¯;©;¸¿¹Ø%*§\¡\°5·=±=ð+Bà+.ð *ó 0ˆ	ô —‘˜) a™-¨yÔ9ˆÜ—(‘(˜3 iÔ0ˆÜ�x‰x˜¤6¨$¯*©*°e·k±kÓ#BÔCˆä”\ 4§;¡;°Ñ#:Ó;ˆÙ
ˆ1ˆa”—‘˜DŸK™K¨yÔ9Ü�:‰:�d—l‘l¨)Ô4Ø�9‰9Ü�:‰:�e—l‘l¨)Ô4Ü�:‰:�e—m‘m¨9Ô5Ø�:‰:Ø�7˜Dô	"ð ˜Š?Ü—8‘8˜D ™GÓ$Ð$Ø�~‰~˜t W¨fÐ5¸Yˆ~ÓGÐGrj   c           
      óò  — | j                   \  }}|| k  s||k\  r+t        j                  d| j                  j                  ¬«      S t        t        | j                  dz   «      }t        j                  t        |t        |d«      z   |t        |d«      z
  «      t        | j                  «      ¬«      } ||| j                   d   | j                   d   | j                  | j                  | j                  |«       |S )Nr   r+   Ú	_diagonalr   )r/   rE   r”   r>   r,   rä   r   r:   rt   rD   r   r<   r=   )rU   ÚkÚrowsÚcolsrå   r³   s         r`   Údiagonalz_cs_matrix.diagonal6  s½   € Ø—Z‘Z‰
ˆˆdØ��Š:˜˜dšÜ—8‘8˜A T§Y¡Y§_¡_Ô5Ð5Ü”\ 4§;¡;°Ñ#<Ó=ˆÜ�H‰H”S˜¤ A q£	Ñ)¨4´#°a¸³)Ñ+;Ó<Ü! $§*¡*Ó-ô/ˆá
ˆ1ˆd�j‰j˜‰m˜TŸZ™Z¨™]¨D¯K©K¸¿¹Ø�9‰9�aô	àˆrj   c                 ó´  — t        |«      �r ||«      r„t        dt        d¬«       t        j                  | j
                  t        j                  |«      j                  ¬«      }|j                  |«       | j                  |«      }| j                  ||«      S | j                  «         || j                  t        j                  |«      «      }| j                  || j                  | j                  f|j                  | j
                  ¬«      }|S t        |«      r || j!                  «       |«      S t#        |«      r| j                  ||«      S t%        d«      ‚)NzITaking maximum (minimum) with > 0 (< 0) number results to a dense matrix.r0   rn   r+   )r,   r/   zOperands not compatible.)r   r   r
   rE   r”   r/   rP   r,   r–   rN   r‡   rK   r>   r=   r<   r   r…   r   rM   )rU   ry   Únpopr—   Údense_checkr™   Únew_dataÚmats           r`   Ú_maximum_minimumz_cs_matrix._maximum_minimumG  s  € Ü˜ÕÙ˜5Ô!Üð +Ü,CØ !õ#ô ŸH™H T§Z¡Z´r·z±zÀ%Ó7H×7NÑ7NÔO�	Ø—‘˜uÔ%Ø ŸN™N¨9Ó5�	Ø—|‘| I¨wÓ7Ð7à×#Ñ#Ô%Ù §	¡	¬2¯:©:°eÓ+<Ó=�Ø—n‘n h°·±¸d¿k¹kÐ%JØ+3¯>©>ÀÇÁð %ó M�à�
Ü�UŒ^Ù˜Ÿ™›¨Ó.Ð.Ü�eŒ_Ø—<‘<  wÓ/Ð/äÐ7Ó8Ð8rj   c                 óH   — | j                  |t        j                  dd„ «      S )NÚ	_maximum_c                 ó2   — t        j                  | «      dkD  S ©Nr   ©rE   rP   ©ru   s    r`   ú<lambda>z$_cs_matrix.maximum.<locals>.<lambda>`  ó   € ¼B¿J¹JÀq»MÈAÑ<M€ rj   )r   rE   Úmaximumr�   s     r`   r	  z_cs_matrix.maximum^  ó%   € Ø×$Ñ$ U¬B¯J©JØ%0Ñ2MóOð 	Orj   c                 óH   — | j                  |t        j                  dd„ «      S )NÚ	_minimum_c                 ó2   — t        j                  | «      dk  S r  r  r  s    r`   r  z$_cs_matrix.minimum.<locals>.<lambda>f  r  rj   )r   rE   Úminimumr�   s     r`   r  z_cs_matrix.minimumd  r
  rj   c                 ó&  — | j                   dk(  rêt        | d«      sÞ|| j                  d«      d   v rÈt        | j                  «      }t        j                  t        | j                  «      dz
  |¬«      }| j                  t
        j                  «      \  }}|||<   | j                  |«      }|dz  dk(  r|j                  }|�$|j                  |j                  k7  rt        d«      ‚|j                  d||¬	«      S t!        j                  | |||¬	«      S )
z„Sum the array/matrix over the given axis.  If the axis is None, sum
        over both rows and columns, returning a scalar.
        r-   Ú	blocksize))r   rb   )r   éþÿÿÿr   r   r+   zdimensions do not matchrì   )rg   r,   Úout)rR   ÚhasattrrA   r    r,   rE   rF   rH   r<   Ú_minor_reduceÚaddÚ_ascontainerr°   r/   rM   rÄ   r   )rU   rg   r,   r  Ú	res_dtyperà   Úmajor_indexÚvalues           r`   rÄ   z_cs_matrix.sumn  sî   € ð �I‰I˜ŠN¤7¨4°Ô#=Ø˜Ÿ
™
Ð#5Ó6°qÑ9Ñ9ä% d§j¡jÓ1ˆIÜ—(‘(œ3˜tŸ{™{Ó+¨aÑ/°yÔAˆCà!%×!3Ñ!3´B·F±FÓ!;ÑˆK˜Ø$ˆC�ÑØ×#Ñ# CÓ(ˆCØ�a‰x˜1Š}Ø—e‘e�àˆ 3§9¡9°·	±	Ò#9Ü Ð!:Ó;Ð;à—7‘7 ¨%°S�7Ó9Ð9ô —;‘;˜t¨$°eÀÔEÐErj   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
        )r>   rE   Úflatnonzerorf   r<   Úreduceatr   )rU   Úufuncr>   r  r  s        r`   r  z_cs_matrix._minor_reduceŠ  sZ   € ð ˆ<Ø—9‘9ˆDÜ—n‘n¤R§W¡W¨T¯[©[Ó%9Ó:ˆØ—‘˜tÜ2°4·;±;¸{Ñ3KÓLóNˆà˜EÐ!Ð!rj   c                 ó   — d|cxk  r| j                   d   k  rhn net        j                  | j                  |k(  «      }|j                  r| j
                  |d      S | j
                  j                  j                  d«      S t        d|› d�«      ‚)Nr   zindex (z) out of range)	r/   rE   r  r=   rË   r>   r,   ÚtypeÚ
IndexError)rU   ÚidxÚspots      r`   Ú_get_intz_cs_matrix._get_int¤  su   € Ø�Ô$�t—z‘z !‘}Õ$Ü—>‘> $§,¡,°#Ñ"5Ó6ˆDØ�yŠyØ—y‘y  a¡Ñ)Ð)Ø—9‘9—?‘?×'Ñ'¨Ó*Ð*Ü˜7 3 % ~Ð6Ó7Ð7rj   c                 ó  — | j                  | j                  «      \  }}| j                  ||f«      \  }}t        ||| j                  | j                  | j
                  ||dz   ||dz   «	      \  }}}	|	j                  | j                  ¬«      S )Nr   r+   )rA   r/   r   r<   r=   r>   rÄ   r,   )
rU   rØ   rÔ   rX   rY   ÚmajorÚminorr<   r=   r>   s
             r`   Ú_get_intXintz_cs_matrix._get_intXintÉ  s~   € Ø�z‰z˜$Ÿ*™*Ó%‰ˆˆ1Ø—z‘z 3¨ *Ó-‰ˆˆuÜ 1Øˆq�$—+‘+˜tŸ|™|¨T¯Y©YØ�5˜1‘9˜e U¨Q¡Yó!0Ñˆ�˜ð �x‰x˜dŸj™jˆxÓ)Ð)rj   c                 óÎ   — | j                  ||f«      \  }}|j                  dv r"|j                  dv r| j                  ||d¬«      S | j                  |«      j	                  |«      S )N)r   NTr5   )rA   ÚstepÚ_get_submatrixÚ_major_sliceÚ_minor_slice©rU   rØ   rÔ   r%  r&  s        r`   Ú_get_sliceXslicez_cs_matrix._get_sliceXsliceÑ  sc   € Ø—z‘z 3¨ *Ó-‰ˆˆuØ�:‰:˜Ñ" u§z¡z°YÑ'>Ø×&Ñ& u¨e¸$Ð&Ó?Ð?Ø× Ñ  Ó'×4Ñ4°UÓ;Ð;rj   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 )Nr+   r   )r=   r,   rA   r/   rE   rP   r”   rË   r   r<   r>   rÈ   rR   r  rN   rÃ   )	rU   rØ   rÔ   rZ   rX   rY   r%  r&  Úvals	            r`   Ú_get_arrayXarrayz_cs_matrix._get_arrayXarray×  så   € à—L‘L×&Ñ&ˆ	Ø�z‰z˜$Ÿ*™*Ó%‰ˆˆ1Ø—z‘z 3¨ *Ó-‰ˆˆuÜ—
‘
˜5¨	Ô2ˆÜ—
‘
˜5¨	Ô2ˆä�h‰h�u—z‘z¨¯©Ô4ˆÜ˜!˜Q §¡¨T¯\©\¸4¿9¹9ØŸ*™* e§k¡k£m°U·[±[³]ÀCô	Ià�:‰:˜Š?Ø×$Ñ$ SÓ)Ð)Ø�~‰~˜cŸk™k¨%¯+©+Ó6Ó7Ð7rj   c                 ón   — | j                  ||f«      \  }}| j                  |«      j                  |«      S ©N)rA   Ú_major_index_fancyÚ_minor_index_fancyr-  s        r`   Ú_get_columnXarrayz_cs_matrix._get_columnXarrayæ  s4   € à—z‘z 3¨ *Ó-‰ˆˆuØ×&Ñ& uÓ-×@Ñ@ÀÓGÐGrj   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.
        r+   r   r-   r   N©r  rb   Fr5   rÀ   )rC   r<   r=   rE   rP   rÈ   rA   rB   rH   rR   rN   r,   rS   rF   Úcumsumr”   r   r>   )rU   r!  rZ   r=   rY   rX   ró   Úrow_nnzÚ
res_indptrrs   Úres_indicesÚres_datas               r`   r4  z_cs_matrix._major_index_fancyë  s‰  € ð ×)Ñ)¨4¯;©;¸¿¹Ð*EÓFˆ	Ü—*‘*˜S¨	Ô2×8Ñ8Ó:ˆà�J‰J�t×(Ñ(Ó)¨!Ñ,ˆÜ�‹LˆØ*.¯)©)°qª.�D—J‘J  1˜vÔ&¸q¸dˆ	Ø�Š6Ø—>‘> )°4·:±:�>Ó>Ð>à—;‘;˜w¨™{Ñ+¨d¯k©k¸'Ñ.BÑB×JÑJÈ9ÓUˆä—X‘X˜a ™c¨Ô3ˆ
Ü
�	‰	�'˜z¨!¨"˜~Õ.à˜‰nˆÜ—h‘h˜s¨)Ô4ˆÜ—8‘8˜C t§z¡zÔ2ˆÜØØØ�K‰K×Ñ˜y¨uÐÓ5Ø�L‰L×Ñ 	°ÐÓ6Ø�I‰IØØô	
ð �~‰~˜x¨°jÐAØ$-°Eð ó ;ð 	;rj   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.
        Nr-   r   r+   rb   r   r8  r5   FrÀ   )Úslicer3   rA   rB   r=   rH   ÚrangerR   rN   r,   r<   rE   rF   r9  rL   r>   r”   r   )rU   r!  r3   rX   rY   ÚstartÚstopr)  ró   Ústart0Ústop0Ústart1Ústop1r:  rZ   r;  Úall_idxr<  r=  rs   s                       r`   r+  z_cs_matrix._major_slice  s  € ð ”%˜“+ÒÙ"&�4—9‘9“;Ð0¨DÐ0à�z‰z˜$×+Ñ+Ó,‰ˆˆ1ØŸK™K¨›NÑˆˆt�TÜ”�e˜T 4Ó(Ó)ˆØ*.¯)©)°qª.�D—J‘J  1˜vÔ&¸q¸dˆ	Ø�Š6Ø—>‘> )°4·:±:�>Ó>Ð>ð ˜t�ˆØ�2Š:˜% 1š*ØˆEØ ™	 4¨!¡8�ˆà—+‘+˜f U¨4Ð/Ñ0Ø�K‰K˜˜u TÐ)Ñ*ñ+ˆà—L‘L×&Ñ&ˆ	Ü—X‘X˜a ™c¨Ô3ˆ
Ü
�	‰	�'˜z¨!¨"˜~Õ.à�1Š9Ü˜DŸK™K¨Ñ.°·±¸DÑ0AÓBˆGÜŸ(™( 4§<¡<°Ñ#8¸tÔDˆKÜ—x‘x §	¡	¨'Ñ 2¸Ô>‰Hà˜R‘.ˆCÜŸ(™( 3¨iÔ8ˆKÜ—x‘x ¨4¯:©:Ô6ˆHÜ˜%  t¨T¯[©[¸$¿,¹,ØŸ)™) [°(ô<ð �~‰~˜x¨°jÐAØ$-°Eð ó ;ð 	;rj   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.
        Fr5   r+   r-   r   rb   rÀ   )rC   r=   r<   rS   rE   rP   rÈ   rA   rB   rH   rR   rN   r,   rF   Ú
empty_liker   Úargsortr”   r   r>   )rU   r!  rZ   r=   r<   rX   rY   r÷   ró   Úcol_offsetsr;  Ú	col_orderrs   r<  r=  s                  r`   r5  z_cs_matrix._minor_index_fancy4  s¦  € ð ×)Ñ)¨4¯<©<¸¿¹Ð*EÓFˆ	Ø—,‘,×%Ñ% i°eÐ%Ó<ˆØ—‘×#Ñ# I°EÐ#Ó:ˆä�j‰j˜ IÔ.×4Ñ4Ó6ˆà�z‰z˜$×+Ñ+Ó,‰ˆˆ1Ü�‹HˆØ*.¯)©)°qª.�D—J‘J  1˜vÔ&¸q¸dˆ	Ø�Š6Ø—>‘> )°4·:±:�>Ó>Ð>ô —h‘h˜q¨	Ô2ˆÜ—]‘] 4§;¡;°iÔ@ˆ
ÜØØØØØØØØô		
ô —J‘J˜s“O×*Ñ*¨9¸5Ð*ÓAˆ	Ø˜‰nˆÜ—h‘h˜s¨)Ô4ˆÜ—8‘8˜C t§z¡zÔ2ˆÜ˜) [´#°d·l±lÓ2CØ! 4§9¡9¨k¸8ô	Eà�~‰~˜x¨°jÐAØ$-°Eð ó ;ð 	;rj   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   r+   r   )r&  r3   )r?  r3   rA   rB   r=   rH   r@  rN   r,   r*  r5  rE   rÖ   )rU   r!  r3   rX   rY   rA  rB  r)  s           r`   r,  z_cs_matrix._minor_slice[  sÈ   € ð ”%˜“+ÒÙ"&�4—9‘9“;Ð0¨DÐ0à�z‰z˜$×+Ñ+Ó,‰ˆˆ1ØŸK™K¨›NÑˆˆt�TÜ”�e˜T 4Ó(Ó)ˆØ�Š6Ø—>‘> $§*¡*¨a°¨VÓ"4¸D¿J¹J�>ÓGÐGØ�1Š9Ø×&Ñ&¨S°tÐ&Ó<Ð<à×&Ñ&¤r§y¡y°¸¸dÓ'CÓDÐDrj   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)r/   r,   r3   )rA   rB   Ú_process_slicer3   r   r<   r=   r>   rR   rN   r,   )rU   r%  r&  r3   rX   rY   Úi0Úi1Új0Új1r<   r=   r>   r/   s                 r`   r*  z_cs_matrix._get_submatrixk  sö   € ð
 �z‰z˜$×+Ñ+Ó,‰ˆˆ1Ü  qÓ)‰ˆˆBÜ  qÓ)‰ˆˆBà�Š7�r˜Q’w 2¨¢7¨r°QªwÙ"&�4—9‘9“;Ð0¨DÐ0ä 1Øˆq�$—+‘+˜tŸ|™|¨T¯Y©Y¸¸BÀÀBó!HÑˆ�˜ð —
‘
˜B ™G R¨"¡WÐ-Ó.ˆØ�9‰9˜Š>Ø˜1‘X�KˆEØ�~‰~˜t W¨fÐ5¸UØ$(§J¡J°Uð ó <ð 	<rj   c                 óV   — | j                  d|f«      \  }}| j                  |||«       y r  ©rA   Ú	_set_many)rU   r!  ru   r%  r&  s        r`   Ú_set_intz_cs_matrix._set_int€  s(   € Ø—z‘z 1 c (Ó+‰ˆˆuØ�‰�u˜e QÕ'rj   c                 ó&  — | j                  t        j                  |«      |f«      \  }}|j                  d   dk(  xr |j                  d   dk7  }|r-t        j                  |j
                  |j                  d   «      }| j                  |||«       y )Nrb   r   )rA   rE   Ú
zeros_liker/   rÕ   r>   rV  )rU   r!  ru   r%  r&  Ú	broadcasts         r`   Ú
_set_arrayz_cs_matrix._set_array„  su   € Ø—z‘z¤2§=¡=°Ó#5°sÐ";Ó<‰ˆˆuØ—G‘G˜B‘K 1Ñ$Ò=¨¯©°R©¸AÑ)=ˆ	ÙÜ—	‘	˜!Ÿ&™& #§)¡)¨B¡-Ó0ˆAØ�‰�u˜e QÕ'rj   c                 óV   — | j                  ||f«      \  }}| j                  |||«       y r3  rU  ©rU   rØ   rÔ   ru   rl   Újs         r`   Ú_set_intXintz_cs_matrix._set_intXint‹  ó(   € Ø�z‰z˜3 ˜*Ó%‰ˆˆ1Ø�‰�q˜!˜QÕrj   c                 óV   — | j                  ||f«      \  }}| j                  |||«       y r3  rU  r]  s         r`   Ú_set_arrayXarrayz_cs_matrix._set_arrayXarray�  r`  rj   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   r+   )Ú
_zero_manyrA   r/   rØ   rÔ   rE   rP   r>   r,   rË   rÕ   rÖ   rH   r×   rV  )rU   rØ   rÔ   ru   rX   rY   Úbroadcast_rowÚbroadcast_colÚrÚcrl   r^  s               r`   Ú_set_arrayXarray_sparsez"_cs_matrix._set_arrayXarray_sparse“  sF  € àˆ�‰˜Ÿ™ S¨# JÓ/Ñ0à�y‰y‰ˆˆ1Ø˜Q™Ò2 1§7¡7¨1¡:°¡?ˆØ˜Q™Ò2 1§7¡7¨1¡:°¡?ˆØ�u‰u�a—e‘eˆ1ˆä�J‰J�q—v‘v T§Z¡ZÔ0ˆØ�6‰6�QŠ;ØáÜ—	‘	œ"Ÿ)™) A›,¬¨A«Ó/ˆAÜ—‘˜˜1“ˆAÜ—‘˜˜1“ˆAÙÜ—	‘	˜!˜Q“ˆAÜ—‘œŸ	™	 !›¤c¨!£fÓ-ˆAÜ—	‘	˜!˜Q“ˆAà�z‰z˜3˜q !˜t™9 c¨!¨Q¨$¡iÐ0Ó1‰ˆˆ1Ø�‰�q˜!˜QÕrj   c           
      ó4  — 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,                  dz  k  r9||   }||   }| j/                  |||	|   «       | }|	|   | j(                  ||   <   y | j1                  «       }|j3                  ||«       |j5                  | j                  «      }|\  | _        | _        | _        }y )Nr   r   z"diagonals cant be set in 1d arraysr+   rb   gü©ñÒMbP?)r/   rR   r“   rt   rH   rE   rÖ   r=   r,   Ú
atleast_1drP   rÈ   ÚsqueezeÚbroadcast_torË   rA   r”   r   r<   rK   r>   rÄ   rs   Ú_insert_manyrÏ   Ú_setdiagrJ   )rU   Úvaluesr÷   rX   rY   rZ  Ú	max_indexrl   r^  ru   Ú	n_samplesÚoffsetsrà   Úmaskr[   r\   rh   s                    r`   ro  z_cs_matrix._setdiag¬  sô  € Ø�—
‘
‰?ØØ�9‰9˜Š>Ü%Ð&JÓKÐKà�z‰z‰ˆˆ1Ø—[‘[ AÑ%ˆ	àˆqŠ5ÙÜ  A¡ q›M‘	ä  A¡ q¬#¨f«+Ó6�	Ü—	‘	˜1˜"˜i¨!™m°4·<±<×3EÑ3EÔFˆAÜ—	‘	˜)¨4¯<©<×+=Ñ+=Ô>‰Añ Ü  1 q¡5›M‘	ä  1 q¡5¬#¨f«+Ó6�	Ü—	‘	˜)¨4¯<©<×+=Ñ+=Ô>ˆAÜ—	‘	˜!˜Q ™]°$·,±,×2DÑ2DÔEˆAáØ˜GœS ›V�_ˆFä�M‰Mœ"Ÿ*™* V°4·:±:Ô>Ó?×EÑEÓGˆØ�9‰9‹;×Ñ §	¡	£× 1Ñ 1Ò1Ü—‘  1§7¡7Ó+ˆAØ�6‰6�QŠ;Øà�z‰z˜1˜a˜&Ó!‰ˆˆ1Ø�z‰z˜1˜a˜&Ó!‰ˆˆ1Ø—F‘Fˆ	Ü—(‘(˜9¨D¯L©L×,>Ñ,>Ô?ˆÜ   A t§{¡{°D·L±LÀ)Ø!" A wó0ˆà�!Š8à×ÑÔ!Ü˜q ! T§[¡[°$·,±,À	Ø  ! Wô.à�WÑà!"ˆD�I‰I�gÑØà˜2‘ˆð �8‰8‹:˜Ÿ™ 5Ñ(Ò(à�$‘ˆAØ�$‘ˆAØ×Ñ˜a  A d¡GÔ,à�5ˆDØ'(¨¡wˆD�I‰I�g˜d‘mÒ$ð —*‘*“,ˆCØ�L‰L˜ Ô#Ø×+Ñ+¨D¯J©JÓ7ˆFØ6<Ñ3ˆDŒK˜œ t¤y±!rj   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||fz  «      ‚| j                  «       }|| k  rt        d||fz  «      ‚y )Nzindex (%d) out of range (>= %d)zindex (%d) out of range (< -%d))rD   r   rt   )r=   Úboundr!  s      r`   Úcheck_boundsz1_cs_matrix._prepare_indices.<locals>.check_boundsó  se   € Ø—+‘+“-ˆCØ�eŠ|Ü Ð!BØ"% u ñ".ó /ð /à—+‘+“-ˆCØ�e�VŠ|Ü Ð!BØ"% u ñ".ó /ð /ð rj   r+   )rA   rB   rE   rk  rP   r=   r,   rÈ   )rU   rl   r^  rX   rY   rx  s         r`   Ú_prepare_indicesz_cs_matrix._prepare_indicesð  s›   € Ø�z‰z˜$×+Ñ+Ó,‰ˆˆ1ò	/ô �M‰Mœ"Ÿ*™* Q¨d¯l©l×.@Ñ.@ÔAÓB×HÑHÓJˆÜ�M‰Mœ"Ÿ*™* Q¨d¯l©l×.@Ñ.@ÔAÓB×HÑHÓJˆÙ�Q˜ÔÙ�Q˜ÔØ�!�Q˜ˆzÐrj   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)
z�Sets value at each (i, j) to x

        Here (i,j) index major and minor respectively, and must not contain
        duplicate entries.
        r+   r   rb   Nz%Changing the sparsity structure of a z. is expensive. lil and dok are more efficient.r0   rn   r   )ry  rE   rk  rP   r,   rÈ   rË   r”   r=   r   r<   rK   r>   r   rN   rO   r
   rn  )
rU   rl   r^  ru   rX   rY   rr  rs  rà   rt  s
             r`   rV  z_cs_matrix._set_many  sw  € ð ×*Ñ*¨1¨aÓ0‰
ˆˆ1ˆa�Ü�M‰Mœ"Ÿ*™* Q¨d¯j©jÔ9Ó:×@Ñ@ÓBˆà—F‘Fˆ	Ü—(‘(˜9¨D¯L©L×,>Ñ,>Ô?ˆÜ   A t§{¡{°D·L±LÀ)Ø!" A wó0ˆà�!Š8à×ÑÔ!Ü˜q ! T§[¡[°$·,±,À	Ø  ! Wô.ð �WÑà!"ˆD�I‰I�gÑØô Ð8¸¿¹×9PÑ9PÐ8Qð R?ð ?ä(°Qõ8ð ˜R‘<ˆDØ'(¨¡wˆD�I‰I�g˜d‘mÑ$à�5ˆDØ�$‘ˆAØˆa�!‰e‹H˜‰M‹HØ�$‘ˆAØˆa�!‰e‹H˜‰M‹HØ×Ñ˜a  A d¡GÕ,rj   c           
      óŠ  — | j                  ||«      \  }}}}t        |«      }t        j                  || j                  j
                  ¬«      }t        ||| j                  | j                  ||||«      }|dk(  r6| j                  «        t        ||| j                  | j                  ||||«       d| j                  ||dkD     <   y)z‚Sets value at each (i, j) to zero, preserving sparsity structure.

        Here (i,j) index major and minor respectively.
        r+   r   r   rb   N)
ry  rH   rE   r”   r=   r,   r   r<   rK   r>   )rU   rl   r^  rX   rY   rr  rs  rà   s           r`   rd  z_cs_matrix._zero_many*  s±   € ð
 ×*Ñ*¨1¨aÓ0‰
ˆˆ1ˆa�ä˜“Fˆ	Ü—(‘(˜9¨D¯L©L×,>Ñ,>Ô?ˆÜ   A t§{¡{°D·L±LÀ)Ø!" A wó0ˆà�!Š8à×ÑÔ!Ü˜q ! T§[¡[°$·,±,À	Ø  ! Wô.ð ,-ˆ�	‰	�'˜' B™,Ñ'Ò(rj   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)rp   Úclip)Úmoderb   r(   r+   T)Úreturn_indexr   r   Nr8  Fr6   )rE   rJ  ÚtakeÚhas_sorted_indicesrC   r=   r<   rË   rP   ÚuniqueÚappendrH   rf   Ú	enumerateÚzipr>   Úconcatenater”   r/   r9  Úsort_indicesrT   )rU   rl   r^  ru   r¬   Údo_sortrZ   Úindices_partsÚ
data_partsÚuiÚ	ui_indptrÚnew_nnzsÚprevrh  ÚiiÚjsÚjerA  rB  ÚujÚ	uj_indptrÚnnzsÚindptr_diffs                          r`   rn  z_cs_matrix._insert_many>  s<  € ô —
‘
˜1 ;Ô/ˆØ�F‰F�5˜vˆFÓ&ˆØ�F‰F�5˜vˆFÓ&ˆØ�F‰F�5˜vˆFÓ&ˆà×)Ñ)ˆð ×)Ñ)¨4¯<©<¸¿¹Ð*EØ,0¯K©K¸©O¸a¿f¹fÑ,Dð *ó Gˆ	ä—j‘j §¡°IÔ>ˆŒÜ—z‘z $§,¡,°iÔ@ˆŒÜ�J‰J�q 	Ô*ˆÜ�J‰J�q 	Ô*ˆð ˆØˆ
ÜŸ	™	 !°$Ô7‰ˆˆIÜ—I‘I˜i¬¨Q«Ó0ˆ	Ü—7‘7˜9Ó%ˆØˆÜ(¬¨R°¸IÀaÀb¸MÓ)JÓKó 	‰OˆA‰|��B˜à—K‘K Ñ%ˆEØ—;‘;˜r‘?ˆDØ× Ñ  §¡¨e°DÐ!9Ô:Ø×Ñ˜dŸi™i¨¨dÐ3Ô4ô ŸI™I a¨¨2 h©t°¨t¡nÀ4ÔH‰MˆB�	Ü�2‹w˜"˜r™'Ò!Ø×$Ñ$ Q r¨" XÔ.Ø×!Ñ! ! B r (Õ+à×$Ñ$ Q r¨" X©d°¨d¡^°IÑ%>Ô?Ø×!Ñ! ! B r (©4¨R¨4¡.°Ñ";Ô<Ü! "›g�˜‘àŠDð#	ð( —‘˜B‘ˆØ×Ñ˜TŸ\™\¨%¨&Ð1Ô2Ø×Ñ˜$Ÿ)™) E FÐ+Ô,ô —~‘~ mÓ4ˆŒÜ—N‘N :Ó.ˆŒ	Ü�x‰x˜Ÿ™×)Ñ)°Ô;ˆÙ˜A“,ˆˆQ‰Ü—g‘g˜dŸk™kÓ*ˆØ�B‹˜8Ñ#‹ØˆˆQˆRˆÜ—i‘i ¨$Ô/ˆŒáà&+ˆDÔ#Ø×ÑÔà×Ñ UÐÕ+rj   c                 ó8  — | j                   dk(  rE| j                  «       }| j                  |j                  |j                  ff|j
                  |¬«      S | j                  | j
                  «      \  }}| j                  }t        j                  t        |«      | j                  j                  ¬«      }t        j                  || j                  |«       | j                  ||f«      }| j                  | j                  |f| j
                  || j                  ¬«      S )Nr   r5   r+   r2   )rR   ÚtocsrrI   r>   r=   r/   rA   rE   r”   rH   r,   r   Ú	expandptrr<   )rU   r3   Úcsrrô   Ú	minor_dimÚminor_indicesÚmajor_indicesrÐ   s           r`   rÏ   z_cs_matrix.tocooŠ  sÞ   € Ø�9‰9˜Š>Ø—*‘*“,ˆCØ×&Ñ&¨¯©°3·;±;°.Ð'AÀ3Ç9Á9ÐSWÐ&ÓXÐXØ#Ÿz™z¨$¯*©*Ó5Ñˆ	�9ØŸ™ˆÜŸ™¤ ]Ó!3¸4¿<¹<×;MÑ;MÔNˆÜ×Ñ˜y¨$¯+©+°}ÔEØ—‘˜]¨MÐ:Ó;ˆà×"Ñ"Ø�Y‰Y˜Ð §¡°$¸d¿j¹jð #ó 
ð 	
rj   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)rA   Ú_process_toarray_argsr®   r¯   Úf_contiguousrM   r˜  rÆ   r°   rB   r   r<   r=   r>   )rU   r¬   r  ru   r³   rX   rY   s          r`   rÂ   z_cs_matrix.toarrayš  s¿   € Øˆ;˜5˜=Ø—J‘J˜tÓ$ QÑ'ˆEØ×(Ñ(¨°Ó4ˆØ—	‘	×&Ò&¨#¯)©)×*@Ò*@ÜÐEÓFÐFà�9‰9×!Ò!Ø—
‘
“ˆAØ‰Aà—
‘
“ˆAØ—‘ˆAØ�w‰w�q—~‘~Ó&‰ˆˆ1Ü�A�q˜!Ÿ(™( A§I¡I¨q¯v©v°qÔ9Øˆ
rj   c                 óÎ   — | j                  | j                  «      \  }}t        j                  ||| j                  | j
                  | j                  «       | j                  «        y)z\Remove zero entries from the array/matrix

        This is an *in place* operation.
        N)rA   rB   r   Úcsr_eliminate_zerosr<   r=   r>   rr   ©rU   rX   rY   s      r`   rx   z_cs_matrix.eliminate_zeros±  sG   € ð
 �z‰z˜$×+Ñ+Ó,‰ˆˆ1Ü×(Ñ(¨¨A¨t¯{©{¸D¿L¹LÈ$Ï)É)ÔTØ�
‰
�rj   Úreturnc                 ó  — t        | dd«      sd| _        | j                  S t        | d«      sOt        t	        j
                  t        | j                  «      dz
  | 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  Úboolr   Úcsr_has_canonical_formatrH   r<   r=   Úhas_canonical_format©rU   s    r`   r«  z_cs_matrix.has_canonical_formatº  s{   € ô �tÐ2°DÔ9à).ˆDÔ&ð ×)Ñ)Ð)ô ˜Ð6Ô7Ü(,Ü×5Ñ5Ü˜Ÿ™Ó$ qÑ(¨$¯+©+°t·|±|óEó)ˆDÔ%ð ×)Ñ)Ð)rj   r0  c                 ó8   — t        |«      | _        |rd| _        y y )NT)r©  r¨  r‚  ©rU   r0  s     r`   r«  z_cs_matrix.has_canonical_formatÑ  s   € ä%)¨#£YˆÔ"ÙØ&*ˆDÕ#ð rj   c                 ó  — | j                   ry| j                  «        | j                  | j                  «      \  }}t	        j
                  ||| j                  | j                  | j                  «       | j                  «        d| _         y)zfEliminate duplicate entries by adding them together

        This is an *in place* operation.
        NT)
r«  rˆ  rA   rB   r   Úcsr_sum_duplicatesr<   r=   r>   rr   r¤  s      r`   rK   z_cs_matrix.sum_duplicates×  sg   € ð
 ×$Ò$ØØ×ÑÔà�z‰z˜$×+Ñ+Ó,‰ˆˆ1Ü×'Ñ'¨¨1¨d¯k©k¸4¿<¹<ÈÏÉÔSà�
‰
ŒØ$(ˆÕ!rj   c                 óÐ   — t        | d«      sOt        t        j                  t	        | j
                  «      dz
  | j
                  | j                  «      «      | _        | j                  S )z¢Whether 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_indicesrH   r<   r=   r§  r¬  s    r`   r‚  z_cs_matrix.has_sorted_indicesæ  sV   € ô �tÐ2Ô3Ü'+Ü×3Ñ3Ü˜Ÿ™Ó$ qÑ(¨$¯+©+°t·|±|óEó(ˆDÔ$ð ×'Ñ'Ð'rj   c                 ó$   — t        |«      | _        y r3  )r©  r§  r®  s     r`   r‚  z_cs_matrix.has_sorted_indicesö  s   € ä#'¨£9ˆÕ rj   c                 óF   — | j                  «       }|j                  «        |S )z?Return a copy of this array/matrix with sorted indices
        )r3   rˆ  )rU   ÚAs     r`   Úsorted_indicesz_cs_matrix.sorted_indicesû  s   € ð �I‰I‹KˆØ	�‰ÔØˆrj   c                 óÄ   — | j                   sTt        j                  t        | j                  «      dz
  | j                  | j
                  | j                  «       d| _         yy)z9Sort the indices of this array/matrix *in place*
        r   TN)r‚  r   Úcsr_sort_indicesrH   r<   r=   r>   r¬  s    r`   rˆ  z_cs_matrix.sort_indices  sL   € ð ×&Ò&Ü×)Ñ)¬#¨d¯k©kÓ*:¸QÑ*>ÀÇÁØ*.¯,©,¸¿	¹	ôCà&*ˆDÕ#ð 'rj   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)	rA   rB   rH   r<   rM   r=   rs   r>   r   )rU   rô   s     r`   rr   z_cs_matrix.prune  sµ   € ð —J‘J˜t×0Ñ0Ó1°!Ñ4ˆ	äˆt�{‰{Ó˜y¨1™}Ò,ÜÐ?Ó@Ð@Üˆt�|‰|Ó˜tŸx™xÒ'ÜÐHÓIÐIÜˆt�y‰y‹>˜DŸH™HÒ$ÜÐEÓFÐFä# D§L¡L°°$·(±(Ð$;Ó<ˆŒÜ  §¡¨9¨D¯H©HÐ!5Ó6ˆ�	rj   c                 óè  — t        |t        | t        «      ¬«      }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 )Nr&   r  r   r   zshape must be divisible into z blocks. Got r8  )r!   r9   r	   r  r  ÚdivmodrM   r/   rA   rH   rB   r=   r<   r>   rE   Úresizer–   Úallr  r  r9  r?   )rU   r/   ÚbmÚbnÚnew_MÚrmÚnew_NÚrnrX   rY   rt  r  r0  s                r`   r¼  z_cs_matrix.resize  s  € Ü˜E¬J°t¼WÓ,EÔFˆä�4˜Ô%Ø—^‘^‰FˆB�Ü˜u Q™x¨Ó,‰IˆE�2Ü˜u Q™x¨Ó,‰IˆE�2Ù‘RÜ Ð#@ÀÇÁÐ@PØ#0°°ð"9ó :ð :à—:‘:˜a‘= BÑ&¨¯
©
°1©¸Ñ(;ˆq‰AàŸ:™:¬s°5«z¸!ª|¡eÀ!ÀUÈ1ÁXÀÓO‰LˆE�5Ø—:‘:˜d×/Ñ/Ó0‰DˆAˆqà�1Š9ØŸ<™<Ð(;¨¯©°UÑ);Ð<ˆDŒLØŸ	™	Ð"5 4§;¡;¨uÑ#5Ð6ˆDŒIØŸ+™+ j u¨q¡yÐ1ˆD�KØ�QŠYÜŸ)™) D§K¡K°¸±Ó;ˆDŒKØ�K‰K˜˜A™˜Ð×$Ñ$ T§[¡[°¡^Ô4à�1Š9Ø—<‘< %Ñ'ˆDÜ—6‘6˜$”<Ø#Ÿ|™|¨DÑ1�”Ø ŸI™I d™O�”	Ø#'×#5Ñ#5´b·f±f¸dÓ#CÑ �˜SØ—‘× Ñ  Ô#Ø/2�—‘˜A˜B� Ñ,Ü—	‘	˜$Ÿ+™+¨4¯;©;Õ7àˆ�rj   c                 ó:  — |r[| j                  || j                  j                  «       | j                  j                  «       f| j                  |j
                  ¬«      S | j                  || j                  | j                  f| j                  |j
                  ¬«      S )zµReturns 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.
        r.   )rN   r=   r3   r<   r/   r,   )rU   r>   r3   s      r`   rw   z_cs_matrix._with_dataH  s‰   € ñ
 Ø—>‘> 4¨¯©×):Ñ):Ó)<Ø#'§;¡;×#3Ñ#3Ó#5ð#7à(,¯
©
Ø(,¯
©
ð "ó 4ð 4ð
 —>‘> 4¨¯©°t·{±{Ð"CØ(,¯
©
¸$¿*¹*ð "ó Fð Frj   c                 ó8  — | j                  |«      }t        t        | j                  |z   | j                  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                  \  }
} ||
|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(   r+   )r~   r’   r‘   rŽ   r�   rï   )rN   rä   r   r:   rs   rC   r<   r=   rE   r”   r/   r€   r   r,   rB   rP   r>   rr   )rU   ry   rz   rå   ÚmaxnnzrZ   r<   r=   Úbool_opsr>   rX   rY   rµ  s                r`   r‡   z_cs_matrix._binoptV  s‰  € à—‘˜uÓ%ˆô ”\ 4§;¡;°Ñ#3°d·k±kÑ#AÓBˆà—‘˜EŸI™IÑ%ˆØ×)Ñ)¨4¯;©;¸¿¹Ø%*§\¡\°5·=±=ð+Bà+1ð *ó 3ˆ	ô —‘˜$Ÿ+™+×+Ñ+°9Ô=ˆÜ—(‘(˜6¨Ô3ˆâ;ˆØ�‰>Ü—8‘8˜F¬"¯(©(Ô3‰Dä—8‘8˜F¬&°·±¸U¿[¹[Ó*IÔJˆDà× Ñ ‰ˆˆ1Ù
ˆ1ˆaÜ�:‰:�d—k‘k¨Ô3Ü�:‰:�d—l‘l¨)Ô4Ø�9‰9Ü�:‰:�e—l‘l¨)Ô4Ü�:‰:�e—m‘m¨9Ô5Ø�:‰:Ø�7˜Dô	"ð �N‰N˜D '¨6Ð2¸$¿*¹*ˆNÓEˆØ	�‰Œ	àˆrj   c                 ó.  — |j                   | j                   k7  rt        d«      ‚| j                  |d«      }t        j                  |j
                  t        j                  «      r®t        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�   Ú_eldiv_r+   r   rb   r   )r/   rM   r‡   rE   Ú
issubdtyper,   Úinexactr”   r–   ÚnanÚnonzerorR   rÏ   r>   rÐ   r±   )rU   ry   rg  r  rÐ   s        r`   Ú_divide_sparsez_cs_matrix._divide_sparsey  sÑ   € ð �;‰;˜$Ÿ*™*Ò$ÜÐ2Ó3Ð3à�L‰L˜ 	Ó*ˆä�=‰=˜Ÿ™¤"§*¡*Ô-ô
 —(‘(˜4Ÿ:™:¨T¯Z©ZÔ8ˆCØ�H‰H”R—V‘VÔØ—]‘]“_ˆFØ�y‰y˜AŠ~Ø  ™*˜�ØˆC�‰KØ—‘“	ˆAØŸF™FˆC�—‘‰MØ—?‘? 3Ó'Ð'ð ˆCØˆJrj   )NNFr3  )T)r   )NNN©F)NN)ArO   Ú
__module__Ú__qualname__Ú__doc__r8   ri   r   rT   r|   rŠ   rŒ   rš   rž   r¢   r¥   r©   r´   r¸   r»   rÊ   ræ   rê   rÅ   rú   r   r	  r  rÄ   r  r#  r'  r.  r1  r6  r4  r+  r5  r,  r*  rW  r[  r_  rb  ri  ro  ry  rV  rd  rn  rÏ   rÂ   rx   Úpropertyr©  r«  ÚsetterrK   r‚  r¶  rˆ  rr   r¼  rw   r‡   rÎ  rì   rj   r`   r$   r$      sH  „ ñóU,ón3ð& —o‘o×-Ñ-€G„Oó7-òFò""òH "òD!"òF9ò9ò8ò8ò	3ò-ò.òuòv
7òò 4Hól	ð ×'Ñ'×/Ñ/€HÔò9ò.Oð —o‘o×-Ñ-€G„OòOð —o‘o×-Ñ-€G„OóFð4 —+‘+×%Ñ%€C„Kó"ò48òJ*ò<ò8òHò
;óB&;òP%;óNEó <ò*(ò(ò ò ò ò2B=òHò&%-òN-ò(F,óX
ð —M‘M×)Ñ)€E„Móð" —o‘o×-Ñ-€G„Oòð ð* dò *ó ð*ð, × Ñ ð+¨ò +ó !ð+ò
)ð ð( Dò (ó ð(ð ×Ñð- dò -ó ð-òò+ò7ò!ðF —^‘^×+Ñ+€F„NóFò!óFrj   r$   c                 óŒ   — ddl m}m} |r|n|}t        | «      }t	        j
                  |dz   «      }|dd } || ||f||f¬«      S )z¼build 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_matrixNrb   rï   )Ú_csrrÖ  r×  rH   rE   rÖ   )r>   rW   rÖ  r×  rY   r<   r=   s          r`   rÇ   rÇ   –  sN   € ÷ ,Ù%‘	¨:€IäˆD‹	€AÜ�Y‰Y�q˜1‘uÓ€FØ�S�bˆk€Gá�d˜G VÐ,°Q¸°FÔ;Ð;rj   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)r9   r?  r=   rM   rt   r   r   Ú	TypeError)ÚslÚnumrP  rQ  Ústrides        r`   rO  rO  ¦  sÎ   € Ø	€zØ�CˆBˆð ˆrˆ6€Mô 
�BœÔ	ØŸ™ C›‰ˆˆB�Ø�QŠ;ÜÐCÓDÐDÜ��R‹[ˆð ˆrˆ6€Mô 
�2ŒØ�Š6Ø�#‰IˆBØ�R˜!‘VˆBˆØ�Š6�R˜#’XÜÐ9¸"¸¸SÀÀÀDÈÈÐNÓOÐOð ˆrˆ6€Mô Ð2Ó3Ð3rj   rÏ  ).rÒ  Ú__all__Úwarningsr   r‚   ÚnumpyrE   Ú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Ç   rO  rì   rj   r`   ú<module>rç     sq   ðÙ DØ
€å Û ã ß 9ç FÓ Fß .Ý ÷A÷ Aó Aõ ÷G÷ G÷ Gó Gô
}�˜}¨jô }ó@,<ó rj   