Ë
    çÿæiZË  ã                   ó   — d Z g ZddlmZ ddlZddlZddlmZm	Z	 ddl
mZmZmZmZ ddlmZmZ ddlmZ dd	lmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$ dd
l%m&Z& ddl'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2  G d„ deee&«      Z3dd„Z4d„ Z5y)z>Base class for sparse matrix formats using compressed storage.é    )ÚwarnN)Ú_prune_arrayÚcopy_if_neededé   )Ú_spbaseÚissparseÚsparrayÚSparseEfficiencyWarning)Ú_data_matrixÚ_minmax_mixin)Ú_sparsetools)Úget_csr_submatrixÚcsr_sample_offsetsÚcsr_todenseÚcsr_sample_valuesÚcsr_row_indexÚcsr_row_sliceÚcsr_column_index1Úcsr_column_index2Úcsr_diagonalÚ	expandptrÚcsr_has_canonical_formatÚcsr_eliminate_zerosÚcsr_sum_duplicatesÚcsr_has_sorted_indicesÚcsr_sort_indicesÚcsr_matmat_maxnnzÚ
csr_matmat)Ú
IndexMixin)ÚupcastÚupcast_charÚ	to_nativeÚisshapeÚgetdtypeÚ	isintlikeÚdowncast_intp_indexÚget_sum_dtypeÚcheck_shapeÚget_index_dtypeÚbroadcast_shapesc                   ó4  — e Zd ZdZd6ddœd„Zd7d„Zej
                  j                  e_        d7d„Zej                  j                  e_        d8d„Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd9d„Zej"                  j                  e_        d:d„Zej$                  j                  e_        d7d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd;d„Zd„ Zd;d„Zd6d„Zd„ Zd„ Zd„ Zd„ Z d „ Z!d!„ Z"d"„ Z#d#„ Z$d8d$„Z%ejJ                  j                  e%_        d<d%„Z&ejL                  j                  e&_        d&„ Z'e(d'e)fd(„«       Z*e*jV                  d)e)fd*„«       Z*d+„ Z,e(d'e)fd,„«       Z-e-jV                  d)e)fd-„«       Z-d.„ Z.d/„ Z/d0„ Z0d1„ Z1ejb                  j                  e1_        d8d2„Z2d3„ Z3d4„ Z4d;d5„Z5y)=Ú
_cs_matrixzY
    base array/matrix class for compressed row- and column-oriented arrays/matrices
    N©Úmaxprintc                ó~	  — t        j                  | ||¬«       t        |«      r�|j                  | j                  k(  r|r|j	                  «       }n|j                  | j                  «      }|j                  |j                  |j                  |j                  f\  | _        | _        | _        | _	        �nçt        |t        «      �rt        || j                  ¬«      rÅt        || j                  ¬«      | _	        | 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                  «        �n�t1        |«      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        | tF        «      r7|jH                  dk7  r(| j                  dk(  rt=        d|jH                  › d�«      ‚|jH                  dkD  rt=        d|jH                  › d�«      ‚| j3                  ||¬«      }	|	j5                  | j                  «      }
|
\  | _        | _        | _        | _	        |�t        || j                  ¬«      | _	        no| j&                  €c	 t1        | j                  «      dz
  }| j                  j%                  «       dz   }t        | j                  ||f«      | j                  ¬«      | _	        |�-t-        |«      }| j                  jK                  |d¬«      | _        | jM                  d¬«       y # tD        $ r+}t=        d| j>                  j@                  › d|› �«      |‚d }~ww xY w# tD        $ r}t=        d«      |‚d }~ww xY w)Nr-   ©Úallow_nd©Úmaxvalr   )Údefaultr   ©Údtypeé   ©Úshaper6   é   T)r3   Úcheck_contents©Úcopyr6   zunrecognized z constructor input: ÚcsczCSC arrays don't support zD input. Use 2DzCSR arrays don't yet support zD.z!unable to infer matrix dimensionsF©r=   ©Ú
full_check)'r   Ú__init__r   Úformatr=   ÚasformatÚindptrÚindicesÚdataÚ_shapeÚ
isinstanceÚtupler#   Ú	_allow_ndr(   Ú_swapÚ_shape_as_2dÚ_get_index_dtypeÚmaxr9   ÚnpÚzerosr$   ÚfloatÚlenÚ_coo_containerÚ_coo_to_compressedÚsum_duplicatesr   ÚarrayÚ
ValueErrorÚ	__class__Ú__name__ÚasarrayÚ	Exceptionr	   ÚndimÚastypeÚcheck_format)ÚselfÚarg1r9   r6   r=   r.   ÚMÚNÚ	idx_dtypeÚcooÚarraysrG   rF   rE   r3   ÚeÚnewdtypes                    úm/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/scipy/sparse/_compressed.pyrB   z_cs_matrix.__init__   s  € Ü×Ñ˜d D°8Õ<ä�DŒ>Ø�{‰{˜dŸk™kÒ)©dØ—y‘y“{‘à—}‘} T§[¡[Ó1�à—‘˜TŸ\™\¨4¯9©9°d·k±kðAÑ=ˆDŒK˜œ t¤y°$¶+ô ˜œeÕ$Ü�t d§n¡nÕ5ô *¨$¸¿¹ÔH�”Ø—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¸!ª^ÀÇÁÈuÒ@TÜ Ð#<¸T¿Y¹Y¸KÀÐ!WÓXÐXØ�y‰y˜1Š}Ü Ð#@ÀÇÁÀÈ2Ð!NÓOÐOà×%Ñ% d°%Ð%Ó8ˆCØ×+Ñ+¨D¯J©JÓ7ˆFØ@FÑ=ˆDŒK˜œ t¤y°$´+ð ÐÜ% e°d·n±nÔEˆD�KØ�Z‰ZÐðMÜ˜Ÿ™Ó$ qÑ(�Ø—L‘L×$Ñ$Ó&¨Ñ*�ô & d§j¡j°!°Q°Ó&8À4Ç>Á>ÔRˆDŒKàÐÜ “ˆHØŸ	™	×(Ñ(¨¸Ð(Ó>ˆDŒIà×Ñ UÐÕ+øô; ò FÜ  =°·±×1HÑ1HÐ0Ið J7Ø7;°fð">ó ?ØDEðFûðFûô( ò MÜ Ð!DÓEÈ1ÐLûðMús0   ËQ+ Ï5R" Ñ+	RÑ4&RÒRÒ"	R<Ò+R7Ò7R<c                 óà  — |€t        | j                  d   «      S | j                  dk(  r'|dv rt        | j                  d   «      S t        d«      ‚|dk  r|dz  }| j	                  |d|z
  f«      \  }}| j	                  | j
                  «      \  }}|dk(  r*t        j                  t        | j                  «      |¬«      S |dk(  rt        j                  | j                  «      S t        d«      ‚)Néÿÿÿÿr   ©r   rk   úaxis out of boundsr   r7   ©Ú	minlength)ÚintrE   r]   rX   rL   r9   rP   Úbincountr&   rF   Údiff)r`   ÚaxisÚ_rc   s       ri   Ú_getnnzz_cs_matrix._getnnzv   sÕ   € Øˆ<Ü�t—{‘{ 2‘Ó'Ð'Ø�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ÐPQÔRÐRØ˜’Ü—w‘w˜tŸ{™{Ó+Ð+ÜÐ1Ó2Ð2ó    c                 óŠ  — | j                  «        |€t        j                  | j                  «      S | j                  dk(  r.|dvrt        d«      ‚t        j                  | j                  «      S |dk  r|dz  }| j                  |d|z
  f«      \  }}|dk(  rx| j                  | j                  «      \  }}| j                  dk7  }|j                  «       r| j                  n| j                  |   }t        j                  t        |«      |¬«      S |dk(  r | j                  j                  «       rt        j                  | j                  «      S t        j                  | j                  «      }t        j                   |D ��cg c]'  \  }}t        j                  | j                  || «      ‘Œ) c}}«      S t        d«      ‚c c}}w )Nr   rl   rm   r   r7   rn   )rV   rP   Úcount_nonzerorG   r]   rX   rL   r9   ÚallrF   rq   r&   rr   rE   Ú	itertoolsÚpairwiserW   )	r`   rs   rt   rc   ÚmaskÚidxÚpairsÚiÚjs	            ri   rx   z_cs_matrix.count_nonzeroŠ   sh  € Ø×ÑÔØˆ<Ü×#Ñ# D§I¡IÓ.Ð.à�9‰9˜Š>Ø˜7Ñ"Ü Ð!5Ó6Ð6Ü×#Ñ# D§I¡IÓ.Ð.à�!Š8Ø�A‰IˆDØ—*‘*˜d A¨¡HÐ-Ó.‰ˆˆaØ�1Š9Ø—:‘:˜dŸj™jÓ)‰DˆAˆqØ—9‘9 ‘>ˆDØ"&§(¡(¤*�$—,’,°$·,±,¸tÑ2DˆCÜ—;‘;Ô2°3Ó7À1ÔEÐEØ�QŠYØ�y‰y�}‰}ŒÜ—w‘w˜tŸ{™{Ó+Ð+Ü×&Ñ& t§{¡{Ó3ˆEÜ—8‘8É%ÔPÉ%Á$À!ÀQœR×-Ñ-¨d¯i©i¸¸!¨nÕ=È%ÒPÓQÐQäÐ1Ó2Ð2ùó Qs   Æ ,F?
