§
    µ³Ùggæ  ã                   ó  — 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„ Z0dS )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dCddœd„ZdDd„Zej        j        e_        dDd„Zej        j        e_        dEd	„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dFd„Zej        j        e_        d„ Zd„ Zej        j        e_        d„ Zej        j        e_        dGd„Zej        j        e_        dDd„Zd „ Zd!„ Zd"„ Z d#„ Z!d$„ Z"dHd%„Z#d&„ Z$dHd'„Z%dCd(„Z&d)„ Z'd*„ Z(d+„ Z)d,„ Z*d-„ Z+d.„ Z,d/„ Z-d0„ Z.dEd1„Z/ej/        j        e/_        dId2„Z0ej0        j        e0_        d3„ Z1e2d4e3fd5„¦   «         Z4e4j5        d6e3fd7„¦   «         Z4d8„ Z6e2d4e3fd9„¦   «         Z7e7j5        d6e3fd:„¦   «         Z7d;„ Z8d<„ Z9d=„ Z:d>„ Z;ej;        j        e;_        dEd?„Z<d@„ Z=dA„ Z>dHdB„Z?dS )JÚ
_cs_matrixzY
    base array/matrix class for compressed row- and column-oriented arrays/matrices
    NF©Úmaxprintc                ó~	  — t          j        | ||¬¦  «         t          |¦  «        rv|j        | j        k    r|r|                     ¦   «         }n|                     | j        ¦  «        }|j        |j        |j        |j	        f\  | _        | _        | _        | _	        �n,t          |t          ¦  «        �rt          || j        ¬¦  «        rÈt          || j        ¬¦  «        | _	        |                      | j        ¦  «        \  }}|                      t%          | j        ¦  «        ¬¦  «        }t)          j        dt-          |t.          ¬¦  «        ¦  «        | _        t)          j        d|¦  «        | _        t)          j        |dz   |¬¦  «        | _        �n8t1          |¦  «        dk    rc|                      |||¬	¦  «        }	|	                     | j        ¦  «        }
|
\  | _        | _        | _        | _	        |                      ¦   «          �nÂt1          |¦  «        d
k    r–|\  }}}d }|�d|vrt%          |¦  «        }|                      ||f|d¬¦  «        }|st8          }t)          j        |||¬¦  «        | _        t)          j        |||¬¦  «        | _        t)          j        |||¬¦  «        | _        �nt=          d| j        j         › d|› �¦  «        ‚	 t)          j!        |¦  «        }n2# tD          $ r%}t=          d| j        j         › d|› �¦  «        |‚d }~ww xY wt          | tF          ¦  «        r.|j$        dk    r#| j        dk    rt=          d|j$        › d�¦  «        ‚|j$        dk    rt=          d|j$        › d�¦  «        ‚|                      ||¬¦  «        }	|	                     | j        ¦  «        }
|
\  | _        | _        | _        | _	        |�t          || j        ¬¦  «        | _	        nŽ| j        €‡	 t1          | j        ¦  «        dz
  }| j                             ¦   «         dz   }n"# tD          $ r}t=          d¦  «        |‚d }~ww xY wt          |                      ||f¦  «        | j        ¬¦  «        | _	        |�0t-          |¦  «        }| j         %                    |d¬¦  «        | _        |  &                    d¬¦  «         d S )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                    úN/granary/edev/quantum/lib/python3.11/site-packages/scipy/sparse/_compressed.pyr<   z_cs_matrix.__init__   sá  € ÝÔ˜d D°8Ð<Ñ<Ô<Ð<å�D‰>Œ>ð @	GØŒ{˜dœkÒ)Ð)¨dÐ)Ø—y’y‘{”{��à—}’} T¤[Ñ1Ô1�à”˜Tœ\¨4¬9°d´kðAÑ=ˆDŒK˜œ t¤y°$´+±+õ ˜�eÑ$Ô$ñ 7	GÝ�t d¤nÐ5Ñ5Ô5ð &Cõ *¨$¸¼ÐHÑHÔH�”Ø—z’z $Ô"3Ñ4Ô4‘��1ð !×1Ò1½¸T¼Z¹¼Ð1ÑIÔI�	ÝœH Q­°ÅÐ(FÑ(FÔ(FÑGÔG�”	Ý!œx¨¨9Ñ5Ô5�”Ý œh q¨1¡u°IÐ>Ñ>Ô>�”‘å�t‘9”9 ’>�>à×-Ò-¨d¸%ÀuÐ-ÑMÔM�CØ ×3Ò3°D´JÑ?Ô?�FØHNÑE�D”K ¤¨t¬y¸$¼+Ø×'Ò'Ñ)Ô)Ð)Ñ)Ý˜‘Y”Y !’^�^à.2Ñ+�T˜7 Fð "�FØÐ(¨Q°e¨^¨^Ý!$ U¡¤˜Ø $× 5Ò 5°wÀÐ6GØ7=Ø?Cð !6ñ !Eô !E�Ið  ð .Ý-˜Ý#%¤8¨G¸$ÀiÐ#PÑ#PÔ#P�D”LÝ"$¤(¨6¸ÀIÐ"NÑ"NÔ"N�D”KÝ "¤¨°DÀÐ FÑ FÔ F�D”I‘Iå$ð &B°T´^Ô5Lð &Bð &BØ;?ð&Bð &Bñ Cô Cð Cð
FÝ”z $Ñ'Ô'��øÝð Fð Fð FÝ ð ">°´Ô1Hð ">ð ">Ø7;ð">ð ">ñ ?ô ?ØDEðFøøøøðFøøøõ ˜$¥Ñ(Ô(ð Y¨T¬Y¸!ª^¨^ÀÄÈuÒ@TÐ@TÝ Ð!W¸T¼YÐ!WÐ!WÐ!WÑXÔXÐXØŒy˜1Š}ˆ}Ý Ð!NÀÄÐ!NÐ!NÐ!NÑOÔOÐOà×%Ò% d°%Ð%Ñ8Ô8ˆCØ×+Ò+¨D¬JÑ7Ô7ˆFØ@FÑ=ˆDŒK˜œ t¤y°$´+ð ÐÝ% e°d´nÐEÑEÔEˆDŒKˆKØŒZÐðMÝ˜œÑ$Ô$ qÑ(�Ø”L×$Ò$Ñ&Ô&¨Ñ*��øÝð Mð Mð MÝ Ð!DÑEÔEÈ1ÐLøøøøðMøøøõ & d§j¢j°!°Q°Ñ&8Ô&8À4Ä>ÐRÑRÔRˆDŒKàÐÝ ‘”ˆHØœ	×(Ò(¨¸Ð(Ñ>Ô>ˆDŒIà×Ò UÐÑ+Ô+Ð+Ð+Ð+s0   ËK% Ë%
LË/ LÌLÏ/3P# Ð#
QÐ-P=Ð=Qc                 óì  — |€t          | j        d         ¦  «        S | j        dk    r-|dv rt          | j        d         ¦  «        S t          d¦  «        ‚|dk     r|dz  }|                      |d|z
  f¦  «        \  }}|                      | 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˜!Š^ˆ^Ø�wˆˆÝ˜4œ; rœ?Ñ+Ô+Ð+ÝÐ1Ñ2Ô2Ð2à�aŠxˆxØ˜‘	�Ø—j’j $¨¨D©Ð!1Ñ2Ô2‰GˆD�!Ø—:’:˜dœjÑ)Ô)‰DˆAˆqØ�qŠyˆyÝ”{Õ#6°t´|Ñ#DÔ#DÐPQÐRÑRÔRÐRØ˜’�Ý”w˜tœ{Ñ+Ô+Ð+ÝÐ1Ñ2Ô2Ð2ó    c                 ó  ‡ — ‰                       ¦   «          |€t          j        ‰ j        ¦  «        S ‰ j        dk    r,|dvrt          d¦  «        ‚t          j        ‰ j        ¦  «        S |dk     r|dz  }‰                      |d|z
  f¦  «        \  }}|dk    rs‰                      ‰ j        ¦  «        \  }}‰ j        dk    }|                     ¦   «         r‰ j	        n‰ j	        |         }t          j
        t          |¦  «        |¬¦  «        S |dk    rk‰ j                             ¦   «         rt          j        ‰ j        ¦  «        S t          j        ‰ j        ¦  «        }t          j        ˆ fd„|D ¦   «         ¦  «        S t          d¦  «        ‚)Nr   rf   rg   r   r1   rh   c                 óX   •— g | ]&\  }}t          j        ‰j        ||…         ¦  «        ‘Œ'S © )rJ   Úcount_nonzerorA   )Ú.0ÚiÚjrZ   s      €rc   ú
