ó
    EñiZË  ã                   ó"  • S r / rSSKJr  SSKrSSKrSSKJrJ	r	  SSK
JrJrJrJr  SSKJrJr  SSKJr  SS	KJrJrJrJrJrJrJrJrJrJrJrJrJ r J!r!J"r"J#r#J$r$  SS
K%J&r&  SSK'J(r(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0J1r1J2r2   " S S\\\&5      r3SS jr4S r5g)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                   ób  • \ rS rSrSrS8SS.S jjrS9S jr\R                  R                  \l        S9S jr\R                  R                  \l        S:S jr	S	 r
S
 rS rS rS rS rS rS rS;S jr\R$                  R                  \l        S<S jr\R&                  R                  \l        S9S jrS rS rS rS rS rS=S jrS rS=S jrS8S jrS rS rS r S  r!S! r"S" r#S# r$S$ r%S:S% jr&\RL                  R                  \&l        S>S& jr'\RN                  R                  \'l        S' r(\)S(\*4S) j5       r+\+RX                  S*\*4S+ j5       r+S, r-\)S(\*4S- j5       r.\.RX                  S*\*4S. j5       r.S/ r/S0 r0S1 r1S2 r2\Rd                  R                  \2l        S:S3 jr3S4 r4S5 r5S=S6 jr6S7r7g)?Ú