c                 ó:  — | j                   j                  j                  dk7  r/t        d| j                   j                  j                  › d�d¬«       | j
                  j                  j                  dk7  r/t        d| j
                  j                  j                  › d�d¬«       | j                  j                  | j
                  j                  | j                   j                  fD ]  }|dk7  sŒ	t        d«      ‚ | j                  | j                  «      \  }}t        | j                   «      |dz   k7  r't        d	t        | j                   «      › d
|dz   › �«      ‚| j                   d   dk7  rt        d«      ‚t        | j
                  «      t        | j                  «      k7  rt        d«      ‚| j                   d   t        | j
                  «      kD  rt        d«      ‚| j                  «        |�r+| j                  dkD  rŽ| j
                  j                  «       |k\  rt        d|› �«      ‚| j
                  j                  «       dk  rt        d«      ‚t!        j"                  | j                   «      j                  «       dk  rt        d«      ‚| j%                  | j                   | j
                  f«      }t!        j&                  | j                   |¬«      | _         t!        j&                  | j
                  |¬«      | _        t)        | j                  «      | _        yy)aÎ  Check whether the array/matrix respects the CSR or CSC format.

        Parameters
        ----------
        full_check : bool, optional
            If `True`, run rigorous check, scanning arrays for valid values.
            Note that activating those check might copy arrays for casting,
            modifying indices and index pointers' inplace.
            If `False`, run basic checks on attributes. O(1) operations.
            Default is `True`.
        r   z$indptr array has non-integer dtype (Ú)r:   ©Ú
stacklevelz%indices array has non-integer dtype (r   z'data, indices, and indptr should be 1-Dzindex pointer size z should be r   z!index pointer should start with 0z*indices and data should have the same sizerk   zQLast value of index pointer should be less than the size of index and data arrayszindices must be < zindices must be >= 0z(indptr must be a non-decreasing sequencer5   N)rE   r6   Úkindr   ÚnamerF   rG   r]   rX   rL   rM   rS   ÚpruneÚnnzrO   ÚminrP   rr   rN   r[   r"   )r`   rA   Úxrb   rc   rd   s         ri   r_   z_cs_matrix.check_format¦   s|  € ð �;‰;×Ñ×!Ñ! SÒ(ÜÐ7¸¿¹×8IÑ8I×8NÑ8NÐ7OÈqÐQØõà�<‰<×Ñ×"Ñ" cÒ)ÜÐ8¸¿¹×9KÑ9K×9PÑ9PÐ8QÐQRÐSØõð —)‘)—.‘. $§,¡,×"3Ñ"3°T·[±[×5EÑ5EÓFˆAØ�A‹vÜ Ð!JÓKÐKð Gð
 �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ð rv   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.
        Tr?   )rV   Ú