<listcomp>z,_cs_matrix.count_nonzero.<locals>.<listcomp>Ÿ   s2   ø€ ÐPÐPÐPÁ$À!ÀQ�RÔ-¨d¬i¸¸!¸¬nÑ=Ô=ÐPÐPÐPrp   )rP   rJ   rt   rA   rW   rR   rF   r3   Úallr@   rk   r   rl   r?   Ú	itertoolsÚpairwiserQ   )rZ   rm   rn   r]   ÚmaskÚidxÚpairss   `      rc   rt   z_cs_matrix.count_nonzero‰   sp  ø€ Ø×ÒÑÔÐØˆ<ÝÔ# D¤IÑ.Ô.Ð.àŒ9˜Š>ˆ>Ø˜7Ð"Ð"Ý Ð!5Ñ6Ô6Ð6ÝÔ# D¤IÑ.Ô.Ð.à�!Š8ˆ8Ø�A‰IˆDØ—*’*˜d A¨¡HÐ-Ñ.Ô.‰ˆˆaØ�1Š9ˆ9Ø—:’:˜dœjÑ)Ô)‰DˆAˆqØ”9 ’>ˆDØ"&§(¢(¡*¤*ÐD�$”,�,°$´,¸tÔ2DˆCÝ”;Õ2°3Ñ7Ô7À1ÐEÑEÔEÐEØ�QŠYˆYØŒy�}Š}‰Œð ,Ý”w˜tœ{Ñ+Ô+Ð+ÝÔ& t¤{Ñ3Ô3ˆEÝ”8ÐPÐPÐPÐPÈ%ÐPÑPÔPÑQÔQÐQåÐ1Ñ2Ô2Ð2rp   Tc                 ó¨  — | j         j        j        dk    r$t          d| j         j        j        › d�d¬¦  «         | j        j        j        dk    r$t          d| j        j        j        › d�d¬¦  «         | j        j        | j        j        | j         j        fD ]}|dk    rt          d¦  «        ‚Œ|  	                    | j
        ¦  «        \  }}t          | j         ¦  «        |dz   k    r*t          d	t          | j         ¦  «        › d
|dz   › �¦  «        ‚| j         d         dk    rt          d¦  «        ‚t          | j        ¦  «        t          | j        ¦  «        k    rt          d¦  «        ‚| j         d         t          | j        ¦  «        k    rt          d¦  «        ‚|                      ¦   «          |�r | j        dk    r™| j                             ¦   «         |k    rt          d|› �¦  «        ‚| j                             ¦   «         dk     rt          d¦  «        ‚t!          j        | j         ¦  «                             ¦   «         dk     rt          d¦  «        ‚|                      | j         | j        f¦  «        }t!          j        | j         |¬¦  «        | _         t!          j        | j        |¬¦  «        | _        t)          | j        ¦  «        | _        dS dS )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`.
        rv   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Ò(Ð(ÝÐQ¸¼Ô8IÔ8NÐQÐQÐQØðñ ô ð àŒ<ÔÔ" cÒ)Ð)ÝÐS¸¼Ô9KÔ9PÐSÐSÐSØðñ ô ð ð ”)”. $¤,Ô"3°T´[Ô5EÐFð 	Lð 	LˆAØ�AŠvˆvÝ Ð!JÑKÔKÐKð ð �zŠz˜$Ô+Ñ,Ô,‰ˆˆ1å�”ÑÔ  A¡Ò%Ð%ÝÐWµ3°t´{Ñ3CÔ3CÐWÐWÐPQÐTUÑPUÐWÐWÑXÔXÐXØŒK˜ŒN˜aÒÐÝÐ@ÑAÔAÐAõ �”ÑÔ¥ T¤Y¡¤Ò/Ð/ÝÐIÑJÔJÐJØŒK˜ŒO�c $¤,Ñ/Ô/Ò/Ð/Ýð Añ Bô Bð Bð 	�
Š
‰Œˆàñ 	-àŒx˜!Š|ˆ|Ø”<×#Ò#Ñ%Ô%¨Ò*Ð*Ý$Ð%=¸!Ð%=Ð%=Ñ>Ô>Ð>Ø”<×#Ò#Ñ%Ô%¨Ò)Ð)Ý$Ð%;Ñ<Ô<Ð<Ý”7˜4œ;Ñ'Ô'×+Ò+Ñ-Ô-°Ò1Ð1Ý$Ð%OÑPÔPÐPà×-Ò-¨t¬{¸D¼LÐ.IÑJÔJˆIÝœ* T¤[¸	ÐBÑBÔBˆDŒKÝœ: d¤l¸)ÐDÑDÔDˆDŒLÝ! $¤)Ñ,Ô,ˆDŒIˆIˆIð	-ð 	-rp   c                 ó¢   — |                       ¦   «          |                       || j        |¦  «        d¬¦  «        }|                     ¦   «          |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è   sP   € ð 	×ÒÑÔÐØ�oŠo˜b˜b ¤¨EÑ2Ô2¸ˆoÑ>Ô>ˆØ×ÒÑÔÐØˆ
rp   c                 óº  — t          |¦  «        rÔt          j        |¦  «        r&|                      | j        t          j        ¬¦  «        S |dk    rtt          dt          d¬¦  «         |                      t          j        | j        t          j        ¬¦  «        ¦  «        }|  	                    |t          j        ¦  «        }||z
  S |  	                    |t          j        ¦  «        S t          |¦  «        r|                      ¦   «         |k    S t          |¦  «        rt           S t#          |¦  «        r¦t          dt          d¬¦  «         | j        |j        k    rdS | j        |j        k    r|                     | j        ¦  «        }|                      |d¦  «        }|                      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˜‰Œð BØ—~’~ d¤j½¼�~ÑAÔAÐAà˜ŠzˆzÝð /Ý0GØ !ð#ñ #ô #ð #ð  Ÿ>š>­"¬'°$´*ÅBÄHÐ*MÑ*MÔ*MÑNÔN�Ø×)Ò)¨%µ´Ñ=Ô=�Ø #‘~Ð%à×*Ò*¨5µ(´+Ñ>Ô>Ð>å�U‰^Œ^ð 	"Ø—<’<‘>”> UÒ*Ð*å Ñ&Ô&ð 	"Ý!Ð!å�e‰_Œ_ð 	"Ýð  Ý!8ÀQðHñ Hô Hð Hð Œz˜Uœ[Ò(Ð(Ø�uØ” ¤Ò,Ð,ØŸš t¤{Ñ3Ô3�Ø—,’,˜u fÑ-Ô-ˆCØ—~’~¥b¤g¨d¬jÅÄÐ&IÑ&IÔ&IÑJÔJˆHØ˜c‘>Ð!å!Ð!rp   c                 óh  — t          |¦  «        rÿt          j        |¦  «        rQt          dt          d¬¦  «         |                      t          j        | j        t          j        ¬¦  «        ¦  «        }|S |dk    rtt          dt          d¬¦  «         |                      t          j        | j        ¦  «        t          j        ¬¦  «        }|  	                    |t          j        ¦  «        }||z
  S |  	                    |t          j        ¦  «        S t          |¦  «        r|                      ¦   «         |k    S t          |¦  «        rt           S t#          |¦  «        rR| j        |j        k    rdS | j        |j        k    r|                     | 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˜‰Œð ?Ýð $Ý%<ÈðLñ Lô Lð LàŸ>š>­"¬'°$´*ÅBÄHÐ*MÑ*MÔ*MÑNÔN�Ø�Ø˜!’�Ýð >å,¸ð<ñ <ô <ð <ð  Ÿ>š>­"¬'°$´*Ñ*=Ô*=ÅRÄX˜>ÑNÔN�Ø×)Ò)¨%µ´Ñ=Ô=�Ø #‘~Ð%à×*Ò*¨5µ(´+Ñ>Ô>Ð>å�U‰^Œ^ð 	"Ø—<’<‘>”> UÒ*Ð*å Ñ&Ô&ð 	"Ý!Ð!å�e‰_Œ_ð 	"àŒz˜Uœ[Ò(Ð(Ø�tØ” ¤Ò,Ð,ØŸš t¤{Ñ3Ô3�Ø—<’<  vÑ.Ô.Ð.å!Ð!rp   c                 óÎ  — t          |¦  «        r¿d|k    r|dv rt          d¦  «        ‚ |d|¦  «        r„t          |t          d¬¦  «         t	          j        | j        t	          j        |¦  «        ¬¦  «        }|                     |¦  «         |  	                    |¦  «        }|  
                    ||¦  «        S |                      ||¦  «        S t          |¦  «        r ||                      ¦   «         |¦  «        S t          |¦  «        rÕ| j        |j        k    rt          d¦  «        ‚| j        |j        k    r|                     | j        ¦  «        }|dvr|  
                    ||¦  «        S t          d	t          d¬¦  «         |  	                    t	          j        | j        t          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  sØ  € å˜ÑÔð 	"Ø�EŠzˆz˜gÐ)9Ð9Ð9Ý)Ð*IÑJÔJÐJØ��A�u‘”ð 6Ý�^Õ%<ÈÐKÑKÔKÐKÝœH T¤Zµr´~ÀeÑ7LÔ7LÐMÑMÔM�	Ø—’˜uÑ%Ô%Ð%Ø ŸNšN¨9Ñ5Ô5�	Ø—|’| I¨wÑ7Ô7Ð7à×*Ò*¨5°"Ñ5Ô5Ð5å�U‰^Œ^ð 	"Ø�2�d—l’l‘n”n eÑ,Ô,Ð,å�e‰_Œ_ð 	"àŒz˜Uœ[Ò(Ð(Ý Ð!6Ñ7Ô7Ð7Ø” ¤Ò,Ð,ØŸš t¤{Ñ3Ô3�ØÐ.Ð.Ð.Ø—|’| E¨7Ñ3Ô3Ð3åð /å(°Qð8ñ 8ô 8ð 8ð —~’~¥b¤g¨d¬jÅÄÐ&IÑ&IÔ&IÑJÔJˆHØ—,’,˜u°¸6Ò0AÐ0A f fÀvÑNÔNˆCØ˜c‘>Ð!å!Ð!rp   c                 óF   — |                       |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ô 9ð 	9rp   c                 óF   — |                       |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   — |                       |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ô 8ð 	8rp   c                 óF   — |                       |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                 óè  — |j         | j         k    r t          d| j         › d|j         › d�¦  «        ‚t          | j        j        |j        j        ¦  «        }|                      d¦  «        d         }t          j        |||d¬¦  «        }|j        j	        r|n|j
        }|                      | j        ¦  «        \  }}t          ||| 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Þ   € ØŒ;˜$œ*Ò$Ð$ÝÐT°T´ZÐTÐTÀeÄkÐTÐTÐTÑUÔUÐUÝ˜DœJœO¨U¬[Ô-=Ñ>Ô>ˆØ—
’
˜4Ñ Ô  Ô#ˆÝ”˜% u°EÀÐEÑEÔEˆØ”lÔ/Ð=ˆFˆF°V´XˆØ�zŠz˜$Ô+Ñ,Ô,‰ˆˆ1Ý�A�q˜$œ+ t¤|°T´YÀÑBÔBÐBØ�Š˜v¨EˆÑ2Ô2Ð2rp   c                 ó.   — |                       |d¦  «        S )NÚ_plus_©rš   r°   s     rc   Ú_add_sparsez_cs_matrix._add_sparse�  s   € Ø�|Š|˜E 8Ñ,Ô,Ð,rp   c                 ó.   — |                       |d¦  «        S )NÚ_minus_rÊ   r°   s     rc   Ú_sub_sparsez_cs_matrix._sub_sparse„  s   € Ø�|Š|˜E 9Ñ-Ô-Ð-rp   c                 ó&  — t          |¦  «        r|                      |¦  «        S t          |¦  «        �rM| j        |j        k    r+|                      |¦  «        }|                      |d¦  «        S |j        dk    r\|                      |                     ¦   «         d         ¦  «        }| j        dk    r"|                     d| j        d         f¦  «        S |S |j        dk    r-|                      |                     ¦   «         d         ¦  «        S | j        dv r,|                     | j	         
                    ¦   «         ¦  «        S | j        \  }}|j        \  }}|dk    rA|dk    r;|                     |                      ||¦  «                             ¦   «         ¦  «        S |dk    rA|dk    r;|                      |                     ||¦  «                             ¦   «         ¦  «        S t          | t          ¦  «        }|dk    rs||k    rmt!          |                     ¦   «                              ¦   «         |¦  «        }|                      |¦  «        }| j        dk    r|n|                     d|f¦  «        S |dk    rO||k    rIt!          |                      ¦   «                              ¦   «         |¦  «        }	|                     |	¦  «        S |dk    rO||k    rIt!          |                     ¦   «                              ¦   «         |¦  «        }|                     | ¦  «        S |dk    rO||k    rIt!          |                      ¦   «                              ¦   «         |¦  «        }