_cs_matrixé   zQ
base array/matrix class for compressed row- and column-oriented arrays/matrices
N©Úmaxprintc                ól	  • [         R                  " XUS9  [        U5      (       a–  UR                  U R                  :X  a  U(       a  UR	                  5       nOUR                  U R                  5      nUR                  UR                  UR                  UR                  4u  U l        U l        U l        U l	        GOß[        U[        5      (       Gaö  [        XR                  S9(       aº  [        XR                  S9U l	        U R                  U R                   5      u  pgU R#                  [%        U R&                  5      S9n[(        R*                  " S[-        U[.        S95      U l        [(        R*                  " SU5      U l        [(        R*                  " US-   US9U l        GO÷[1        U5      S:X  aX  U R3                  XUS	9n	U	R5                  U R                  5      n
U
u  U l        U l        U l        U l	        U R7                  5         GO�[1        U5      S
:X  a‰  Uu  p¼nS nUb  SU;  a  [%        U5      nU R#                  XÍ4USS9nU(       d  [8        n[(        R:                  " XÄUS9U l        [(        R:                  " XÔUS9U l        [(        R:                  " X´US9U l        Oø[=        SU R>                  R@                   SU 35      e [(        RB                  " U5      n[        U [F        5      (       a9  URH                  S:w  a)  U R                  S:X  a  [=        SURH                   S35      eURH                  S:”  a  [=        SURH                   S35      eU R3                  XS9n	U	R5                  U R                  5      n
U
u  U l        U l        U l        U l	        Ub  [        X R                  S9U l	        OlU R&                  c_   [1        U R                  5      S-
  nU R                  R%                  5       S-   n[        U R                  Xg45      U R                  S9U l	        Ub*  [-        U5      nU R                  RK                  USS9U l        U RM                  SS9  g ! [D         a+  n[=        SU R>                  R@                   SU 35      UeS nAff = f! [D         a  n[=        S5      UeS nAff = f)Nr.   ©Úallow_nd©Úmaxvalr   )Údefaultr   ©Údtypeé   ©Úshaper7   é   T)r4   Úcheck_contents©Úcopyr7   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Úmaxr:   ÚnpÚzerosr$   ÚfloatÚlenÚ_coo_containerÚ_coo_to_compressedÚsum_duplicatesr   ÚarrayÚ
ValueErrorÚ	__class__Ú__name__ÚasarrayÚ	Exceptionr	   ÚndimÚastypeÚcheck_format)ÚselfÚarg1r:   r7   r>   r/   ÚMÚNÚ	idx_dtypeÚcooÚarraysrH   rG   rF   r4   ÚeÚnewdtypes                    ÚU/home/mande/repo/quber/.venv/lib/python3.13/site-packages/scipy/sparse/_compressed.pyrC   Ú_cs_matrix.__init__   sû  € Ü×Ò˜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§n¡n×5ô *¨$¿¹ÑH�”Ø—z‘z $×"3Ñ"3Ó4‘�ð !×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 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Ü "§¢¨ÀÑ 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·n±nÑEˆD�KØ�Z‰ZÑðMÜ˜Ÿ™Ó$ qÑ(�Ø—L‘L×$Ñ$Ó&¨Ñ*�ô & d§j¡j°!°Ó&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Ñ*&RÒRÒ
R3Ò"R.Ò.R3c                 óè  • Uc  [        U R                  S   5      $ U R                  S:X  a)  US;   a  [        U R                  S   5      $ [        S5      eUS:  a  US-  nU R	                  USU-
  45      u  pU R	                  U R
                  5      u  p#US:X  a(  [        R                  " [        U R                  5      US9$ US:X  a   [        R                  " U R                  5      $ [        S5      e)Néÿÿÿÿr   ©r   rm   úaxis out of boundsr   r8   ©Ú	minlength)ÚintrF   r^   rY   rM   r:   rQ   Úbincountr&   rG   Údiff)ra   ÚaxisÚ_rd   s       rj   Ú_getnnzÚ_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‹yÜ—{’{Ô#6°t·|±|Ó#DÐPQÑRÐRØ˜“Ü—w’w˜tŸ{™{Ó+Ð+ÜÐ1Ó2Ð2ó    c                 ó²  • U R                  5         Uc   [        R                  " U R                  5      $ U R                  S:X  a1  US;  a  [        S5      e[        R                  " U R                  5      $ US:  a  US-  nU R                  USU-
  45      u  pUS:X  az  U R                  U R                  5      u  p#U R                  S:g  nUR                  5       (       a  U R                  OU R                  U   n[        R                  " [        U5      US9$ US:X  aª  U R                  R                  5       (       a   [        R                  " U R                  5      $ [        R                  " U R                  5      n[        R                   " U VVs/ s H'  u  px[        R                  " U R                  Xx 5      PM)     snn5      $ [        S5      es  snnf )Nr   rn   ro   r   r8   rp   )rW   rQ   Úcount_nonzerorH   r^   rY   rM   r:   ÚallrG   rs   r&   rt   rF   Ú	itertoolsÚpairwiserX   )	ra   ru   rv   rd   ÚmaskÚidxÚpairsÚiÚjs	            rj   r{   Ú_cs_matrix.count_nonzeroŠ   sd  € Ø×ÑÔØ‰<Ü×#Ò# D§I¡IÓ.Ð.à�9‰9˜‹>Ø˜7Ó"Ü Ð!5Ó6Ð6Ü×#Ò# D§I¡IÓ.Ð.à�!‹8Ø�A‰IˆDØ—*‘*˜d A¨¡HÐ-Ó.‰ˆØ�1‹9Ø—:‘:˜dŸj™jÓ)‰DˆAØ—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Ê%Á$À!œR×-Ò-¨d¯i©i¸¨nÖ=É%ÒPÓQÐQäÐ1Ó2Ð2ùó Qs   Æ.G
c                 óJ  • U R                   R                  R                  S:w  a,  [        SU R                   R                  R                   S3SS9  U R
                  R                  R                  S:w  a,  [        SU R
                  R                  R                   S3SS9  U R                  R                  U R
                  R                  U R                   R                  4 H  nUS:w  d  M  [        S5      e   U R                  U R                  5      u  p4[        U R                   5      US-   :w  a'  [        S	[        U R                   5       S
US-    35      eU R                   S   S:w  a  [        S5      e[        U R
                  5      [        U R                  5      :w  a  [        S5      eU R                   S   [        U R
                  5      :”  a  [        S5      eU R                  5         U(       Ga,  U R                  S:”  a’  U R
                  R                  5       U:¼  a  [        SU 35      eU R
                  R                  5       S:  a  [        S5      e[         R"                  " U R                   5      R                  5       S:  a  [        S5      eU R%                  U R                   U R
                  45      n[         R&                  " U R                   US9U l         [         R&                  " U R
                  US9U l        [)        U R                  5      U l        gg)a†  Check whether the array/matrix respects the CSR or CSC format.

Parameters
----------
full_check : bool, optional
    If `True`, run rigorous check, scanning arrays for valid values.
    Note that activating those check might copy arrays for casting,
    modifying indices and index pointers' inplace.
    If `False`, run basic checks on attributes. O(1) operations.
    Default is `True`.
r‚   z$indptr array has non-integer dtype (Ú)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 sizerm   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 sequencer6   N)rF   r7   Úkindr   ÚnamerG   rH   r^   rY   rM   rN   rT   ÚpruneÚnnzrP   ÚminrQ   rt   rO   r\   r"   )ra   rB   Úxrc   rd   re   s         rj   r`   Ú_cs_matrix.check_format¦   sz  € ð �;‰;×Ñ×!Ñ! 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˜$×+Ñ+Ó,‰ˆä�—‘Ó  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ð ry   c                 óˆ   • U R                  5         U R                  U" U R                  U5      SS9nUR                  5         U$ )z}Scalar version of self._binopt, for cases in which no new nonzeros
are added. Produces a new sparse array in canonical form.
Tr@   )rW   Ú
_with_datarH   Úeliminate_zeros)ra   ÚotherÚopÚress       rj   Ú_scalar_binoptÚ_cs_matrix._scalar_binopté   s>   € ð 	×ÑÔØ�o‰o™b §¡¨EÓ2¸ˆoÐ>ˆØ×ÑÔØˆ
ry   c                 óD  • UR                   U R                   :w  a&  [        SU R                    SUR                    S35      e[        U R                  R                  UR                  R                  5      nU R                  S5      S   n[        R                  " XUSS9nUR                  R                  (       a  UOUR                  nU R                  U R                  5      u  pg[        XgU R                  U R                  U R                  U5        U R!                  USS	9$ )
NzIncompatible shapes (ú and r†   ÚCFr   T)r7   Úorderr>   Fr@   )r:   rY   r!   r7   ÚcharrM   rQ   rX   ÚflagsÚc_contiguousÚTrN   r   rF   rG   rH   Ú
_container)ra   r“   r7   r›   ÚresultÚyrc   rd   s           rj   Ú
_add_denseÚ_cs_matrix._add_denseö   sÕ   € Ø�;‰;˜$Ÿ*™*Ó$ÜÐ4°T·Z±Z°LÀÀeÇkÁkÀ]ÐRSÐTÓUÐUÜ˜DŸJ™JŸO™O¨U¯[©[×-=Ñ-=Ó>ˆØ—
‘
˜4Ó  Ñ#ˆÜ—’˜%°EÀÑEˆØ—l‘l×/×/‰F°V·X±XˆØ�z‰z˜$×+Ñ+Ó,‰ˆÜ�A˜$Ÿ+™+ t§|¡|°T·Y±YÀÔBØ�‰˜v¨EˆÐ2Ð2ry   c                 ó&   • U R                  US5      $ )NÚ_plus_©Ú_binopt©ra   r“   s     rj   Ú_add_sparseÚ_cs_matrix._add_sparse  s   € Ø�|‰|˜E 8Ó,Ð,ry   c                 ó&   • U R                  US5      $ )NÚ_minus_r§   r©   s     rj   Ú_sub_sparseÚ_cs_matrix._sub_sparse  s   € Ø�|‰|˜E 9Ó-Ð-ry   c                 óÈ  • [        U5      (       Ga  U R                  UR                  :X  a#  U R                  U5      nU R                  US5      $ UR                  S:X  aT  U R	                  UR                  5       S   5      nU R                  S:X  a   UR                  SU R                  S   45      $ U$ UR                  S:X  a"  U R	                  UR                  5       S   5      $ U R                  S;   a)  UR	                  U R                  R                  5       5      $ U R                  u  p4UR                  u  pVUS:X  a4  US:X  a.  UR                  U R                  X45      R                  5       5      $ US:X  a4  US:X  a.  U R                  UR                  XV5      R                  5       5      $ [        U [        5      nUS:X  ac  XF:X  a^  [        UR                  5       R!                  5       U5      nU R                  U5      nU R                  S:X  a  U$ UR                  SU45      $ US:X  a>  XF:X  a9  [        U R                  5       R!                  5       U5      n	UR                  U	5      $ US:X  a>  X5:X  a9  [        UR                  5       R!                  5       U5      nUR                  U 5      $ US:X  a>  X5:X  a9  [        U R                  5       R!                  5       U5      n
U
R                  U5      $ [#        S	U R                   S
UR                   35      e[$        R&                  " U5      nUR                  S:”  a%  [$        R(                  " U R                  5       U5      $ UR*                  S:X  aq  UR,                  [$        R.                  :X  a  [0        $ [3        U R                  UR                  5      nU R	                  UR4                  S   5      R                  U5      $ U R                  S;   a^  [3        U R                  UR                  5      n[$        R(                  " U R                  R                  5       U5      R                  U5      $ U R7                  5       nU R                  UR                  :X  aa  [$        R(                  " UR                  XR8                     5      nUR;                  [$        R<                  5      R!                  5       Ul        U$ [$        R>                  " U5      nU R                  S   S:X  d  U R                  S:X  Gaº  UR                  S   S:X  a"  [$        R(                  " UR                  U5      nOxUR                  S   U R                  S   :X  a3  [$        R(                  " UR                  USS2UR@                  4   5      nO%[#        S	U R                   S
UR                   35      eU RC                  UR@                  URD                  UR                  S   -  S9n[$        RF                  " [$        RH                  " UR                  S   US9URD                  5      n[$        RJ                  " UR@                  RM                  USS9UR                  S   5      nU RO                  UR;                  [$        R<                  5      R!                  5       UU44UR                  S   U R                  S   4SS9$ U R                  S   S:X  GaÃ  UR                  S   S:X  a)  [$        R(                  " UR                  SS2S4   U5      nOzUR                  S   U R                  S   :X  a5  [$        R(                  " UR                  SS2S4   XìRP                     5      nO%[#        S	U R                   S
UR                   35      eU RC                  URP                  URD                  UR                  S   -  S9n[$        RF                  " URP                  RM                  USS9UR                  S   5      n[$        RJ                  " [$        RH                  " UR                  S   US9URD                  5      nU RO                  UR;                  [$        R<                  5      R!                  5       UU44U R                  S   UR                  S   4SS9$ UR                  S   S:X  aa  U R                  S   UR                  S   :X  aA  [$        R(                  " UR                  USS2UR@                  4   R!                  5       5      nO”UR                  S   S:X  a\  U R                  S   UR                  S   :X  a<  [$        R(                  " UR                  XìRP                     R!                  5       5      nO%[#        S	U R                   S
UR                   35      eUR;                  [$        R<                  5      R!                  5       Ul        U$ )z?Element-wise multiplication by array/matrix, vector, or scalar.Ú_elmul_©r   r   )r   r   r   r   ©r   )r³   r²   r8   úinconsistent shapes r™   rm   Nr3   r6   Fr@   ©r:   r>   ))r   r:   rZ   r¨   Ú_mul_scalarÚtoarrayr^   ÚreshaperH   ÚsumrN   Ú_matmul_sparseÚtocscrJ   r	   Ú_make_diagonal_csrÚravelrY   rQ   Ú
asanyarrayÚmultiplyÚsizer7   Úobject_ÚNotImplementedr*   ÚflatÚtocooÚcoordsÚviewÚndarrayÚ
atleast_2dÚcolrO   rŒ   ÚrepeatÚarangeÚtiler_   rU   Úrow)ra   r“   r¡   ÚsMÚsNÚoMÚoNÚis_arrayÚ	new_otherr>   Únew_selfÚbshapeÚretrH   Úother2dre   rÍ   rÉ   s                     rj   Ú_multiply_2d_with_broadcastingÚ)_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¸Ó,@×,FÑ,FÓ,HÓIÐIØ�Q‹w˜2 ›7Ø×*Ñ*¨5¯=©=¸Ó+@×+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¨¯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¿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ˆŒØˆ
ry   c           	      óh  • U R                   u  p#[        R                  " U[        U R                  R
                  UR                  R
                  5      S9n[        [        U R                  S-   5      nU" X#U R                  U R                  U R                  X5        U R                  S:X  a  US   $ U$ )Nr6   Ú_matvecr   r   )rN   rQ   rR   r!   r7   rœ   Úgetattrr   rD   rF   rG   rH   r^   )ra   r“   rc   rd   r¡   Úfns         rj   Ú_matmul_vectorÚ_cs_matrix._matmul_vectorƒ  s†   € Ø× Ñ ‰ˆô —’˜!¤;¨t¯z©z¯©ÀÇÁ×@PÑ@PÓ#QÑRˆô ”\ 4§;¡;°Ñ#:Ó;ˆÙ
ˆ1�—‘˜dŸl™l¨D¯I©I°uÔEà ŸI™I¨›Nˆv�a‰yÐ6°Ð6ry   c                 óÜ  • U R                   u  p#UR                  S   n[        R                  " X$4[	        U R
                  R                  UR
                  R                  5      S9n[        [        U R                  S-   5      nU" X#X@R                  U R                  U R                  UR                  5       UR                  5       5        U R                  S:X  a  UR                  U45      $ U$ )Nrm   r6   Ú_matvecsr   )rN   r:   rQ   rR   r!   r7   rœ   rÜ   r   rD   rF   rG   rH   r½   r^   r¸   )ra   r“   rc   rd   Ún_vecsr¡   rÝ   s          rj   Ú_matmul_multivectorÚ_cs_matrix._matmul_multivector�  s²   € Ø× Ñ ‰ˆØ—‘˜R‘ˆä—’˜1˜+Ü +¨D¯J©J¯O©O¸U¿[¹[×=MÑ=MÓ NñPˆô ”\ 4§;¡;°Ñ#;Ó<ˆÙ
ˆ1�Ÿ™ d§l¡l°D·I±IØ�;‰;‹=˜&Ÿ,™,›.ô	*ð �9‰9˜‹>Ø—>‘> 6 )Ó,Ð,Øˆry   c                 ó\  • U R                   u  p#UR                  nUS:X  a*  UR                  SUR                  S   45      R                  nUR                  S:X  a  UR
                  OUR                  S   S4u  pVSnU R                  S:X  a  Xr4-  nUS:X  a  Xv4-  nU R                  S:X  a  UOSUS:X  a  UOS4nU R                  U5      nU R                  U R                  UR                  UR                  4n	U R                  X&45      u  p&U R                  X45      u  p«U R                  U	5      n[        R                  " U
R                  US9n[        R                  " U
R                  US9n[        R                  " UR                  US9n[        R                  " UR                  US9n[        X&XÞUU5      nUS:X  ag  US:X  a3  [        R                  " S[        U R                   UR                   5      S9$ U R                  U[        U R                   UR                   5      S9$ U R                  U	US9nUU:w  a~  Un[        R                  " U
R                  US9n[        R                  " U
R                  US9n[        R                  " UR                  US9n[        R                  " UR                  US9n[        R"                  " US-   US9n[        R"                  " UUS9n[        R"                  " U[        U R                   UR                   5      S9n[%        X&XÞU
R&                  UUUR&                  UUU5        US:X  a  [        R                  " US   5      $ U R                  UUU4US9nX‡:w  a1  UR(                  S:w  a  UR+                  5       nUR                  U5      nU$ )	Nr   r   r8   © r6   r3   ©r:   Úcsr)rN   r^   r¸   r:   rŸ   rI   rZ   rF   rG   rM   rO   rQ   r\   r   rX   r    r7   Úemptyr   rH   rD   Útocsr)ra   r“   rc   ÚK1Úo_ndimÚK2rd   Ú	new_shapeÚ
faux_shapeÚindex_arraysÚsÚore   Ús_indptrÚ	s_indicesÚo_indptrÚ	o_indicesrŒ   Únew_idx_dtyperF   rG   rH   r•   s                          rj   rº   Ú_cs_matrix._matmul_sparseŸ  sþ  € Ø×!Ñ!‰ˆà—‘ˆØ�Q‹;à—M‘M 1 e§k¡k°!¡nÐ"5Ó6×8Ñ8ˆEØ %§
¡
¨a£�—’°e·k±kÀ!±nÀaÐ5H‰ˆð ˆ	Ø�9‰9˜‹>Ø˜ÑˆIØ�Q‹;Ø˜ÑˆIØŸ9™9¨›>‘a¨q°vÀ³{±!ÈÐJˆ
à—‘˜uÓ%ˆØŸ™ T§\¡\°5·<±<ÀÇÁÐOˆà�z‰z˜1˜&Ó!‰ˆØ�z‰z˜4˜-Ó(‰ˆà×)Ñ)¨,Ó7ˆ	Ü—:’:˜aŸh™h¨iÑ8ˆÜ—J’J˜qŸy™y°	Ñ:ˆ	Ü—:’:˜aŸh™h¨iÑ8ˆÜ—J’J˜qŸy™y°	Ñ:ˆ	ä  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Ø¨¯©Ø˜Y¨¯©Ø˜7 Dô	*ð
 ˜‹?Ü—8’8˜D ™GÓ$Ð$Ø�n‰n˜d G¨VÐ4¸JˆnÐGˆØÓ"Ø�z‰z˜UÓ"Ø—i‘i“k�Ø—+‘+˜iÓ(ˆCØˆ
ry   c           
      óÄ  • U R                  U R                  5      u  p#U R                  X* 45      u  pX* ::  d  X:¼  a)  [        R                  " SU R                  R
                  S9$ [        R                  " [        U[        US5      -   U[        US5      -
  5      [        U R
                  5      S9n[        XX0R                  U R                  U R                  U5        U$ )Nr   r6   )rM   r:   rQ   ré   rH   r7   r�   rP   r    r   rF   rG   )ra   Úkrc   rd   rv   r¢   s         rj   ÚdiagonalÚ_cs_matrix.diagonalÜ  s£   € Ø�z‰z˜$Ÿ*™*Ó%‰ˆØ�z‰z˜1˜b˜'Ó"‰ˆà�‹7�a“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Ÿk™k¨4¯<©<¸¿¹ÀAÔFØˆry   c                 óÒ  • U R                   S:X  aÃ  [        U S5      (       d²  XR                  S5      S   ;   a›  [        U R                  5      n[
        R                  " [        U R                  5      S-
  US9nU R                  [
        R                  5      u  pgXuU'   U R                  U5      nUS-  S:X  a  UR                  nUR                  SX#S9$ [        R                  " XX#S9$ )	ztSum the array/matrix over the given axis.  If the axis is None, sum
over both rows and columns, returning a scalar.
r8   Ú	blocksize))r   rm   )r   éþÿÿÿr   r   r6   ræ   )ru   r7   Úout)r^   ÚhasattrrM   r'   r7   rQ   rR   rT   rF   Ú_minor_reduceÚaddÚ_ascontainerrŸ   r¹   r   )ra   ru   r7   r   Ú	res_dtyperÖ   Úmajor_indexÚvalues           rj   r¹   Ú_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Ø�a‰x˜1‹}Ø—e‘e�à—7‘7 ¨%�7Ð9Ð9ä—;’;˜t°eÑEÐEry   c                 óÞ   • Uc  U R                   n[        R                  " [        R                  " U R                  5      5      nUR                  U[        U R                  U   5      5      nX44$ )aS  Reduce nonzeros with a ufunc over the minor axis when non-empty

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

Warning: this does not call sum_duplicates()

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

value : array of self.dtype
    Reduce result for nonzeros in each major_index
)rH   rQ   Úflatnonzerort   rF   Úreduceatr&   )ra   ÚufuncrH   r  r  s        rj   r  Ú_cs_matrix._minor_reduce  sX   € ð ‰<Ø—9‘9ˆDÜ—n’n¤R§W¢W¨T¯[©[Ó%9Ó:ˆØ—‘˜tÜ2°4·;±;¸{Ñ3KÓLóNˆàÐ!Ð!ry   c                 ó  • U R                  U R                  5      u  p4U R                  X45      u  pV[        X4U R                  U R                  U R
                  XUS-   XfS-   5	      u  pxn	U	R                  U R                  S9$ )Nr   r6   )rM   r:   r   rF   rG   rH   r¹   r7   )
ra   rÍ   rÉ   rc   rd   ÚmajorÚminorrF   rG   rH   s
             rj   Ú_get_intXintÚ_cs_matrix._get_intXint  sp   € Ø�z‰z˜$Ÿ*™*Ó%‰ˆØ—z‘z 3 *Ó-‰ˆÜ 1Ø�$—+‘+˜tŸ|™|¨T¯Y©YØ˜1‘9˜e¨Q¡Yó!0Ñˆ˜ð �x‰x˜dŸj™jˆxÐ)Ð)ry   c                 óÊ   • U R                  X45      u  p4UR                  S;   a   UR                  S;   a  U R                  X4SS9$ U R                  U5      R	                  U5      $ )N©r   NTr@   )rM   ÚstepÚ_get_submatrixÚ_major_sliceÚ_minor_slice©ra   rÍ   rÉ   r  r  s        rj   Ú_get_sliceXsliceÚ_cs_matrix._get_sliceXslice&  s]   € Ø—z‘z 3 *Ó-‰ˆØ�:‰:˜Ó" u§z¡z°YÓ'>Ø×&Ñ& u¸$Ð&Ð?Ð?Ø× Ñ  Ó'×4Ñ4°UÓ;Ð;ry   c                 ót  • U R                   R                  nU R                  U R                  5      u  pEU R                  X45      u  pg[        R
                  " XcS9n[        R
                  " XsS9n[        R                  " UR                  U R                  S9n[        XEU R                  U R                   U R                  UR                  UR                  5       UR                  5       U5	        UR                  S:X  a  U R                  U5      $ U R                  UR                  UR                  5      5      $ )Nr6   r   )rG   r7   rM   r:   rQ   r\   ré   rÀ   r   rF   rH   r½   r^   r  rZ   r¸   )	ra   rÍ   rÉ   re   rc   rd   r  r  Úvals	            rj   Ú_get_arrayXarrayÚ_cs_matrix._get_arrayXarray,  sÙ   € à—L‘L×&Ñ&ˆ	Ø�z‰z˜$Ÿ*™*Ó%‰ˆØ—z‘z 3 *Ó-‰ˆÜ—
’
˜5Ñ2ˆÜ—
’
˜5Ñ2ˆä�hŠh�u—z‘z¨¯©Ñ4ˆÜ˜! §¡¨T¯\©\¸4¿9¹9ØŸ*™* e§k¡k£m°U·[±[³]ÀCô	Ià�:‰:˜‹?Ø×$Ñ$ SÓ)Ð)Ø�~‰~˜cŸk™k¨%¯+©+Ó6Ó7Ð7ry   c                 ój   • U R                  X45      u  p4U R                  U5      R                  U5      $ ©N)rM   Ú_major_index_fancyÚ_minor_index_fancyr  s        rj   Ú_get_columnXarrayÚ_cs_matrix._get_columnXarray;  s0   € à—z‘z 3 *Ó-‰ˆØ×&Ñ& uÓ-×@Ñ@ÀÓGÐGry   c           	      ó  • U R                  U R                  U R                  45      n[        R                  " XS9R                  5       nU R                  U R                  5      S   n[        U5      nU R                  S:X  a  U R                  XT45      OU4nUS:X  a  U R                  X`R                  S9$ U R                  R                  USS9nU R                  R                  USS9nXsS-      Xs   -
  n	[        R                  " US-   US9n
[        R                  " XšSS S9  U
S	   n[        R                  " X²S9n[        R                  " X°R                  S9n[!        UUUUU R"                  UU5        U R                  XÜU
4USS
9$ )zBIndex along the major axis where idx is an array of ints.
        r6   r   r8   r   Fr@   N©r   rm   rµ   )rO   rF   rG   rQ   r\   r½   rM   rN   rT   r^   rZ   r7   r_   rR   Úcumsumré   r   rH   )ra   r€   re   rG   rd   rc   rî   Úself_indptrÚself_indicesÚrow_nnzÚ
res_indptrrŒ   Úres_indicesÚres_datas                 rj   r"  Ú_cs_matrix._major_index_fancy@  sn  € ð ×)Ñ)¨4¯;©;¸¿¹Ð*EÓFˆ	Ü—*’*˜SÑ2×8Ñ8Ó:ˆà�J‰J�t×(Ñ(Ó)¨!Ñ,ˆÜ�‹LˆØ*.¯)©)°q«.�D—J‘J ˜vÔ&¸q¸dˆ	Ø�‹6Ø—>‘> )·:±:�>Ð>Ð>à—k‘k×(Ñ(¨¸Ð(Ð?ˆØ—|‘|×*Ñ*¨9¸5Ð*ÐAˆà¨™kÑ*¨[Ñ-AÑAˆÜ—X’X˜a !™e¨9Ñ5ˆ
Ü
�	Š	�'¨!¨"˜~Ò.à˜‰nˆÜ—h’h˜sÑ4ˆÜ—8’8˜C§z¡zÑ2ˆÜØØØØØ�I‰IØØô	
ð �~‰~˜x°jÐAØ$-°Eð ð ;ð 	;ry   c           
      ó@  • U[        S5      :X  a  U(       a  U R                  5       $ U $ U R                  U R                  5      u  p4UR	                  U5      u  pVn[        [        XVU5      5      nU R                  S:X  a  U R                  X445      OU4nUS:X  a  U R                  X€R                  S9$ XVp©US:X  a  US:¼  a  Sn
US-   US-   pËU R                  X¼U2   U R                  XšU2   -
  nU R                  R                  n[        R                  " US-   US9n[        R                  " XßSS S9  US:X  ak  [        U R                  U   U R                  U   5      n[        R                  " U R                  U   US9n[        R                  " U R                  U   US9nOgUS   n[        R                   " UUS9n[        R                   " UU R                  S9n[#        XVXpR                  U R                  U R                  UU5        U R                  UUU4US	S
9$ )z@Index along the major axis where idx is a slice object.
        Nr8   r   r6   rm   r   r'  r@   Frµ   )Úslicer>   rM   rN   rG   rT   Úranger^   rZ   r7   rF   rQ   rR   r(  rX   rH   ré   r   )ra   r€   r>   rc   rd   ÚstartÚstopr  rî   Ústart0Ústop0Ústart1Ústop1r+  re   r,  Úall_idxr-  r.  rŒ   s                       rj   r  Ú_cs_matrix._major_slicec  sç  € ð ”%˜“+ÓÞ"&�4—9‘9“;Ð0¨DÐ0à�z‰z˜$×+Ñ+Ó,‰ˆØŸK™K¨›NÑˆ�TÜ”�e 4Ó(Ó)ˆØ*.¯)©)°q«.�D—J‘J ˜vÔ&¸q¸dˆ	Ø�‹6Ø—>‘> )·:±:�>Ð>Ð>ð �Ø�2‹:˜% 1›*ØˆEØ ™	 4¨!¡8�à—+‘+˜f¨4Ð/Ñ0Ø�K‰K˜ TÐ)Ñ*ñ+ˆà—L‘L×&Ñ&ˆ	Ü—X’X˜a ™c¨Ñ3ˆ
Ü
�	Š	�'¨!¨"˜~Ò.à�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¯[©[¸$¿,¹,ØŸ)™) [°(ô<ð �~‰~˜x¨°jÐAØ$-°Eð ð ;ð 	;ry   c           
      ó�  • U R                  U R                  U R                  45      nU R                  R                  USS9nU R                  R                  USS9n[        R
                  " XS9R                  5       nU R                  U R                  5      u  pV[        U5      nU R                  S:X  a  U R                  XW45      OU4nUS:X  a  U R                  X€R                  S9$ [        R                  " XbS9n	[        R                  " U R                  US9n
[        UUUUUUU	U
5        [        R                   " U5      R                  USS9nU
S   n[        R"                  " XÂS9n[        R"                  " XÀR                  S9n[%        X¹[        U R                  5      X0R&                  XÞ5        U R                  XíU
4USS9$ )zBIndex along the minor axis where idx is an array of ints.
        Fr@   r6   r8   r   rm   rµ   )rO   rG   rF   r_   rQ   r\   r½   rM   rN   rT   r^   rZ   r7   rR   Ú
empty_liker   Úargsortré   r   rH   )ra   r€   re   rG   rF   rc   rd   rú   rî   Úcol_offsetsr,  Ú	col_orderrŒ   r-  r.  s                  rj   r#  Ú_cs_matrix._minor_index_fancy‹  s�  € ð ×)Ñ)¨4¯<©<¸¿¹Ð*EÓFˆ	Ø—,‘,×%Ñ% i°eÐ%Ð<ˆØ—‘×#Ñ# I°EÐ#Ð:ˆä�jŠj˜Ñ.×4Ñ4Ó6ˆà�z‰z˜$×+Ñ+Ó,‰ˆÜ�‹HˆØ*.¯)©)°q«.�D—J‘J ˜vÔ&¸q¸dˆ	Ø�‹6Ø—>‘> )·:±:�>Ð>Ð>ô —h’h˜qÑ2ˆÜ—]’] 4§;¡;°iÑ@ˆ
ÜØØØØØØØØô		
ô —J’J˜s“O×*Ñ*¨9¸5Ð*ÐAˆ	Ø˜‰nˆÜ—h’h˜sÑ4ˆÜ—8’8˜C§z¡zÑ2ˆÜ˜)´#°d·l±lÓ2CØ!§9¡9¨kô	Eà�~‰~˜x°jÐAØ$-°Eð ð ;ð 	;ry   c                 ó´  • U[        S5      :X  a  U(       a  U R                  5       $ U $ U R                  U R                  5      u  p4UR	                  U5      u  pVn[        [        XVU5      5      nUS:X  a*  U R                  U R                  X445      U R                  S9$ US:X  a  U R                  XS9$ U R                  [        R                  " XVU5      5      $ )z@Index along the minor axis where idx is a slice object.
        Nr   r6   r   )r  r>   )r1  r>   rM   rN   rG   rT   r2  rZ   r7   r  r#  rQ   rË   )ra   r€   r>   rc   rd   r3  r4  r  s           rj   r  Ú_cs_matrix._minor_slice²  s¼   € ð ”%˜“+ÓÞ"&�4—9‘9“;Ð0¨DÐ0à�z‰z˜$×+Ñ+Ó,‰ˆØŸK™K¨›NÑˆ�TÜ”�e 4Ó(Ó)ˆØ�‹6Ø—>‘> $§*¡*¨a¨VÓ"4¸D¿J¹J�>ÐGÐGØ�1‹9Ø×&Ñ&¨SÐ&Ð<Ð<à×&Ñ&¤r§y¢y°¸dÓ'CÓDÐDry   c                 óÆ  • U R                  U R                  5      u  pE[        X5      u  pg[        X%5      u  p‰US:X  a)  US:X  a#  Xt:X  a  X•:X  a  U(       a  U R                  5       $ U $ [	        XEU R
                  U R                  U R                  XgX‰5	      u  p«nU R                  Xv-
  X˜-
  45      nU R                  S:X  a  US   4nU R                  XËU
4UU R                  SS9$ )zRReturn a submatrix of this matrix.

major, minor: None, int, or slice with step 1
r   r   F)r:   r7   r>   )rM   rN   Ú_process_slicer>   r   rF   rG   rH   r^   rZ   r7   )ra   r  r  r>   rc   rd   Úi0Úi1Új0Új1rF   rG   rH   r:   s                 rj   r  Ú_cs_matrix._get_submatrixÂ  sÚ   € ð
 �z‰z˜$×+Ñ+Ó,‰ˆÜ Ó)‰ˆÜ Ó)‰ˆà�‹7�r˜Q“w 2£7¨r«wÞ"&�4—9‘9“;Ð0¨DÐ0ä 1Ø�$—+‘+˜tŸ|™|¨T¯Y©Y¸Àó!HÑˆ˜ð —
‘
˜B™G R¡WÐ-Ó.ˆØ�9‰9˜‹>Ø˜1‘X�KˆEØ�~‰~˜t¨fÐ5¸UØ$(§J¡J°Uð ð <ð 	<ry   c                 óP   • U R                  X45      u  pEU R                  XEU5        g r!  ©rM   Ú	_set_many©ra   rÍ   rÉ   rŽ   r‚   rƒ   s         rj   Ú_set_intXintÚ_cs_matrix._set_intXint×  ó"   € Ø�z‰z˜3˜*Ó%‰ˆØ�‰�q˜QÕry   c                 óP   • U R                  X45      u  pEU R                  XEU5        g r!  rK  rM  s         rj   Ú_set_arrayXarrayÚ_cs_matrix._set_arrayXarrayÛ  rP  ry   c                 ór  • U R                   " U R                  X45      6   UR                  u  pEUS:g  =(       a    UR                  S   S:H  nUS:g  =(       a    UR                  S   S:H  nUR                  UR                  p˜[
        R                  " UR                  U R                  S9nUR                  S:X  a  g U(       a`  [
        R                  " [
        R                  " U5      [        U5      5      n[
        R                  " X”5      n	[
        R                  " X45      nU(       a`  [
        R                  " X…5      n[
        R                  " [
        R                  " U5      [        U	5      5      n	[
        R                  " X55      nU R                  XU	4   X(U	4   45      u  p«U R                  X«U5        g )Nr   r   r6   )Ú
_zero_manyrM   r:   rÍ   rÉ   rQ   r\   rH   r7   rÀ   rÊ   rË   rT   rÌ   rL  )ra   rÍ   rÉ   rŽ   rc   rd   Úbroadcast_rowÚbroadcast_colÚrÚcr‚   rƒ   s               rj   Ú_set_arrayXarray_sparseÚ"_cs_matrix._set_arrayXarray_sparseß  s.  € à�Š˜Ÿ™ S JÓ/Ñ0à�y‰y‰ˆØ˜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Ü—’˜“ˆAÜ—’˜“ˆAÞÜ—	’	˜!“ˆAÜ—’œŸ	š	 !›¤c¨!£fÓ-ˆAÜ—	’	˜!“ˆAà�z‰z˜3 !˜t™9 c¨Q¨$¡iÐ0Ó1‰ˆØ�‰�q˜QÕry   c           
      ó´  • SU R                   ;   a  g U R                  S:X  a  [        S5      eU R                   u  p4UR                  S:H  nUS:  a„  U(       a  [        X2-   U5      nO[        X2-   U[	        U5      5      n[
        R                  " U* Xb-
  U R                  R                  S9n[
        R                  " X`R                  R                  S9nO‚U(       a  [        X4U-
  5      nO[        X4U-
  [	        U5      5      n[
        R                  " X`R                  R                  S9n[
        R                  " X"U-   U R                  R                  S9nU(       d  US [	        U5       n[
        R                  " [
        R                  " XR                  S95      R                  5       n	U	R                  5       R                   UR                  5       R                   :w  a   [
        R                  " X—R                   5      n	U	R                  S:X  a  g U R                  X445      u  p4U R                  Xx45      u  pxU	R                  n
[
        R                   " X R                  R                  S9n[#        X4U R$                  U R                  U
XxU5      nUS:X  a4  U R'                  5         [#        X4U R$                  U R                  U
XxU5        SU;  a  X�R(                  U'   g US:¬  n[	        U5      [
        R*                  " U5      -
  nXàR,                  S-  :  aB  X�   U R(                  X½   '   [
        R.                  " XÝS9nAU R1                  X   X�   XŸ   5        g U R2                  nU R5                  5       nUR7                  X5        UR9                  U R                  5      nUu  U l        U l        U l        nU(       a  SU l        U R;                  5         g g )	Nr   r   z"diagonals cant be set in 1d arraysr6   rm   gü©ñÒMbP?r'  F)r:   r^   ÚNotImplementedErrorr�   rT   rQ   rË   rG   r7   Ú
atleast_1dr\   r½   ÚsqueezeÚbroadcast_torÀ   rM   ré   r   rF   rW   rH   r{   rŒ   Úlogical_notÚ_insert_manyÚhas_sorted_indicesrÄ   Ú_setdiagrV   Úsort_indices)ra   Úvaluesrú   rc   rd   Ú	broadcastÚ	max_indexr‚   rƒ   rŽ   Ú	n_samplesÚoffsetsrÖ   Úis_existingÚN_newÚis_newÚdo_sortrf   rg   rv   s                       rj   rd  Ú_cs_matrix._setdiagø  sø  € Ø�—
‘
‹?ØØ�9‰9˜‹>Ü%Ð&JÓKÐKà�z‰z‰ˆØ—[‘[ AÑ%ˆ	àˆq‹5ÞÜ ¡ q›M‘	ä ¡ q¬#¨f«+Ó6�	Ü—	’	˜1˜"˜i™m°4·<±<×3EÑ3EÑFˆAÜ—	’	˜)¯<©<×+=Ñ+=Ñ>‰Aö Ü  q¡5›M‘	ä  q¡5¬#¨f«+Ó6�	Ü—	’	˜)¯<©<×+=Ñ+=Ñ>ˆAÜ—	’	˜! ™]°$·,±,×2DÑ2DÑEˆAæØ˜GœS ›V�_ˆFä�MŠMœ"Ÿ*š* V·:±:Ñ>Ó?×EÑEÓGˆØ�9‰9‹;×Ñ §	¡	£× 1Ñ 1Ó1Ü—’ §7¡7Ó+ˆAØ�6‰6�Q‹;Øà�z‰z˜1˜&Ó!‰ˆØ�z‰z˜1˜&Ó!‰ˆØ—F‘Fˆ	Ü—(’(˜9¯L©L×,>Ñ,>Ñ?ˆÜ   t§{¡{°D·L±LÀ)Ø!" wó0ˆà�!‹8à×ÑÔ!Ü˜q T§[¡[°$·,±,À	Ø  Wô.à�WÓà!"�I‰I�gÑØà !‘|ˆÜ�KÓ ¤2×#3Ò#3°KÓ#@Ñ@ˆð —8‘8˜eÑ#Ó#à./©nˆD�I‰I�gÑ*Ñ+ä—^’^ KÑAˆFØØ×Ñ˜a™i¨©°A±IÕ>ð ×-Ñ-ˆGØ—*‘*“,ˆCØ�L‰L˜Ô#Ø×+Ñ+¨D¯J©JÓ7ˆFØ6<Ñ3ˆDŒK˜œ t¤y°!æØ*/�Ô'Ø×!Ñ!Õ#ð ry   c                 ó’  • U R                  U R                  5      u  p4S n[        R                  " [        R                  " XR
                  R                  S95      R                  5       n[        R                  " [        R                  " X R
                  R                  S95      R                  5       nU" X5        U" X$5        XX44$ )Nc                 ó¢   • U R                  5       nX!:¼  a  [        SU SU S35      eU R                  5       nX!* :  a  [        SU SU S35      eg )Nzindex (z) out of range (>= r†   z) out of range (< -)rP   Ú
IndexErrorr�   )rG   Úboundr€   s      rj   Úcheck_boundsÚ1_cs_matrix._prepare_indices.<locals>.check_boundsE  s_   € Ø—+‘+“-ˆCØ‹|Ü  7¨3¨%Ð/BÀ5À'ÈÐ!KÓLÐLØ—+‘+“-ˆCØ�V‹|Ü  7¨3¨%Ð/BÀ5À'ÈÐ!KÓLÐLð ry   r6   )rM   rN   rQ   r^  r\   rG   r7   r½   )ra   r‚   rƒ   rc   rd   rt  s         rj   Ú_prepare_indicesÚ_cs_matrix._prepare_indicesB  sŽ   € Ø�z‰z˜$×+Ñ+Ó,‰ˆò	Mô �MŠMœ"Ÿ*š* Q¯l©l×.@Ñ.@ÑAÓB×HÑHÓJˆÜ�MŠMœ"Ÿ*š* Q¯l©l×.@Ñ.@ÑAÓB×HÑHÓJˆÙ�QÔÙ�QÔØ�QˆzÐry   c           
      óò  • U R                  X5      u  ppE[        R                  " [        R                  " X0R                  S95      R                  5       nUR                  n[        R                  " X`R                  R                  S9n[        XEU R                  U R                  UXU5      nUS:X  a4  U R                  5         [        XEU R                  U R                  UXU5        SU;  a  X0R                  U'   g[        SU R                  R                   S3[         SS9  US:„  n	X9   U R                  Xy   '   U	) n	X   nXS	:  ==   U-  ss'   X)   nX"S	:  ==   U-  ss'   U R#                  XX9   5        g)
zwSets value at each (i, j) to x

Here (i,j) index major and minor respectively, and must not contain
duplicate entries.
r6   r   rm   Nz%Changing the sparsity structure of a z. is expensive. lil and dok are more efficient.r;   r‡   r   )rv  rQ   r^  r\   r7   r½   rÀ   ré   rG   r   rF   rW   rH   r   rZ   r[   r
   rb  )
ra   r‚   rƒ   rŽ   rc   rd   ri  rj  rÖ   r   s
             rj   rL  Ú_cs_matrix._set_manyS  sS  € ð ×*Ñ*¨1Ó0‰
ˆˆaÜ�MŠMœ"Ÿ*š* Q¯j©jÑ9Ó:×@Ñ@ÓBˆà—F‘Fˆ	Ü—(’(˜9¯L©L×,>Ñ,>Ñ?ˆÜ   t§{¡{°D·L±LÀ)Ø!" wó0ˆà�!‹8à×ÑÔ!Ü˜q T§[¡[°$·,±,À	Ø  Wô.ð �WÓà!"�I‰I�gÑØô Ð8¸¿¹×9PÑ9PÐ8Qð R?ð ?ä(°Qò8ð ˜R‘<ˆDØ'(¡wˆD�I‰I�g‘mÑ$à�5ˆDØ‘ˆAØ�!‰e‹H˜‰M‹HØ‘ˆAØ�!‰e‹H˜‰M‹HØ×Ñ˜a A¡GÕ,ry   c           
      óv  • U R                  X5      u  pp4[        U5      n[        R                  " XPR                  R
                  S9n[        X4U R                  U R                  UXU5      nUS:X  a4  U R                  5         [        X4U R                  U R                  UXU5        SU R                  XfS:„     '   g)zrSets value at each (i, j) to zero, preserving sparsity structure.

Here (i,j) index major and minor respectively.
r6   r   r   rm   N)
rv  rT   rQ   ré   rG   r7   r   rF   rW   rH   )ra   r‚   rƒ   rc   rd   ri  rj  rÖ   s           rj   rU  Ú_cs_matrix._zero_manyz  sŸ   € ð
 ×*Ñ*¨1Ó0‰
ˆˆaä˜“Fˆ	Ü—(’(˜9¯L©L×,>Ñ,>Ñ?ˆÜ   t§{¡{°D·L±LÀ)Ø!" wó0ˆà�!‹8à×ÑÔ!Ü˜q T§[¡[°$·,±,À	Ø  Wô.ð ,-ˆ�	‰	�' B™,Ñ'Ò(ry   c           	      óJ  • [         R                  " USS9nUR                  USS9nUR                  USS9nUR                  USS9nU R                  nU R	                  U R
                  U R                  4U R                  S   UR                  -   S9n[         R                  " U R                  US9U l        [         R                  " U R
                  US9U l        [         R                  " XS9n[         R                  " X&S9n/ n/ n[         R                  " USS	9u  pš[         R                  " U
[        U5      5      n
[         R                  " U
5      nS
n[        [        XšU
SS 5      5       GH  u  nu  pïnU R                  U   nU R                  U   nUR                  U R
                  UU 5        UR                  U R                  UU 5        [         R                  " X/U SSS2   SS	9u  nn[        U5      UU-
  :X  a'  UR                  X/U 5        UR                  X?U 5        OEUR                  X/U SSS2   U   5        UR                  X?U SSS2   U   5        [        U5      X½'   UnGM     U R                  W   nUR                  U R
                  US 5        UR                  U R                  US 5        [         R                   " U5      U l        [         R                   " U5      U l        [         R"                  " U R                  R$                  US9nU" S
5      US
'   [         R                  " U R                  5      nUU	==   U-  ss'   UUSS& [         R&                  " UUS9U l        U(       a  SU l        U R)                  5         U R+                  SS9  g)a
  Inserts new nonzero at each (i, j) with value x

Here (i,j) index major and minor respectively.
i, j and x must be non-empty, 1d arrays.
Inserts each major group (e.g. all entries per row) at a time.
Maintains has_sorted_indices property.
Modifies i, j, x in place.
Ú	mergesort)r‰   Úclip)Úmoderm   r3   r6   T)Úreturn_indexr   r   Nr'  FrA   )rQ   r=  Útakerc  rO   rG   rF   rÀ   r\   ÚuniqueÚappendrT   rt   Ú	enumerateÚziprH   Úconcatenateré   r:   r(  re  r`   )ra   r‚   rƒ   rŽ   r›   rn  re   Úindices_partsÚ
data_partsÚuiÚ	ui_indptrÚnew_nnzsÚprevrY  ÚiiÚjsÚjer3  r4  ÚujÚ	uj_indptrÚnnzsÚindptr_diffs                          rj   rb  Ú_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¬¨Q«Ó0ˆ	Ü—7’7˜9Ó%ˆØˆÜ(¬¨R¸IÀaÀb¸MÓ)J×K‰OˆA‰|�˜à—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¨" XÔ.Ø×!Ñ! ! r (Õ+à×$Ñ$ Q¨" X©d°¨d¡^°IÑ%>Ô?Ø×!Ñ! ! 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ÐÒ+ry   c                 ó  • U R                   S:X  aB  U R                  5       nU R                  UR                  UR                  44UR
                  US9$ U R                  U R
                  5      u  p4U R                  n[        R                  " [        U5      U R                  R                  S9n[        X0R                  U5        U R                  Xe45      nU R                  U R                  U4U R
                  XR                  S9$ )Nr   r@   r6   r=   )r^   rê   rU   rH   rG   r:   rM   rQ   ré   rT   r7   r   rF   )ra   r>   rè   Ú	major_dimÚ	minor_dimÚminor_indicesÚmajor_indicesrÅ   s           rj   rÄ   Ú_cs_matrix.tocooÚ  sÐ   € Ø�9‰9˜‹>Ø—*‘*“,ˆCØ×&Ñ&¨¯©°3·;±;°.Ð'AÀ3Ç9Á9ÐSWÐ&ÐXÐXØ#Ÿz™z¨$¯*©*Ó5Ñˆ	ØŸ™ˆÜŸš¤ ]Ó!3¸4¿<¹<×;MÑ;MÑNˆÜ�)Ÿ[™[¨-Ô8Ø—‘˜]Ð:Ó;ˆà×"Ñ"Ø�Y‰Y˜Ð §¡°$¿j¹jð #ð 
ð 	
ry   c                 ó  • Uc  Uc  U R                  S5      S   nU R                  X5      nUR                  R                  (       d&  UR                  R                  (       d  [        S5      eUR                  R                  (       a  U R                  5       nUnOU R                  5       nUR                  nUR                  UR                  5      u  pV[        XVUR                  UR                  UR                  U5        U$ )NÚcfr   z&Output array must be C or F contiguous)rM   Ú_process_toarray_argsr�   rž   Úf_contiguousrY   rê   r»   rŸ   rN   r   rF   rG   rH   )ra   r›   r   rŽ   r¢   rc   rd   s          rj   r·   Ú_cs_matrix.toarrayê  s¹   € Ø‰;˜5™=Ø—J‘J˜tÓ$ QÑ'ˆEØ×(Ñ(¨Ó4ˆØ—	‘	×&×&¨#¯)©)×*@×*@ÜÐEÓFÐFà�9‰9×!×!Ø—
‘
“ˆAØ‰Aà—
‘
“ˆAØ—‘ˆAØ�w‰w�q—~‘~Ó&‰ˆÜ�A˜!Ÿ(™( A§I¡I¨q¯v©v°qÔ9Øˆ
ry   c                 ó¶   • U R                  U R                  5      u  p[        XU R                  U R                  U R
                  5        U R                  5         g)zLRemove zero entries from the array/matrix

This is an *in place* operation.
N)rM   rN   r   rF   rG   rH   r‹   ©ra   rc   rd   s      rj   r’   Ú_cs_matrix.eliminate_zeros  s=   € ð
 �z‰z˜$×+Ñ+Ó,‰ˆÜ˜A $§+¡+¨t¯|©|¸T¿Y¹YÔGØ�
‰
�ry   Úreturnc                 ó  • [        U SS5      (       d  SU l        U R                  $ [        U S5      (       dF  [        U R                  5      S-
  n[        [        XR                  U R                  5      5      U l        U R                  $ )a"  Whether the array/matrix has sorted indices and no duplicates

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

has_canonical_format implies has_sorted_indices, so if the latter flag
is False, so will the former be; if the former is found True, the
latter flag is also set.
Ú_has_sorted_indicesTFÚ_has_canonical_formatr   )	rÜ   r¦  r  rT   rF   Úboolr   rG   Úhas_canonical_format©ra   rc   s     rj   r¨  Ú_cs_matrix.has_canonical_format
  sz   € ô �tÐ2°D×9Ñ9à).ˆDÔ&ð ×)Ñ)Ð)ô ˜Ð6×7Ñ7Ü�D—K‘KÓ  1Ñ$ˆAÜ(,Ü(¨¯K©K¸¿¹ÓFó)ˆDÔ%ð ×)Ñ)Ð)ry   r  c                 óB   • [        U5      U l        U(       a  SU l        g g )NT)r§  r¦  rc  ©ra   r  s     rj   r¨  rª  !  s   € ä%)¨#£YˆÔ"ÞØ&*ˆDÕ#ð ry   c                 ó  • U R                   (       a  gU R                  5         U R                  U R                  5      u  p[	        XU R
                  U R                  U R                  5        U R                  5         SU l         g)zVEliminate duplicate entries by adding them together

This is an *in place* operation.
NT)	r¨  re  rM   rN   r   rF   rG   rH   r‹   r¡  s      rj   rW   Ú_cs_matrix.sum_duplicates'  s]   € ð
 ×$×$ØØ×ÑÔà�z‰z˜$×+Ñ+Ó,‰ˆÜ˜1 §¡¨d¯l©l¸D¿I¹IÔFà�
‰
ŒØ$(ˆÕ!ry   c                 óÈ   • [        U S5      (       dF  [        U R                  5      S-
  n[        [	        XR                  U R
                  5      5      U l        U R                  $ )z‚Whether the indices are sorted

Returns
    - True: if the indices of the array/matrix are in sorted order
    - False: otherwise
r¥  r   )r  rT   rF   r§  r   rG   r¥  r©  s     rj   rc  Ú_cs_matrix.has_sorted_indices6  sR   € ô �tÐ2×3Ñ3Ü�D—K‘KÓ  1Ñ$ˆAÜ'+Ü& q¯+©+°t·|±|ÓDó(ˆDÔ$ð ×'Ñ'Ð'ry   c                 ó$   • [        U5      U l        g r!  )r§  r¥  r¬  s     rj   rc  r°  F  s   € ä#'¨£9ˆÕ ry   c                 óF   • U R                  5       nUR                  5         U$ )z?Return a copy of this array/matrix with sorted indices
        )r>   re  )ra   ÚAs     rj   Úsorted_indicesÚ_cs_matrix.sorted_indicesK  s   € ð �I‰I‹KˆØ	�‰ÔØˆry   c                 ó¼   • U R                   (       dK  [        U R                  5      S-
  n[        XR                  U R                  U R
                  5        SU l         gg)z9Sort the indices of this array/matrix *in place*
        r   TN)rc  rT   rF   r   rG   rH   r©  s     rj   re  Ú_cs_matrix.sort_indicesV  sE   € ð ×&×&Ü�D—K‘KÓ  1Ñ$ˆAÜ˜Q§¡¨T¯\©\¸4¿9¹9ÔEØ&*ˆDÕ#ð 'ry   c                 óâ  • U R                  U R                  5      S   n[        U R                  5      US-   :w  a  [	        S5      e[        U R
                  5      U R                  :  a  [	        S5      e[        U R                  5      U R                  :  a  [	        S5      e[        U R
                  SU R                   5      U l        [        U R                  SU R                   5      U l        g)z8Remove empty space after all non-zero elements.
        r   r   z index pointer has invalid lengthz)indices array has fewer than nnz elementsz&data array has fewer than nnz elementsN)	rM   rN   rT   rF   rY   rG   rŒ   rH   r   )ra   r–  s     rj   r‹   Ú_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ˆ�	ry   c                 óð  • [        XR                  S9n[        U S5      (       a}  U R                  u  p#[	        US   U5      u  pE[	        US   U5      u  pgU(       d  U(       a  [        SU R                   SU 35      eU R                  S   U-  U R                  S   U-  p˜OFU R                  [        U5      S:”  a  UOSUS   45      u  pFU R                  U R                  5      u  p‰XH:  aZ  U R                  S U R                  U    U l
        U R                  S U R                  U    U l        U R                  S US-    U l        O\XH:”  aW  [        R                  " U R                  US-   5      U l        U R                  US-   S  R                  U R                  U   5        Xi:  aÉ  U R                  U:  n
[        R                   " U
5      (       dŸ  U R                  U
   U l
        U R                  U
   U l        U R#                  [        R$                  U
5      u  p¼U R                  R                  S5        XÀR                  SS  U'   [        R&                  " U R                  U R                  S9  Xl        g )Nr1   rþ   r   r   zshape must be divisible into z blocks. Got r'  )r(   rL   r  rþ   ÚdivmodrY   r:   rM   rT   rN   rG   rF   rH   rQ   ÚresizeÚfillr|   r  r  r(  rI   )ra   r:   ÚbmÚbnÚnew_MÚrmÚnew_NÚrnrc   rd   r   r  r  s                rj   r¼  Ú_cs_matrix.resizem  sÿ  € Ü˜E¯N©NÑ;ˆä�4˜×%Ñ%Ø—^‘^‰FˆBÜ˜u Q™x¨Ó,‰IˆEÜ˜u Q™x¨Ó,‰IˆEÞ–RÜ Ð#@ÀÇÁÐ@PØ#0°°ð"9ó :ð :à—:‘:˜a‘= BÑ&¨¯
©
°1©¸Ñ(;‰qàŸ:™:¬s°5«z¸!«|¡eÀ!ÀUÈ1ÁXÀÓO‰LˆEØ—:‘:˜d×/Ñ/Ó0‰DˆAà‹9ØŸ<™<Ð(;¨¯©°UÑ);Ð<ˆDŒLØŸ	™	Ð"5 4§;¡;¨uÑ#5Ð6ˆDŒIØŸ+™+ j u¨q¡yÐ1ˆD�KØ‹YÜŸ)š) D§K¡K°¸±Ó;ˆDŒKØ�K‰K˜˜A™˜Ð×$Ñ$ T§[¡[°¡^Ô4à‹9Ø—<‘< %Ñ'ˆDÜ—6’6˜$—<‘<Ø#Ÿ|™|¨DÑ1�”Ø ŸI™I d™O�”	Ø#'×#5Ñ#5´b·f±f¸dÓ#CÑ �Ø—‘× Ñ  Ô#Ø/2—‘˜A˜B� Ñ,Ü—	’	˜$Ÿ+™+¨4¯;©;Ò7à�ry   c                 ó4  • U(       aW  U R                  XR                  R                  5       U R                  R                  5       4U R                  UR
                  S9$ U R                  XR                  U R                  4U R                  UR
                  S9$ )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.
r9   )rZ   rG   r>   rF   r:   r7   )ra   rH   r>   s      rj   r‘   Ú_cs_matrix._with_data—  s…   € ö
 Ø—>‘> 4¯©×):Ñ):Ó)<Ø#'§;¡;×#3Ñ#3Ó#5ð#7à(,¯
©
Ø(,¯
©
ð "ð 4ð 4ð
 —>‘> 4¯©°t·{±{Ð"CØ(,¯
©
¸$¿*¹*ð "ð Fð Fry   c                 óú  • U R                  U5      n[        [        SU-   S-   5      nU R                  UR                  -   nU R	                  U R
                  U R                  UR
                  UR                  4US9n[        R                  " U R
                  R                  US9n[        R                  " XES9n/ SQnX(;   a$  [        R                  " U[        R                  S9n	O3[        R                  " U[        U R                  UR                  5      S9n	U R                  U R                  5      u  p«U" X«[        R                  " U R
                  US9[        R                  " U R                  US9U R                   [        R                  " UR
                  US9[        R                  " UR                  US9UR                   XgU	5        U R                  X—U4U R                  S9nUR#                  5         U$ )z5apply the binary operation fn to two sparse matrices.rè   r3   r6   )Ú_ne_Ú_lt_Ú_gt_Ú_le_Ú_ge_rç   )rZ   rÜ   r   rŒ   rO   rF   rG   rQ   ré   r:   Úbool_r    r7   rM   rN   r\   rH   r‹   )ra   r“   r”   rÝ   Úmaxnnzre   rF   rG   Úbool_opsrH   rc   rd   r³  s                rj   r¨   Ú_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Ü�:Š:�d—k‘k¨Ñ3Ü�:Š:�d—l‘l¨)Ñ4Ø�9‰9Ü�:Š:�e—l‘l¨)Ñ4Ü�:Š:�e—m‘m¨9Ñ5Ø�:‰:Ø˜Dô	"ð �N‰N˜D¨6Ð2¸$¿*¹*ˆNÐEˆØ	�‰Œ	àˆry   c                 ój  • UR                   U R                   :w  a%  [        SU R                    SUR                    35      eU R                  US5      n[        R                  " UR
                  [        R                  5      (       a«  [        R                  " U R                   U R
                  S9nUR                  [        R                  5        UR                  5       nU R                  S:X  a  US   4nSX4'   UR                  5       nUR                  X2R                  '   U R                  U5      $ UnU$ )z/
Divide this matrix by a second sparse matrix.
r´   r™   Ú_eldiv_r6   r   rm   r   )r:   rY   r¨   rQ   Ú
issubdtyper7   Úinexactré   r½  ÚnanÚnonzeror^   rÄ   rH   rÅ   r    )ra   r“   rX  r   rÅ   s        rj   Ú_divide_sparseÚ_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ØˆJry   c                 óÄ  • U R                   U:X  a  U(       a  U R                  5       $ U $ [        XR                  S9n[	        U R                   U5      U:w  a  [        S5      e[        U R                   5      S:X  a³  [        U5      S:X  a¤  U R                  5         U R                  S:X  a  U R                  XR                  SS9$ US   n[        R                  " X0R                  S   5      n[        R                  " SU5      n[        R                  " SU/5      nU R!                  XEU4USS9$ U R"                  n[        U5      S:w  a  [        U5      n[        S	U S
35      eU R                  S:X  a  U R                  XR                  SS9$ U R                  5         U R%                  U5      u  p“U R%                  U5      u  p«['        S U 5       5      (       av  [        R                  " X“-  U R                  S   5      n[        R(                  " [        R                  " U5      U	5      n[        R                  " S[        U5      S-   U5      nOþU
S:X  a  X³:X  az  [        R(                  " U R                  U	5      n[        R(                  " U R*                  U	5      n[        R                  " S[        U5      S-   [        U R                  5      5      nOyUS:X  as  X©:X  an  [        R,                  " U R                  U5      n[        R(                  " [        R                  " U5      [        U R                  5      5      nU R.                  U-  nU R                  WWW4USS9$ )Nr1   zcannot be broadcastr   r   F)r7   r>   rµ   r8   z0CSR/CSC broadcast_to cannot have shape >2D. Got ÚDc              3   ó*   #   • U  H	  oS :H  v •  M     g7fr  ræ   )Ú.0rñ   s     rj   Ú	<genexpr>Ú+_cs_matrix._broadcast_to.<locals>.<genexpr>  s   é € Ð)šy˜!�AŽvšyùs   ‚)r:   r>   r(   rL   r*   rY   rT   rW   rŒ   rZ   r7   rQ   ÚfullrH   rË   rX   Ú_csr_containerrN   rM   r|   rÌ   rG   rÊ   rF   )ra   r:   r>   rd   rH   rG   rF   Ú	old_shaper^   rc   rÐ   rÑ   s               rj   Ú_broadcast_toÚ_cs_matrix._broadcast_toä  s”  € Ø�:‰:˜ÓÞ"&�4—9‘9“;Ð0¨DÐ0ä˜E¯^©^Ñ=ˆä˜DŸJ™J¨Ó.°%Ó7ÜÐ2Ó3Ð3äˆt�z‰z‹?˜aÓ¤C¨£J°!£OØ×ÑÔ!Ø�x‰x˜1‹}Ø—~‘~ e·:±:ÀE�~ÐJÐJà�a‘ˆAÜ—7’7˜1Ÿi™i¨™lÓ+ˆDÜ—i’i  !“nˆGÜ—X’X˜q !˜fÓ%ˆFØ×&Ñ&¨°vÐ'>ÀeÐRWÐ&ÐXÐXð ×%Ñ%ˆ	äˆu‹:˜‹?Ü�u“:ˆDÜÐOÐPTÈvÐUVÐWÓXÐXà�8‰8�q‹=Ø—>‘> %¯z©zÀ�>ÐFÐFà×ÑÔØ�z‰z˜%Ó ‰ˆØ—‘˜IÓ&‰ˆÜÑ)™yÓ)×)Ñ)ä—7’7˜1™5 $§)¡)¨A¡,Ó/ˆDÜ—g’gœbŸiši¨›l¨AÓ.ˆGÜ—Y’Y˜q¤# d£)¨a¡-°Ó3‰FØ�1‹W˜›ä—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˜›ä—9’9˜TŸY™Y¨Ó*ˆDÜ—g’gœbŸiši¨›l¬C°·	±	«NÓ;ˆGØ—[‘[ 1‘_ˆFØ�~‰~˜t W¨fÐ5¸UÈˆ~ÐOÐOry   )r¦  r¥  rI   rH   r¨  rc  rG   rF   )NNFr!  )T)r   )NNN©F)NN)8r[   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rC   rw   r   r{   r`   r–   r£   rª   r®   rØ   rÞ   rã   rº   rû   r¹   r  r  r  r  r$  r"  r  r#  r  r  rN  rR  rZ  rd  rv  rL  rU  rb  rÄ   r·   r’   Úpropertyr§  r¨  ÚsetterrW   rc  r´  re  r‹   r¼  r‘   r¨   r×  râ  Ú__static_attributes__ræ   ry   rj   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ry   r,   c                 óž   • SSK JnJn  U(       a  UOUn[        U 5      n[	        US9n[
        R                  " US-   US9nUSS nU" XU4XD4S9$ )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_matrixr3   r6   Nrm   rç   )Ú_csrrí  rî  rT   r)   rQ   rË   )rH   rÒ   rí  rî  rd   re   rF   rG   s           rj   r¼   r¼     sV   € ÷ ,Þ%‘	¨:€IäˆD‹	€AÜ qÑ)€IÜ�YŠY�q˜1‘u IÑ.€FØ�S�bˆk€Gá�d VÐ,°Q°FÑ;Ð;ry   c                 ó>  • U c  SUp2X#4$ [        U [        5      (       a3  U R                  U5      u  p#nUS:w  a  [        S5      e[	        X#5      nX#4$ [        U 5      (       a2  U S:  a  X-  n X S-   p2US:  d  X1:”  a  [        SU SU SU 35      e X#4$ [        S5      e)Nr   r   z$slicing with step != 1 not supportedzindex out of bounds: 0 <= z < z <= zexpected slice or scalar)rJ   r1  rG   rY   r�   r%   rr  Ú	TypeError)ÚslÚnumrE  rF  Ústrides        rj   rD  rD  (  sÄ   € Ø	�zØ�CˆBð ˆ6€Mô 
�Bœ×	Ñ	ØŸ™ C›‰ˆ�Ø�Q‹;ÜÐCÓDÐDÜ�‹[ˆð ˆ6€Mô 
�2�‰Ø�‹6Ø‰IˆBØ˜!‘VˆBØ�‹6�R“XÜÐ9¸"¸¸SÀÀÀDÈÈÐNÓOÐOð ð
 ˆ6€Mô Ð2Ó3Ð3ry   rä  )6rè  Ú__all__Úwarningsr   r}   ÚnumpyrQ   Ú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¼   rD  ræ   ry   rj   Ú<module>rþ     sz   ðÙ DØ
€å Û ã ß 9ç FÓ Fß .Ý ÷:÷ :÷ :÷ :õ :õ ÷V÷ V÷ Vñ Vô
{P�˜}¨jô {Pô|'<ó"ry   