_with_datarG   Úeliminate_zeros)r`   ÚotherÚopÚress       ri   Ú_scalar_binoptz_cs_matrix._scalar_binopté   s>   € ð 	×ÑÔØ�o‰o™b §¡¨EÓ2¸ˆoÓ>ˆØ×ÑÔØˆ
rv   c                 óH  — |j                   | j                   k7  r&t        d| j                   › d|j                   › d�«      ‚t        | j                  j                  |j                  j                  «      }| j                  d«      d   }t        j                  |||d¬«      }|j                  j                  r|n|j                  }| j                  | j                  «      \  }}t        ||| j                  | j                  | j                  |«       | j!                  |d¬	«      S )
NzIncompatible shapes (ú and r‚   ÚCFr   T)r6   Úorderr=   Fr?   )r9   rX   r!   r6   ÚcharrL   rP   rW   ÚflagsÚc_contiguousÚTrM   r   rE   rF   rG   Ú
_container)r`   rŽ   r6   r•   ÚresultÚyrb   rc   s           ri   Ú
_add_densez_cs_matrix._add_denseö   sÛ   € Ø�;‰;˜$Ÿ*™*Ò$ÜÐ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Ð2rv   c                 ó&   — | j                  |d«      S )NÚ_plus_©Ú_binopt©r`   rŽ   s     ri   Ú_add_sparsez_cs_matrix._add_sparse  s   € Ø�|‰|˜E 8Ó,Ð,rv   c                 ó&   — | j                  |d«      S )NÚ_minus_r    r¢   s     ri   Ú_sub_sparsez_cs_matrix._sub_sparse  s   € Ø�|‰|˜E 9Ó-Ð-rv   c                 óš  — t        |«      �rû| j                  |j                  k(  r#| j                  |«      }| j                  |d«      S |j                  dk(  rS| j	                  |j                  «       d   «      }| j                  dk(  r |j                  d| j                  d   f«      S |S |j                  dk(  r"| j	                  |j                  «       d   «      S | j                  dv r)|j	                  | j                  j                  «       «      S | j                  \  }}|j                  \  }}|dk(  r4|dk(  r/|j                  | j                  ||«      j                  «       «      S |dk(  r4|dk(  r/| j                  |j                  ||«      j                  «       «      S t        | t        «      }|dk(  rb||k(  r]t        |j                  «       j!                  «       |«      }| j                  |«      }| j                  dk(  r|S |j                  d|f«      S |dk(  r>||k(  r9t        | j                  «       j!                  «       |«      }	|j                  |	«      S |dk(  r>||k(  r9t        |j                  «       j!                  «       |«      }|j                  | «      S |dk(  r>||k(  r9t        | j                  «       j!                  «       |«      }
|
j                  |«      S t#        d	| j                  › d
|j                  › �«      ‚t%        j&                  |«      }|j                  dkD  r$t%        j(                  | j                  «       |«      S |j*                  dk(  rp|j,                  t$        j.                  k(  rt0        S t3        | j                  |j                  «      }| j	                  |j4                  d   «      j                  |«      S | j                  dv r]t3        | j                  |j                  «      }t%        j(                  | j                  j                  «       |«      j                  |«      S | j7                  «       }| j                  |j                  k(  rat%        j(                  |j                  ||j8                     «      }|j;                  t$        j<                  «      j!                  «       |_        |S t%        j>                  |«      }| j                  d   dk(  s| j                  dk(  �r¿|j                  d   dk(  r!t%        j(                  |j                  |«      }nv|j                  d   | j                  d   k(  r2t%        j(                  |j                  |dd…|j@                  f   «      }n%t#        d	| j                  › d
|j                  › �«      ‚| jC                  |j@                  |jD                  |j                  d   z  ¬«      }t%        jF                  t%        jH                  |j                  d   |¬«      |jD                  «      }t%        jJ                  |j@                  jM                  |d¬«      |j                  d   «      }| jO                  |j;                  t$        j<                  «      j!                  «       ||ff|j                  d   | j                  d   fd¬«      S | j                  d   dk(  �rÉ|j                  d   dk(  r(t%        j(                  |j                  dd…df   |«      }ny|j                  d   | j                  d   k(  r5t%        j(                  |j                  dd…df   ||jP                     «      }n%t#        d	| j                  › d
|j                  › �«      ‚| jC                  |jP                  |jD                  |j                  d   z  ¬«      }t%        jF                  |jP                  jM                  |d¬«      |j                  d   «      }t%        jJ                  t%        jH                  |j                  d   |¬«      |jD                  «      }| jO                  |j;                  t$        j<                  «      j!                  «       ||ff| j                  d   |j                  d   fd¬«      S |j                  d   dk(  r_| j                  d   |j                  d   k(  r@t%        j(                  |j                  |dd…|j@                  f   j!                  «       «      }n’|j                  d   dk(  r[| j                  d   |j                  d   k(  r<t%        j(                  |j                  ||jP                     j!                  «       «      }n%t#        d	| j                  › d
|j                  › �«      ‚|j;                  t$        j<                  «      j!                  «       |_        |S )z?Element-wise multiplication by array/matrix, vector, or scalar.Ú_elmul_©r   r   )r   r   r   r   ©r   )rª   r©   r7   úinconsistent shapes r“   rk   Nr2   r5   Fr?   ©r9   r=   ))r   r9   rY   r¡   Ú_mul_scalarÚtoarrayr]   ÚreshaperG   ÚsumrM   Ú_matmul_sparseÚtocscrI   r	   Ú_make_diagonal_csrÚravelrX   rP   Ú
asanyarrayÚmultiplyÚsizer6   Úobject_ÚNotImplementedr*   ÚflatÚtocooÚcoordsÚviewÚndarrayÚ
atleast_2dÚcolrN   rˆ   ÚrepeatÚarangeÚtiler^   rT   Úrow)r`   rŽ   r›   ÚsMÚsNÚoMÚoNÚis_arrayÚ	new_otherr=   Únew_selfÚbshapeÚretrG   Úother2drd   rÄ   rÀ   s                     ri   Ú_multiply_2d_with_broadcastingz)_cs_matrix._multiply_2d_with_broadcasting  s£  € ô �E�?Ø�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ÜÐ3°D·J±J°<¸uÀUÇ[Á[ÀMÐRÓSÐSô —‘˜eÓ$ˆà�:‰:˜Š>Ü—;‘;˜tŸ|™|›~¨uÓ5Ð5à�:‰:˜Š?Ø�{‰{œbŸj™jÒ(ä%Ð%Ü% d§j¡j°%·+±+Ó>ˆFØ×#Ñ# E§J¡J¨q¡MÓ2×:Ñ:¸6ÓBÐBà�:‰:˜Ñ'Ü% d§j¡j°%·+±+Ó>ˆ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‘ä Ð#7¸¿
¹
°|À5ÈÏÉÈÐ!VÓWÐWØ×-Ñ-¨c¯g©gØ58·W±W¸w¿}¹}ÈQÑ?OÑ5Oð .ó QˆIä—)‘)œBŸI™I g§m¡m°AÑ&6¸iÔHÈ#Ï'É'ÓRˆCÜ—'‘'˜#Ÿ'™'Ÿ.™.¨¸˜.Ó?ÀÇÁÈqÑAQÓRˆ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‘ä Ð#7¸¿
¹
°|À5ÈÏÉÈÐ!VÓWÐWØ×-Ñ-¨c¯g©gØ58·W±W¸w¿}¹}ÈQÑ?OÑ5Oð .ó QˆIä—)‘)˜CŸG™GŸN™N¨9¸5˜NÓAÀ7Ç=Á=ÐQRÑCSÓTˆCÜ—'‘'œ"Ÿ)™) G§M¡M°!Ñ$4¸IÔFÈÏÉÓPˆ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äÐ3°D·J±J°<¸uÀUÇ[Á[ÀMÐRÓSÐSØ—9‘9œRŸZ™ZÓ(×.Ñ.Ó0ˆŒØˆ
rv   c           	      óp  — | j                   \  }}t        j                  |t        | j                  j
                  |j                  j
                  «      ¬«      }t        t        | j                  dz   «      } |||| j                  | j                  | j                  ||«       | j                  dk(  r|d   S |S )Nr5   Ú_matvecr   r   )rM   rP   rQ   r!   r6   r–   Úgetattrr   rC   rE   rF   rG   r]   )r`   rŽ   rb   rc   r›   Úfns         ri   Ú_matmul_vectorz_cs_matrix._matmul_vectorƒ  sŒ   € Ø× Ñ ‰ˆˆ1ô —‘˜!¤;¨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°Ð6rv   c                 óæ  — | j                   \  }}|j                  d   }t        j                  ||ft	        | j
                  j                  |j
                  j                  «      ¬«      }t        t        | j                  dz   «      } ||||| j                  | j                  | j                  |j                  «       |j                  «       «       | j                  dk(  r|j                  |f«      S |S )Nrk   r5   Ú_matvecsr   )rM   r9   rP   rQ   r!   r6   r–   rÒ   r   rC   rE   rF   rG   r´   r]   r¯   )r`   rŽ   rb   rc   Ún_vecsr›   rÓ   s          ri   Ú_matmul_multivectorz_cs_matrix._matmul_multivector�  sº   € Ø× Ñ ‰ˆˆ1Ø—‘˜R‘ˆä—‘˜1˜f˜+Ü +¨D¯J©J¯O©O¸U¿[¹[×=MÑ=MÓ NôPˆô ”\ 4§;¡;°Ñ#;Ó<ˆÙ
ˆ1ˆa�˜Ÿ™ d§l¡l°D·I±IØ�;‰;‹=˜&Ÿ,™,›.ô	*ð �9‰9˜Š>Ø—>‘> 6 )Ó,Ð,Øˆrv   c                 óž  — | j                   \  }}|j                  }|dk(  r*|j                  d|j                  d   f«      j                  }|j                  dk(  r|j
                  n|j                  d   df\  }}d}| j                  dk(  r||fz  }|dk(  r||fz  }| j                  dk(  r|nd|dk(  r|ndf}| j                  |«      }| j                  | j                  |j                  |j                  f}	| j                  ||f«      \  }}| j                  | |f«      \  }
}| j                  |	«      }t        j                  |
j                  |¬«      }t        j                  |
j                  |¬«      }t        j                  |j                  |¬«      }t        j                  |j                  |¬«      }t        ||||||«      }|dk(  rk|dk(  r5t        j                  dt        | j                   |j                   «      ¬«      S | j                  |t        | j                   |j                   «      ¬«      S | j                  |	|¬«      }||k7  r†|}t        j                  |
j                  |¬«      }t        j                  |
j                  |¬«      }t        j                  |j                  |¬«      }t        j                  |j                  |¬«      }t        j"                  |dz   |¬«      }t        j"                  ||¬«      }t        j"                  |t        | j                   |j                   «      ¬«      }t%        |||||
j&                  |||j&                  |||«       |dk(  rt        j                  |d   «      S | j                  |||f|¬«      }||k7  r0|j(                  dk7  r|j+                  «       }|j                  |«      }|S )	Nr   r   r7   © r5   r2   ©r9   Úcsr)rM   r]   r¯   r9   r™   rH   rY   rE   rF   rL   rN   rP   r[   r   rW   r    r6   Úemptyr   rG   rC   Útocsr)r`   rŽ   rb   ÚK1Úo_ndimÚK2rc   Ú	new_shapeÚ
faux_shapeÚindex_arraysÚsÚord   Ús_indptrÚ	s_indicesÚo_indptrÚ	o_indicesrˆ   Únew_idx_dtyperE   rF   rG   r�   s                          ri   r±   z_cs_matrix._matmul_sparseŸ  s  € Ø×!Ñ!‰ˆˆ2à—‘ˆØ�QŠ;à—M‘M 1 e§k¡k°!¡nÐ"5Ó6×8Ñ8ˆEØ %§
¡
¨a¢�—’°e·k±kÀ!±nÀaÐ5H‰ˆˆAð ˆ	Ø�9‰9˜Š>Ø˜!˜ÑˆIØ�QŠ;Ø˜!˜ÑˆIØŸ9™9¨š>‘a¨q°vÀ²{±!ÈÐJˆ
à—‘˜uÓ%ˆØŸ™ T§\¡\°5·<±<ÀÇÁÐOˆà�z‰z˜1˜a˜&Ó!‰ˆˆ1Ø�z‰z˜4 ˜-Ó(‰ˆˆ1à×)Ñ)¨,Ó7ˆ	Ü—:‘:˜aŸh™h¨iÔ8ˆÜ—J‘J˜qŸy™y°	Ô:ˆ	Ü—:‘:˜aŸh™h¨iÔ8ˆÜ—J‘J˜qŸy™y°	Ô:ˆ	ä  1 h°	¸8ÀYÓOˆØ�!Š8Ø˜BŠÜ—x‘x ¬°·
±
¸E¿K¹KÓ)HÔIÐIØ—>‘> )´6¸$¿*¹*ÀeÇkÁkÓ3R�>ÓSÐSà×-Ñ-¨lÀ3Ð-ÓGˆØ˜IÒ%Ø%ˆIÜ—z‘z !§(¡(°)Ô<ˆHÜŸ
™
 1§9¡9°IÔ>ˆIÜ—z‘z !§(¡(°)Ô<ˆHÜŸ
™
 1§9¡9°IÔ>ˆIä—‘˜!˜a™% yÔ1ˆÜ—(‘(˜3 iÔ0ˆÜ�x‰x˜¤6¨$¯*©*°e·k±kÓ#BÔCˆä�1�aØ˜Y¨¯©Ø˜Y¨¯©Ø˜7 Dô	*ð
 ˜Š?Ü—8‘8˜D ™GÓ$Ð$Ø�n‰n˜d G¨VÐ4¸JˆnÓGˆØ˜Ò"Ø�z‰z˜UÒ"Ø—i‘i“k�Ø—+‘+˜iÓ(ˆCØˆ
rv   c           
      óÖ  — | j                  | j                  «      \  }}| j                  || f«      \  }}|| k  s||k\  r+t        j                  d| j                  j
                  ¬«      S t        j                  t        |t        |d«      z   |t        |d«      z
  «      t        | j
                  «      ¬«      }t        |||| j                  | j                  | j                  |«       |S )Nr   r5   )rL   r9   rP   rÝ   rG   r6   r‰   rO   r    r   rE   rF   )r`   Úkrb   rc   rt   rœ   s         ri   Údiagonalz_cs_matrix.diagonalÜ  s±   € Ø�z‰z˜$Ÿ*™*Ó%‰ˆˆ1Ø�z‰z˜1˜q˜b˜'Ó"‰ˆˆ1à��Š7�a˜1’fÜ—8‘8˜A T§Y¡Y§_¡_Ô5Ð5Ü�H‰H”S˜œS  A›Y™¨¬C°°1«I©Ó6¼fÀTÇZÁZÓ>PÔQˆÜ�Q˜˜1˜dŸk™k¨4¯<©<¸¿¹ÀAÔFØˆrv   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                  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.
        r7   Ú	blocksize))r   rk   )r   éþÿÿÿr   r   r5   rÚ   )rs   r6   Úout)r]   ÚhasattrrL   r'   r6   rP   rQ   rS   rE   Ú_minor_reduceÚaddÚ_ascontainerr™   r°   r   )r`   rs   r6   rò   Ú	res_dtyperÍ   Úmajor_indexÚvalues           ri   r°   z_cs_matrix.sumì  sÌ   € ð �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�à—7‘7 ¨%°S�7Ó9Ð9ä—;‘;˜t¨$°eÀÔEÐErv   c                 óÚ   — |€| j                   }t        j                  t        j                  | j                  «      «      }|j                  |t        | j                  |   «      «      }||fS )a›  Reduce nonzeros with a ufunc over the minor axis when non-empty

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

        Warning: this does not call sum_duplicates()

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

        value : array of self.dtype
            Reduce result for nonzeros in each major_index
        )rG   rP   Úflatnonzerorr   rE   Úreduceatr&   )r`   ÚufuncrG   rø   rù   s        ri   rô   z_cs_matrix._minor_reduce  sZ   € ð ˆ<Ø—9‘9ˆDÜ—n‘n¤R§W¡W¨T¯[©[Ó%9Ó:ˆØ—‘˜tÜ2°4·;±;¸{Ñ3KÓLóNˆà˜EÐ!Ð!rv   c                 ó  — | j                  | j                  «      \  }}| j                  ||f«      \  }}t        ||| j                  | j                  | j
                  ||dz   ||dz   «	      \  }}}	|	j                  | j                  ¬«      S )Nr   r5   )rL   r9   r   rE   rF   rG   r°   r6   )
r`   rÄ   rÀ   rb   rc   ÚmajorÚminorrE   rF   rG   s
             ri   Ú_get_intXintz_cs_matrix._get_intXint  s~   € Ø�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Ó)Ð)rv   c                 óÎ   — | j                  ||f«      \  }}|j                  dv r"|j                  dv r| j                  ||d¬«      S | j                  |«      j	                  |«      S )N©r   NTr?   )rL   ÚstepÚ_get_submatrixÚ_major_sliceÚ_minor_slice©r`   rÄ   rÀ   rÿ   r   s        ri   Ú_get_sliceXslicez_cs_matrix._get_sliceXslice&  sc   € Ø—z‘z 3¨ *Ó-‰ˆˆuØ�:‰:˜Ñ" u§z¡z°YÑ'>Ø×&Ñ& u¨e¸$Ð&Ó?Ð?Ø× Ñ  Ó'×4Ñ4°UÓ;Ð;rv   c                 óŠ  — | j                   j                  }| j                  | j                  «      \  }}| j                  ||f«      \  }}t	        j
                  ||¬«      }t	        j
                  ||¬«      }t	        j                  |j                  | j                  ¬«      }t        ||| j                  | j                   | j                  |j                  |j                  «       |j                  «       |«	       |j                  dk(  r| j                  |«      S | j                  |j                  |j                  «      «      S )Nr5   r   )rF   r6   rL   r9   rP   r[   rÝ   r·   r   rE   rG   r´   r]   rö   rY   r¯   )	r`   rÄ   rÀ   rd   rb   rc   rÿ   r   Úvals	            ri   Ú_get_arrayXarrayz_cs_matrix._get_arrayXarray,  så   € à—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Ð7rv   c                 ón   — | j                  ||f«      \  }}| j                  |«      j                  |«      S ©N)rL   Ú_major_index_fancyÚ_minor_index_fancyr  s        ri   Ú_get_columnXarrayz_cs_matrix._get_columnXarray;  s4   € à—z‘z 3¨ *Ó-‰ˆˆuØ×&Ñ& uÓ-×@Ñ@ÀÓGÐGrv   c           	      óP  — | 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                  j                  |d¬«      }| j                  j                  |d¬«      }||dz      ||   z
  }	t        j                  |dz   |¬«      }
t        j                  |	|
dd ¬«       |
d	   }t        j                  ||¬«      }t        j                  || j                  ¬«      }t!        ||||| j"                  ||«       | j                  |||
f|d¬
«      S )zBIndex along the major axis where idx is an array of ints.
        r5   r   r7   r   Fr?   N©rò   rk   r¬   )rN   rE   rF   rP   r[   r´   rL   rM   rS   r]   rY   r6   r^   rQ   ÚcumsumrÝ   r   rG   )r`   r}   rd   rF   rc   rb   râ   Úself_indptrÚself_indicesÚrow_nnzÚ