|
                     |¦  «        S t%          d	¦  «        ‚t'          j        |¦  «        }|j        dk    r't'          j        |                      ¦   «         |¦  «        S |j        dk    ri|j        t&          j        k    rt2          S t5          | j        |j        ¦  «        }|                      |j        d         ¦  «                             |¦  «        S | j        dv rYt5          | j        |j        ¦  «        }t'          j        | j	         
                    ¦   «         |¦  «                             |¦  «        S |                      ¦   «         }| j        |j        k    r]t'          j        |j	        ||j                 ¦  «        }|                     t&          j        ¦  «                             ¦   «         |_	        |S t'          j         |¦  «        }| j        d         dk    s| j        dk    �r†|j        d         dk    rt'          j        |j	        |¦  «        }nU|j        d         | j        d
         k    r*t'          j        |j	        |dd…|j!        f         ¦  «        }nt%          d	¦  «        ‚|  "                    |j!        |j#        |j        d         z  ¬¦  «        }t'          j$        t'          j%        |j        d         |¬¦  «        |j#        ¦  «        }t'          j&        |j!         '                    |d¬¦  «        |j        d         ¦  «        }|  (                    |                     t&          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    r0t'          j        |j	        dd…df         ||j)                 ¦  «        }nt%          d	¦  «        ‚|  "                    |j)        |j#        |j        d         z  ¬¦  «        }t'          j$        |j)         '                    |d¬¦  «        |j        d         ¦  «        }t'          j&        t'          j%        |j        d         |¬¦  «        |j#        ¦  «        }|  (                    |                     t&          j        ¦  «                             ¦   «         ||ff| j        d         |j        d         fd¬¦  «        S |j        d         dk    rX| j        d         |j        d         k    r<t'          j        |j	        |dd…|j!        f                              ¦   «         ¦  «        }nt|j        d         dk    rT| j        d         |j        d         k    r8t'          j        |j	        ||j)                                      ¦   «         ¦  «        }nt%          d	¦  «        ‚|                     t&          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‡  s$  € õ ˜ÑÔð 	+Ø×#Ò# EÑ*Ô*Ð*å�E‰?Œ?ñ +	4ØŒz˜Uœ[Ò(Ð(ØŸš uÑ-Ô-�Ø—|’| E¨9Ñ5Ô5Ð5àŒ{˜fÒ$Ð$Ø×)Ò)¨%¯-ª-©/¬/¸$Ô*?Ñ@Ô@�Ø”9 ’>�>Ø!Ÿ>š>¨1¨d¬j¸¬mÐ*<Ñ=Ô=Ð=Ø�ØŒ{˜dÒ"Ð"Ø×'Ò'¨¯ª©¬¸Ô(:Ñ;Ô;Ð;ØŒz˜^Ð+Ð+Ø×(Ò(¨¬¯ª©¬Ñ9Ô9Ð9ð Ô&‰FˆB�ØÔ'‰FˆB�à�QŠwˆw˜2 š7˜7Ø×+Ò+¨D¯LªL¸¸RÑ,@Ô,@×,FÒ,FÑ,HÔ,HÑIÔIÐIØ�QŠwˆw˜2 š7˜7Ø×*Ò*¨5¯=ª=¸¸RÑ+@Ô+@×+FÒ+FÑ+HÔ+HÑIÔIÐIå! $­Ñ0Ô0ˆHà�QŠwˆw˜2 š8˜8Ý.¨u¯}ª}©¬×/DÒ/DÑ/FÔ/FÈÑQÔQ�	Ø×,Ò,¨YÑ7Ô7�Ø!%¤¨a¢ �v�v°V·^²^ÀQÈÀGÑ5LÔ5LÐLà�QŠwˆw˜2 š8˜8Ý)¨$¯,ª,©.¬.×*>Ò*>Ñ*@Ô*@À(ÑKÔK�Ø×+Ò+¨DÑ1Ô1Ð1ð �QŠwˆw˜2 š8˜8Ý.¨u¯}ª}©¬×/DÒ/DÑ/FÔ/FÈÑQÔQ�	Ø ×/Ò/°Ñ5Ô5Ð5à�QŠwˆw˜2 š8˜8Ý-¨d¯lªl©n¬n×.BÒ.BÑ.DÔ.DÀhÑOÔO�Ø×.Ò.¨uÑ5Ô5Ð5ÝÐ2Ñ3Ô3Ð3õ ”˜eÑ$Ô$ˆàŒ:˜Š>ˆ>Ý”;˜tŸ|š|™~œ~¨uÑ5Ô5Ð5àŒ:˜Š?ˆ?ØŒ{�bœjÒ(Ð(å%Ð%Ý% d¤j°%´+Ñ>Ô>ˆFØ×#Ò# E¤J¨q¤MÑ2Ô2×:Ò:¸6ÑBÔBÐBàŒ:˜Ð'Ð'Ý% d¤j°%´+Ñ>Ô>ˆFÝ”;˜tœyŸ}š}™œ°Ñ6Ô6×>Ò>¸vÑFÔFÐFà�jŠj‰lŒlˆàŒ:˜œÒ$Ð$Ý”;˜sœx¨¨s¬zÔ):Ñ;Ô;ˆDØ—y’y¥¤Ñ,Ô,×2Ò2Ñ4Ô4ˆCŒHØˆJõ ”- Ñ&Ô&ˆàŒ:�aŒ=˜AÒÐ ¤¨a¢¡ØŒ}˜QÔ 1Ò$Ð$Ý”{ 3¤8¨WÑ5Ô5��Ø”˜qÔ! T¤Z°¤^Ò3Ð3Ý”{ 3¤8¨W°Q°Q°Q¸¼°ZÔ-@ÑAÔA��å Ð!6Ñ7Ô7Ð7Ø×-Ò-¨c¬gØ58´W¸w¼}ÈQÔ?OÑ5Oð .ñ Qô QˆIå”)�BœI g¤m°AÔ&6¸iÐHÑHÔHÈ#Ì'ÑRÔRˆCÝ”'˜#œ'Ÿ.š.¨¸˜.Ñ?Ô?ÀÄÈqÔAQÑRÔRˆCØ×&Ò&Ø—’�2œ:Ñ&Ô&×,Ò,Ñ.Ô.°°c°
Ð;Ø”} QÔ'¨¬°B¬Ð8Øð 'ñ ô ð ð Œ:�aŒ=˜AÒÑØŒ}˜QÔ 1Ò$Ð$Ý”{ 3¤8¨A¨A¨A¨t¨GÔ#4°gÑ>Ô>��Ø”˜qÔ! T¤Z°¤]Ò2Ð2Ý”{ 3¤8¨A¨A¨A¨t¨GÔ#4°g¸c¼gÔ6FÑGÔG��å Ð!6Ñ7Ô7Ð7Ø×-Ò-¨c¬gØ58´W¸w¼}ÈQÔ?OÑ5Oð .ñ Qô QˆIå”)˜CœGŸNšN¨9¸5˜NÑAÔAÀ7Ä=ÐQRÔCSÑTÔTˆCÝ”'�"œ) G¤M°!Ô$4¸IÐFÑFÔFÈÌÑPÔPˆCØ×&Ò&Ø—’�2œ:Ñ&Ô&×,Ò,Ñ.Ô.°°c°
Ð;Ø”z !”} g¤m°AÔ&6Ð7Øð 'ñ ô ð ð Œ=˜Ô˜qÒ Ð  T¤Z°¤]°g´mÀAÔ6FÒ%FÐ%FÝ”;˜sœx¨°°°°C´G°Ô)<×)BÒ)BÑ)DÔ)DÑEÔEˆDˆDàŒ]˜1Ô Ò"Ð" t¤z°!¤}¸¼ÀaÔ8HÒ'HÐ'HÝ”;˜sœx¨°´Ô)9×)?Ò)?Ñ)AÔ)AÑBÔBˆDˆDåÐ2Ñ3Ô3Ð3Ø—9’9�RœZÑ(Ô(×.Ò.Ñ0Ô0ˆŒØˆ
rp   c           	      ó*  — | j         \  }}t          j        |t          | j        j        |j        j        ¦  «        ¬¦  «        }t          t          | j        dz   ¦  «        } |||| j	        | j
        | j        ||¦  «         | j        dk    r|d         n|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¬ÀÄÔ@PÑ#QÔ#QÐRÑRÔRˆõ •\ 4¤;°Ñ#:Ñ;Ô;ˆØ
ˆˆ1ˆa�”˜dœl¨D¬I°u¸fÑEÔEÐEà œI¨šN˜Nˆv�aŒyˆy°Ð6rp   c                 ó®  — | j         \  }}|j        d         }t          j        ||ft	          | j        j        |j        j        ¦  «        ¬¦  «        }t          t          | j	        dz   ¦  «        } ||||| j
        | j        | j        |                     ¦   «         |                     ¦   «         ¦  «         | j        dk    r|                     |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¬O¸U¼[Ô=MÑ NÔ NðPñ Pô Pˆõ •\ 4¤;°Ñ#;Ñ<Ô<ˆØ
ˆˆ1ˆa�˜œ d¤l°D´IØ�;Š;‰=Œ=˜&Ÿ,š,™.œ.ñ	*ô 	*ð 	*ð Œ9˜Š>ˆ>Ø—>’> 6 )Ñ,Ô,Ð,Øˆrp   c                 ó,  — | j         \  }}|j        }|dk    r'|                     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}|                      ||f¦  «        d         }	|                      |¦  «        }|                      | j	        | j
        |j	        |j
        f¦  «        }
t          t          | j        dz   ¦  «        } |||t          j        | j	        |
¬¦  «        t          j        | j
        |
¬¦  «        t          j        |j	        |
¬¦  «        t          j        |j
        |
¬¦  «        ¦  «        }|dk    rc|dk    r.t          j        dt#          | j        |j        ¦  «        ¬¦  «        S |                      |t#          | j        |j        ¦  «        ¬¦  «        S |                      | 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 |                      |||f|¬	¦  «        }||k    r4|j        d
k    r|                     ¦   «         }|                     |¦  «        }|S )Nr   r   r1   rs   Ú_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"  sr  € ØÔ!‰ˆˆ2à”ˆØ�QŠ;ˆ;à—M’M 1 e¤k°!¤nÐ"5Ñ6Ô6Ô8ˆEØ %¤
¨a¢ �”�°e´kÀ!´nÀaÐ5H‰ˆˆAð ˆ	ØŒ9˜Š>ˆ>Ø˜!˜ÑˆIØ�QŠ;ˆ;Ø˜!˜ÑˆIØœ9¨š>˜>�a�a¨q°vÀ²{°{°!°!ÈÐJˆ
à—J’J  1˜vÑ&Ô& qÔ)ˆ	Ø—’˜uÑ%Ô%ˆà×)Ò)¨4¬;¸¼Ø%*¤\°5´=ð+Bñ Cô Cˆ	õ •\ 4¤;Ð1AÑ#AÑBÔBˆØˆb��AÝ”˜DœK¨yÐ9Ñ9Ô9Ý”˜DœL°	Ð:Ñ:Ô:Ý”˜EœL°	Ð:Ñ:Ô:Ý”˜EœM°Ð;Ñ;Ô;ñ	=ô =ˆð
 �!Š8ˆ8Ø˜BŠˆÝ”x ­°´
