Ë
    âQ(hïå  ã                   ó  — d Z g ZddlmZ ddlZddlZddlZddlm	Z	m
Z
 ddlmZmZmZmZ ddlmZmZ ddlmZ dd	lmZmZmZmZmZmZmZmZ dd
lmZ ddlm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-  G d„ deee«      Z.dd„Z/d„ Z0y)z>Base class for sparse matrix formats using compressed storage.é    )ÚwarnN)Ú_prune_arrayÚcopy_if_neededé   )Ú_spbaseÚissparseÚsparrayÚSparseEfficiencyWarning)Ú_data_matrixÚ_minmax_mixin)Ú_sparsetools)Úget_csr_submatrixÚcsr_sample_offsetsÚcsr_todenseÚcsr_sample_valuesÚcsr_row_indexÚcsr_row_sliceÚcsr_column_index1Úcsr_column_index2)Ú
IndexMixin)ÚupcastÚupcast_charÚ	to_nativeÚisdenseÚisshapeÚgetdtypeÚisscalarlikeÚ	isintlikeÚdowncast_intp_indexÚget_sum_dtypeÚcheck_shapeÚget_index_dtypeÚbroadcast_shapesÚis_pydata_spmatrixc                   óÜ  — e Zd ZdZd@ddœd„ZdAd„Zej
                  j                  e_        dAd„Zej                  j                  e_        dBd„Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdCd„Zej0                  j                  e_        d„ Zd„ Zej4                  j                  e_        d„ Zej6                  j                  e_        dDd„Zej8                  j                  e_        dAd„Zd„ Zd„ Zd„ Z d „ Z!d!„ Z"dEd"„Z#d#„ Z$dEd$„Z%d@d%„Z&d&„ Z'd'„ Z(d(„ Z)d)„ Z*d*„ Z+d+„ Z,d,„ Z-d-„ Z.dBd.„Z/ej^                  j                  e/_        dFd/„Z0ej`                  j                  e0_        d0„ Z1e2d1e3fd2„«       Z4e4jj                  d3e3fd4„«       Z4d5„ Z6e2d1e3fd6„«       Z7e7jj                  d3e3fd7„«       Z7d8„ Z8d9„ Z9d:„ Z:d;„ Z;ejv                  j                  e;_        dBd<„Z<d=„ Z=d>„ Z>dEd?„Z?y)GÚ
_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é   ©Úshaper0   é   T)r-   Úcheck_contents©Úcopyr0   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©r7   ©Ú
full_check)'r   Ú__init__r   Úformatr7   ÚasformatÚindptrÚindicesÚdataÚ_shapeÚ
isinstanceÚtupler   Ú	_allow_ndr!   Ú_swapÚ_shape_as_2dÚ_get_index_dtypeÚmaxr3   ÚnpÚzerosr   ÚfloatÚlenÚ_coo_containerÚ_coo_to_compressedÚsum_duplicatesr   ÚarrayÚ
ValueErrorÚ	__class__Ú__name__ÚasarrayÚ	Exceptionr	   ÚndimÚastypeÚcheck_format)ÚselfÚarg1r3   r0   r7   r(   ÚMÚNÚ	idx_dtypeÚcooÚarraysrA   r@   r?   r-   ÚeÚnewdtypes                    úV/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/scipy/sparse/_compressed.pyr<   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   re   úaxis out of boundsr   r1   ©Ú	minlength)Úintr?   rW   rR   rF   r3   rJ   Úbincountr   r@   Údiff)rZ   ÚaxisÚ_r]   s       rc   Ú_getnnzz_cs_matrix._getnnzu   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   rf   rg   r   r1   rh   )rP   rJ   Úcount_nonzerorA   rW   rR   rF   r3   Úallr@   rk   r   rl   r?   Ú	itertoolsÚpairwiserQ   )	rZ   rm   rn   r]   ÚmaskÚidxÚpairsÚiÚjs	            rc   rr   z_cs_matrix.count_nonzero‰   sd  € Ø×ÑÔØˆ<Ü×#Ñ# 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`.
        ry   z$indptr array has non-integer dtype (ú)r4   ©Ú
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 sizere   zQLast value of index pointer should be less than the size of index and data arrayszindices must be < zindices must be >= 0z(indptr must be a non-decreasing sequencer/   N)r?   r0   Úkindr   Únamer@   rA   rW   rR   rF   rG   rM   ÚpruneÚnnzrI   ÚminrJ   rl   rH   rU   r   )rZ   r;   Úxr\   r]   r^   s         rc   rY   z_cs_matrix.check_format¥   s‚  € ð �;‰;×Ñ×!Ñ! SÒ(ÜÐ7¸¿¹×8IÑ8I×8NÑ8NÐ7OÈqÐQØõà�<‰<×Ñ×"Ñ" cÒ)ÜÐ8¸¿¹×9KÑ9K×9PÑ9PÐ8QÐQRÐSØõð —)‘)—.‘. $§,¡,×"3Ñ"3°T·[±[×5EÑ5EÐFò 	LˆAØ�A‹vÜ Ð!JÓKÐKð	Lð
 �z‰z˜$×+Ñ+Ó,‰ˆˆ1ä�—‘Ó  A¡Ò%ÜÐ2´3°t·{±{Ó3CÐ2DÀKÐPQÐTUÑPUÈwÐWÓXÐXØ�K‰K˜‰N˜aÒÜÐ@ÓAÐAô �—‘Ó¤ T§Y¡Y£Ò/ÜÐIÓJÐJØ�K‰K˜‰Oœc $§,¡,Ó/Ò/Üð Aó Bð Bð 	�
‰
Œâà�x‰x˜!Š|Ø—<‘<×#Ñ#Ó%¨Ò*Ü$Ð'9¸!¸Ð%=Ó>Ð>Ø—<‘<×#Ñ#Ó%¨Ò)Ü$Ð%;Ó<Ð<Ü—7‘7˜4Ÿ;™;Ó'×+Ñ+Ó-°Ò1Ü$Ð%OÓPÐPà×-Ñ-¨t¯{©{¸D¿L¹LÐ.IÓJˆIÜŸ*™* T§[¡[¸	ÔBˆDŒKÜŸ:™: d§l¡l¸)ÔDˆDŒLÜ! $§)¡)Ó,ˆD�Ið rp   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.
        Tr9   )rP   Ú
_with_datarA   Úeliminate_zeros)rZ   ÚotherÚopÚress       rc   Ú_scalar_binoptz_cs_matrix._scalar_binoptè   s>   € ð 	×ÑÔØ�o‰o™b §¡¨EÓ2¸ˆoÓ>ˆØ×ÑÔØˆ
rp   c                 ó¶  — t        |«      rÚt        j                  |«      r+| j                  | j                  t        j
                  ¬«      S |dk(  rut        dt        d¬«       | j                  t        j                  | j                  t        j
                  ¬«      «      }| j                  |t        j                  «      }||z
  S | j                  |t        j                  «      S t        |«      r| j                  «       |k(  S t        |«      rt         S t#        |«      rµt        dt        d¬«       | j                  |j                  k7  ry| j$                  |j$                  k7  r|j'                  | j$                  «      }| j)                  |d«      }| j                  t        j                  | j                  t        j
                  ¬«      «      }||z
  S t         S )	Nr/   r   zOComparing a sparse matrix with 0 using == is inefficient, try using != instead.r4   r}   zHComparing sparse matrices using == is inefficient, try using != instead.FÚ_ne_)r   rJ   ÚisnanrS   r3   Úbool_r   r
   Úonesr‹   ÚoperatorÚneÚeqr   Útodenser$   ÚNotImplementedr   r=   r>   Ú_binopt)rZ   rˆ   Úall_trueÚinvrŠ   s        rc   Ú__eq__z_cs_matrix.__eq__ñ   s\  € ä˜ÔÜ�x‰x˜ŒØ—~‘~ d§j¡j¼¿¹�~ÓAÐAà˜ŠzÜð /Ü0GØ !õ#ð  Ÿ>™>¬"¯'©'°$·*±*ÄBÇHÁHÔ*MÓN�Ø×)Ñ)¨%´·±Ó=�Ø #‘~Ð%à×*Ñ*¨5´(·+±+Ó>Ð>ä�UŒ^Ø—<‘<“> UÑ*Ð*ä Ô&Ü!Ð!ä�eŒ_Üð  Ü!8ÀQõHð �z‰z˜UŸ[™[Ò(ØØ—‘ §¡Ò,ØŸ™ t§{¡{Ó3�Ø—,‘,˜u fÓ-ˆCØ—~‘~¤b§g¡g¨d¯j©jÄÇÁÔ&IÓJˆHØ˜c‘>Ð!ä!Ð!rp   c                 ó\  — t        |«      �rt        j                  |«      rRt        dt        d¬«       | j                  t        j                  | j                  t        j                  ¬«      «      }|S |dk7  rut        dt        d¬«       | j                  t        j                  | j                  «      t        j                  ¬«      }| j                  |t        j                  «      }||z
  S | j                  |t        j                  «      S t        |«      r| j                  «       |k7  S t        |«      rt         S t#        |«      r`| j                  |j                  k7  ry| j$                  |j$                  k7  r|j'                  | j$                  «      }| j)                  |d«      S t         S )	Nz:Comparing a sparse matrix with nan using != is inefficientr4   r}   r/   r   z^Comparing a sparse matrix with a nonzero scalar using != is inefficient, try using == instead.Tr�   )r   rJ   rŽ   r   r
   rS   r�   r3   r�   r‹   r‘   r“   r’   r   r”   r$   r•   r   r=   r>   r–   )rZ   rˆ   r—   r˜   s       rc   Ú__ne__z_cs_matrix.__ne__  s<  € ä˜ÕÜ�x‰x˜ŒÜð $Ü%<ÈõLàŸ>™>¬"¯'©'°$·*±*ÄBÇHÁHÔ*MÓN�Ø�Ø˜!’Üð >ä,¸õ<ð  Ÿ>™>¬"¯'©'°$·*±*Ó*=ÄRÇXÁX˜>ÓN�Ø×)Ñ)¨%´·±Ó=�Ø #‘~Ð%à×*Ñ*¨5´(·+±+Ó>Ð>ä�UŒ^Ø—<‘<“> UÑ*Ð*ä Ô&Ü!Ð!ä�eŒ_à�z‰z˜UŸ[™[Ò(ØØ—‘ §¡Ò,ØŸ™ t§{¡{Ó3�Ø—<‘<  vÓ.Ð.ä!Ð!rp   c                 óˆ  — t        |«      r©d|k(  r|dv rt        d«      ‚ |d|«      rzt        |t        d¬«       t	        j
                  | j                  t	        j                  |«      ¬«      }|j                  |«       | j                  |«      }| j                  ||«      S | j                  ||«      S t        |«      r || j                  «       |«      S t        |«      rÜ| j                  |j                  k7  rt        d«      ‚| j                   |j                   k7  r|j#                  | j                   «      }|dvr| j                  ||«      S t        d	t        d¬«       | j                  t	        j$                  | j                  t        j&                  ¬«      «      }| j                  ||d