res_indptrrˆ   Úres_indicesÚres_datas                 ri   r  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·:±:�>Ó>Ð>à—k‘k×(Ñ(¨¸Ð(Ó?ˆØ—|‘|×*Ñ*¨9¸5Ð*ÓAˆà˜g¨™kÑ*¨[¸Ñ-AÑAˆÜ—X‘X˜a !™e¨9Ô5ˆ
Ü
�	‰	�'˜z¨!¨"˜~Õ.à˜‰nˆÜ—h‘h˜s¨)Ô4ˆÜ—8‘8˜C t§z¡zÔ2ˆÜØØØØØ�I‰IØØô	
ð �~‰~˜x¨°jÐAØ$-°Eð ó ;ð 	;rv   c           
      óh  — |t        d«      k(  r|r| j                  «       S | S | j                  | j                  «      \  }}|j	                  |«      \  }}}t        t        |||«      «      }| j                  dk(  r| j                  ||f«      n|f}|dk(  r| j                  || j                  ¬«      S ||}
}	|dk(  r|dk\  rd}
|dz   |dz   }}| j                  |||…   | j                  |	|
|…   z
  }| j                  j                  }t        j                  |dz   |¬«      }t        j                  ||dd ¬«       |dk(  rot        | j                  |   | j                  |   «      }t        j                  | j                  |   |¬«      }t        j                  | j                  |   |¬«      }nm|d   }t        j                   ||¬«      }t        j                   || j                  ¬«      }t#        |||| j                  | j                  | j                  ||«       | j                  |||f|d	¬