¸E¼KÑ)HÔ)HÐIÑIÔIÐIØ—>’> )µ6¸$¼*ÀeÄkÑ3RÔ3R�>ÑSÔSÐSà×)Ò)¨4¬;¸¼Ø%*¤\°5´=ð+Bà+.ð *ñ 0ô 0ˆ	õ ”˜) a™-¨yÐ9Ñ9Ô9ˆÝ”(˜3 iÐ0Ñ0Ô0ˆÝŒx˜¥6¨$¬*°e´kÑ#BÔ#BÐCÑCÔCˆå•\ 4¤;°Ñ#:Ñ;Ô;ˆØ
ˆˆ1ˆa•”˜DœK¨yÐ9Ñ9Ô9ÝŒ:�d”l¨)Ð4Ñ4Ô4ØŒ9ÝŒ:�e”l¨)Ð4Ñ4Ô4ÝŒ:�e”m¨9Ð5Ñ5Ô5ØŒ:Ø�7˜Dñ	"ô 	"ð 	"ð ˜Š?ˆ?Ý”8˜D œGÑ$Ô$Ð$Ø�nŠn˜d G¨VÐ4¸JˆnÑGÔGˆØ˜Ò"Ð"ØŒz˜UÒ"Ð"Ø—i’i‘k”k�Ø—+’+˜iÑ(Ô(ˆCØˆ
rp   r   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‰
ˆˆdØ��Š:ˆ:˜˜dš˜Ý”8˜A T¤Y¤_Ð5Ñ5Ô5Ð5Ý•\ 4¤;°Ñ#<Ñ=Ô=ˆÝŒH•S˜¥ A q¡	¤	Ñ)¨4µ#°a¸±)´)Ñ+;Ñ<Ô<Ý! $¤*Ñ-Ô-ð/ñ /ô /ˆà
ˆˆ1ˆdŒj˜Œm˜TœZ¨œ]¨D¬K¸¼ØŒ9�añ	ô 	ð 	àˆrp   c                 óÚ  — t          |¦  «        rü ||¦  «        r‰t          dt          d¬¦  «         t          j        | j        t          j        |¦  «        j        ¬¦  «        }|                     |¦  «         |  	                    |¦  «        }|  
                    ||¦  «        S |                      ¦   «           || j        t          j        |¦  «        ¦  «        }|  	                    || j        | j        f|j        | j        ¬¦  «        }|S t          |¦  «        r ||                      ¦   «         |¦  «        S t#          |¦  «        r|  
                    ||¦  «        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_  € Ý˜ÑÔð 	9Øˆ{˜5Ñ!Ô!ð Ýð +Ý,CØ !ð#ñ #ô #ð #õ œH T¤Zµr´zÀ%Ñ7HÔ7HÔ7NÐOÑOÔO�	Ø—’˜uÑ%Ô%Ð%Ø ŸNšN¨9Ñ5Ô5�	Ø—|’| I¨wÑ7Ô7Ð7à×#Ò#Ñ%Ô%Ð%Ø˜4 ¤	­2¬:°eÑ+<Ô+<Ñ=Ô=�Ø—n’n h°´¸d¼kÐ%JØ+3¬>ÀÄð %ñ Mô M�à�
Ý�U‰^Œ^ð 	9Ø�4˜Ÿš™œ¨Ñ.Ô.Ð.Ý�e‰_Œ_ð 	9Ø—<’<  wÑ/Ô/Ð/åÐ7Ñ8Ô8Ð8rp   c                 óH   — |                       |t          j        dd„ ¦  «        S )NÚ	_maximum_c                 ó2   — t          j        | ¦  «        dk    S ©Nr   ©rJ   rU   ©rˆ   s    rc   ú<lambda>z$_cs_matrix.maximum.<locals>.<lambda>ˆ  ó   € ½B¼JÀq¹M¼MÈAÒ<M€ rp   )r  rJ   Úmaximumr°   s     rc   r  z_cs_matrix.maximum†  ó,   € Ø×$Ò$ U­B¬JØ%0Ð2MÐ2MñOô Oð 	Orp   c                 óH   — |                       |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á||                      d¦  «        d         v rÄt          | j        ¦  «        }t          j        t          | j        ¦  «        dz
  |¬¦  «        }|  	                    t
          j
        ¦  «        \  }}|||<   |                      |¦  «        }|dz  dk    r|j        }|�|j        |j        k    rt          d¦  «        ‚|                     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/   Nzdimensions do not matchrs   )rm   r0   Úout)rW   ÚhasattrrF   r    r0   rJ   rK   rM   r?   Ú_minor_reduceÚaddÚ_ascontainerrÃ   r3   rR   r×   r   )rZ   rm   r0   r'  Ú	res_dtyperó   Úmajor_indexÚvalues           rc   r×   z_cs_matrix.sum–  s  € ð ŒI˜ŠNˆN¥7¨4°Ñ#=Ô#=ˆNØ˜Ÿ
š
Ð#5Ñ6Ô6°qÔ9Ð9Ð9å% d¤jÑ1Ô1ˆIÝ”(�3˜tœ{Ñ+Ô+¨aÑ/°yÐAÑAÔAˆCà!%×!3Ò!3µB´FÑ!;Ô!;ÑˆK˜Ø$ˆC�ÑØ×#Ò# CÑ(Ô(ˆCØ�a‰x˜1Š}ˆ}Ø”e�àˆ 3¤9°´	Ò#9Ð#9Ý Ð!:Ñ;Ô;Ð;à—7’7 ¨%°S�7Ñ9Ô9Ð9õ ”;˜t¨$°eÀÐEÑEÔEÐErp   c                 óÎ   — |€| j         }t          j        t          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²  s_   € ð ˆ<Ø”9ˆDÝ”n¥R¤W¨T¬[Ñ%9Ô%9Ñ:Ô:ˆØ—’˜tÝ2°4´;¸{Ô3KÑLÔLñNô Nˆà˜EÐ!Ð!rp   c                 ó  — |                       | j        ¦  «        \  }}|                       ||f¦  «        \  }}t          ||| j        | j        | j        ||dz   ||dz   ¦	  «	        \  }}}	|	                     | 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Ø�5˜1‘9˜e U¨Q¡Yñ!0ô !0Ñˆ�˜ð �xŠx˜dœjˆxÑ)Ô)Ð)rp   c                 óÚ   — |                       ||f¦  «        \  }}|j        dv r!|j        dv r|                      ||d¬¦  «        S |                      |¦  «                             |¦  «        S )N©r   NTr9   )rF   ÚstepÚ_get_submatrixÚ_major_sliceÚ_minor_slice©rZ   rê   ræ   r4  r5  s        rc   Ú_get_sliceXslicez_cs_matrix._get_sliceXsliceÔ  sq   € Ø—z’z 3¨ *Ñ-Ô-‰ˆˆuØŒ:˜Ð"Ð" u¤z°YÐ'>Ð'>Ø×&Ò& u¨e¸$Ð&Ñ?Ô?Ð?Ø× Ò  Ñ'Ô'×4Ò4°UÑ;Ô;Ð;rp   c                 óX  — | j         j        }|                      | j        ¦  «        \  }}|                      ||f¦  «        \  }}t	          j        ||¬¦  «        }t	          j        ||¬¦  «        }t	          j        |j        | j        ¬¦  «        }t          ||| j	        | j         | j
        |j        |                     ¦   «         |                     ¦   «         |¦	  «	         |j        dk    r|                      |¦  «        S |                      |                     |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]   r4  r5  Úvals	            rc   Ú_get_arrayXarrayz_cs_matrix._get_arrayXarrayÚ  sû   € à”LÔ&ˆ	Ø�zŠz˜$œ*Ñ%Ô%‰ˆˆ1Ø—z’z 3¨ *Ñ-Ô-‰ˆˆuÝ”
˜5¨	Ð2Ñ2Ô2ˆÝ”
˜5¨	Ð2Ñ2Ô2ˆåŒh�u”z¨¬Ð4Ñ4Ô4ˆÝ˜!˜Q ¤¨T¬\¸4¼9Øœ* e§k¢k¡m¤m°U·[²[±]´]ÀCñ	Iô 	Ið 	IàŒ:˜Š?ˆ?Ø×$Ò$ SÑ)Ô)Ð)Ø�~Š~˜cŸkšk¨%¬+Ñ6Ô6Ñ7Ô7Ð7rp   c                 ó†   — |                       ||f¦  «        \  }}|                      |¦  «                             |¦  «        S ©N)rF   Ú_major_index_fancyÚ_minor_index_fancyr=  s        rc   Ú_get_columnXarrayz_cs_matrix._get_columnXarrayé  s=   € à—z’z 3¨ *Ñ-Ô-‰ˆˆuØ×&Ò& uÑ-Ô-×@Ò@ÀÑGÔGÐGrp   c           	      ó”  — |                       | j        | j        f¦  «        }t          j        ||¬¦  «                             ¦   «         }|                      | j        ¦  «        d         }t          |¦  «        }| j	        dk    r|                      ||f¦  «        n|f}|dk    r|  
                    || j        ¬¦  «        S | j        |dz            | j        |         z
                       |¦  «        }t          j        |dz   |¬¦  «        }t          j        ||dd…         ¬¦  «         |d         }	t          j        |	|¬¦  «        }
t          j        |	| j        ¬¦  «        }t!          ||| j                             |d¬	¦  «        | j                             |d¬	¦  «        | 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   r}   r^   r@   r]   r\   r  Úrow_nnzÚ
res_indptrr†   Úres_indicesÚres_datas               rc   rD  z_cs_matrix._major_index_fancyî  s»  € ð ×)Ò)¨4¬;¸¼Ð*EÑFÔFˆ	Ý”*˜S¨	Ð2Ñ2Ô2×8Ò8Ñ:Ô:ˆà�JŠJ�tÔ(Ñ)Ô)¨!Ô,ˆÝ�‰LŒLˆØ*.¬)°qª.¨.�D—J’J  1˜vÑ&Ô&Ð&¸q¸dˆ	Ø�Š6ˆ6Ø—>’> )°4´:�>Ñ>Ô>Ð>à”;˜w¨™{Ô+¨d¬k¸'Ô.BÑB×JÒJÈ9ÑUÔUˆÝ”X˜a !™e¨9Ð5Ñ5Ô5ˆ
Ý
Œ	�'˜z¨!¨"¨"œ~Ð.Ñ.Ô.Ð.à˜ŒnˆÝ”h˜s¨)Ð4Ñ4Ô4ˆÝ”8˜C t¤zÐ2Ñ2Ô2ˆÝØØØŒK×Ò˜y¨uÐÑ5Ô5ØŒL×Ò 	°ÐÑ6Ô6ØŒIØØñ	
ô 	
ð 	
ð �~Š~˜x¨°jÐAØ$-°Eð ñ ;ô ;ð 	;rp   c           
      ó^  — |t          d¦  «        k    r|r|                      ¦   «         n| S |                      | j        ¦  «        \  }}|                     |¦  «        \  }}}t          t          |||¦  «        ¦  «        }| j        dk    r|                      ||f¦  «        n|f}|dk    r|                      || 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    rit          | j
        |         | j
        |         ¦  «        }t          j        | j        |         |¬¦  «        }t          j        | j        |         |¬¦  «        }n^|d         }t          j        ||¬¦  «        }t          j        || j	        ¬¦  «        }t#          |||| j
        | j        | j        ||¦  «         |                      |||f|d	¬