k(  rdnd«      }||z
  S t(        S )Nr   )Ú_le_Ú_ge_z >= and <= don't work with 0.r4   r}   r/   úinconsistent shapes)rž   r�   zUComparing sparse matrices using >= and <= is inefficient, using <, >, or !=, instead.r�   Ú_gt_Ú_lt_)r   ÚNotImplementedErrorr   r
   rJ   Úemptyr3   Úresult_typeÚfillrS   r–   r‹   r   r”   r   rR   r=   r>   r�   r�   r•   )rZ   rˆ   r‰   Úop_nameÚbad_scalar_msgÚ	other_arrr—   rŠ   s           rc   Ú_inequalityz_cs_matrix._inequality7  sm  € ä˜ÔØ�EŠz˜gÐ)9Ñ9Ü)Ð*IÓJÐJÙ�A�u”Ü�^Ô%<ÈÕKÜŸH™H T§Z¡Z´r·~±~ÀeÓ7LÔM�	Ø—‘˜uÔ%Ø ŸN™N¨9Ó5�	Ø—|‘| I¨wÓ7Ð7à×*Ñ*¨5°"Ó5Ð5ä�UŒ^Ù�d—l‘l“n eÓ,Ð,ä�eŒ_à�z‰z˜UŸ[™[Ò(Ü Ð!6Ó7Ð7Ø—‘ §¡Ò,ØŸ™ t§{¡{Ó3�ØÐ.Ñ.Ø—|‘| E¨7Ó3Ð3äð /ä(°Qõ8ð —~‘~¤b§g¡g¨d¯j©jÄÇÁÔ&IÓJˆHØ—,‘,˜u°¸6Ò0A¡fÀvÓNˆCØ˜c‘>Ð!ä!Ð!rp   c                 óF   — | j                  |t        j                  dd«      S )Nr¡   zgComparing a sparse matrix with a scalar greater than zero using < is inefficient, try using >= instead.)r©   r‘   Últ©rZ   rˆ   s     rc   Ú__lt__z_cs_matrix.__lt__Z  ó$   € Ø×Ñ ¤x§{¡{°Fð!8ó9ð 	9rp   c                 óF   — | j                  |t        j                  dd«      S )Nr    zdComparing a sparse matrix with a scalar less than zero using > is inefficient, try using <= instead.)r©   r‘   Úgtr¬   s     rc   Ú__gt__z_cs_matrix.__gt__`  r®   rp   c                 óF   — | j                  |t        j                  dd«      S )Nr�   zgComparing a sparse matrix with a scalar greater than zero using <= is inefficient, try using > instead.)r©   r‘   Úler¬   s     rc   Ú__le__z_cs_matrix.__le__f  ó$   € Ø×Ñ ¤x§{¡{°Fð!7ó8ð 	8rp   c                 óF   — | j                  |t        j                  dd«      S )Nrž   zdComparing a sparse matrix with a scalar less than zero using >= is inefficient, try using < instead.)r©   r‘   Úger¬   s     rc   Ú__ge__z_cs_matrix.__ge__l  rµ   rp   c                 óH  — |j                   | j                   k7  r&t        d| j                   › d|j                   › d�«      ‚t        | j                  j                  |j                  j                  «      }| j                  d«      d   }t        j                  |||d¬«      }|j                  j                  r|n|j                  }| j                  | j                  «      \  }}t        ||| j                  | j                  | j                  |«       | j!                  |d¬	«      S )