«      S )z@Index along the major axis where idx is a slice object.
        Nr7   r   r5   rk   r   r  r?   Fr¬   )Úslicer=   rL   rM   rF   rS   Úranger]   rY   r6   rE   rP   rQ   r  rW   rG   rÝ   r   )r`   r}   r=   rb   rc   ÚstartÚstopr  râ   Ústart0Ústop0Ústart1Ústop1r  rd   r  Úall_idxr  r  rˆ   s                       ri   r  z_cs_matrix._major_slicec  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ð ó ;ð 	;rv   c           
      óÒ  — | j                  | j                  | j                  f«      }| j                  j                  |d¬«      }| j                  j                  |d¬«      }t	        j
                  ||¬«      j                  «       }| j                  | j                  «      \  }}t        |«      }| j                  dk(  r| j                  ||f«      n|f}|dk(  r| j                  || j                  ¬«      S t	        j                  ||¬«      }	t	        j                  | j                  |¬«      }
t        |||||||	|
«       t	        j                   |«      j                  |d¬«      }|
d   }t	        j"                  ||¬«      }t	        j"                  || j                  ¬«      }t%        ||	t        | j                  «      || j&                  ||«       | j                  |||
f|d¬«      S )zBIndex along the minor axis where idx is an array of ints.
        Fr?   r5   r7   r   rk   r¬   )rN   rF   rE   r^   rP   r[   r´   rL   rM   rS   r]   rY   r6   rQ   Ú
empty_liker   ÚargsortrÝ   r   rG   )r`   r}   rd   rF   rE   rb   rc   rí   râ   Úcol_offsetsr  Ú	col_orderrˆ   r  r  s                  ri   r  z_cs_matrix._minor_index_fancy‹  s¦  € ð ×)Ñ)¨4¯<©<¸¿¹Ð*EÓFˆ	Ø—,‘,×%Ñ% 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ð ó ;ð 	;rv   c                 óº  — |t        d«      k(  r|r| j                  «       S | S | j                  | j                  «      \  }}|j	                  |«      \  }}}t        t        |||«      «      }|dk(  r.| j                  | j                  ||f«      | j                  ¬«      S |dk(  r| j                  ||¬«      S | j                  t        j                  |||«      «      S )z@Index along the minor axis where idx is a slice object.
        Nr   r5   r   )r   r=   )r  r=   rL   rM   rF   rS   r  rY   r6   r  r  rP   rÂ   )r`   r}   r=   rb   rc   r  r  r  s           ri   r  z_cs_matrix._minor_slice²  sÈ   € ð ”%˜“+ÒÙ"&�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ÐDrv   c                 óÔ  — | j                  | j                  «      \  }}t        ||«      \  }}t        ||«      \  }}	|dk(  r#|dk(  r||k(  r|	|k(  r|r| j                  «       S | S t	        ||| j
                  | j                  | j                  ||||	«	      \  }
}}| j                  ||z
  |	|z
  f«      }| j                  dk(  r|d   f}| j                  |||
f|| j                  d¬«      S )zbReturn a submatrix of this matrix.

        major, minor: None, int, or slice with step 1
        r   r   F)r9   r6   r=   )rL   rM   Ú_process_slicer=   r   rE   rF   rG   r]   rY   r6   )r`   rÿ   r   r=   rb   rc   Úi0Úi1Új0Új1rE   rF   rG   r9   s                 ri   r  z_cs_matrix._get_submatrixÂ  sö   € ð
 �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ð ó <ð 	<rv   c                 óV   — | j                  ||f«      \  }}| j                  |||«       y r  ©rL   Ú	_set_many©r`   rÄ   rÀ   rŠ   r   r€   s         ri   Ú_set_intXintz_cs_matrix._set_intXint×  ó(   € Ø�z‰z˜3 ˜*Ó%‰ˆˆ1Ø�‰�q˜!˜QÕrv   c                 óV   — | j                  ||f«      \  }}| j                  |||«       y r  r2  r4  s         ri   Ú_set_arrayXarrayz_cs_matrix._set_arrayXarrayÛ  r6  rv   c                 óR  —  | j                   | j                  ||f«      Ž  |j                  \  }}|dk7  xr |j                  d   dk(  }|dk7  xr |j                  d   dk(  }|j                  |j                  }	}t        j                  |j                  | j                  ¬«      }|j                  dk(  ry |r^t        j                  t        j                  |«      t        |«      «      }t        j                  |	|«      }	t        j                  ||«      }|r^t        j                  ||«      }t        j                  t        j                  |«      t        |	«      «      }	t        j                  ||«      }| j                  |||	f   |||	f   f«      \  }
}| j                  |
||«       y )Nr   r   r5   )Ú
_zero_manyrL   r9   rÄ   rÀ   rP   r[   rG   r6   r·   rÁ   rÂ   rS   rÃ   r3  )r`   rÄ   rÀ   rŠ   rb   rc   Úbroadcast_rowÚbroadcast_colÚrÚcr   r€   s               ri   Ú_set_arrayXarray_sparsez"_cs_matrix._set_arrayXarray_sparseß  sF  € àˆ�‰˜Ÿ™ S¨# JÓ/Ñ0à�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Õrv   c           
      óÈ  — 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\  }t	        |«      t        j*                  |«      z
  }|| j,                  dz  k  rJ|	|   | j(                  ||   <   t        j.                  ||¬«      }~| j1                  ||   ||   |	|   «       y | j2                  }| j5                  «       }|j7                  ||«       |j9                  | j                  «      }|\  | _        | _        | _        }|rd| _        | j;                  «        y y )	Nr   r   z"diagonals cant be set in 1d arraysr5   rk   gü©ñÒMbP?r  F)r9   r]   ÚNotImplementedErrorr‰   rS   rP   rÂ   rF   r6   Ú