¦  «        S )z@Index along the major axis where idx is a slice object.
        Nr1   r   r/   re   r   rH  r9   FrÓ   )Úslicer7   rF   rG   r@   rM   ÚrangerW   rS   r0   r?   rJ   rK   rI  rQ   rA   r§   r   )rZ   r}   r7   r\   r]   ÚstartÚstopr9  r  Ústart0Ústop0Ústart1Ústop1rJ  r^   rK  Úall_idxrL  rM  r†   s                       rc   r;  z_cs_matrix._major_slice  s9  € ð •%˜‘+”+ÒÐØ"&Ð0�4—9’9‘;”;�;¨DÐ0à�zŠz˜$Ô+Ñ,Ô,‰ˆˆ1ØŸKšK¨™NœNÑˆˆt�TÝ•�e˜T 4Ñ(Ô(Ñ)Ô)ˆØ*.¬)°qª.¨.�D—J’J  1˜vÑ&Ô&Ð&¸q¸dˆ	Ø�Š6ˆ6Ø—>’> )°4´:�>Ñ>Ô>Ð>ð ˜t�ˆØ�2Š:ˆ:˜% 1š*˜*ØˆEØ ™	 4¨!¡8�ˆà”+˜f U¨4Ð/Ô0ØŒK˜˜u TÐ)Ô*ñ+ˆà”LÔ&ˆ	Ý”X˜a ™c¨Ð3Ñ3Ô3ˆ
Ý
Œ	�'˜z¨!¨"¨"œ~Ð.Ñ.Ô.Ð.à�1Š9ˆ9Ý˜DœK¨Ô.°´¸DÔ0AÑBÔBˆGÝœ( 4¤<°Ô#8¸tÐDÑDÔDˆKÝ”x ¤	¨'Ô 2¸Ð>Ñ>Ô>ˆHˆHà˜R”.ˆCÝœ( 3¨iÐ8Ñ8Ô8ˆKÝ”x ¨4¬:Ð6Ñ6Ô6ˆHÝ˜%  t¨T¬[¸$¼,Øœ) [°(ñ<ô <ð <ð �~Š~˜x¨°jÐAØ$-°Eð ñ ;ô ;ð 	;rp   c           
      óÊ  — |                       | j        | j        f¦  «        }| j                             |d¬¦  «        }| j                             |d¬¦  «        }t	          j        ||¬¦  «                             ¦   «         }|                      | j        ¦  «        \  }}t          |¦  «        }| j
        dk    r|                      ||f¦  «        n|f}|dk    r|                      || j        ¬¦  «        S t	          j        ||¬¦  «        }	t	          j        | j        |¬¦  «        }
t          |||||||	|
¦  «         t	          j        |¦  «                             |d¬¦  «        }|
d         }t	          j        ||¬¦  «        }t	          j        || j        ¬¦  «        }t%          ||	t          | 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   r}   r^   r@   r?   r\   r]   r  r  Úcol_offsetsrK  Ú	col_orderr†   rL  rM  s                  rc   rE  z_cs_matrix._minor_index_fancy6  sâ  € ð ×)Ò)¨4¬<¸¼Ð*EÑFÔFˆ	Ø”,×%Ò% i°eÐ%Ñ<Ô<ˆØ”×#Ò# I°EÐ#Ñ:Ô:ˆåŒj˜ IÐ.Ñ.Ô.×4Ò4Ñ6Ô6ˆà�zŠz˜$Ô+Ñ,Ô,‰ˆˆ1Ý�‰HŒHˆØ*.¬)°qª.¨.�D—J’J  1˜vÑ&Ô&Ð&¸q¸dˆ	Ø�Š6ˆ6Ø—>’> )°4´:�>Ñ>Ô>Ð>õ ”h˜q¨	Ð2Ñ2Ô2ˆÝ”] 4¤;°iÐ@Ñ@Ô@ˆ
ÝØØØØØØØØñ		
ô 		
ð 		
õ ”J˜s‘O”O×*Ò*¨9¸5Ð*ÑAÔAˆ	Ø˜ŒnˆÝ”h˜s¨)Ð4Ñ4Ô4ˆÝ”8˜C t¤zÐ2Ñ2Ô2ˆÝ˜) [µ#°d´lÑ2CÔ2CØ! 4¤9¨k¸8ñ	Eô 	Eð 	Eà�~Š~˜x¨°jÐAØ$-°Eð ñ ;ô ;ð 	;rp   c                 óú  — |t          d¦  «        k    r|r|                      ¦   «         n| S |                      | j        ¦  «        \  }}|                     |¦  «        \  }}}t          t          |||¦  «        ¦  «        }|dk    r1|                      |                      ||f¦  «        | j        ¬¦  «        S |dk    r|  	                    ||¬¦  «        S |  
                    t          j        |||¦  «        ¦  «        S )z@Index along the minor axis where idx is a slice object.
        Nr   r/   r   )r5  r7   )rO  r7   rF   rG   r@   rM   rP  rS   r0   r:  rE  rJ   rè   )rZ   r}   r7   r\   r]   rQ  rR  r9  s           rc   r<  z_cs_matrix._minor_slice]  sè   € ð •%˜‘+”+ÒÐØ"&Ð0�4—9’9‘;”;�;¨DÐ0à�zŠz˜$Ô+Ñ,Ô,‰ˆˆ1ØŸKšK¨™NœNÑˆˆt�TÝ•�e˜T 4Ñ(Ô(Ñ)Ô)ˆØ�Š6ˆ6Ø—>’> $§*¢*¨a°¨VÑ"4Ô"4¸D¼J�>ÑGÔGÐGØ�1Š9ˆ9Ø×&Ò&¨S°tÐ&Ñ<Ô<Ð<à×&Ò&¥r¤y°¸¸dÑ'CÔ'CÑDÔDÐDrp   c                 óà  — |                       | j        ¦  «        \  }}t          ||¦  «        \  }}t          ||¦  «        \  }}	|dk    r*|dk    r$||k    r|	|k    r|r|                      ¦   «         n| S t	          ||| j        | j        | j        ||||	¦	  «	        \  }
}}|                       ||z
  |	|z
  f¦  «        }| j        dk    r	|d         f}|  	                    |||
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   r4  r5  r7   r\   r]   Úi0Úi1Új0Új1r?   r@   rA   r3   s                 rc   r:  z_cs_matrix._get_submatrixm  s  € ð
 �zŠz˜$Ô+Ñ,Ô,‰ˆˆ1Ý  qÑ)Ô)‰ˆˆBÝ  qÑ)Ô)‰ˆˆBà�Š7ˆ7�r˜Q’w�w 2¨¢7 7¨r°Qªw¨wØ"&Ð0�4—9’9‘;”;�;¨DÐ0å 1Øˆq�$”+˜tœ|¨T¬Y¸¸BÀÀBñ!Hô !HÑˆ�˜ð —
’
˜B ™G R¨"¡WÐ-Ñ.Ô.ˆØŒ9˜Š>ˆ>Ø˜1”X�KˆEØ�~Š~˜t W¨fÐ5¸UØ$(¤J°Uð ñ <ô <ð 	<rp   c                 óh   — |                       ||f¦  «        \  }}|                      |||¦  «         d S rC  ©rF   Ú	_set_many©rZ   rê   ræ   rˆ   rv   rw   s         rc   Ú_set_intXintz_cs_matrix._set_intXint‚  ó7   € Ø�zŠz˜3 ˜*Ñ%Ô%‰ˆˆ1Ø�Š�q˜!˜QÑÔÐÐÐrp   c                 óh   — |                       ||f¦  «        \  }}|                      |||¦  «         d S rC  re  rg  s         rc   Ú_set_arrayXarrayz_cs_matrix._set_arrayXarray†  ri  rp   c                 ó,  —  | j         |                      ||f¦  «        Ž  |j        \  }}|dk    o|j        d         dk    }|dk    o|j        d         dk    }|j        |j        }	}t          j        |j        | j        ¬¦  «        }|j	        dk    rd S |r^t          j
        t          j        |¦  «        t          |¦  «        ¦  «        }t          j        |	|¦  «        }	t          j        ||¦  «        }|r^t          j
        ||¦  «        }t          j        t          j        |¦  «        t          |	¦  «        ¦  «        }	t          j
        ||¦  «        }|                      |||	f         |||	f         f¦  «        \  }
}|                      |
||¦  «         d S )Nr   r   r/   )Ú
_zero_manyrF   r3   rê   ræ   rJ   rU   rA   r0   rÞ   rç   rè   rM   ré   rf  )rZ   rê   ræ   rˆ   r\   r]   Úbroadcast_rowÚbroadcast_colÚrÚcrv   rw   s               rc   Ú_set_arrayXarray_sparsez"_cs_matrix._set_arrayXarray_sparseŠ  sa  € àˆŒ˜Ÿš S¨# JÑ/Ô/Ð0Ð0àŒy‰ˆˆ1Ø˜QšÐ2 1¤7¨1¤:°¢?ˆØ˜QšÐ2 1¤7¨1¤:°¢?ˆØŒu�a”eˆ1ˆåŒJ�q”v T¤ZÐ0Ñ0Ô0ˆØŒ6�QŠ;ˆ;ØˆFàð 	Ý”	�"œ) A™,œ,­¨A©¬Ñ/Ô/ˆAÝ”˜˜1‘”ˆAÝ”˜˜1‘”ˆAØð 	 Ý”	˜!˜Q‘”ˆAÝ”�œ	 !™œ¥c¨!¡f¤fÑ-Ô-ˆAÝ”	˜!˜Q‘”ˆAà�zŠz˜3˜q !˜tœ9 c¨!¨Q¨$¤iÐ0Ñ1Ô1‰ˆˆ1Ø�Š�q˜!˜QÑÔÐÐÐrp   c           
      ó  — d| j         v rd S | 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         k    rt          j        |	|j         ¦  «        }	|	j        dk    rd S |                      ||f¦  «        \  }}|                      ||f¦  «        \  }}|	j        }