NzIncompatible shapes (z and r|   ÚCFr   T)r0   Úorderr7   Fr9   )r3   rR   r   r0   ÚcharrF   rJ   rQ   ÚflagsÚc_contiguousÚTrG   r   r?   r@   rA   Ú
_container)rZ   rˆ   r0   r»   ÚresultÚyr\   r]   s           rc   Ú
_add_densez_cs_matrix._add_densev  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Ð2rp   c                 ó&   — | j                  |d«      S )NÚ_plus_©r–   r¬   s     rc   Ú_add_sparsez_cs_matrix._add_sparse�  s   € Ø�|‰|˜E 8Ó,Ð,rp   c                 ó&   — | j                  |d«      S )NÚ_minus_rÆ   r¬   s     rc   Ú_sub_sparsez_cs_matrix._sub_sparse„  s   € Ø�|‰|˜E 9Ó-Ð-rp   c                 ó  — t        |«      r| j                  |«      S t        |«      �rá| j                  |j                  k(  r#| j	                  |«      }| j                  |d«      S |j                  dk(  rS| j                  |j                  «       d   «      }| j                  dk(  r |j                  d| j                  d   f«      S |S |j                  dk(  r"| j                  |j                  «       d   «      S | j                  dv r)|j                  | j                  j                  «       «      S | j                  \  }}|j                  \  }}|dk(  r4|dk(  r/|j                  | j                  ||«      j                  «       «      S |dk(  r4|dk(  r/| j                  |j                  ||«      j                  «       «      S t        | t        «      }|dk(  rb||k(  r]t!        |j                  «       j#                  «       |«      }| j                  |«      }| j                  dk(  r|S |j                  d|f«      S |dk(  r>||k(  r9t!        | j                  «       j#                  «       |«      }	|j                  |	«      S |dk(  r>||k(  r9t!        |j                  «       j#                  «       |«      }|j                  | «      S |dk(  r>||k(  r9t!        | j                  «       j#                  «       |«      }
|
j                  |«      S t%        d	«      ‚t'        j(                  |«      }|j                  dkD  r$t'        j*                  | j                  «       |«      S |j,                  dk(  rp|j.                  t&        j0                  k(  rt2        S t5        | j                  |j                  «      }| j                  |j6                  d   «      j                  |«      S | j                  dv r]t5        | j                  |j                  «      }t'        j*                  | j                  j                  «       |«      j                  |«      S | j9                  «       }| j                  |j                  k(  rat'        j*                  |j                  ||j:                     «      }|j=                  t&        j>                  «      j#                  «       |_	        |S t'        j@                  |«      }| j                  d   dk(  s| j                  dk(  �r¥|j                  d   dk(  r!t'        j*                  |j                  |«      }n\|j                  d   | j                  d
   k(  r2t'        j*                  |j                  |dd…|jB                  f   «      }nt%        d	«      ‚| jE                  |jB                  |jF                  |j                  d   z  ¬«      }t'        jH                  t'        jJ                  |j                  d   |¬«      |jF                  «      }t'        jL                  |jB                  jO                  |d¬«      |j                  d   «      }| jQ                  |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   |«      }n_|j                  d   | j                  d   k(  r5t'        j*                  |j                  dd…df   ||jR                     «      }nt%        d	«      ‚| jE                  |jR                  |jF                  |j                  d   z  ¬«      }t'        jH                  |jR                  jO                  |d¬«      |j                  d   «      }t'        jL                  t'        jJ                  |j                  d   |¬«      |jF                  «      }| jQ                  |j=                  t&        j>                  «      j#                  «       ||ff| j                  d   |j                  d   fd¬«      S |j                  d   dk(  r_| j                  d   |j                  d   k(  r@t'        j*                  |j                  |dd…|jB                  f   j#                  «       «      }nx|j                  d   dk(  r[| j                  d   |j                  d   k(  r<t'        j*                  |j                  ||jR                     j#                  «       «      }nt%        d	«      ‚|j=                  t&        j>                  «      j#                  «       |_	        |S )z=Point-wise multiplication by array/matrix, vector, or scalar.Ú_elmul_©r   r   )r   r   r   r   ©r   )rÎ   rÍ   r1   rŸ   re   Nr,   r/   Fr9   ©r3   r7   )*r   Ú_mul_scalarr   r3   rS   r–   ÚtoarrayrW   ÚreshaperA   ÚsumrG   Ú_matmul_sparseÚtocscrC   r	   Ú_make_diagonal_csrÚravelrR   rJ   Ú
asanyarrayÚmultiplyÚsizer0   Úobject_r•   r#   ÚflatÚtocooÚcoordsÚviewÚndarrayÚ
atleast_2dÚcolrH   r‚   ÚrepeatÚarangeÚtilerX   rN   Úrow)rZ   rˆ   rÁ   ÚsMÚsNÚoMÚoNÚis_arrayÚ	new_otherr7   Únew_selfÚbshapeÚretrA   Úother2dr^   ræ   râ   s                     rc   rÙ   z_cs_matrix.multiply‡  sh  € ô ˜ÔØ×#Ñ# EÓ*Ð*ä�E�?Ø�z‰z˜UŸ[™[Ò(ØŸ™ uÓ-�Ø—|‘| E¨9Ó5Ð5à�{‰{˜fÒ$Ø×)Ñ)¨%¯-©-«/¸$Ñ*?Ó@�Ø—9‘9 ’>Ø!Ÿ>™>¨1¨d¯j©j¸©mÐ*<Ó=Ð=Ø�Ø�{‰{˜dÒ"Ø×'Ñ'¨¯©«¸Ñ(:Ó;Ð;Ø�z‰z˜^Ñ+Ø×(Ñ(¨¯©¯©«Ó9Ð9ð ×&Ñ&‰FˆB�Ø×'Ñ'‰FˆB�à�QŠw˜2 š7Ø×+Ñ+¨D¯L©L¸¸RÓ,@×,FÑ,FÓ,HÓIÐIØ�QŠw˜2 š7Ø×*Ñ*¨5¯=©=¸¸RÓ+@×+FÑ+FÓ+HÓIÐIä! $¬Ó0ˆHà�QŠw˜2 š8Ü.¨u¯}©}«×/DÑ/DÓ/FÈÓQ�	Ø×,Ñ,¨YÓ7�Ø!%§¡¨a¢�vÐL°V·^±^ÀQÈÀGÓ5LÐLà�QŠw˜2 š8Ü)¨$¯,©,«.×*>Ñ*>Ó*@À(ÓK�Ø×+Ñ+¨DÓ1Ð1ð �QŠw˜2 š8Ü.¨u¯}©}«×/DÑ/DÓ/FÈÓQ�	Ø ×/Ñ/°Ó5Ð5à�QŠw˜2 š8Ü-¨d¯l©l«n×.BÑ.BÓ.DÀhÓO�Ø×.Ñ.¨uÓ5Ð5ÜÐ2Ó3Ð3ô —‘˜eÓ$ˆà�:‰:˜Š>Ü—;‘;˜tŸ|™|›~¨uÓ5Ð5à�:‰:˜Š?Ø�{‰{œbŸj™jÒ(ä%Ð%Ü% 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‘ä Ð!6Ó7Ð7Ø×-Ñ-¨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‘ä Ð!6Ó7Ð7Ø×-Ñ-¨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äÐ2Ó3Ð3Ø—9‘9œRŸZ™ZÓ(×.Ñ.Ó0ˆŒØˆ
rp   c           	      óp  — | j                   \  }}t        j                  |t        | j                  j
                  |j                  j
                  «      ¬«      }t        t        | j                  dz   «      } |||| j                  | j                  | j                  ||«       | j                  dk(  r|d   S |S )Nr/   Ú_matvecr   r   )rG   rJ   rK   r   r0   r¼   Úgetattrr   r=   r?   r@   rA   rW   )rZ   rˆ   r\   r]   rÁ   Úfns         rc   Ú_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°Ð6rp   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 )Nre   r/   Ú_matvecsr   )rG   r3   rJ   rK   r   r0   r¼   ró   r   r=   r?   r@   rA   r×   rW   rÒ   )rZ   rˆ   r\   r]   Ún_vecsrÁ   rô   s          rc   Ú_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 )Ó,Ð,Øˆrp   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                  ||f«      d   }	| j                  |«      }| j                  | j                  | j                  |j                  |j                  f«      }
t        t        | j                  dz   «      } |||t        j                  | j                  |
¬«      t        j                  | j                  |
¬«      t        j                  |j                  |
¬«      t        j                  |j                  |
¬«      «      }|dk(  rk|dk(  r5t        j                   dt#        | j$                  |j$                  «      ¬«      S | j                  |t#        | j$                  |j$                  «      ¬«      S | j                  | j                  | j                  |j                  |j                  f|¬«      }
t        j&                  |	dz   |
¬«      }t        j&                  ||
¬«      }t        j&                  |t#        | j$                  |j$                  «      ¬«      }t        t        | j                  dz   «      } |||t        j                  | j                  |
¬«      t        j                  | j                  |
¬«      | j(                  t        j                  |j                  |
¬«      t        j                  |j                  |
¬«      |j(                  |||«       |dk(  rt        j                   |d   «      S | j                  |||f|¬	«      }||k7  r0|j                  d
k7  r|j+                  «       }|j                  |«      }|S )Nr   r   r1   © Ú_matmat_maxnnzr/   r,   Ú_matmat©r3   Úcsr)rG   rW   rÒ   r3   r¿   rB   rF   rS   rH   r?   r@   ró   r   r=   rJ   rU   rQ   r   r0   r£   rA   Útocsr)rZ   rˆ   r\   ÚK1Úo_ndimÚK2r]   Ú	new_shapeÚ
faux_shapeÚ	major_dimr^   rô   r‚   r?   r@   rA   rŠ   s                    rc   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ˆ
à—J‘J  1˜vÓ& qÑ)ˆ	Ø—‘˜uÓ%ˆà×)Ñ)¨4¯;©;¸¿¹Ø%*§\¡\°5·=±=ð+Bó Cˆ	ô ”\ 4§;¡;Ð1AÑ#AÓBˆÙ��AÜ—‘˜DŸK™K¨yÔ9Ü—‘˜DŸL™L°	Ô:Ü—‘˜EŸL™L°	Ô:Ü—‘˜EŸM™M°Ô;ó	=ˆð
 �!Š8Ø˜BŠÜ—x‘x ¬°·