atleast_1dr[   r´   ÚsqueezeÚbroadcast_tor·   rL   rÝ   r   rE   rV   rG   rx   rˆ   Úlogical_notÚ_insert_manyÚhas_sorted_indicesr»   Ú_setdiagrU   Úsort_indices)r`   Úvaluesrí   rb   rc   Ú	broadcastÚ	max_indexr   r€   rŠ   Ú	n_samplesÚoffsetsrÍ   Úis_existingÚN_newÚis_newÚdo_sortre   rf   rt   s                       ri   rH  z_cs_matrix._setdiagø  s2  € Ø�—
‘
‰?ØØ�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ÑØà !‘|ˆÜ�KÓ ¤2×#3Ñ#3°KÓ#@Ñ@ˆð �4—8‘8˜eÑ#Ò#à./°©nˆD�I‰I�g˜kÑ*Ñ+ä—^‘^ K°[ÔAˆFØØ×Ñ˜a ™i¨¨6©°A°f±IÕ>ð ×-Ñ-ˆGØ—*‘*“,ˆCØ�L‰L˜ Ô#Ø×+Ñ+¨D¯J©JÓ7ˆFØ6<Ñ3ˆDŒK˜œ t¤y°!áØ*/�Ô'Ø×!Ñ!Õ#ð rv   c                 ó¤  — | j                  | j                  «      \  }}d„ }t        j                  t        j                  || j
                  j                  ¬«      «      j                  «       }t        j                  t        j                  || j
                  j                  ¬«      «      j                  «       } |||«        |||«       ||||fS )Nc                 ó¢   — | j                  «       }||k\  rt        d|› d|› d�«      ‚| j                  «       }|| k  rt        d|› d|› d�«      ‚y )Nzindex (z) out of range (>= r‚   z) out of range (< -)rO   Ú
IndexErrorr‰   )rF   Úboundr}   s      ri   Úcheck_boundsz1_cs_matrix._prepare_indices.<locals>.check_boundsE  sc   € Ø—+‘+“-ˆCØ�eŠ|Ü  7¨3¨%Ð/BÀ5À'ÈÐ!KÓLÐLØ—+‘+“-ˆCØ�e�VŠ|Ü  7¨3¨%Ð/BÀ5À'ÈÐ!KÓLÐLð rv   r5   )rL   rM   rP   rB  r[   rF   r6   r´   )r`   r   r€   rb   rc   rW  s         ri   Ú_prepare_indicesz_cs_matrix._prepare_indicesB  sœ   € Ø�z‰z˜$×+Ñ+Ó,‰ˆˆ1ò	Mô �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Ðrv   c           
      ó  — | j                  ||«      \  }}}}t        j                  t        j                  || j                  ¬«      «      j                  «       }|j                  }t        j                  || j                  j                  ¬«      }t        ||| j                  | j                  ||||«      }|dk(  r6| j                  «        t        ||| j                  | j                  ||||«       d|vr|| j                  |<   yt        d| j                  j                  › d�t         d¬«       |dkD  }	||	   | j                  ||	   <   |	 }	||	   }||d	k  xx   |z  cc<   ||	   }||d	k  xx   |z  cc<   | j#                  ||||	   «       y)
z�Sets value at each (i, j) to x

        Here (i,j) index major and minor respectively, and must not contain
        duplicate entries.
        r5   r   rk   Nz%Changing the sparsity structure of a z. is expensive. lil and dok are more efficient.r:   rƒ   r   )rX  rP   rB  r[   r6   r´   r·   rÝ   rF   r   rE   rV   rG   r   rY   rZ   r
   rF  )
r`   r   r€   rŠ   rb   rc   rM  rN  rÍ   r|   s
             ri   r3  z_cs_matrix._set_manyS  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Õ,rv   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.
        r5   r   r   rk   N)
rX  rS   rP   rÝ   rF   r6   r   rE   rV   rG   )r`   r   r€   rb   rc   rM  rN  rÍ   s           ri   r:  z_cs_matrix._zero_manyz  s±   € ð
 ×*Ñ*¨1¨aÓ0‰
ˆˆ1ˆa�ä˜“Fˆ	Ü—(‘(˜9¨D¯L©L×,>Ñ,>Ô?ˆÜ   A t§{¡{°D·L±LÀ)Ø!" A wó0ˆà�!Š8à×ÑÔ!Ü˜q ! T§[¡[°$·,±,À	Ø  ! Wô.ð ,-ˆ�	‰	�'˜' B™,Ñ'Ò(rv   c           	      óˆ  — t        j                  |d¬«      }|j                  |d¬«      }|j                  |d¬«      }|j                  |d¬«      }| j                  }| j	                  | j
                  | j                  f| j                  d   |j                  z   ¬«      }t        j                  | j                  |¬«      | _        t        j                  | j
                  |¬«      | _        t        j                  ||¬«      }t        j                  ||¬«      }g }g }t        j                  |d¬	«      \  }	}
t        j                  |
t        |«      «      }
t        j                  |
«      }d
}t        t        |	|
|
dd «      «      D �]  \  }\  }}}| j                  |   }| j                  |   }|j                  | j
                  || «       |j                  | j                  || «       t        j                  ||| ddd…   d¬	«      \  }}t        |«      ||z
  k(  r)|j                  ||| «       |j                  ||| «       nH|j                  ||| ddd…   |   «       |j                  ||| ddd…   |   «       t        |«      ||<   |}�Œ | j                     }|j                  | j
                  |d «       |j                  | j                  |d «       t        j                   |«      | _        t        j                   |«      | _        t        j"                  | j                  j$                  |¬«      } |d
«      |d
<   t        j                  | j                  «      }||	xx   |z  cc<   ||dd t        j&                  ||¬«      | _        |rd| _        | j)                  «        | j+                  d¬«       y)a:  Inserts new nonzero at each (i, j) with value x

        Here (i,j) index major and minor respectively.
        i, j and x must be non-empty, 1d arrays.
        Inserts each major group (e.g. all entries per row) at a time.
        Maintains has_sorted_indices property.
        Modifies i, j, x in place.
        Ú	mergesort)r…   Úclip)Úmoderk   r2   r5   T)Úreturn_indexr   r   Nr  Fr@   )rP   r'  ÚtakerG  rN   rF   rE   r·   r[   ÚuniqueÚappendrS   rr   Ú	enumerateÚziprG   ÚconcatenaterÝ   r9   r  rI  r_   )r`   r   r€   rŠ   r•   rR  rd   Úindices_partsÚ