t          j        |
| j        j        ¬¦  «        }t#          ||| j        | j        |
|||¦  «        }|dk    r4|                      ¦   «          t#          ||| j        | j        |
|||¦  «         d|vr|	| j        |<   d S |dk    }| j        |                     ¦   «         z
  | j        dz  k     rH|	|         | j        ||         <   | }||         }||         }|                      |||	|         ¦  «         d S |                      ¦   «         }|                     ||¦  «         |                     | j        ¦  «        }|\  | _        | _        | _        }d S )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_indexrv   rw   rˆ   Ú	n_samplesÚoffsetsró   r|   r_   r`   rn   s                    rc   rx  z_cs_matrix._setdiag£  sX  € Ø�”
ˆ?ˆ?ØˆFØŒ9˜Š>ˆ>Ý%Ð&JÑKÔKÐKàŒz‰ˆˆ1Ø”[ AÒ%ˆ	àˆqŠ5ˆ5Øð 7Ý  A¡ q™MœM�	�	å  A¡ q­#¨f©+¬+Ñ6Ô6�	Ý”	˜1˜"˜i¨!™m°4´<Ô3EÐFÑFÔFˆAÝ”	˜)¨4¬<Ô+=Ð>Ñ>Ô>ˆAˆAð ð 7Ý  1 q¡5™MœM�	�	å  1 q¡5­#¨f©+¬+Ñ6Ô6�	Ý”	˜)¨4¬<Ô+=Ð>Ñ>Ô>ˆAÝ”	˜!˜Q ™]°$´,Ô2DÐEÑEÔEˆAàð 	%Ø˜G�S ™VœV˜G”_ˆFåŒM�"œ* V°4´:Ð>Ñ>Ô>Ñ?Ô?×EÒEÑGÔGˆØ�9Š9‰;Œ;Ô §	¢	¡¤Ô 1Ò1Ð1Ý”  1¤7Ñ+Ô+ˆAØŒ6�QŠ;ˆ;ØˆFà�zŠz˜1˜a˜&Ñ!Ô!‰ˆˆ1Ø�zŠz˜1˜a˜&Ñ!Ô!‰ˆˆ1Ø”Fˆ	Ý”(˜9¨D¬LÔ,>Ð?Ñ?Ô?ˆÝ   A t¤{°D´LÀ)Ø!" A wñ0ô 0ˆà�!Š8ˆ8à×ÒÑ!Ô!Ð!Ý˜q ! T¤[°$´,À	Ø  ! Wñ.ô .ð .à�WÐÐà!"ˆDŒI�gÑØˆFà˜1’ˆð Œ8�d—h’h‘j”jÑ  4¤8¨eÑ#3Ò3Ð3à'(¨¤wˆDŒI�g˜d”mÑ$à�5ˆDØ�$”ˆAØ�$”ˆAØ×Ò˜a  A d¤GÑ,Ô,Ð,Ð,Ð,ð —*’*‘,”,ˆCØ�LŠL˜ Ñ#Ô#Ð#Ø×+Ò+¨D¬JÑ7Ô7ˆFØ6<Ñ3ˆDŒK˜œ t¤y°!°!°!rp   c                 óŽ  — |                       | j        ¦  «        \  }}d„ }t          j        t          j        || j        j        ¬¦  «        ¦  «                             ¦   «         }t          j        t          j        || j        j        ¬¦  «        ¦  «                             ¦   «         } |||¦  «          |||¦  «         ||||fS )Nc                 óÈ   — |                       ¦   «         }||k    rt          d|› d|› d�¦  «        ‚|                      ¦   «         }|| k     rt          d|› d|› d�¦  «        ‚d S )Nzindex (z) out of range (>= r€   z) out of range (< -)rI   Ú
IndexErrorr‡   )r@   Úboundr}   s      rc   Úcheck_boundsz1_cs_matrix._prepare_indices.<locals>.check_boundsê  s{   € Ø—+’+‘-”-ˆCØ�eŠ|ˆ|Ý Ð!K¨3Ð!KÐ!KÀ5Ð!KÐ!KÐ!KÑLÔLÐLØ—+’+‘-”-ˆCØ�e�VŠ|ˆ|Ý Ð!K¨3Ð!KÐ!KÀ5Ð!KÐ!KÐ!KÑLÔLÐLð ˆ|rp   r/   )rF   rG   rJ   rt  rU   r@   r0   rÛ   )rZ   rv   rw   r\   r]   r‚  s         rc   Ú_prepare_indicesz_cs_matrix._prepare_indicesç  s¾   € Ø�zŠz˜$Ô+Ñ,Ô,‰ˆˆ1ð	Mð 	Mð 	Mõ ŒM�"œ* Q¨d¬lÔ.@ÐAÑAÔAÑBÔB×HÒHÑJÔJˆÝŒM�"œ* Q¨d¬lÔ.@ÐAÑAÔAÑBÔB×HÒHÑJÔJˆØˆ�Q˜ÑÔÐØˆ�Q˜ÑÔÐØ�!�Q˜ˆzÐrp   c           
      ó  — |                       ||¦  «        \  }}}}t          j        t          j        || j        ¬¦  «        ¦  «                             ¦   «         }|j        }t          j        || j        j        ¬¦  «        }t          ||| j
        | j        ||||¦  «        }|dk    r4|                      ¦   «          t          ||| j
        | j        ||||¦  «         d|vr|| j        |<   dS t          d| j        j        › d�t           d¬¦  «         |dk    }	||	         | j        ||	         <   |	 }	||	         }||d	k     xx         |z  cc<   ||	         }||d	k     xx         |z  cc<   |                      ||||	         ¦  «         dS )
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   rt  rU   r0   rÛ   rÞ   r§   r@   r   r?   rP   rA   r   rS   rT   r
   rw  )
rZ   rv   rw   rˆ   r\   r]   r|  r}  ró   r|   s
             rc   rf  z_cs_matrix._set_manyø  s¶  € ð ×*Ò*¨1¨aÑ0Ô0‰
ˆˆ1ˆa�ÝŒM�"œ* Q¨d¬jÐ9Ñ9Ô9Ñ:Ô:×@Ò@ÑBÔBˆà”Fˆ	Ý”(˜9¨D¬LÔ,>Ð?Ñ?Ô?ˆÝ   A t¤{°D´LÀ)Ø!" A wñ0ô 0ˆà�!Š8ˆ8à×ÒÑ!Ô!Ð!Ý˜q ! T¤[°$´,À	Ø  ! Wñ.ô .ð .ð �WÐÐà!"ˆDŒI�gÑØˆFõ ð ?¸¼Ô9Pð ?ð ?ð ?å(°Qð8ñ 8ô 8ð 8ð ˜R’<ˆDØ'(¨¤wˆDŒI�g˜d”mÑ$à�5ˆDØ�$”ˆAØˆa�!ŠeˆHˆHŒH˜‰MˆHˆH‰HØ�$”ˆAØˆa�!ŠeˆHˆHŒH˜‰MˆHˆH‰HØ×Ò˜a  A d¤GÑ,Ô,Ð,Ð,Ð,rp   c           
      óv  — |                       ||¦  «        \  }}}}t          |¦  «        }t          j        || j        j        ¬¦  «        }t          ||| j        | j        ||||¦  «        }|dk    r4|                      ¦   «          t          ||| j        | j        ||||¦  «         d| j	        ||dk             <   dS )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   rv   rw   r\   r]   r|  r}  ró   s           rc   rm  z_cs_matrix._zero_many  sÈ   € ð
 ×*Ò*¨1¨aÑ0Ô0‰
ˆˆ1ˆa�å˜‘F”Fˆ	Ý”(˜9¨D¬LÔ,>Ð?Ñ?Ô?ˆÝ   A t¤{°D´LÀ)Ø!" A wñ0ô 0ˆà�!Š8ˆ8à×ÒÑ!Ô!Ð!Ý˜q ! T¤[°$´,À	Ø  ! Wñ.ô .ð .ð ,-ˆŒ	�'˜' Bš,Ô'Ñ(Ð(Ð(rp   c           	      ó  — t          j        |d¬¦  «        }|                     |d¬¦  «        }|                     |d¬¦  «        }|                     |d¬¦  «        }| 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 �]O\  }\  }}}| j        |         }| j        |         }| 
                    | j        ||…         ¦  «         | 
                    | j        ||…         ¦  «         t          j	        |||…         ddd…         d¬	¦  «        \  }}t          |¦  «        ||z
  k    r;| 
                    |||…         ¦  «         | 
                    |||…         ¦  «         nj| 
                    |||…         ddd…         |         ¦  «         | 
                    |||…         ddd…         |         ¦  «         t          |¦  «        ||<   |}�ŒQ| j        |         }| 
                    | j        |d…         ¦  «         | 
                    | 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| _        |                      ¦   «          |                      d¬¦  «         dS )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   NrH  Fr:   )rJ   rZ  ÚtakeÚhas_sorted_indicesrH   r@   r?   rÞ   rU   ÚuniqueÚappendrM   rl   Ú	enumerateÚziprA   Úconcatenater§   r3   rI  Úsort_indicesrY   )rZ   rv   rw   rˆ   r¿   Údo_sortr^   Úindices_partsÚ
data_partsÚuiÚ	ui_indptrÚnew_nnzsÚprevrq  ÚiiÚjsÚjerQ  rR  ÚujÚ	uj_indptrÚnnzsÚindptr_diffs                          rc   rw  z_cs_matrix._insert_many3  sÓ  € õ ”
˜1 ;Ð/Ñ/Ô/ˆØ�FŠF�5˜vˆFÑ&Ô&ˆØ�FŠF�5˜vˆFÑ&Ô&ˆØ�FŠF�5˜vˆFÑ&Ô&ˆàÔ)ˆð ×)Ò)¨4¬<¸¼Ð*EØ,0¬K¸¬O¸a¼fÑ,Dð *ñ Gô Gˆ	å”j ¤°IÐ>Ñ>Ô>ˆŒÝ”z $¤,°iÐ@Ñ@Ô@ˆŒÝŒJ�q 	Ð*Ñ*Ô*ˆÝŒJ�q 	Ð*Ñ*Ô*ˆð ˆØˆ
Ýœ	 !°$Ð7Ñ7Ô7‰ˆˆIÝ”I˜i­¨Q©¬Ñ0Ô0ˆ	Ý”7˜9Ñ%Ô%ˆØˆÝ(­¨R°¸IÀaÀbÀb¼MÑ)JÔ)JÑKÔKð 	ñ 	‰OˆA‰|��B˜à”K Ô%ˆEØ”;˜r”?ˆDØ× Ò  ¤¨e°D¨jÔ!9Ñ:Ô:Ð:Ø×Ò˜dœi¨¨d¨
Ô3Ñ4Ô4Ð4õ œI a¨¨2¨¤h¨t¨t°¨t¤nÀ4ÐHÑHÔH‰MˆB�	Ý�2‰wŒw˜"˜r™'Ò!Ð!Ø×$Ò$ Q r¨" u¤XÑ.Ô.Ð.Ø×!Ò! ! B r E¤(Ñ+Ô+Ð+Ð+à×$Ò$ Q r¨" u¤X¨d¨d°¨d¤^°IÔ%>Ñ?Ô?Ð?Ø×!Ò! ! B r E¤(¨4¨4¨R¨4¤.°Ô";Ñ<Ô<Ð<Ý! "™gœg�˜‘àˆD‰Dð ”˜B”ˆØ×Ò˜Tœ\¨%¨&¨&Ô1Ñ2Ô2Ð2Ø×Ò˜$œ) E F FÔ+Ñ,Ô,Ð,õ ”~ mÑ4Ô4ˆŒÝ”N :Ñ.Ô.ˆŒ	ÝŒx˜œÔ)°Ð;Ñ;Ô;ˆØ�)˜A‘,”,ˆˆQ‰Ý”g˜dœkÑ*Ô*ˆØ�BˆˆŒ˜8Ñ#ˆˆ‰ØˆˆQˆRˆR‰Ý”i ¨$Ð/Ñ/Ô/ˆŒàð 	 à&+ˆDÔ#Ø×ÒÑÔÐà×Ò UÐÑ+Ô+Ð+Ð+Ð+rp   c                 óî  — | j         dk    r>|                      ¦   «         }|                      |j        |j        ff|j        |¬¦  «        S |                      | j        ¦  «        \  }}| j        }t          j        t          |¦  «        | j        j
        ¬¦  «        }t          j        || j        |¦  «         |                      ||f¦  «        }|                      | 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˜Š>ˆ>Ø—*’*‘,”,ˆCØ×&Ò&¨¬°3´;°.Ð'AÀ3Ä9ÐSWÐ&ÑXÔXÐXØ#Ÿzšz¨$¬*Ñ5Ô5Ñˆ	�9ØœˆÝœ¥ ]Ñ!3Ô!3¸4¼<Ô;MÐNÑNÔNˆÝÔ˜y¨$¬+°}ÑEÔEÐEØ—’˜]¨MÐ:Ñ;Ô;ˆà×"Ò"ØŒY˜Ð ¤°$¸d¼jð #ñ 
ô 
ð 	
rp   c                 óº  — |€|€|                       d¦  «        d         }|                      ||¦  «        }|j        j        s|j        j        st          d¦  «        ‚|j        j        r|                      ¦   «         }|}n|                      ¦   «         }|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Ô4ˆØ”	Ô&ð 	G¨#¬)Ô*@ð 	GÝÐEÑFÔFÐFàŒ9Ô!ð 	Ø—
’
‘”ˆAØˆAˆAà—
’
‘”ˆAØ”ˆAØ�wŠw�q”~Ñ&Ô&‰ˆˆ1Ý�A�q˜!œ( A¤I¨q¬v°qÑ9Ô9Ð9Øˆ
rp   c                 ó¶   — |                       | j        ¦  «        \  }}t          j        ||| j        | j        | j        ¦  «         |                      ¦   «          dS )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¦  sL   € ð
 �zŠz˜$Ô+Ñ,Ô,‰ˆˆ1ÝÔ(¨¨A¨t¬{¸D¼LÈ$Ì)ÑTÔTÐTØ�
Š
‰Œˆˆˆrp   Úreturnc                 óð   — t          | dd¦  «        sd| _        nWt          | d¦  «        sGt          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Ô9ð 	à).ˆDÔ&Ð&Ý˜Ð6Ñ7Ô7ð 	Ý(,ÝÔ5Ý˜œÑ$Ô$ qÑ(¨$¬+°t´|ñEô Eñ)ô )ˆDÔ%ð Ô)Ð)rp   r@  c                 óD   — t          |¦  «        | _        |r	d| _        d S d S )NT)r±  r°  rŒ  ©rZ   r@  s     rc   r³  z_cs_matrix.has_canonical_formatÆ  s0   € å%)¨#¡Y¤YˆÔ"Øð 	+Ø&*ˆDÔ#Ð#Ð#ð	+ð 	+rp   c                 óþ   — | j         rdS |                      ¦   «          |                      | j        ¦  «        \  }}t	          j        ||| j        | j        | j        ¦  «         |  	                    ¦   «          d| _         dS )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Ì  sx   € ð
 Ô$ð 	ØˆFØ×ÒÑÔÐà�zŠz˜$Ô+Ñ,Ô,‰ˆˆ1ÝÔ'¨¨1¨d¬k¸4¼<ÈÌÑSÔSÐSà�
Š
‰ŒˆØ$(ˆÔ!Ð!Ð!rp   c                 ó¾   — t          | d¦  «        sGt          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Û  s`   € õ �tÐ2Ñ3Ô3ð 	Ý'+ÝÔ3Ý˜œÑ$Ô$ qÑ(¨$¬+°t´|ñEô Eñ(ô (ˆDÔ$ð Ô'Ð'rp   c                 ó.   — t          |¦  «        | _        d S rC  )r±  r¯  r¶  s     rc   rŒ  z_cs_matrix.has_sorted_indicesë  s   € å#'¨¡9¤9ˆÔ Ð Ð rp   c                 óV   — |                       ¦   «         }|                     ¦   «          |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ŒKˆØ	�ŠÑÔÐØˆrp   c                 óœ   — | j         sDt          j        t          | j        ¦  «        dz
  | j        | j        | j        ¦  «         d| _         dS dS )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û  s]   € ð Ô&ð 	+ÝÔ)­#¨d¬kÑ*:Ô*:¸QÑ*>ÀÄØ*.¬,¸¼	ñCô Cð Cà&*ˆDÔ#Ð#Ð#ð	+ð 	+rp   c                 óâ  — |                       | j        ¦  «        d         }t          | j        ¦  «        |dz   k    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        …         ¦  «        | _        dS )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Ñ1Ô1°!Ô4ˆ	åˆtŒ{ÑÔ˜y¨1™}Ò,Ð,ÝÐ?Ñ@Ô@Ð@ÝˆtŒ|ÑÔ˜tœxÒ'Ð'ÝÐHÑIÔIÐIÝˆtŒy‰>Œ>˜DœHÒ$Ð$ÝÐEÑFÔFÐFå# D¤L°°$´(°Ô$;Ñ<Ô<ˆŒÝ  ¤¨9¨D¬H¨9Ô!5Ñ6Ô6ˆŒ	ˆ	ˆ	rp   c                 óÒ  — t          || j        ¬¦  «        }t          | d¦  «        r{| j        \  }}t	          |d         |¦  «        \  }}t	          |d         |¦  «        \  }}|s|rt          d| j        › d|› �¦  «        ‚| j        d         |z  | j        d         |z  }	}nR|                      t          |¦  «        dk    r|n	d|d         f¦  «        \  }}|                      | j	        ¦  «        \  }}	||k     rV| j
        d | j        |         …         | _
        | j        d | j        |         …         | _        | j        d |dz   …         | _        nX||k    rRt          j        | j        |dz   ¦  «        | _        | j        |dz   d …                              | j        |         ¦  «         ||	k     r²| j
        |k     }