±
¸E¿K¹KÓ)HÔIÐIØ—>‘> )´6¸$¿*¹*ÀeÇkÁkÓ3R�>ÓSÐSà×)Ñ)¨4¯;©;¸¿¹Ø%*§\¡\°5·=±=ð+Bà+.ð *ó 0ˆ	ô —‘˜) a™-¨yÔ9ˆÜ—(‘(˜3 iÔ0ˆÜ�x‰x˜¤6¨$¯*©*°e·k±kÓ#BÔCˆä”\ 4§;¡;°Ñ#:Ó;ˆÙ
ˆ1ˆa”—‘˜DŸK™K¨yÔ9Ü�:‰:�d—l‘l¨)Ô4Ø�9‰9Ü�:‰:�e—l‘l¨)Ô4Ü�:‰:�e—m‘m¨9Ô5Ø�:‰:Ø�7˜Dô	"ð ˜Š?Ü—8‘8˜D ™GÓ$Ð$Ø�n‰n˜d G¨VÐ4¸JˆnÓGˆØ˜Ò"Ø�z‰z˜UÒ"Ø—i‘i“k�Ø—+‘+˜iÓ(ˆCØˆ
rp   c           
      óò  — | j                   \  }}|| k  s||k\  r+t        j                  d| j                  j                  ¬«      S t        t        | j                  dz   «      }t        j                  t        |t        |d«      z   |t        |d«      z
  «      t        | j                  «      ¬«      } ||| j                   d   | j                   d   | j                  | j                  | j                  |«       |S )Nr   r/   Ú	_diagonalr   )r3   rJ   r£   rA   r0   ró   r   r=   rƒ   rI   r   r?   r@   )rZ   ÚkÚrowsÚcolsrô   rÂ   s         rc   Údiagonalz_cs_matrix.diagonal^  s½   € Ø—Z‘Z‰
ˆˆdØ��Š:˜˜dšÜ—8‘8˜A T§Y¡Y§_¡_Ô5Ð5Ü”\ 4§;¡;°Ñ#<Ó=ˆÜ�H‰H”S˜¤ A q£	Ñ)¨4´#°a¸³)Ñ+;Ó<Ü! $§*¡*Ó-ô/ˆá
ˆ1ˆd�j‰j˜‰m˜TŸZ™Z¨™]¨D¯K©K¸¿¹Ø�9‰9�aô	àˆrp   c                 ó´  — t        |«      �r ||«      r„t        dt        d¬«       t        j                  | j
                  t        j                  |«      j                  ¬«      }|j                  |«       | j                  |«      }| j                  ||«      S | j                  «         || j                  t        j                  |«      «      }| j                  || j                  | j                  f|j                  | j
                  ¬«      }|S t        |«      r || j!                  «       |«      S t#        |«      r| j                  ||«      S t%        d«      ‚)NzITaking maximum (minimum) with > 0 (< 0) number results to a dense matrix.r4   r}   r/   )r0   r3   zOperands not compatible.)r   r   r
   rJ   r£   r3   rU   r0   r¥   rS   r–   rP   rA   r@   r?   r   r”   r   rR   )rZ   rˆ   Únpopr¦   Údense_checkr¨   Únew_dataÚmats           rc   Ú_maximum_minimumz_cs_matrix._maximum_minimumo  s  € Ü˜ÕÙ˜5Ô!Üð +Ü,CØ !õ#ô ŸH™H T§Z¡Z´r·z±zÀ%Ó7H×7NÑ7NÔO�	Ø—‘˜uÔ%Ø ŸN™N¨9Ó5�	Ø—|‘| I¨wÓ7Ð7à×#Ñ#Ô%Ù §	¡	¬2¯:©:°eÓ+<Ó=�Ø—n‘n h°·±¸d¿k¹kÐ%JØ+3¯>©>ÀÇÁð %ó M�à�
Ü�UŒ^Ù˜Ÿ™›¨Ó.Ð.Ü�eŒ_Ø—<‘<  wÓ/Ð/äÐ7Ó8Ð8rp   c                 óH   — | j                  |t        j                  dd„ «      S )NÚ	_maximum_c                 ó2   — t        j                  | «      dkD  S ©Nr   ©rJ   rU   ©r„   s    rc   ú<lambda>z$_cs_matrix.maximum.<locals>.<lambda>ˆ  ó   € ¼B¿J¹JÀq»MÈAÑ<M€ rp   )r  rJ   Úmaximumr¬   s     rc   r  z_cs_matrix.maximum†  ó%   € Ø×$Ñ$ U¬B¯J©JØ%0Ñ2MóOð 	Orp   c                 óH   — | j                  |t        j                  dd„ «      S )NÚ	_minimum_c                 ó2   — t        j                  | «      dk  S r  r  r  s    rc   r  z$_cs_matrix.minimum.<locals>.<lambda>Ž  r  rp   )r  rJ   Úminimumr¬   s     rc   r   z_cs_matrix.minimumŒ  r  rp   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.
        r1   Ú	blocksize))r   re   )r   éþÿÿÿr   r   r/   rû   )rm   r0   Úout)rW   ÚhasattrrF   r    r0   rJ   rK   rM   r?   Ú_minor_reduceÚaddÚ_ascontainerr¿   rÓ   r   )rZ   rm   r0   r$  Ú	res_dtyperï   Úmajor_indexÚvalues           rc   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ÐErp   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
        )rA   rJ   Úflatnonzerorl   r?   Úreduceatr   )rZ   ÚufuncrA   r*  r+  s        rc   r&  z_cs_matrix._minor_reduce¯  sZ   € ð ˆ<Ø—9‘9ˆDÜ—n‘n¤R§W¡W¨T¯[©[Ó%9Ó:ˆØ—‘˜tÜ2°4·;±;¸{Ñ3KÓLóNˆà˜EÐ!Ð!rp   c                 ó  — | j                  | j                  «      \  }}| j                  ||f«      \  }}t        ||| j                  | j                  | j
                  ||dz   ||dz   «	      \  }}}	|	j                  | j                  ¬«      S )Nr   r/   )rF   r3   r   r?   r@   rA   rÓ   r0   )
rZ   ræ   râ   r\   r]   ÚmajorÚminorr?   r@   rA   s
             rc   Ú_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Ó)Ð)rp   c                 óÎ   — | j                  ||f«      \  }}|j                  dv r"|j                  dv r| j                  ||d¬«      S | j                  |«      j	                  |«      S )N©r   NTr9   )rF   ÚstepÚ_get_submatrixÚ_major_sliceÚ_minor_slice©rZ   ræ   râ   r1  r2  s        rc   Ú_get_sliceXslicez_cs_matrix._get_sliceXsliceÑ  sc   € Ø—z‘z 3¨ *Ó-‰ˆˆuØ�:‰:˜Ñ" u§z¡z°YÑ'>Ø×&Ñ& u¨e¸$Ð&Ó?Ð?Ø× Ñ  Ó'×4Ñ4°UÓ;Ð;rp   c                 óŠ  — | j                   j                  }| j                  | j                  «      \  }}| j                  ||f«      \  }}t	        j
                  ||¬«      }t	        j
                  ||¬«      }t	        j                  |j                  | j                  ¬«      }t        ||| j                  | j                   | j                  |j                  |j                  «       |j                  «       |«	       |j                  dk(  r| j                  |«      S | j                  |j                  |j                  «      «      S )Nr/   r   )r@   r0   rF   r3   rJ   rU   r£   rÚ   r   r?   rA   r×   rW   r(  rS   rÒ   )	rZ   ræ   râ   r^   r\   r]   r1  r2  Úvals	            rc   Ú_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Ð7rp   c                 ón   — | j                  ||f«      \  }}| j                  |«      j                  |«      S ©N)rF   Ú_major_index_fancyÚ_minor_index_fancyr:  s        rc   Ú_get_columnXarrayz_cs_matrix._get_columnXarrayæ  s4   € à—z‘z 3¨ *Ó-‰ˆˆuØ×&Ñ& uÓ-×@Ñ@ÀÓGÐGrp   c           	      óŽ  — | j                  | j                  | j                  f«      }t        j                  ||¬«      j                  «       }| j                  | j                  «      d   }t        |«      }| j                  dk(  r| j                  ||f«      n|f}|dk(  r| j                  || j                  ¬«      S | j                  |dz      | j                  |   z
  j                  |«      }t        j                  |dz   |¬«      }t        j                  ||dd ¬«       |d   }	t        j                  |	|¬«      }