data_partsÚuiÚ	ui_indptrÚnew_nnzsÚprevr>  ÚiiÚjsÚjer  r  ÚujÚ	uj_indptrÚnnzsÚindptr_diffs                          ri   rF  z_cs_matrix._insert_manyŽ  s8  € ô —
‘
˜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ð#  Lð( —‘˜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ÐÕ+rv   c                 ó$  — | j                   dk(  rE| j                  «       }| j                  |j                  |j                  ff|j
                  |¬«      S | j                  | j
                  «      \  }}| j                  }t        j                  t        |«      | j                  j                  ¬«      }t        || j                  |«       | j                  ||f«      }| j                  | j                  |f| j
                  || j                  ¬«      S )Nr   r?   r5   r<   )r]   rÞ   rT   rG   rF   r9   rL   rP   rÝ   rS   r6   r   rE   )r`   r=   rÜ   Ú	major_dimÚ	minor_dimÚminor_indicesÚmajor_indicesr¼   s           ri   r»   z_cs_matrix.tocooÚ  sØ   € Ø�9‰9˜Š>Ø—*‘*“,ˆCØ×&Ñ&¨¯©°3·;±;°.Ð'AÀ3Ç9Á9ÐSWÐ&ÓXÐXØ#Ÿz™z¨$¯*©*Ó5Ñˆ	�9ØŸ™ˆÜŸ™¤ ]Ó!3¸4¿<¹<×;MÑ;MÔNˆÜ�)˜TŸ[™[¨-Ô8Ø—‘˜]¨MÐ:Ó;ˆà×"Ñ"Ø�Y‰Y˜Ð §¡°$¸d¿j¹jð #ó 
ð 	
rv   c                 óê  — |€|€| j                  d«      d   }| j                  ||«      }|j                  j                  s!|j                  j                  st        d«      ‚|j                  j                  r| j                  «       }|}n| j                  «       }|j                  }|j                  |j                  «      \  }}t        |||j                  |j                  |j                  |«       |S )NÚcfr   z&Output array must be C or F contiguous)rL   Ú_process_toarray_argsr—   r˜   Úf_contiguousrX   rÞ   r²   r™   rM   r   rE   rF   rG   )r`   r•   rò   rŠ   rœ   rb   rc   s          ri   r®   z_cs_matrix.toarrayê  s¿   € Øˆ;˜5˜=Ø—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Øˆ
rv   c                 óº   — | j                  | j                  «      \  }}t        ||| j                  | j                  | j
                  «       | j                  «        y)z\Remove zero entries from the array/matrix

        This is an *in place* operation.
        N)rL   rM   r   rE   rF   rG   r‡   ©r`   rb   rc   s      ri   r�   z_cs_matrix.eliminate_zeros  sA   € ð
 �z‰z˜$×+Ñ+Ó,‰ˆˆ1Ü˜A˜q $§+¡+¨t¯|©|¸T¿Y¹YÔGØ�
‰
�rv   Úreturnc                 ó   — t        | dd«      sd| _        | j                  S t        | d«      sGt        | j                  «      dz
  }t        t        || j                  | j                  «      «      | _        | j                  S )aZ  Whether the array/matrix has sorted indices and no duplicates

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

        has_canonical_format implies has_sorted_indices, so if the latter flag
        is False, so will the former be; if the former is found True, the
        latter flag is also set.
        Ú_has_sorted_indicesTFÚ_has_canonical_formatr   )	rÒ   r�  ró   rS   rE   Úboolr   rF   Úhas_canonical_format©r`   rb   s     ri   rƒ  z_cs_matrix.has_canonical_format
  sv   € ô �tÐ2°DÔ9à).ˆDÔ&ð ×)Ñ)Ð)ô ˜Ð6Ô7Ü�D—K‘KÓ  1Ñ$ˆAÜ(,Ü(¨¨D¯K©K¸¿¹ÓFó)ˆDÔ%ð ×)Ñ)Ð)rv   r  c                 ó8   — t        |«      | _        |rd| _        y y )NT)r‚  r�  rG  ©r`   r  s     ri   rƒ  z_cs_matrix.has_canonical_format!  s   € ä%)¨#£YˆÔ"ÙØ&*ˆDÕ#ð rv   c                 ó  — | j                   ry| j                  «        | j                  | j                  «      \  }}t	        ||| j
                  | j                  | j                  «       | j                  «        d| _         y)zfEliminate duplicate entries by adding them together

        This is an *in place* operation.
        NT)	rƒ  rI  rL   rM   r   rE   rF   rG   r‡   r}  s      ri   rV   z_cs_matrix.sum_duplicates'  sa   € ð
 ×$Ò$ØØ×ÑÔà�z‰z˜$×+Ñ+Ó,‰ˆˆ1Ü˜1˜a §¡¨d¯l©l¸D¿I¹IÔFà�
‰
ŒØ$(ˆÕ!rv   c                 óÀ   — t        | d«      sGt        | j                  «      dz
  }t        t	        || 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ó   rS   rE   r‚  r   rF   r€  r„  s     ri   rG  z_cs_matrix.has_sorted_indices6  sQ   € ô �tÐ2Ô3Ü�D—K‘KÓ  1Ñ$ˆAÜ'+Ü& q¨$¯+©+°t·|±|ÓDó(ˆDÔ$ð ×'Ñ'Ð'rv   c                 ó$   — t        |«      | _        y r  )r‚  r€  r†  s     ri   rG  z_cs_matrix.has_sorted_indicesF  s   € ä#'¨£9ˆÕ rv   c                 óF   — | j                  «       }|j                  «        |S )z?Return a copy of this array/matrix with sorted indices
        )r=   rI  )r`   ÚAs     ri   Úsorted_indicesz_cs_matrix.sorted_indicesK  s   € ð �I‰I‹KˆØ	�‰ÔØˆrv   c                 ó´   — | j                   sLt        | j                  «      dz
  }t        || j                  | j                  | j
                  «       d| _         yy)z9Sort the indices of this array/matrix *in place*
        r   TN)rG  rS   rE   r   rF   rG   r„  s     ri   rI  z_cs_matrix.sort_indicesV  sG   € ð ×&Ò&Ü�D—K‘KÓ  1Ñ$ˆAÜ˜Q §¡¨T¯\©\¸4¿9¹9ÔEØ&*ˆDÕ#ð 'rv   c                 óÜ  — | j                  | j                  «      d   }t        | j                  «      |dz   k7  rt	        d«      ‚t        | j
                  «      | j                  k  rt	        d«      ‚t        | j                  «      | j                  k  rt	        d«      ‚t        | j
                  d| j                   «      | _        t        | j                  d| j                   «      | _        y)z8Remove empty space after all non-zero elements.
        r   r   z index pointer has invalid lengthz)indices array has fewer than nnz elementsz&data array has fewer than nnz elementsN)	rL   rM   rS   rE   rX   rF   rˆ   rG   r   )r`   rt  s     ri   r‡   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ˆ�	rv   c                 óà  — t        || j                  ¬«      }t        | d«      rw| j                  \  }}t	        |d   |«      \  }}t	        |d   |«      \  }}|s|rt        d| j                  › d|› �«      ‚| j                  d   |z  | j                  d   |z  }	}nG| j                  t        |«      dkD  r|nd|d   f«      \  }}| j                  | j                  «      \  }}	||k  rZ| j                  d | j                  |    | _
        | j                  d | j                  |    | _        | j                  d |dz    | _        n[||kD  rVt        j                  | j                  |dz   «      | _        | j                  |dz   d  j                  | j                  |   «       ||	k  rÇ| j                  |k  }
t        j                   |
«      s£| j                  |
   | _
        | j                  |
   | _        | j#                  t        j$                  |
«      \  }}| j                  j                  d«       || j                  dd  |<   t        j&                  | j                  | j                  ¬«       || _        y )Nr0   rð   r   r   zshape must be divisible into z blocks. Got r  )r(   rK   ró   rð   ÚdivmodrX   r9   rL   rS   rM   rF   rE   rG   rP   ÚresizeÚfillry   rô   rõ   r  rH   )r`   r9   ÚbmÚbnÚnew_MÚrmÚnew_NÚrnrb   rc   r|   rø   r  s                ri   r‘  z_cs_matrix.resizem  s  € Ü˜E¨D¯N©NÔ;ˆä�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àˆ�rv   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.
        r8   )rY   rF   r=   rE   r9   r6   )r`   rG   r=   s      ri   rŒ   z_cs_matrix._with_data—  s‰   € ñ
 Ø—>‘> 4¨¯©×):Ñ):Ó)<Ø#'§;¡;×#3Ñ#3Ó#5ð#7à(,¯
©
Ø(,¯
©
ð "ó 4ð 4ð
 —>‘> 4¨¯©°t·{±{Ð"CØ(,¯
©
¸$¿*¹*ð "ó Fð Frv   c                 ó.  — | j                  |«      }t        t        d|z   dz   «      }| j                  |j                  z   }| j	                  | j
                  | j                  |j
                  |j                  f|¬«      }t        j                  | j
                  j                  |¬«      }t        j                  ||¬«      }g d¢}||v r&t        j                  |t        j                  ¬«      }	n5t        j                  |t        | j                  |j                  «      ¬«      }	| j                  | j                  «      \  }
} ||
|t        j                  | j
                  |¬«      t        j                  | j                  |¬«      | j                   t        j                  |j
                  |¬«      t        j                  |j                  |¬«      |j                   |||	«       | j                  |	||f| j                  ¬«      }|j#                  «        |S )z5apply the binary operation fn to two sparse matrices.rÜ   r2   r5   )Ú_ne_Ú_lt_Ú_gt_Ú_le_Ú_ge_rÛ   )rY   rÒ   r   rˆ   rN   rE   rF   rP   rÝ   r9   Úbool_r    r6   rL   rM   r[   rG   r‡   )r`   rŽ   r�   rÓ   Úmaxnnzrd   rE   rF   Úbool_opsrG   rb   rc   r‹  s                ri   r¡   z_cs_matrix._binopt¥  s‰  € à—‘˜uÓ%ˆô ”\ 5¨2¡:°Ñ#5Ó6ˆà—‘˜EŸI™IÑ%ˆØ×)Ñ)¨4¯;©;¸¿¹Ø%*§\¡\°5·=±=ð+Bà+1ð *ó 3ˆ	ô —‘˜$Ÿ+™+×+Ñ+°9Ô=ˆÜ—(‘(˜6¨Ô3ˆâ;ˆØ�‰>Ü—8‘8˜F¬"¯(©(Ô3‰Dä—8‘8˜F¬&°·±¸U¿[¹[Ó*IÔJˆDà�z‰z˜$×+Ñ+Ó,‰ˆˆ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ˆØ	�‰Œ	àˆrv   c                 ób  — |j                   | j                   k7  r%t        d| j                   › d|j                   › �«      ‚| 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«   r“   Ú_eldiv_r5   r   rk   r   )r9   rX   r¡   rP   Ú