t          j        |
¦  «        s“| j
        |
         | _
        | j        |
         | _        |                      t          j        |
¦  «        \  }}| j                             d¦  «         || j        dd …         |<   t          j        | j        | j        ¬¦  «         || _        d S )Nr*   r%  r   r   zshape must be divisible into z blocks. Got rH  )r!   rE   r(  r%  ÚdivmodrR   r3   rF   rM   rG   r@   r?   rA   rJ   Úresizer©   ry   r)  r*  rI  rB   )rZ   r3   ÚbmÚbnÚnew_MÚrmÚnew_NÚrnr\   r]   r|   r-  r@  s                rc   rÄ  z_cs_matrix.resize  sV  € Ý˜E¨D¬NÐ;Ñ;Ô;ˆå�4˜Ñ%Ô%ð 
	1Ø”^‰FˆB�Ý˜u Qœx¨Ñ,Ô,‰IˆE�2Ý˜u Qœx¨Ñ,Ô,‰IˆE�2Øð :�Rð :Ý ð "9ÀÄð "9ð "9Ø16ð"9ð "9ñ :ô :ð :à”:˜a”= BÑ&¨¬
°1¬¸Ñ(;ˆqˆAˆAàŸ:š:­s°5©z¬z¸!ª|¨| e eÀ!ÀUÈ1ÄXÀÑOÔO‰LˆE�5Ø—:’:˜dÔ/Ñ0Ô0‰DˆAˆqà�1Š9ˆ9Øœ<Ð(;¨¬°UÔ);Ð(;Ô<ˆDŒLØœ	Ð"5 4¤;¨uÔ#5Ð"5Ô6ˆDŒIØœ+ j u¨q¡y jÔ1ˆDŒKˆKØ�QŠYˆYÝœ) D¤K°¸±Ñ;Ô;ˆDŒKØŒK˜˜A™˜˜Ô×$Ò$ T¤[°¤^Ñ4Ô4Ð4à�1Š9ˆ9Ø”< %Ò'ˆDÝ”6˜$‘<”<ð 8Ø#œ|¨DÔ1�”Ø œI dœO�”	Ø#'×#5Ò#5µb´f¸dÑ#CÔ#CÑ �˜SØ”× Ò  Ñ#Ô#Ð#Ø/2�”˜A˜B˜B” Ñ,Ý”	˜$œ+¨4¬;Ð7Ñ7Ô7Ð7àˆŒˆˆrp   c                 ó
  — |rS|                       || j                             ¦   «         | j                             ¦   «         f| j        |j        ¬¦  «        S |                       || 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�   € ð
 ð 	FØ—>’> 4¨¬×):Ò):Ñ)<Ô)<Ø#'¤;×#3Ò#3Ñ#5Ô#5ð#7à(,¬