t        j                  |	| j                  ¬«      }t!        ||| j                  j                  |d¬	«      | j                  j                  |d¬	«      | j"                  |
|«       | j                  ||
|f|d¬
«      S )zBIndex along the major axis where idx is an array of ints.
        r/   r   r1   r   N©r$  re   Fr9   rÏ   )rH   r?   r@   rJ   rU   r×   rF   rG   rM   rW   rS   r0   rX   rK   Úcumsumr£   r   rA   )rZ   rw   r^   r@   r]   r\   r  Úrow_nnzÚ
res_indptrr‚   Úres_indicesÚres_datas               rc   rA  z_cs_matrix._major_index_fancyë  s‰  € ð ×)Ñ)¨4¯;©;¸¿¹Ð*EÓFˆ	Ü—*‘*˜S¨	Ô2×8Ñ8Ó:ˆà�J‰J�t×(Ñ(Ó)¨!Ñ,ˆÜ�‹LˆØ*.¯)©)°qª.�D—J‘J  1˜vÔ&¸q¸dˆ	Ø�Š6Ø—>‘> )°4·:±:�>Ó>Ð>à—;‘;˜w¨™{Ñ+¨d¯k©k¸'Ñ.BÑB×JÑJÈ9ÓUˆÜ—X‘X˜a !™e¨9Ô5ˆ
Ü
�	‰	�'˜z¨!¨"˜~Õ.à˜‰nˆÜ—h‘h˜s¨)Ô4ˆÜ—8‘8˜C t§z¡zÔ2ˆÜØØØ�K‰K×Ñ˜y¨uÐÓ5Ø�L‰L×Ñ 	°ÐÓ6Ø�I‰IØØô	
ð �~‰~˜x¨°jÐAØ$-°Eð ó ;ð 	;rp   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.
        Nr1   r   r/   re   r   rE  r9   FrÏ   )Úslicer7   rF   rG   r@   rM   ÚrangerW   rS   r0   r?   rJ   rK   rF  rQ   rA   r£   r   )rZ   rw   r7   r\   r]   ÚstartÚstopr6  r  Ústart0Ústop0Ústart1Ústop1rG  r^   rH  Úall_idxrI  rJ  r‚   s                       rc   r8  z_cs_matrix._major_slice  s  € ð ”%˜“+ÒÙ"&�4—9‘9“;Ð0¨DÐ0à�z‰z˜$×+Ñ+Ó,‰ˆˆ1ØŸK™K¨›NÑˆˆt�TÜ”�e˜T 4Ó(Ó)ˆØ*.¯)©)°qª.�D—J‘J  1˜vÔ&¸q¸dˆ	Ø�Š6Ø—>‘> )°4·:±:�>Ó>Ð>ð ˜t�ˆØ�2Š:˜% 1š*ØˆEØ ™	 4¨!¡8�ˆà—+‘+˜f U¨4Ð/Ñ0Ø�K‰K˜˜u TÐ)Ñ*ñ+ˆà—L‘L×&Ñ&ˆ	Ü—X‘X˜a ™c¨Ô3ˆ
Ü
�	‰	�'˜z¨!¨"˜~Õ.à�1Š9Ü˜DŸK™K¨Ñ.°·±¸DÑ0AÓBˆGÜŸ(™( 4§<¡<°Ñ#8¸tÔDˆKÜ—x‘x §	¡	¨'Ñ 2¸Ô>‰Hà˜R‘.ˆCÜŸ(™( 3¨iÔ8ˆKÜ—x‘x ¨4¯:©:Ô6ˆHÜ˜%  t¨T¯[©[¸$¿,¹,ØŸ)™) [°(ô<ð �~‰~˜x¨°jÐAØ$-°Eð ó ;ð 	;rp   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.
        Fr9   r/   r1   r   re   rÏ   )rH   r@   r?   rX   rJ   rU   r×   rF   rG   rM   rW   rS   r0   rK   Ú
empty_liker   Úargsortr£   r   rA   )rZ   rw   r^   r@   r?   r\   r]   r	  r  Úcol_offsetsrH  Ú	col_orderr‚   rI  rJ  s                  rc   rB  z_cs_matrix._minor_index_fancy3  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ð ó ;ð 	;rp   c                 óº  — |t        d«      k(  r|r| j                  «       S | S | j                  | j                  «      \  }}|j	                  |«      \  }}}t        t        |||«      «      }|dk(  r.| j                  | j                  ||f«      | j                  ¬«      S |dk(  r| j                  ||¬«      S | j                  t        j                  |||«      «      S )z@Index along the minor axis where idx is a slice object.
        Nr   r/   r   )r2  r7   )rL  r7   rF   rG   r@   rM   rM  rS   r0   r7  rB  rJ   rä   )rZ   rw   r7   r\   r]   rN  rO  r6  s           rc   r9  z_cs_matrix._minor_sliceZ  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ÐDrp   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)r3   r0   r7   )rF   rG   Ú_process_slicer7   r   r?   r@   rA   rW   rS   r0   )rZ   r1  r2  r7   r\   r]   Úi0Úi1Új0Új1r?   r@   rA   r3   s                 rc   r7  z_cs_matrix._get_submatrixj  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ð ó <ð 	<rp   c                 óV   — | j                  ||f«      \  }}| j                  |||«       y r@  ©rF   Ú	_set_many©rZ   ræ   râ   r„   ry   rz   s         rc   Ú_set_intXintz_cs_matrix._set_intXint  ó(   € Ø�z‰z˜3 ˜*Ó%‰ˆˆ1Ø�‰�q˜!˜QÕrp   c                 óV   — | j                  ||f«      \  }}| j                  |||«       y r@  rb  rd  s         rc   Ú_set_arrayXarrayz_cs_matrix._set_arrayXarrayƒ  rf  rp   c                 óR  —  | j                   | j                  ||f«      Ž  |j                  \  }}|dk7  xr |j                  d   dk(  }|dk7  xr |j                  d   dk(  }|j                  |j                  }	}t        j                  |j                  | j                  ¬«      }|j                  dk(  ry |r^t        j                  t        j                  |«      t        |«      «      }t        j                  |	|«      }	t        j                  ||«      }|r^t        j                  ||«      }t        j                  t        j                  |«      t        |	«      «      }	t        j                  ||«      }| j                  |||	f   |||	f   f«      \  }
}| j                  |
||«       y )Nr   r   r/   )Ú
_zero_manyrF   r3   ræ   râ   rJ   rU   rA   r0   rÚ   rã   rä   rM   rå   rc  )rZ   ræ   râ   r„   r\   r]   Úbroadcast_rowÚbroadcast_colÚrÚcry   rz   s               rc   Ú_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Õrp   c           
      óN  — d| j                   v ry | j                  dk(  rt        d«      ‚| j                   \  }}|j                  dk(  }|dk  r‡|rt        ||z   |«      }nt        ||z   |t	        |«      «      }t        j                  | ||z
  | j                  j                  ¬«      }t        j                  || j                  j                  ¬«      }n…|rt        |||z
  «      }nt        |||z
  t	        |«      «      }t        j                  || j                  j                  ¬«      }t        j                  |||z   | j                  j                  ¬«      }|s|d t	        |«       }t        j                  t        j                  || j                  ¬«      «      j                  «       }	|	j                  «       j                   |j                  «       j                   k7  r t        j                  |	|j                   «      }	|	j                  dk(  ry | j                  ||f«      \  }}| j                  ||f«      \  }}|	j                  }