issubdtyper6   ÚinexactrÝ   r’  ÚnanÚnonzeror]   r»   rG   r¼   rš   )r`   rŽ   r=  rò   r¼   s        ri   Ú_divide_sparsez_cs_matrix._divide_sparseÈ  sæ   € ð �;‰;˜$Ÿ*™*Ò$ÜÐ3°D·J±J°<¸uÀUÇ[Á[ÀMÐRÓSÐSà�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ØˆJrv   c                 ó²  — | j                   |k(  r|r| j                  «       S | S t        || j                  ¬«      }t	        | j                   |«      |k7  rt        d«      ‚t        | j                   «      dk(  r·t        |«      dk(  r©| j                  «        | j                  dk(  r| j                  || j                  d¬«      S |d   }t        j                  || j                  d   «      }t        j                  d|«      }t        j                  d|g«      }| j!                  |||f|d¬«      S | j"                  }t        |«      dk7  rt        |«      }t        d	|› d
�«      ‚| j                  dk(  r| j                  || j                  d¬«      S | j                  «        | j%                  |«      \  }	}| j%                  |«      \  }
}t'        d„ |D «       «      rst        j                  |	|z  | j                  d   «      }t        j(                  t        j                  |«      |	«      }t        j                  dt        |«      dz   |«      }nö|
dk(  r|||k(  rwt        j(                  | j                  |	«      }t        j(                  | j*                  |	«      }t        j                  dt        |«      dz   t        | j                  «      «      }nu|dk(  rp|
|	k(  rkt        j,                  | j                  |«      }t        j(                  t        j                  |«      t        | j                  «      «      }| j.                  |z  }| j                  f|d¬«      S )Nr0   zcannot be broadcastr   r   F)r6   r=   r¬   r7   z0CSR/CSC broadcast_to cannot have shape >2D. Got ÚDc              3   ó&   K  — | ]	  }|d k(  –— Œ y­wr  rÚ   )Ú.0rå   s     ri   Ú	<genexpr>z+_cs_matrix._broadcast_to.<locals>.<genexpr>  s   è ø€ Ð)™y˜!ˆq�A�v™yùs   ‚)r9   r=   r(   rK   r*   rX   rS   rV   rˆ   rY   r6   rP   ÚfullrG   rÂ   rW   Ú_csr_containerrM   rL   ry   rÃ   rF   rÁ   rE   )r`   r9   r=   rc   rG   rF   rE   Ú	old_shaper]   rb   rÇ   rÈ   s               ri   Ú_broadcast_toz_cs_matrix._broadcast_toä  s¥  € Ø�:‰:˜ÒÙ"&�4—9‘9“;Ð0¨DÐ0ä˜E¨T¯^©^Ô=ˆä˜DŸJ™J¨Ó.°%Ò7ÜÐ2Ó3Ð3äˆt�z‰z‹?˜aÒ¤C¨£J°!¢OØ×ÑÔ!Ø�x‰x˜1Š}Ø—~‘~ e°4·:±:ÀE�~ÓJÐJà�a‘ˆAÜ—7‘7˜1˜dŸi™i¨™lÓ+ˆDÜ—i‘i  !“nˆGÜ—X‘X˜q !˜fÓ%ˆFØ×&Ñ&¨¨g°vÐ'>ÀeÐRWÐ&ÓXÐXð ×%Ñ%ˆ	äˆu‹:˜Š?Ü�u“:ˆDÜÐOÐPTÈvÐUVÐWÓXÐXà�8‰8�qŠ=Ø—>‘> %¨t¯z©zÀ�>ÓFÐFà×ÑÔØ�z‰z˜%Ó ‰ˆˆ1Ø—‘˜IÓ&‰ˆˆBÜÑ)™yÓ)Ô)ä—7‘7˜1˜q™5 $§)¡)¨A¡,Ó/ˆDÜ—g‘gœbŸi™i¨›l¨AÓ.ˆGÜ—Y‘Y˜q¤# d£)¨a¡-°Ó3‰FØ�1ŠW˜˜qšä—7‘7˜4Ÿ9™9 aÓ(ˆDÜ—g‘g˜dŸl™l¨AÓ.ˆGÜ—Y‘Y˜q¤# d£)¨a¡-´°T·Y±Y³Ó@‰FØ�1ŠW˜˜qšä—9‘9˜TŸY™Y¨Ó*ˆDÜ—g‘gœbŸi™i¨›l¬C°·	±	«NÓ;ˆGØ—[‘[ 1‘_ˆFØ�~‰~˜t W¨fÐ5¸UÈˆ~ÓOÐOrv   )NNFr  )T)r   )NNN©F)NN)6rZ   Ú
__module__Ú__qualname__Ú__doc__rB   ru   r   rx   r_   r‘   r�   r£   r¦   rÏ   rÔ   rØ   r±   rî   r°   rô   r  r	  r  r  r  r  r  r  r  r5  r8  r?  rH  rX  r3  r:  rF  r»   r®   r�   Úpropertyr‚  rƒ  ÚsetterrV   rG  rŒ  rI  r‡   r‘  rŒ   r¡   r©  r²  rÚ   rv   ri   r,   r,      s  „ ñðV,ÈTô V,óp3ð$ —o‘o×-Ñ-€G„Oó3ð4 $×1Ñ1×9Ñ9€MÔó7-òFò	3ò-ò.òvòx
7òò ;ózð ×'Ñ'×/Ñ/€HÔóFð, —+‘+×%Ñ%€C„Kó"ò4*ò<ò8òHò
!;óF&;òP%;óNEó <ò* ò ò ò2H$òTò"%-òN-ò(F,óX
ð —M‘M×)Ñ)€E„Móð" —o‘o×-Ñ-€G„Oòð ð* dò *ó ð*ð, × Ñ ð+¨ò +ó !ð+ò
)ð ð( Dò (ó ð(ð ×Ñð- dò -ó ð-òò+ò7ò!ðF —^‘^×+Ñ+€F„NóFò!òFô80Prv   r,   c                 ó¨   — ddl m}m} |r|n|}t        | «      }t	        |¬«      }t        j                  |dz   |¬«      }|dd } || ||f||f¬«      S )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_matrixr2   r5   Nrk   rÛ   )Ú_csrrº  r»  rS   r)   rP   rÂ   )rG   rÉ   rº  r»  rc   rd   rE   rF   s           ri   r³   r³     sZ   € ÷ ,Ù%‘	¨:€IäˆD‹	€AÜ qÔ)€IÜ�Y‰Y�q˜1‘u IÔ.€FØ�S�bˆk€Gá�d˜G VÐ,°Q¸°FÔ;Ð;rv   c                 ó2  — | €d|}}||fS t        | t        «      r5| j                  |«      \  }}}|dk7  rt        d«      ‚t	        ||«      }||fS t        | «      r3| dk  r| |z  } | | dz   }}|dk  s||kD  rt        d|› d|› d|› �«      ‚||fS t        d«      ‚)Nr   r   z$slicing with step != 1 not supportedzindex out of bounds: 0 <= z < z <= zexpected slice or scalar)rI   r  rF   rX   r‰   r%   rU  Ú	TypeError)ÚslÚnumr-  r.  Ústrides        ri   r,  r,  (  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Ð3rv   r³  )6r¶  Ú__all__Úwarningsr   rz   ÚnumpyrP   Úscipy._lib._utilr   r   Ú_baser   r   r	   r
   Ú_datar   r   Ú r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Ú_indexr   Ú_sputilsr    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r,   r³   r,  rÚ   rv   ri   Ú<module>rË     sz   ðÙ DØ
€å Û ã ß 9ç FÓ Fß .Ý ÷:÷ :÷ :÷ :õ :õ ÷V÷ V÷ Vñ Vô
{P�˜}¨jô {Pó|'<ó"rv   