Ø(,¬
ð "ñ 4ô 4ð 4ð
 —>’> 4¨¬°t´{Ð"CØ(,¬
¸$¼*ð "ñ Fô Fð Frp   c                 ó�  — |                       |¦  «        }t          t          | j        |z   | j        z   ¦  «        }| j        |j        z   }|                      | j        | j        |j        |j        f|¬¦  «        }t          j	        | j        j
        |¬¦  «        }t          j	        ||¬¦  «        }g d¢}||v r!t          j	        |t          j        ¬¦  «        }	n.t          j	        |t          | j        |j        ¦  «        ¬¦  «        }	| j        \  }
} ||
|t          j        | j        |¬¦  «        t          j        | j        |¬¦  «        | j        t          j        |j        |¬¦  «        t          j        |j        |¬¦  «        |j        |||	¦  «         |                       |	||f| 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._binoptK  s¨  € à—’˜uÑ%Ô%ˆõ •\ 4¤;°Ñ#3°d´kÑ#AÑBÔBˆà”˜EœIÑ%ˆØ×)Ò)¨4¬;¸¼Ø%*¤\°5´=ð+Bà+1ð *ñ 3ô 3ˆ	õ ”˜$œ+Ô+°9Ð=Ñ=Ô=ˆÝ”(˜6¨Ð3Ñ3Ô3ˆà;Ð;Ð;ˆØ�ˆ>ˆ>Ý”8˜F­"¬(Ð3Ñ3Ô3ˆDˆDå”8˜F­&°´¸U¼[Ñ*IÔ*IÐJÑJÔJˆDàÔ ‰ˆˆ1Ø
ˆˆ1ˆaÝŒ:�d”k¨Ð3Ñ3Ô3ÝŒ:�d”l¨)Ð4Ñ4Ô4ØŒ9ÝŒ:�e”l¨)Ð4Ñ4Ô4ÝŒ:�e”m¨9Ð5Ñ5Ô5ØŒ:Ø�7˜Dñ	"ô 	"ð 	"ð �NŠN˜D '¨6Ð2¸$¼*ˆNÑEÔEˆØ	�Š‰	Œ	ˆ	àˆrp   c                 ó  — |j         | j         k    rt          d¦  «        ‚|                      |d¦  «        }t          j        |j        t          j        ¦  «        r¤t          j        | j         | j        ¬¦  «        }|                     t          j	        ¦  «         | 
                    ¦   «         }| j        dk    r	|d         f}d||<   |                     ¦   «         }|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Œ   rp  r'  râ   s        rc   Ú_divide_sparsez_cs_matrix._divide_sparsen  sß   € ð Œ;˜$œ*Ò$Ð$ÝÐ2Ñ3Ô3Ð3à�LŠL˜ 	Ñ*Ô*ˆåŒ=˜œ¥"¤*Ñ-Ô-ð 	õ
 ”(˜4œ:¨T¬ZÐ8Ñ8Ô8ˆCØ�HŠH•R”VÑÔÐØ—]’]‘_”_ˆFØŒy˜AŠ~ˆ~Ø  œ*˜�ØˆC�‰KØ—’‘	”	ˆAØœFˆC�”‰MØ—?’? 3Ñ'Ô'Ð'ð ˆCØˆJrp   c                 óÌ  — | j         |k    r|r|                      ¦   «         n| S t          || j        ¬¦  «        }t	          | j         |¦  «        |k    rt          d¦  «        ‚t          | j         ¦  «        dk    r½t          |¦  «        dk    rª|                      ¦   «          | j        dk    r|  	                    || j
        d¬¦  «        S |d         }t          j        || j        d         ¦  «        }t          j        d|¦  «        }t          j        d|g¦  «        }|                      |||f|d¬¦  «        S | j        }t          |¦  «        dk    r"t          |¦  «        }t          d	|› d
�¦  «        ‚| j        dk    r|  	                    || j
        d¬¦  «        S |                      ¦   «          |                      |¦  «        \  }	}|                      |¦  «        \  }
}t'          d„ |D ¦   «         ¦  «        rqt          j        |	|z  | j        d         ¦  «        }t          j        t          j        |¦  «        |	¦  «        }t          j        dt          |¦  «        dz   |¦  «        }nâ|
dk    rs||k    rmt          j        | j        |	¦  «        }t          j        | j        |	¦  «        }t          j        dt          |¦  «        dz   t          | j        ¦  «        ¦  «        }ni|dk    rc|
|	k    r]t          j        | j        |¦  «        }t          j        t          j        |¦  «        t          | j        ¦  «        ¦  «        }| j        |z  }|  	                    |||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    V — ŒdS r8  rs   )ru   Úss     rc   ú	<genexpr>z+_cs_matrix._broadcast_to.<locals>.<genexpr>«  s&   è è € Ð)Ð)˜!ˆq�AŠvÐ)Ð)Ð)Ð)Ð)Ð)rp   )r3   r7   r!   rE   r#   rR   rM   rP   r†   rS   r0   rJ   ÚfullrA   rè   rQ   Ú_csr_containerrG   rF   ry   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ü  € ØŒ:˜ÒÐØ"&Ð0�4—9’9‘;”;�;¨DÐ0å˜E¨T¬^Ð=Ñ=Ô=ˆå˜DœJ¨Ñ.Ô.°%Ò7Ð7ÝÐ2Ñ3Ô3Ð3åˆtŒz‰?Œ?˜aÒÐ¥C¨¡J¤J°!¢O OØ×ÒÑ!Ô!Ð!ØŒx˜1Š}ˆ}Ø—~’~ e°4´:ÀE�~ÑJÔJÐJà�a”ˆAÝ”7˜1˜dœi¨œlÑ+Ô+ˆDÝ”i  !‘n”nˆGÝ”X˜q !˜fÑ%Ô%ˆFØ×&Ò&¨¨g°vÐ'>ÀeÐRWÐ&ÑXÔXÐXð Ô%ˆ	åˆu‰:Œ:˜Š?ˆ?Ý�u‘:”:ˆDÝÐWÐPTÐWÐWÐWÑXÔXÐXàŒ8�qŠ=ˆ=Ø—>’> %¨t¬zÀ�>ÑFÔFÐFà×ÒÑÔÐØ�zŠz˜%Ñ Ô ‰ˆˆ1Ø—’˜IÑ&Ô&‰ˆˆBÝÐ)Ð)˜yÐ)Ñ)Ô)Ñ)Ô)ð 	%å”7˜1˜q™5 $¤)¨A¤,Ñ/Ô/ˆDÝ”g�bœi¨™lœl¨AÑ.Ô.ˆGÝ”Y˜q¥# d¡)¤)¨a¡-°Ñ3Ô3ˆFˆFØ�1ŠWˆW˜˜qš˜å”7˜4œ9 aÑ(Ô(ˆDÝ”g˜dœl¨AÑ.Ô.ˆGÝ”Y˜q¥# d¡)¤)¨a¡-µ°T´Y±´Ñ@Ô@ˆFˆFØ�1ŠWˆW˜˜qš˜å”9˜TœY¨Ñ*Ô*ˆDÝ”g�bœi¨™lœl­C°´	©N¬NÑ;Ô;ˆGØ”[ 1‘_ˆFØ�~Š~˜t W¨fÐ5¸UÈˆ~ÑOÔOÐOrp   )NNFrC  )T)r   )NNN©F)NN)@rT   Ú
__module__Ú__qualname__Ú__doc__r<   ro   r   rt   rY   r�   r�   rŸ   r­   r±   rµ   r¸   r¼   rÇ   rË   rÎ   rÝ   rù   rý   rØ   r  r  r  r#  r×   r)  r6  r>  rA  rF  rD  r;  rE  r<  r:  rh  rk  rr  rx  rƒ  rf  rm  rw  rá   rÕ   r‹   Úpropertyr±  r³  ÚsetterrP   rŒ  r¾  r’  r…   rÄ  rŠ   rš   rÕ  rÞ  rs   rp   rc   r&   r&      sù  € € € € € ðð ðV,ÈTð V,ð V,ð V,ð V,ð V,ðp3ð 3ð 3ð 3ð$ ”oÔ-€G„Oð3ð 3ð 3ð 3ð4 $Ô1Ô9€MÔð7-ð 7-ð 7-ð 7-ðFð ð ð""ð ""ð ""ðH "ð  "ð  "ðD!"ð !"ð !"ðF9ð 9ð 9ð9ð 9ð 9ð8ð 8ð 8ð8ð 8ð 8ð	3ð 	3ð 	3ð-ð -ð -ð.ð .ð .ðyð yð yð~
7ð 
7ð 
7ðð ð ð :ð :ð :ðx	ð 	ð 	ð 	ð Ô'Ô/€HÔð9ð 9ð 9ð.Oð Oð Oð ”oÔ-€G„OðOð Oð Oð ”oÔ-€G„OðFð Fð Fð Fð4 ”+Ô%€C„Kð"ð "ð "ð "ð4*ð *ð *ð<ð <ð <ð8ð 8ð 8ðHð Hð Hð
;ð ;ð ;ð@&;ð &;ð &;ð &;ðP%;ð %;ð %;ðNEð Eð Eð Eð <ð <ð <ð <ð* ð  ð  ð ð  ð  ð ð  ð  ð2B=ð B=ð B=ðHð ð ð"%-ð %-ð %-ðN-ð -ð -ð(F,ð F,ð F,ðX
ð 
ð 
ð 
ð ”MÔ)€E„Mðð ð ð ð" ”oÔ-€G„Oðð ð ð ð* dð *ð *ð *ñ „Xð*ð, Ô ð+¨ð +ð +ð +ñ !Ô ð+ð
)ð )ð )ð ð( Dð (ð (ð (ñ „Xð(ð Ôð- dð -ð -ð -ñ Ôð-ðð ð ð+ð +ð +ð7ð 7ð 7ð!ð !ð !ðF ”^Ô+€F„NðFð Fð Fð Fð!ð !ð !ðFð ð ð80Pð 0Pð 0Pð 0Pð 0Pð 0Prp   r&   Fc                 óÆ   — 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Ú   ½  sŠ   € ð ,Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ø%Ð5�	�	¨:€IåˆD‰	Œ	€AÝ qÐ)Ñ)Ô)€IÝŒY�q˜1‘u IÐ.Ñ.Ô.€FØ�S�b�SŒk€Gàˆ9�d˜G VÐ,°Q¸°FÐ;Ñ;Ô;Ð;rp   c                 ój  — | €d|}}n©t          | t          ¦  «        r?|                      |¦  «        \  }}}|dk    rt          d¦  «        ‚t	          ||¦  «        }nUt          | ¦  «        r7| dk     r| |z  } | | dz   }}|dk     s||k    rt          d|› d|› d|› �¦  «        ‚nt          d¦  «        ‚||fS )Nr   r   z$slicing with step != 1 not supportedzindex out of bounds: 0 <= z < z <= zexpected slice or scalar)rC   rO  r@   rR   r‡   r   r€  Ú	TypeError)ÚslÚnumr`  ra  Ústrides        rc   r_  r_  Î  sä   € Ø	€zØ�CˆBˆˆÝ	�B�Ñ	Ô	ð 4ØŸš C™œ‰ˆˆB�Ø�QŠ;ˆ;ÝÐCÑDÔDÐDÝ��R‰[Œ[ˆˆÝ	�2‰Œð 4Ø�Š6ˆ6Ø�#‰IˆBØ�R˜!‘VˆBˆØ�Š6ˆ6�R˜#’X�XÝÐN¸"ÐNÐNÀÐNÐNÈÐNÐNÑOÔOÐOð õ Ð2Ñ3Ô3Ð3àˆrˆ6€Mrp   rß  )1râ  Ú__all__Úwarningsr   rz   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_  rs   rp   rc   ú<module>r÷     sA  ðØ DÐ DØ
€à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ø €€€à Ð Ð Ð Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9à FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø Ð Ð Ð Ð Ð ðAð Að Að Að Að Að Að Að Að Að Að Að Að Að Að Að Að Að Að Að Ð Ð Ð Ð Ð ð+ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ðbPð bPð bPð bPð bP�˜}¨jñ bPô bPð bPðJ-<ð <ð <ð <ð"ð ð ð ð rp   