t        j                   |
| j                  j                  ¬«      }t#        ||| j$                  | j                  |
|||«      }|dk(  r6| j'                  «        t#        ||| j$                  | j                  |
|||«       d|vr|	| j(                  |<   y |dk\  }| j*                  |j-                  «       z
  | j*                  dz  k  r9|	|   | j(                  ||   <   | }||   }||   }| j/                  |||	|   «       y | j1                  «       }|j3                  ||«       |j5                  | j                  «      }|\  | _        | _        | _        }y )Nr   r   z"diagonals cant be set in 1d arraysr/   re   gü©ñÒMbP?)r3   rW   r¢   rƒ   rM   rJ   rä   r@   r0   Ú
atleast_1drU   r×   ÚsqueezeÚbroadcast_torÚ   rF   r£   r   r?   rP   rA   r‚   rÓ   Ú_insert_manyrÝ   Ú_setdiagrO   )rZ   Úvaluesr	  r\   r]   Ú	broadcastÚ	max_indexry   rz   r„   Ú	n_samplesÚoffsetsrï   rv   r_   r`   rn   s                    rc   ru  z_cs_matrix._setdiag   sý  € Ø�—
‘
‰?ØØ�9‰9˜Š>Ü%Ð&JÓKÐKà�z‰z‰ˆˆ1Ø—[‘[ AÑ%ˆ	àˆqŠ5ÙÜ  A¡ q›M‘	ä  A¡ q¬#¨f«+Ó6�	Ü—	‘	˜1˜"˜i¨!™m°4·<±<×3EÑ3EÔFˆAÜ—	‘	˜)¨4¯<©<×+=Ñ+=Ô>‰Añ Ü  1 q¡5›M‘	ä  1 q¡5¬#¨f«+Ó6�	Ü—	‘	˜)¨4¯<©<×+=Ñ+=Ô>ˆAÜ—	‘	˜!˜Q ™]°$·,±,×2DÑ2DÔEˆAáØ˜GœS ›V�_ˆFä�M‰Mœ"Ÿ*™* V°4·:±:Ô>Ó?×EÑEÓGˆØ�9‰9‹;×Ñ §	¡	£× 1Ñ 1Ò1Ü—‘  1§7¡7Ó+ˆAØ�6‰6�QŠ;Øà�z‰z˜1˜a˜&Ó!‰ˆˆ1Ø�z‰z˜1˜a˜&Ó!‰ˆˆ1Ø—F‘Fˆ	Ü—(‘(˜9¨D¯L©L×,>Ñ,>Ô?ˆÜ   A t§{¡{°D·L±LÀ)Ø!" A wó0ˆà�!Š8à×ÑÔ!Ü˜q ! T§[¡[°$·,±,À	Ø  ! Wô.à�WÑà!"ˆD�I‰I�gÑØà˜1‘ˆð �8‰8�d—h‘h“jÑ  4§8¡8¨eÑ#3Ò3à'(¨¡wˆD�I‰I�g˜d‘mÑ$à�5ˆDØ�$‘ˆAØ�$‘ˆAØ×Ñ˜a  A d¡GÕ,ð —*‘*“,ˆCØ�L‰L˜ Ô#Ø×+Ñ+¨D¯J©JÓ7ˆFØ6<Ñ3ˆDŒK˜œ t¤y±!rp   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 (< -)rI   Ú
IndexErrorrƒ   )r@   Úboundrw   s      rc   Úcheck_boundsz1_cs_matrix._prepare_indices.<locals>.check_boundsç  sc   € Ø—+‘+“-ˆCØ�eŠ|Ü  7¨3¨%Ð/BÀ5À'ÈÐ!KÓLÐLØ—+‘+“-ˆCØ�e�VŠ|Ü  7¨3¨%Ð/BÀ5À'ÈÐ!KÓLÐLð rp   r/   )rF   rG   rJ   rq  rU   r@   r0   r×   )rZ   ry   rz   r\   r]   r  s         rc   Ú_prepare_indicesz_cs_matrix._prepare_indicesä  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Ðrp   c           
      ó  — | j                  ||«      \  }}}}t        j                  t        j                  || j                  ¬«      «      j                  «       }|j                  }t        j                  || j                  j                  ¬«      }t        ||| j                  | j                  ||||«      }|dk(  r6| j                  «        t        ||| j                  | j                  ||||«       d|vr|| j                  |<   yt        d| j                  j                  › d�t         d¬«       |dkD  }	||	   | j                  ||	   <   |	 }	||	   }||d	k  xx   |z  cc<   ||	   }||d	k  xx   |z  cc<   | j#                  ||||	   «       y)
z�Sets value at each (i, j) to x

        Here (i,j) index major and minor respectively, and must not contain
        duplicate entries.
        r/   r   re   Nz%Changing the sparsity structure of a z. is expensive. lil and dok are more efficient.r4   r}   r   )r€  rJ   rq  rU   r0   r×   rÚ   r£   r@   r   r?   rP   rA   r   rS   rT   r
   rt  )
rZ   ry   rz   r„   r\   r]   ry  rz  rï   rv   s
             rc   rc  z_cs_matrix._set_manyõ  sw  € ð ×*Ñ*¨1¨aÓ0‰
ˆˆ1ˆa�Ü�M‰Mœ"Ÿ*™* Q¨d¯j©jÔ9Ó:×@Ñ@ÓBˆà—F‘Fˆ	Ü—(‘(˜9¨D¯L©L×,>Ñ,>Ô?ˆÜ   A t§{¡{°D·L±LÀ)Ø!" A wó0ˆà�!Š8à×ÑÔ!Ü˜q ! T§[¡[°$·,±,À	Ø  ! Wô.ð �WÑà!"ˆD�I‰I�gÑØô Ð8¸¿¹×9PÑ9PÐ8Qð R?ð ?ä(°Qõ8ð ˜R‘<ˆDØ'(¨¡wˆD�I‰I�g˜d‘mÑ$à�5ˆDØ�$‘ˆAØˆa�!‰e‹H˜‰M‹HØ�$‘ˆAØˆa�!‰e‹H˜‰M‹HØ×Ñ˜a  A d¡GÕ,rp   c           
      óŠ  — | j                  ||«      \  }}}}t        |«      }t        j                  || j                  j
                  ¬«      }t        ||| j                  | j                  ||||«      }|dk(  r6| j                  «        t        ||| j                  | j                  ||||«       d| j                  ||dkD     <   y)z‚Sets value at each (i, j) to zero, preserving sparsity structure.

        Here (i,j) index major and minor respectively.
        r/   r   r   re   N)
r€  rM   rJ   r£   r@   r0   r   r?   rP   rA   )rZ   ry   rz   r\   r]   ry  rz  rï   s           rc   rj  z_cs_matrix._zero_many  s±   € ð
 ×*Ñ*¨1¨aÓ0‰
ˆˆ1ˆa�ä˜“Fˆ	Ü—(‘(˜9¨D¯L©L×,>Ñ,>Ô?ˆÜ   A t§{¡{°D·L±LÀ)Ø!" A wó0ˆà�!Š8à×ÑÔ!Ü˜q ! T§[¡[°$·,±,À	Ø  ! Wô.ð ,-ˆ�	‰	�'˜' B™,Ñ'Ò(rp   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)Úmodere   r,   r/   T)Úreturn_indexr   r   NrE  Fr:   )rJ   rW  ÚtakeÚhas_sorted_indicesrH   r@   r?   rÚ   rU   ÚuniqueÚappendrM   rl   Ú	enumerateÚziprA   Úconcatenater£   r3   rF  Úsort_indicesrY   )rZ   ry   rz   r„   r»   Údo_sortr^   Úindices_partsÚ
data_partsÚuiÚ	ui_indptrÚnew_nnzsÚprevrn  ÚiiÚjsÚjerN  rO  ÚujÚ	uj_indptrÚnnzsÚindptr_diffs                          rc   rt  z_cs_matrix._insert_many0  s<  € ô —
‘
˜1 ;Ô/ˆØ�F‰F�5˜vˆFÓ&ˆØ�F‰F�5˜vˆFÓ&ˆØ�F‰F�5˜vˆFÓ&ˆà×)Ñ)ˆð ×)Ñ)¨4¯<©<¸¿¹Ð*EØ,0¯K©K¸©O¸a¿f¹fÑ,Dð *ó Gˆ	ä—j‘j §¡°IÔ>ˆŒÜ—z‘z $§,¡,°iÔ@ˆŒÜ�J‰J�q 	Ô*ˆÜ�J‰J�q 	Ô*ˆð ˆØˆ
ÜŸ	™	 !°$Ô7‰ˆˆIÜ—I‘I˜i¬¨Q«Ó0ˆ	Ü—7‘7˜9Ó%ˆØˆÜ(¬¨R°¸IÀaÀb¸MÓ)JÓKó 	‰OˆA‰|��B˜à—K‘K Ñ%ˆEØ—;‘;˜r‘?ˆDØ× Ñ  §¡¨e°DÐ!9Ô:Ø×Ñ˜dŸi™i¨¨dÐ3Ô4ô ŸI™I a¨¨2 h©t°¨t¡nÀ4ÔH‰MˆB�	Ü�2‹w˜"˜r™'Ò!Ø×$Ñ$ Q r¨" XÔ.Ø×!Ñ! ! B r (Õ+à×$Ñ$ Q r¨" X©d°¨d¡^°IÑ%>Ô?Ø×!Ñ! ! B r (©4¨R¨4¡.°Ñ";Ô<Ü! "›g�˜‘àŠDð#	ð( —‘˜B‘ˆØ×Ñ˜TŸ\™\¨%¨&Ð1Ô2Ø×Ñ˜$Ÿ)™) E FÐ+Ô,ô —~‘~ mÓ4ˆŒÜ—N‘N :Ó.ˆŒ	Ü�x‰x˜Ÿ™×)Ñ)°Ô;ˆÙ˜A“,ˆˆQ‰Ü—g‘g˜dŸk™kÓ*ˆØ�B‹˜8Ñ#‹ØˆˆQˆRˆÜ—i‘i ¨$Ô/ˆŒáà&+ˆDÔ#Ø×ÑÔà×Ñ UÐÕ+rp   c                 ó8  — | j                   dk(  rE| j                  «       }| j                  |j                  |j                  ff|j
                  |¬«      S | j                  | j
                  «      \  }}| j                  }t        j                  t        |«      | j                  j                  ¬«      }t        j                  || j                  |«       | j                  ||f«      }| j                  | j                  |f| j
                  || j                  ¬«      S )Nr   r9   r/   r6   )rW   r   rN   rA   r@   r3   rF   rJ   r£   rM   r0   r   Ú	expandptrr?   )rZ   r7   rÿ   r  Ú	minor_dimÚminor_indicesÚmajor_indicesrÞ   s           rc   rÝ   z_cs_matrix.tocoo|  sÞ   € Ø�9‰9˜Š>Ø—*‘*“,ˆCØ×&Ñ&¨¯©°3·;±;°.Ð'AÀ3Ç9Á9ÐSWÐ&ÓXÐXØ#Ÿz™z¨$¯*©*Ó5Ñˆ	�9ØŸ™ˆÜŸ™¤ ]Ó!3¸4¿<¹<×;MÑ;MÔNˆÜ×Ñ˜y¨$¯+©+°}ÔEØ—‘˜]¨MÐ:Ó;ˆà×"Ñ"Ø�Y‰Y˜Ð §¡°$¸d¿j¹jð #ó 
ð 	
rp   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)rF   Ú_process_toarray_argsr½   r¾   Úf_contiguousrR   r   rÕ   r¿   rG   r   r?   r@   rA   )rZ   r»   r$  r„   rÂ   r\   r]   s          rc   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Øˆ
rp   c                 óÎ   — | j                  | j                  «      \  }}t        j                  ||| j                  | j
                  | j                  «       | j                  «        y)z\Remove zero entries from the array/matrix

        This is an *in place* operation.
        N)rF   rG   r   Úcsr_eliminate_zerosr?   r@   rA   r�   ©rZ   r\   r]   s      rc   r‡   z_cs_matrix.eliminate_zeros£  sG   € ð
 �z‰z˜$×+Ñ+Ó,‰ˆˆ1Ü×(Ñ(¨¨A¨t¯{©{¸D¿L¹LÈ$Ï)É)ÔTØ�
‰
�rp   Úreturnc                 ó  — t        | dd«      sd| _        | j                  S t        | d«      sOt        t	        j
                  t        | j                  «      dz
  | j                  | j                  «      «      | _	        | j                  S )aZ  Whether the array/matrix has sorted indices and no duplicates

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

        has_canonical_format implies has_sorted_indices, so if the latter flag
        is False, so will the former be; if the former is found True, the
        latter flag is also set.
        Ú_has_sorted_indicesTFÚ_has_canonical_formatr   )
ró   r­  r%  Úboolr   Úcsr_has_canonical_formatrM   r?   r@   Úhas_canonical_format©rZ   s    rc   r°  z_cs_matrix.has_canonical_format¬  s{   € ô �tÐ2°DÔ9à).ˆDÔ&ð ×)Ñ)Ð)ô ˜Ð6Ô7Ü(,Ü×5Ñ5Ü˜Ÿ™Ó$ qÑ(¨$¯+©+°t·|±|óEó)ˆDÔ%ð ×)Ñ)Ð)rp   r=  c                 ó8   — t        |«      | _        |rd| _        y y )NT)r®  r­  r‰  ©rZ   r=  s     rc   r°  z_cs_matrix.has_canonical_formatÃ  s   € ä%)¨#£YˆÔ"ÙØ&*ˆDÕ#ð rp   c                 ó  — | j                   ry| j                  «        | j                  | j                  «      \  }}t	        j
                  ||| j                  | j                  | j                  «       | j                  «        d| _         y)zfEliminate duplicate entries by adding them together

        This is an *in place* operation.
        NT)
r°  r�  rF   rG   r   Úcsr_sum_duplicatesr?   r@   rA   r�   r©  s      rc   rP   z_cs_matrix.sum_duplicatesÉ  sg   € ð
 ×$Ò$ØØ×ÑÔà�z‰z˜$×+Ñ+Ó,‰ˆˆ1Ü×'Ñ'¨¨1¨d¯k©k¸4¿<¹<ÈÏÉÔSà�
‰
ŒØ$(ˆÕ!rp   c                 óÐ   — t        | d«      sOt        t        j                  t	        | j
                  «      dz
  | j
                  | j                  «      «      | _        | j                  S )z¢Whether the indices are sorted

        Returns
            - True: if the indices of the array/matrix are in sorted order
            - False: otherwise
        r¬  r   )r%  r®  r   Úcsr_has_sorted_indicesrM   r?   r@   r¬  r±  s    rc   r‰  z_cs_matrix.has_sorted_indicesØ  sV   € ô �tÐ2Ô3Ü'+Ü×3Ñ3Ü˜Ÿ™Ó$ qÑ(¨$¯+©+°t·|±|óEó(ˆDÔ$ð ×'Ñ'Ð'rp   c                 ó$   — t        |«      | _        y r@  )r®  r¬  r³  s     rc   r‰  z_cs_matrix.has_sorted_indicesè  s   € ä#'¨£9ˆÕ rp   c                 óF   — | j                  «       }|j                  «        |S )z?Return a copy of this array/matrix with sorted indices
        )r7   r�  )rZ   ÚAs     rc   Úsorted_indicesz_cs_matrix.sorted_indicesí  s   € ð �I‰I‹KˆØ	�‰ÔØˆrp   c                 óÄ   — | j                   sTt        j                  t        | j                  «      dz
  | j                  | j
                  | j                  «       d| _         yy)z9Sort the indices of this array/matrix *in place*
        r   TN)r‰  r   Úcsr_sort_indicesrM   r?   r@   rA   r±  s    rc   r�  z_cs_matrix.sort_indicesø  sL   € ð ×&Ò&Ü×)Ñ)¬#¨d¯k©kÓ*:¸QÑ*>ÀÇÁØ*.¯,©,¸¿	¹	ôCà&*ˆDÕ#ð 'rp   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)	rF   rG   rM   r?   rR   r@   r‚   rA   r   )rZ   r  s     rc   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ˆ�	rp   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 )Nr*   r"  r   r   zshape must be divisible into z blocks. Got rE  )r!   rE   r%  r"  ÚdivmodrR   r3   rF   rM   rG   r@   r?   rA   rJ   Úresizer¥   rs   r&  r'  rF  rB   )rZ   r3   ÚbmÚbnÚnew_MÚrmÚnew_NÚrnr\   r]   rv   r*  r=  s                rc   rÁ  z_cs_matrix.resize  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àˆ�rp   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.
        r2   )rS   r@   r7   r?   r3   r0   )rZ   rA   r7   s      rc   r†   z_cs_matrix._with_data:  s‰   € ñ
 Ø—>‘> 4¨¯©×):Ñ):Ó)<Ø#'§;¡;×#3Ñ#3Ó#5ð#7à(,¯
©
Ø(,¯
©
ð "ó 4ð 4ð
 —>‘> 4¨¯©°t·{±{Ð"CØ(,¯
©
¸$¿*¹*ð "ó Fð Frp   c                 ó8  — | j                  |«      }t        t        | j                  |z   | j                  z   «      }| j                  |j                  z   }| j                  | j                  | j                  |j                  |j                  f|¬«      }t        j                  | j                  j                  |¬«      }t        j                  ||¬«      }g d¢}||v r&t        j                  |t        j                  ¬«      }	n5t        j                  |t        | j                  |j                  «      ¬«      }	| j                  \  }
} ||
|t        j                  | j                  |¬«      t        j                  | j                  |¬«      | j                   t        j                  |j                  |¬«      t        j                  |j                  |¬«      |j                   |||	«       | j                  |	||f| j                  ¬«      }|j#                  «        |S )z5apply the binary operation fn to two sparse matrices.r,   r/   )r�   r¡   r    r�   rž   rþ   )rS   ró   r   r=   r‚   rH   r?   r@   rJ   r£   r3   r�   r   r0   rG   rU   rA   r�   )rZ   rˆ   r‰   rô   Úmaxnnzr^   r?   r@   Úbool_opsrA   r\   r]   rº  s                rc   r–   z_cs_matrix._binoptH  s‰  € à—‘˜uÓ%ˆô ”\ 4§;¡;°Ñ#3°d·k±kÑ#AÓBˆà—‘˜EŸI™IÑ%ˆØ×)Ñ)¨4¯;©;¸¿¹Ø%*§\¡\°5·=±=ð+Bà+1ð *ó 3ˆ	ô —‘˜$Ÿ+™+×+Ñ+°9Ô=ˆÜ—(‘(˜6¨Ô3ˆâ;ˆØ�‰>Ü—8‘8˜F¬"¯(©(Ô3‰Dä—8‘8˜F¬&°·±¸U¿[¹[Ó*IÔJˆDà× Ñ ‰ˆˆ1Ù
ˆ1ˆaÜ�:‰:�d—k‘k¨Ô3Ü�:‰:�d—l‘l¨)Ô4Ø�9‰9Ü�:‰:�e—l‘l¨)Ô4Ü�:‰:�e—m‘m¨9Ô5Ø�:‰:Ø�7˜Dô	"ð �N‰N˜D '¨6Ð2¸$¿*¹*ˆNÓEˆØ	�‰Œ	àˆrp   c                 ó.  — |j                   | j                   k7  rt        d«      ‚| j                  |d«      }t        j                  |j
                  t        j                  «      r®t        j                  | j                   | j
                  ¬«      }|j                  t        j                  «       |j                  «       }| j                  dk(  r|d   f}d||<   |j                  «       }|j                  ||j                  <   | j                  |«      S |}|S )z?
        Divide this matrix by a second sparse matrix.
        rŸ   Ú_eldiv_r/   r   re   r   )r3   rR   r–   rJ   Ú
issubdtyper0   Úinexactr£   r¥   ÚnanÚnonzerorW   rÝ   rA   rÞ   rÀ   )rZ   rˆ   rm  r$  rÞ   s        rc   Ú_divide_sparsez_cs_matrix._divide_sparsek  sÑ   € ð �;‰;˜$Ÿ*™*Ò$ÜÐ2Ó3Ð3à�L‰L˜ 	Ó*ˆä�=‰=˜Ÿ™¤"§*¡*Ô-ô
 —(‘(˜4Ÿ:™:¨T¯Z©ZÔ8ˆCØ�H‰H”R—V‘VÔØ—]‘]“_ˆFØ�y‰y˜AŠ~Ø  ™*˜�ØˆC�‰KØ—‘“	ˆAØŸF™FˆC�—‘‰MØ—?‘? 3Ó'Ð'ð ˆCØˆJrp   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 )Nr*   zcannot be broadcastr   r   F)r0   r7   rÏ   r1   z0CSR/CSC broadcast_to cannot have shape >2D. Got ÚDc              3   ó&   K  — | ]	  }|d k(  –— Œ y­wr5  rû   )Ú.0Úss     rc   ú	<genexpr>z+_cs_matrix._broadcast_to.<locals>.<genexpr>¨  s   è ø€ Ò)˜!ˆq�A�vÑ)ùs   ‚)r3   r7   r!   rE   r#   rR   rM   rP   r‚   rS   r0   rJ   ÚfullrA   rä   rQ   Ú_csr_containerrG   rF   rs   rå   r@   rã   r?   )rZ   r3   r7   r]   rA   r@   r?   Ú	old_shaperW   r\   ré   rê   s               rc   Ú_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ÐOrp   )NNFr@  )T)r   )NNN©F)NN)@rT   Ú
__module__Ú__qualname__Ú__doc__r<   ro   r   rr   rY   r‹   r™   r›   r©   r­   r±   r´   r¸   rÃ   rÇ   rÊ   rÙ   rõ   rù   rÔ   r  r  r  r   rÓ   r&  r3  r;  r>  rC  rA  r8  rB  r9  r7  re  rh  ro  ru  r€  rc  rj  rt  rÝ   rÑ   r‡   Úpropertyr®  r°  ÚsetterrP   r‰  r»  r�  r�   rÁ  r†   r–   rÒ  rÜ  rû   rp   rc   r&   r&      s`  „ ñðV,ÈTô V,óp3ð$ —o‘o×-Ñ-€G„Oó3ð4 $×1Ñ1×9Ñ9€MÔó7-òFò""òH "òD!"òF9ò9ò8ò8ò	3ò-ò.òyò~
7òò :óx	ð ×'Ñ'×/Ñ/€HÔò9ò.Oð —o‘o×-Ñ-€G„OòOð —o‘o×-Ñ-€G„OóFð. —+‘+×%Ñ%€C„Kó"ò4*ò<ò8òHò
;ó@&;òP%;óNEó <ò* ò ò ò2B=òHò"%-òN-ò(F,óX
ð —M‘M×)Ñ)€E„Móð" —o‘o×-Ñ-€G„Oòð ð* dò *ó ð*ð, × Ñ ð+¨ò +ó !ð+ò
)ð ð( Dò (ó ð(ð ×Ñð- dò -ó ð-òò+ò7ò!ðF —^‘^×+Ñ+€F„NóFò!òFô80Prp   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_matrixr,   r/   Nre   rþ   )Ú_csrrä  rå  rM   r"   rJ   rä   )rA   rë   rä  rå  r]   r^   r?   r@   s           rc   rÖ   rÖ   º  sZ   € ÷ ,Ù%‘	¨:€IäˆD‹	€AÜ qÔ)€IÜ�Y‰Y�q˜1‘u IÔ.€FØ�S�bˆk€Gá�d˜G VÐ,°Q¸°FÔ;Ð;rp   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)rC   rL  r@   rR   rƒ   r   r}  Ú	TypeError)ÚslÚnumr]  r^  Ústrides        rc   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Ð3rp   rÝ  )1rà  Ú__all__Úwarningsr   rt   r‘   ÚnumpyrJ   Úscipy._lib._utilr   r   Ú_baser   r   r	   r
   Ú_datar   r   Ú r   r   r   r   r   r   r   r   r   Ú_indexr   Ú_sputilsr   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r&   rÖ   r\  rû   rp   rc   ú<module>rõ     sr   ðÙ DØ
€å Û Û ã ß 9ç FÓ Fß .Ý ÷A÷ Aó Aõ ÷+÷ +÷ +÷ +ô_P�˜}¨jô _PóD-<ó"rp   