§
    fŠtj% ã                   ór  — d Z dZg d¢ZddlZddlmZ ddlZddlm	Z	 dd	l
mZ dd
lmZmZmZmZmZ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mZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( ddl)m*Z*m+Z+ ddl,Z, G d„ dee¦  «        Z-d„ Z.d„ Z/d„ Z0d„ Z1d„ Z2d„ Z3dd„Z4d„ Z5 G d„ de-e¦  «        Z6 G d„ dee-¦  «        Z7dS )z2 A sparse matrix in COOrdinate or 'triplet' formatzrestructuredtext en)Ú	coo_arrayÚ
coo_matrixÚisspmatrix_cooé    N)Úwarné   )Úcopy_if_neededé   )Úspmatrix)Ú	coo_tocsrÚcoo_todenseÚcoo_todense_ndÚ
coo_matvecÚcoo_matvec_ndÚcoo_matmat_denseÚcoo_matmat_dense_nd)ÚissparseÚSparseEfficiencyWarningÚ_spbaseÚsparray)Ú_data_matrixÚ_minmax_mixin)Úupcast_charÚ	to_nativeÚisshapeÚgetdtypeÚgetdataÚdowncast_intp_indexÚget_index_dtypeÚcheck_shapeÚcheck_reshape_kwargsÚisscalarlikeÚ	isintlikeÚisdense)Ú_validate_indicesÚ_broadcast_arraysc                   ó  — e Zd ZdZ edd¦  «        Zd8ddœd„Zed„ ¦   «         Zej	        d	„ ¦   «         Zed
„ ¦   «         Z
e
j	        d„ ¦   «         Z
d„ Zej        j        e_        d9d„Zej        j        e_        d9d„Zej        j        e_        d„ Zd:d„Zej        j        e_        d;d„Zej        j        e_        d<d„Zej        j        e_        d=d„Zd=d„Zd=d„Zd=d„Zej        j        e_        d=d„Zej        j        e_        d=d„Zej        j        e_        d>d„Zej        j        e_        d„ Zd?d„Zd„ Zd „ Zd!„ Z d;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@d0„Z.d1„ Z/d2„ Z0d3„ Z1d=d4„Z2d5„ Z3d6„ Z4d7„ Z5dS )AÚ	_coo_baseÚcoor	   éA   NF©Úmaxprintc                ót	  ‡‡‡— t          j        | ||¬¦  «         ‰st          Št          |t          ¦  «        �rËt          || j        ¬¦  «        r¼t          || j        ¬¦  «        | _        |  	                    t          | j        ¦  «        ¬¦  «        Št          |t          ¬¦  «        }t	          ˆfd„t          t          | j        ¦  «        ¦  «        D ¦   «         ¦  «        | _        t!          j        g |¬¦  «        | _        d| _        �n]	 |\  }}n)# t(          t*          f$ r}	t)          d¦  «        |	‚d }	~	ww xY w|€At-          d	„ |D ¦   «         ¦  «        rt+          d
¦  «        ‚t	          d„ |D ¦   «         ¦  «        }t          || j        ¬¦  «        | _        |  	                    |t          | j        ¦  «        d¬¦  «        Št	          ˆˆfd„|D ¦   «         ¦  «        | _        t1          |‰|¬¦  «        | _        d| _        �ndt3          |¦  «        �r|j        | j        k    r€‰r~t	          d„ |j        D ¦   «         ¦  «        | _        |j                             t          ||¦  «        ¦  «        | _        t          |j        | j        ¬¦  «        | _        |j        | _        �nÄ|                     ‰¬¦  «        }
t	          |
j        ¦  «        | _        |
j                             t          ||
¦  «        d¬¦  «        | _        t          |
j        | j        ¬¦  «        | _        d| _        �n=t!          j        |¦  «        }t          | t<          ¦  «        s7t!          j        |¦  «        }|j         dk    rt)          d|j         › d�¦  «        ‚t          |j        | j        ¬¦  «        | _        |�;t          || j        ¬¦  «        | j        k    rd|› d| j        › �}t+          |¦  «        ‚|  	                    t          | j        ¦  «        ¬¦  «        Š| !                    ¦   «         }t	          ˆfd„|D ¦   «         ¦  «        | _        t1          ||         ‰|¬¦  «        | _        d| _        t          | j        ¦  «        dk    r#t	          d„ | j        D ¦   «         ¦  «        | _        |  "                    ¦   «          d S )Nr*   ©Úallow_nd©Úmaxval)Údefaultc              3   óD   •K  — | ]}t          j        g ‰¬ ¦  «        V — ŒdS ©©ÚdtypeN©ÚnpÚarray)Ú.0Ú_Ú	idx_dtypes     €úO/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/scipy/sparse/_coo.pyú	<genexpr>z%_coo_base.__init__.<locals>.<genexpr>*   sN   øè è € ð $Gð $GØ)*õ %'¤H¨R°yÐ$AÑ$AÔ$Að $Gð $Gð $Gð $Gð $Gð $Gó    r4   Tzinvalid input formatc              3   ó<   K  — | ]}t          |¦  «        d k    V — ŒdS )r   N©Úlen©r9   Úidxs     r<   r=   z%_coo_base.__init__.<locals>.<genexpr>5   s,   è è € Ð;Ð;¨S�3˜s™8œ8 qš=Ð;Ð;Ð;Ð;Ð;Ð;r>   z4cannot infer dimensions from zero sized index arraysc              3   óh   K  — | ]-}t          j        t          j        |¦  «        ¦  «        d z   V — Œ.dS ©r	   N)ÚoperatorÚindexr7   ÚmaxrB   s     r<   r=   z%_coo_base.__init__.<locals>.<genexpr>8   sM   è è € ð "5ð "5Ø&)õ #+¤.µ´¸±´Ñ"=Ô"=ÀÑ"Að "5ð "5ð "5ð "5ð "5ð "5r>   )r0   Úcheck_contentsc              3   óF   •K  — | ]}t          j        |‰‰¬ ¦  «        V — ŒdS )©Úcopyr5   Nr6   )r9   rC   rL   r;   s     €€r<   r=   z%_coo_base.__init__.<locals>.<genexpr>>   sH   øè è € ð $8ð $8Ø),õ %'¤H¨S°tÀ9Ð$MÑ$MÔ$Mð $8ð $8ð $8ð $8ð $8ð $8r>   rK   Fc              3   ó>   K  — | ]}|                      ¦   «         V — Œd S ©N©rL   rB   s     r<   r=   z%_coo_base.__init__.<locals>.<genexpr>E   s*   è è € Ð'JÐ'J°s¨¯ª©
¬
Ð'JÐ'JÐ'JÐ'JÐ'JÐ'Jr>   rO   r   z!expected 2D array or matrix, not ÚDzinconsistent shapes: z != c              3   óF   •K  — | ]}|                      ‰d ¬¦  «        V — ŒdS ©FrO   N)Úastype)r9   rC   Úindex_dtypes     €r<   r=   z%_coo_base.__init__.<locals>.<genexpr>_   sG   øè è € ð $8ð $8Ø),ð %(§J¢J¨{À JÑ$GÔ$Gð $8ð $8ð $8ð $8ð $8ð $8r>   c              3   óX   K  — | ]%}|                      t          j        d ¬¦  «        V — Œ&dS rR   )rS   r7   Úint64rB   s     r<   r=   z%_coo_base.__init__.<locals>.<genexpr>e   s4   è è € ÐXÐXÀS §
¢
­2¬8¸% 
Ñ @Ô @ÐXÐXÐXÐXÐXÐXr>   )#r   Ú__init__r   Ú
isinstanceÚtupler   Ú	_allow_ndr   Ú_shapeÚ_get_index_dtyperH   r   ÚfloatÚrangerA   Úcoordsr7   r8   ÚdataÚhas_canonical_formatÚ	TypeErrorÚ
ValueErrorÚanyÚshaper   r   ÚformatrS   ÚtocooÚasarrayr   Ú
atleast_2dÚndimÚnonzeroÚ_check)ÚselfÚarg1re   r5   rL   r+   Ú
data_dtypeÚobjr_   Úer(   ÚMÚmessager;   rT   s       `        @@r<   rW   z_coo_base.__init__    sÙ  øøø€ ÝÔ˜d D°8Ð<Ñ<Ô<Ð<Øð 	"Ý!ˆDå�d�EÑ"Ô"ñ =	1Ý�t d¤nÐ5Ñ5Ô5ð 2Ý)¨$¸¼ÐHÑHÔH�”Ø ×1Ò1½¸T¼[Ñ9IÔ9IÐ1ÑJÔJ�	Ý% eµUÐ;Ñ;Ô;�
Ý#ð $Gð $Gð $Gð $GÝ.3µC¸¼Ñ4DÔ4DÑ.EÔ.Eð$Gñ $Gô $Gñ Gô G�”åœH R¨zÐ:Ñ:Ô:�”	Ø,0�Ô)Ñ)ðCØ"&‘K�C˜˜øÝ!¥:Ð.ð Cð Cð CÝ#Ð$:Ñ;Ô;ÀÐBøøøøðCøøøð �=ÝÐ;Ð;°FÐ;Ñ;Ô;Ñ;Ô;ð ?Ý(ð *>ñ ?ô ?ð ?å!ð "5ð "5Ø-3ð"5ñ "5ô "5ñ 5ô 5�Eå)¨%¸$¼.ÐIÑIÔI�”Ø ×1Ò1°&Ý9<¸T¼Z¹¼ØAEð 2ñ Gô G�	õ $ð $8ð $8ð $8ð $8ð $8Ø06ð$8ñ $8ô $8ñ 8ô 8�”å# C¨d¸%Ð@Ñ@Ô@�”	Ø,1�Ô)Ñ)å˜‰~Œ~ñ 1Ø”; $¤+Ò-Ð-°$Ð-Ý"'Ð'JÐ'J¸d¼kÐ'JÑ'JÔ'JÑ"JÔ"J�D”KØ $¤	× 0Ò 0µ¸%ÀÑ1FÔ1FÑ GÔ G�D”IÝ"-¨d¬jÀ4Ä>Ð"RÑ"RÔ"R�D”KØ04Ô0I�DÔ-Ñ-àŸ*š*¨$˜*Ñ/Ô/�CÝ"'¨¬
Ñ"3Ô"3�D”KØ #¤§¢µ¸ÀÑ0DÔ0DÈ5 Ñ QÔ Q�D”IÝ"-¨c¬iÀ$Ä.Ð"QÑ"QÔ"Q�D”KØ05�DÔ-Ñ-õ ”J˜tÑ$Ô$�Ý! $­Ñ0Ô0ð WÝœ aÑ(Ô(�AØ”v ’{�{Ý'Ð(UÈAÌFÐ(UÐ(UÐ(UÑVÔVÐVå)¨!¬'¸D¼NÐKÑKÔK�”ØÐ$Ý" 5°4´>ÐBÑBÔBÀdÄkÒQÐQØ"R¸%Ð"RÐ"RÀTÄ[Ð"RÐ"R˜Ý(¨Ñ1Ô1Ð1à"×3Ò3½3¸t¼{Ñ;KÔ;KÐ3ÑLÔL�ØŸš™œ�Ý#ð $8ð $8ð $8ð $8Ø06ð$8ñ $8ô $8ñ 8ô 8�”å# A f¤I°DÀÐFÑFÔF�”	Ø,0�Ô)åˆtŒ{ÑÔ˜aÒÐÝÐXÐXÈDÌKÐXÑXÔXÑXÔXˆDŒKà�Š‰Œˆˆˆs   ÄD ÄD9Ä$D4Ä4D9c                 ó”   — | j         dk    r| j        d         S t          j        | j        ¦  «        }|                     d¬¦  «         |S )Nr	   éþÿÿÿF)Úwrite)rj   r_   r7   Ú
zeros_likeÚcolÚsetflags)rm   Úresults     r<   Úrowz_coo_base.rowi   sC   € àŒ9�qŠ=ˆ=Ø”;˜r”?Ð"Ý”˜tœxÑ(Ô(ˆØ�Š˜eˆÑ$Ô$Ð$Øˆr>   c                 óÖ   — | j         dk     rt          d¦  «        ‚t          j        || j        d         j        ¬¦  «        }| j        d d…         |fz   | j        dd …         z   | _        d S )Nr   z8cannot set row attribute of a 1-dimensional sparse arrayru   r4   éÿÿÿÿ)rj   rc   r7   rh   r_   r5   )rm   Únew_rows     r<   r{   z_coo_base.rowr   sf   € àŒ9�qŠ=ˆ=ÝÐWÑXÔXÐXÝ”*˜W¨D¬K¸¬OÔ,AÐBÑBÔBˆØ”k # 2 #Ô&¨'¨Ñ3°d´kÀ"À#À#Ô6FÑFˆŒˆˆr>   c                 ó   — | j         d         S )Nr}   ©r_   )rm   s    r<   rx   z_coo_base.coly   s   € àŒ{˜2ŒÐr>   c                 ó‚   — t          j        || j        d         j        ¬¦  «        }| j        d d…         |fz   | _        d S )Nr}   r4   )r7   rh   r_   r5   )rm   Únew_cols     r<   rx   z_coo_base.col}   s<   € å”*˜W¨D¬K¸¬OÔ,AÐBÑBÔBˆØ”k # 2 #Ô&¨'¨Ñ3ˆŒˆˆr>   c                 ó®  ‡	— t          || j        | j        ¬¦  «        }t          |¦  «        \  }}|| j        k    r|r|                      ¦   «         S | S t          | j        | j        |¬¦  «        }t          |¦  «        dk    r=|dk    rt          ||d         ¦  «        }n7t          ||d         ¦  «        d d d…         }nt          j
        |||¬¦  «        }|                      | j        t          |¦  «        ¬¦  «        Š	t          ˆ	fd	„|D ¦   «         ¦  «        }|r| j                             ¦   «         }n| j        }|                      ||f|d
¬¦  «        S )Nr-   ©Úorderr   ÚCr	   r   r}   r/   c              3   óD   •K  — | ]}t          j        |‰¬ ¦  «        V — ŒdS r3   ©r7   rh   )r9   Úcor;   s     €r<   r=   z$_coo_base.reshape.<locals>.<genexpr>š   s2   øè è € ÐPÐP¸r�2œ: b°	Ð:Ñ:Ô:ÐPÐPÐPÐPÐPÐPr>   F©re   rL   )r   re   rZ   r    rL   Ú_ravel_coordsr_   rA   Údivmodr7   Úunravel_indexr\   rH   rY   r`   Ú	__class__)
rm   ÚargsÚkwargsre   r…   rL   Úflat_coordsÚ
new_coordsÚnew_datar;   s
            @r<   Úreshapez_coo_base.reshape‚   sW  ø€ Ý˜D $¤*°t´~ÐFÑFÔFˆÝ*¨6Ñ2Ô2‰ˆˆtð �D”JÒÐØð Ø—y’y‘{”{Ð"à�õ
 $ D¤K°´À5ÐIÑIÔIˆÝˆu‰:Œ:˜Š?ˆ?Ø˜Š|ˆ|Ý# K°°q´Ñ:Ô:�
�
å# K°°q´Ñ:Ô:¸4¸4¸R¸4Ô@�
�
åÔ)¨+°uÀEÐJÑJÔJˆJà×)Ò)¨$¬+½cÀ%¹j¼jÐ)ÑIÔIˆ	ÝÐPÐPÐPÐPÀZÐPÑPÔPÑPÔPˆ
ð ð 	!Ø”y—~’~Ñ'Ô'ˆHˆHà”yˆHà�~Š~˜x¨Ð4¸EÈˆ~ÑNÔNÐNr>   c                 ó  ‡— |�|dk    rš| j         dk    r�t          | j        ¦  «        Št          ˆfd„| j        D ¦   «         ¦  «        rt          d¦  «        ‚| j        j         dk    st          d„ | j        D ¦   «         ¦  «        rt          d¦  «        ‚t          ‰¦  «        S |dk     r
|| j         z  }|| j         k    rt          d¦  «        ‚t          j        t          | j        d|z
           ¦  «        | j
        d|z
           ¬¦  «        S )	Nr   r	   c              3   ó>   •K  — | ]}t          |¦  «        ‰k    V — Œd S rN   r@   )r9   rC   Únnzs     €r<   r=   z$_coo_base._getnnz.<locals>.<genexpr>ª   s-   øè è € Ð:Ð: s•3�s‘8”8˜s’?Ð:Ð:Ð:Ð:Ð:Ð:r>   z3all index and data arrays must have the same lengthc              3   ó,   K  — | ]}|j         d k    V — ŒdS rE   )rj   rB   s     r<   r=   z$_coo_base._getnnz.<locals>.<genexpr>®   s(   è è € Ð)OÐ)O¸C¨#¬(°aª-Ð)OÐ)OÐ)OÐ)OÐ)OÐ)Or>   z'coordinates and data arrays must be 1-Dúaxis out of bounds©Ú	minlength)rj   rA   r`   rd   r_   rc   Úintr7   Úbincountr   re   )rm   Úaxisr—   s     @r<   Ú_getnnzz_coo_base._getnnz§   s  ø€ Øˆ<˜D AšI˜I¨$¬)°qª.¨.Ý�d”i‘.”.ˆCÝÐ:Ð:Ð:Ð:¨d¬kÐ:Ñ:Ô:Ñ:Ô:ð 0Ý ð "/ñ 0ô 0ð 0ð ŒyŒ~ Ò"Ð"¥cÐ)OÐ)OÀ4Ä;Ð)OÑ)OÔ)OÑ&OÔ&OÐ"Ý Ð!JÑKÔKÐKå�s‘8”8ˆOà�!Š8ˆ8Ø�D”IÑˆDØ�4”9ÒÐÝÐ1Ñ2Ô2Ð2åŒ{Õ.¨t¬{¸1¸t¹8Ô/DÑEÔEØ%)¤Z°°D±Ô%9ð;ñ ;ô ;ð 	;r>   c                 ód  — |                       ¦   «          |€t          j        | j        ¦  «        S |dk     r
|| j        z  }|dk     s|| j        k    rt          d¦  «        ‚| j        dk    }| j        d|z
           |         }t          j        t          |¦  «        | j	        d|z
           ¬¦  «        S )Nr   r™   r	   rš   )
Úsum_duplicatesr7   Úcount_nonzeror`   rj   rc   r_   r�   r   re   )rm   rž   ÚmaskÚcoords       r<   r¢   z_coo_base.count_nonzero½   s¯   € Ø×ÒÑÔÐØˆ<ÝÔ# D¤IÑ.Ô.Ð.à�!Š8ˆ8Ø�D”IÑˆDØ�!Š8ˆ8�t˜tœyÒ(Ð(ÝÐ1Ñ2Ô2Ð2ØŒy˜AŠ~ˆØ”˜A ™HÔ% dÔ+ˆÝŒ{Õ.¨uÑ5Ô5ÀÄÈAÐPTÉHÔAUÐVÑVÔVÐVr>   c           
      ó†  ‡— | j         t          | j        ¦  «        k    r,t          dt          | j        ¦  «        › d| j         › �¦  «        ‚t	          | j        ¦  «        D ]7\  }}|j        j        dk    r"t          d|› d|j        j        › d�d¬¦  «         Œ8|  	                    | j        t          | j        ¦  «        ¬	¦  «        Št          ˆfd
„| j        D ¦   «         ¦  «        | _        t          | j        ¦  «        | _        | j        dk    r±t	          | j        ¦  «        D ]ž\  }}| 
                    ¦   «         | j        |         k    r5t          d|› d| 
                    ¦   «         › d| j        |         › �¦  «        ‚|                     ¦   «         dk     r't          d|› d|                     ¦   «         › �¦  «        ‚Œ�dS dS )z' Checks data structure for consistency z2mismatching number of index arrays for shape; got z, expected Úizindex array z has non-integer dtype (ú)é   ©Ú
stacklevelr/   c              3   óD   •K  — | ]}t          j        |‰¬ ¦  «        V — ŒdS r3   rˆ   )r9   rC   r;   s     €r<   r=   z#_coo_base._check.<locals>.<genexpr>Ù   sF   øè è € ð 5ð 5Ø!$õ œJ s°)Ð<Ñ<Ô<ð 5ð 5ð 5ð 5ð 5ð 5r>   r   zaxis z index z exceeds matrix dimension znegative axis z index: N)rj   rA   r_   rc   Ú	enumerater5   Úkindr   Únamer\   rH   re   rY   r   r`   r—   Úmin)rm   r¦   rC   r;   s      @r<   rl   z_coo_base._checkÌ   s  ø€ àŒ9�˜DœKÑ(Ô(Ò(Ð(Ýð MÝ$'¨¬Ñ$4Ô$4ðMð MØAEÄðMð Mñ Nô Nð Nõ   ¤Ñ,Ô,ð 	#ð 	#‰FˆAˆsØŒyŒ~ Ò$Ð$ÝÐP AÐPÐP¸s¼y¼~ÐPÐPÐPØ !ð#ñ #ô #ð #øð ×)Ò)¨$¬+½cÀ$Ä*¹o¼oÐ)ÑNÔNˆ	Ýð 5ð 5ð 5ð 5Ø(,¬ð5ñ 5ô 5ñ 5ô 5ˆŒå˜dœiÑ(Ô(ˆŒ	àŒ8�aŠ<ˆ<Ý# D¤KÑ0Ô0ð Nð N‘��3Ø—7’7‘9”9 ¤
¨1¤Ò-Ð-Ý$ð &I¨Qð &Ið &I°s·w²w±y´yð &Ið &IØ9=¼ÀA¼ð&Ið &Iñ Jô Jð Jà—7’7‘9”9˜q’=�=Ý$Ð%L°aÐ%LÐ%LÀÇÂÁÄÐ%LÐ%LÑMÔMÐMð !ð ˆ<ðNð Nr>   c                 ó  ‡ — |€t          ‰ j        ¦  «        d d d…         }n–t          ‰ t          ¦  «        rlt	          |d¦  «        rt          |¦  «        ‰ j        k    rt          d¦  «        ‚t          t          |¦  «        ¦  «        ‰ j        k    rt          d¦  «        ‚n|dk    rt          d¦  «        ‚t          ˆ fd„|D ¦   «         ¦  «        }t          ˆ fd„|D ¦   «         ¦  «        }‰  	                    ‰ j
        |f||¬	¦  «        S )
Nr}   Ú__len__z"axes don't match matrix dimensionszrepeated axis in transpose)r	   r   zoSparse matrices do not support an 'axes' parameter because swapping dimensions is the only logical permutation.c              3   ó2   •K  — | ]}‰j         |         V — Œd S rN   )r[   ©r9   r¦   rm   s     €r<   r=   z&_coo_base.transpose.<locals>.<genexpr>ò   s)   øè è € Ð<Ð<°!˜tœ{¨1œ~Ð<Ð<Ð<Ð<Ð<Ð<r>   c              3   ó2   •K  — | ]}‰j         |         V — Œd S rN   r€   r³   s     €r<   r=   z&_coo_base.transpose.<locals>.<genexpr>ó   s)   øè è € Ð=Ð=°1 ¤¨A¤Ð=Ð=Ð=Ð=Ð=Ð=r>   rŠ   )r^   rj   rX   r   ÚhasattrrA   rc   ÚsetrY   rŽ   r`   )rm   ÚaxesrL   Úpermuted_shapeÚpermuted_coordss   `    r<   Ú	transposez_coo_base.transposeå   s&  ø€ Øˆ<Ý˜œÑ#Ô# D D b DÔ)ˆDˆDÝ˜�gÑ&Ô&ð 	:Ý˜4 Ñ+Ô+ð G­s°4©y¬y¸D¼IÒ/EÐ/EÝ Ð!EÑFÔFÐFÝ•3�t‘9”9‰~Œ~ ¤Ò*Ð*Ý Ð!=Ñ>Ô>Ð>ð +à�VŠ^ˆ^Ýð 9ñ :ô :ð :õ Ð<Ð<Ð<Ð<°tÐ<Ñ<Ô<Ñ<Ô<ˆÝÐ=Ð=Ð=Ð=¸Ð=Ñ=Ô=Ñ=Ô=ˆØ�~Š~˜tœy¨/Ð:Ø$2¸ð ñ ?ô ?ð 	?r>   Úreturnc                 ó†  ‡— t          || j        ¬¦  «        }| j        dk    rt          d¦  «        ‚t	          |¦  «        dk    rt          d¦  «        ‚t	          |¦  «        | j        k    rmt          | j        | j        ¦  «        }t          j	        |¦  «        }t          j        |d |…         |¦  «        | _        | j        d |…         | _        || _        d S t	          |¦  «        | j        k     r”| j        d t	          |¦  «        dz
  …         dz   d| j        t	          |¦  «        z
  z  z   }|                      |¦  «        }|j        d t	          |¦  «        …         | _        |j        d t	          |¦  «        …         | _        t          d„ t!          | j        |¦  «        D ¦   «         ¦  «        }|r‡t          j                             d	„ t!          | j        |¦  «        D ¦   «         ¦  «        Š‰                     ¦   «         s7t)          ˆfd
„| j        D ¦   «         ¦  «        | _        | j        ‰         | _        || _        d S )Nr-   r   zonly 1-D or 2-D input acceptedz!shape argument must be 1-D or 2-Dr	   )r}   ©r	   c              3   ó(   K  — | ]\  }}||k    V — Œd S rN   © )r9   ÚoldÚnews      r<   r=   z#_coo_base.resize.<locals>.<genexpr>  s*   è è € ÐMÐM©(¨#¨s˜C #šIÐMÐMÐMÐMÐMÐMr>   c                 ó    — g | ]\  }}||k     ‘ŒS r¿   r¿   )r9   rC   Úsizes      r<   ú
<listcomp>z$_coo_base.resize.<locals>.<listcomp>  s-   € ð *ð *ð *Ù(˜s D��d’
ð*ð *ð *r>   c              3   ó(   •K  — | ]}|‰         V — Œd S rN   r¿   ©r9   rC   r£   s     €r<   r=   z#_coo_base.resize.<locals>.<genexpr>  s'   øè è € Ð#EÐ#E°# C¨¤IÐ#EÐ#EÐ#EÐ#EÐ#EÐ#Er>   )r   rZ   rj   rc   rA   r‹   r_   re   ÚmathÚprodr7   r�   r`   r[   r”   rd   ÚzipÚlogical_andÚreduceÚallrY   )rm   re   r‘   Úmax_sizeÚ	tmp_shapeÚtmpÚis_truncatingr£   s          @r<   Úresizez_coo_base.resizeù   s  ø€ Ý˜E¨D¬NÐ;Ñ;Ô;ˆØŒ9�qŠ=ˆ=ÝÐ=Ñ>Ô>Ð>Ýˆu‰:Œ:˜Š>ˆ>ÝÐ@ÑAÔAÐAåˆu‰:Œ:˜œ	Ò!Ð!Ý'¨¬°T´ZÑ@Ô@ˆKÝ”y Ñ'Ô'ˆHÝÔ*¨;°y¸°yÔ+AÀ5ÑIÔIˆDŒKØœ	 ) 8 )Ô,ˆDŒIØˆDŒKØˆFõ ˆu‰:Œ:˜œ	Ò!Ð!à”˜O�S ™ZœZ¨!™^˜OÔ,Øñà˜$œ)¥c¨%¡j¤jÑ0Ñ1ñ2ð ð
 —,’,˜yÑ)Ô)ˆCØœ* [¥c¨%¡j¤j [Ô1ˆDŒKØœ) K¥S¨¡Z¤Z KÔ0ˆDŒKõ ÐMÐMµc¸$¼*ÀeÑ6LÔ6LÐMÑMÔMÑMÔMˆØð 	,Ý”>×(Ò(ð *ð *Ý,/°´¸UÑ,CÔ,Cð*ñ *ô *ñ ô ˆDð —8’8‘:”:ð ,Ý#Ð#EÐ#EÐ#EÐ#E¸¼Ð#EÑ#EÔ#EÑEÔE�”Ø œI dœO�”	àˆŒˆˆr>   c                 óÒ  — |                       ||¦  «        }t          |j        j        ¦  «        }|s|j        j        st          d¦  «        ‚| j        dk    rWt          t          j	        dg¦  «        | j
        | j        | j        d         | j        |                     d¦  «        |¦  «         �n | j        dk    rH| j        \  }}t          ||| j
        | j        | j        | j        |                     d¦  «        |¦  «         nÍ|r5t          j        dt          j        | j        d d…         ¦  «        ¦  «        }nFt          j        t          j        | j        dd …         d d d…         ¦  «        d d d…         d¦  «        }t          j        | j        ¦  «        }t          || j
        | j        || j        |                     d¦  «        |¦  «         |                     | j        ¦  «        S )Nz&Output array must be C or F contiguousr	   r   ÚAr   r}   )Ú_process_toarray_argsrœ   ÚflagsÚf_contiguousÚc_contiguousrc   rj   r   r7   r8   r—   r_   r`   Úravelre   r   r{   rx   ÚappendÚcumprodÚconcatenater”   )	rm   r…   ÚoutÚBÚfortranrr   ÚNÚstridesr_   s	            r<   Útoarrayz_coo_base.toarray!  s½  € Ø×&Ò& u¨cÑ2Ô2ˆÝ�a”gÔ*Ñ+Ô+ˆØð 	G˜qœwÔ3ð 	GÝÐEÑFÔFÐFð Œ9˜Š>ˆ>Ý�2œ8 Q C™=œ=¨$¬(°D´IØœ; qœ>¨4¬9°a·g²g¸c±l´lÀGñMô Mð Mñ MàŒY˜!Š^ˆ^Ø”:‰DˆAˆqÝ˜˜1˜dœh¨¬°$´(¸D¼IØŸš ™œ gñ/ô /ð /ð /ð ð OÝœ) A¥r¤z°$´*¸S¸b¸S´/Ñ'BÔ'BÑCÔC��åœ)¥B¤J¨t¬z¸!¸"¸"¬~¸d¸dÀ¸dÔ/CÑ$DÔ$DÀTÀTÀrÀTÔ$JÈAÑNÔN�Ý”^ D¤KÑ0Ô0ˆFÝ˜7 D¤H¨d¬iØ! 4¤9¨a¯gªg°c©l¬l¸GñEô Eð Eð �yŠy˜œÑ$Ô$Ð$r>   c                 óX  — | j         dk    rt          d| j         › d�¦  «        ‚| j        dk    r!|                      | j        | j        ¬¦  «        S ddlm} |                      |j	        ¦  «        \  }}}}|                      |||f|¬¦  «        }| j
        s|                     ¦   «          |S )	aQ  Convert this array/matrix to Compressed Sparse Column format

        Duplicate entries will be summed together.

        Examples
        --------
        >>> from numpy import array
        >>> from scipy.sparse import coo_array
        >>> row  = array([0, 0, 1, 3, 1, 0, 0])
        >>> col  = array([0, 2, 1, 3, 1, 0, 0])
        >>> data = array([1, 1, 1, 1, 1, 1, 1])
        >>> A = coo_array((data, (row, col)), shape=(4, 4)).tocsc()
        >>> A.toarray()
        array([[3, 0, 1, 0],
               [0, 2, 0, 0],
               [0, 0, 0, 0],
               [0, 0, 0, 1]])

        r   z+Cannot convert. CSC format must be 2D. Got rP   r   r4   r	   )Ú	csc_array©re   )rj   rc   r—   Ú_csc_containerre   r5   Ú_cscrã   Ú_coo_to_compressedÚ_swapra   r¡   )rm   rL   rã   ÚindptrÚindicesr`   re   Úxs           r<   Útocscz_coo_base.tocsc<  sÄ   € ð( Œ9˜Š>ˆ>ÝÐWÈ4Ì9ÐWÐWÐWÑXÔXÐXØŒ8�qŠ=ˆ=Ø×&Ò& t¤z¸¼Ð&ÑDÔDÐDà'Ð'Ð'Ð'Ð'Ð'Ø+/×+BÒ+BÀ9Ä?Ñ+SÔ+SÑ(ˆF�G˜T 5à×#Ò# T¨7°FÐ$;À5Ð#ÑIÔIˆAØÔ,ð #Ø× Ò Ñ"Ô"Ð"ØˆHr>   c                 ój  — | j         dk    rt          d| j         › d�¦  «        ‚| j        dk    r!|                      | j        | j        ¬¦  «        S ddlm} |                      |j	        |¬¦  «        }|\  }}}}|                      |||f| j        ¬	¦  «        }| j
        s|                     ¦   «          |S )
aN  Convert this array/matrix to Compressed Sparse Row format

        Duplicate entries will be summed together.

        Examples
        --------
        >>> from numpy import array
        >>> from scipy.sparse import coo_array
        >>> row  = array([0, 0, 1, 3, 1, 0, 0])
        >>> col  = array([0, 2, 1, 3, 1, 0, 0])
        >>> data = array([1, 1, 1, 1, 1, 1, 1])
        >>> A = coo_array((data, (row, col)), shape=(4, 4)).tocsr()
        >>> A.toarray()
        array([[3, 0, 1, 0],
               [0, 2, 0, 0],
               [0, 0, 0, 0],
               [0, 0, 0, 1]])

        r   z*Cannot convert. CSR must be 1D or 2D. Got rP   r   r4   r	   )Ú	csr_arrayrO   rä   )rj   rc   r—   Ú_csr_containerre   r5   Ú_csrrî   rç   rè   ra   r¡   )	rm   rL   rî   Úarraysré   rê   r`   re   rë   s	            r<   Útocsrz_coo_base.tocsr]  sÐ   € ð( Œ9�qŠ=ˆ=ÝÐVÈ$Ì)ÐVÐVÐVÑWÔWÐWØŒ8�qŠ=ˆ=Ø×&Ò& t¤z¸¼Ð&ÑDÔDÐDà'Ð'Ð'Ð'Ð'Ð'Ø×,Ò,¨Y¬_À4Ð,ÑHÔHˆFØ+1Ñ(ˆF�G˜T 5à×#Ò# T¨7°FÐ$;À4Ä:Ð#ÑNÔNˆAØÔ,ð #Ø× Ò Ñ"Ô"Ð"ØˆHr>   c                 ó,  —  || j         ¦  «        \  }}|                      | j        t          | j        |¦  «        ¬¦  «        }| j        dk    r‚|r| j        d                              ¦   «         n| j        d         }t          |¦  «        }t          j	        d|g|¬¦  «        }|r| j
                             ¦   «         n| j
        }	|||	| j        fS  || j        ¦  «        \  }
}t          |
¦  «        }|
                     |d¬¦  «        }
|                     |d¬¦  «        }t          j        |dz   |¬¦  «        }t          j        ||¬¦  «        }t          j        | j
        | j        ¬¦  «        }	t!          ||||
|| j
        |||	¦	  «	         |||	| j        fS )z?convert (shape, coords, data) to (indptr, indices, data, shape)r/   r	   r   r4   FrO   )Ú_shape_as_2dr\   r_   rH   r—   rj   rL   rA   r7   r8   r`   re   rS   ÚemptyÚ
empty_liker5   r   )rm   ÚswaprL   rr   rß   r;   rê   r—   ré   r`   ÚmajorÚminors               r<   rç   z_coo_base._coo_to_compressed  s„  € àˆt�DÔ%Ñ&Ô&‰ˆˆ1ð ×)Ò)¨$¬+½cÀ$Ä(ÈAÑ>NÔ>NÐ)ÑOÔOˆ	àŒ9˜Š>ˆ>Ø/3ÐG�d”k !”n×)Ò)Ñ+Ô+Ð+¸¼ÀQ¼ˆGÝ�g‘,”,ˆCÝ”X˜q #˜h¨iÐ8Ñ8Ô8ˆFØ'+Ð:�4”9—>’>Ñ#Ô#Ð#°´ˆDØ˜7 D¨$¬*Ð4Ð4ð �t˜DœKÑ(Ô(‰ˆˆuÝ�%‰jŒjˆØ—’˜Y¨U�Ñ3Ô3ˆØ—’˜Y¨U�Ñ3Ô3ˆå”˜!˜a™% yÐ1Ñ1Ô1ˆÝ”- ¨YÐ7Ñ7Ô7ˆÝŒ}˜TœY¨d¬jÐ9Ñ9Ô9ˆå�!�Q˜˜U E¨4¬9°f¸gÀtÑLÔLÐLØ�w  d¤jÐ0Ð0r>   c                 ó2   — |r|                       ¦   «         S | S rN   rO   )rm   rL   s     r<   rg   z_coo_base.tocooš  s   € Øð 	Ø—9’9‘;”;ÐàˆKr>   c                 ót  — | j         dk    rt          d| j         › d�¦  «        ‚|                      ¦   «          | j        | j        z
  }t          j        |d¬¦  «        \  }}t          |¦  «        dk    r(t          dt          |¦  «        › d�t          d¬	¦  «         | j
        j        d
k    rt          j        d| j        ¬¦  «        }nUt          j        t          |¦  «        | j                             ¦   «         dz   f| j        ¬¦  «        }| j
        ||| j        f<   |                      ||f| j        ¬¦  «        S )Nr   z+Cannot convert. DIA format must be 2D. Got rP   T)Úreturn_inverseéd   zConstructing a DIA matrix with z diagonals is inefficientr©   r   )r   r   r4   r	   rä   )rj   rc   r¡   rx   r{   r7   ÚuniquerA   r   r   r`   rÃ   Úzerosr5   rH   Ú_dia_containerre   )rm   rL   ÚksÚdiagsÚdiag_idxr`   s         r<   Útodiaz_coo_base.todia¢  s5  € ØŒ9˜Š>ˆ>ÝÐWÈ4Ì9ÐWÐWÐWÑXÔXÐXØ×ÒÑÔÐØŒX˜œÑ ˆÝœ) B°tÐ<Ñ<Ô<‰ˆˆxåˆu‰:Œ:˜ÒÐåð "µ3°u±:´:ð "ð "ð "å(°Qð8ñ 8ô 8ð 8ð
 Œ9Œ>˜QÒÐÝ”8˜F¨$¬*Ð5Ñ5Ô5ˆDˆDå”8�S ™ZœZ¨¬¯ª©¬¸Ñ)9Ð:À$Ä*ÐMÑMÔMˆDØ'+¤yˆD�˜4œ8Ð#Ñ$à×"Ò" D¨% =¸¼
Ð"ÑCÔCÐCr>   c                 óR  — | j         dk    rt          d| j         › d�¦  «        ‚|                      ¦   «          |                      | j        | j        ¬¦  «        }| j         dk    r| j        d         }nt          | j        Ž }t          t          || j	        ¦  «        ¦  «        |_
        |S )Nr   z*Cannot convert. DOK must be 1D or 2D. Got rP   r4   r	   r   )rj   rc   r¡   Ú_dok_containerre   r5   r_   rÉ   Údictr`   Ú_dict)rm   rL   Údokr_   s       r<   Útodokz_coo_base.todokº  s›   € ØŒ9�qŠ=ˆ=ÝÐVÈ$Ì)ÐVÐVÐVÑWÔWÐWØ×ÒÑÔÐØ×!Ò! $¤*°D´JÐ!Ñ?Ô?ˆàŒ9˜Š>ˆ>Ø”[ ”^ˆFˆFå˜$œ+Ð&ˆFå�˜V T¤YÑ/Ô/Ñ0Ô0ˆŒ	Øˆ
r>   r   c           
      ód  ‡	— | j         dk    rt          d¦  «        ‚| j        \  }}|| k    s||k    r t          j        d| j        j        ¬¦  «        S t          j        t          |t          |d¦  «        z   |t          |d¦  «        z
  ¦  «        | j        ¬¦  «        }| j
        |z   | j        k    Š	| j        r| j
        ‰	         }| j        ‰	         }nGt          ˆ	fd„| j        D ¦   «         ¦  «        }|                      || j        ‰	         ¦  «        \  \  }}}|||t          |d¦  «        z   <   |S )Nr   z diagonal requires two dimensionsr   r4   c              3   ó(   •K  — | ]}|‰         V — Œd S rN   r¿   )r9   rC   Ú	diag_masks     €r<   r=   z%_coo_base.diagonal.<locals>.<genexpr>Ø  s'   øè è € Ð?Ð?¨C˜˜YœÐ?Ð?Ð?Ð?Ð?Ð?r>   )rj   rc   re   r7   rõ   r`   r5   rÿ   r¯   rH   r{   rx   ra   rY   r_   Ú_sum_duplicates)
rm   ÚkÚrowsÚcolsÚdiagr{   r`   Úindsr:   r  s
            @r<   Údiagonalz_coo_base.diagonalÊ  s0  ø€ ØŒ9˜Š>ˆ>ÝÐ?Ñ@Ô@Ð@Ø”Z‰
ˆˆdØ��Š:ˆ:˜˜dš˜Ý”8˜A T¤Y¤_Ð5Ñ5Ô5Ð5ÝŒx�˜D¥3 q¨!¡9¤9Ñ,¨dµS¸¸A±Y´YÑ.>Ñ?Ô?Ø"œjð*ñ *ô *ˆà”X ‘\ d¤hÒ.ˆ	àÔ$ð 	NØ”(˜9Ô%ˆCØ”9˜YÔ'ˆDˆDåÐ?Ð?Ð?Ð?°4´;Ð?Ñ?Ô?Ñ?Ô?ˆDØ!×1Ò1°$¸¼	À)Ô8LÑMÔM‰N‰HˆS�!�dØ $ˆˆS•3�q˜!‘9”9‰_Ñàˆr>   c                 ó2  — | j         dk    rt          d¦  «        ‚| j        \  }}|j         rt          |¦  «        sd S | j        j        }| j        | j        z
  |k    }|dk     rˆt          ||z   |¦  «        }|j         rt          |t          |¦  «        ¦  «        }t          j	        || j        |k    ¦  «        }t          j
        | | |z   |¬¦  «        }	t          j
        ||¬¦  «        }
n…t          |||z
  ¦  «        }|j         rt          |t          |¦  «        ¦  «        }t          j	        || j        |k    ¦  «        }t          j
        ||¬¦  «        }	t          j
        |||z   |¬¦  «        }
|j         r|d |…         }n"t          j        || j        ¬¦  «        }||d d …<   t          j        | j        |         |	f¦  «        t          j        | j        |         |
f¦  «        f| _        t          j        | j        |         |f¦  «        | _        d| _        d S )Nr   z*setting a diagonal requires two dimensionsr   r4   F)rj   rc   re   rA   r{   r5   rx   r¯   r7   Ú
logical_orÚarangerõ   rÛ   r_   r`   ra   )rm   Úvaluesr  rr   rß   r;   Ú	full_keepÚ	max_indexÚkeepr~   r‚   r“   s               r<   Ú_setdiagz_coo_base._setdiagà  s  € ØŒ9˜Š>ˆ>ÝÐIÑJÔJÐJØŒz‰ˆˆ1ØŒ;ð 	�s 6™{œ{ð 	ØˆFØ”H”Nˆ	ð ”H˜tœxÑ'¨1Ò,ˆ	ØˆqŠ5ˆ5Ý˜A˜a™C ™œˆIØŒ{ð 8Ý 	­3¨v©;¬;Ñ7Ô7�	Ý”= ¨D¬H¸	Ò,AÑBÔBˆDÝ”i   Q B¨¡N¸)ÐDÑDÔDˆGÝ”i 	°Ð;Ñ;Ô;ˆGˆGå˜A˜q ™s™œˆIØŒ{ð 8Ý 	­3¨v©;¬;Ñ7Ô7�	Ý”= ¨D¬H¸	Ò,AÑBÔBˆDÝ”i 	°Ð;Ñ;Ô;ˆGÝ”i  1 y¡=¸	ÐBÑBÔBˆGð Œ;ð 	!Ø˜j˜y˜jÔ)ˆHˆHå”x 	°´Ð<Ñ<Ô<ˆHØ ˆH�Q�Q�Q‰Kõ ”~ t¤x°¤~°wÐ&?Ñ@Ô@Ý”~ t¤x°¤~°wÐ&?Ñ@Ô@ðBˆŒå”N D¤I¨d¤O°XÐ#>Ñ?Ô?ˆŒ	Ø$)ˆÔ!Ð!Ð!r>   Tc                 óš   — |rt          d„ | j        D ¦   «         ¦  «        }n| j        }|                      ||f| j        |j        ¬¦  «        S )zŒReturns a matrix with the same sparsity structure as self,
        but with different data. By default the index arrays are copied.
        c              3   ó>   K  — | ]}|                      ¦   «         V — Œd S rN   rO   rB   s     r<   r=   z'_coo_base._with_data.<locals>.<genexpr>  s*   è è € Ð=Ð=¨#˜3Ÿ8š8™:œ:Ð=Ð=Ð=Ð=Ð=Ð=r>   ©re   r5   )rY   r_   rŽ   re   r5   )rm   r`   rL   r_   s       r<   Ú
_with_dataz_coo_base._with_data  sS   € ð ð 	!ÝÐ=Ð=°´Ð=Ñ=Ô=Ñ=Ô=ˆFˆFà”[ˆFØ�~Š~˜t V˜n°D´JÀdÄjˆ~ÑQÔQÐQr>   c                 óî  ‡‡— t          || j        | j        ¦  «        \  }}}}t          j        t          | j        ¦  «        t          j        ¬¦  «        Šg }g }g }t          t          || j
        ¦  «        ¦  «        D �]1\  }	\  }
}t          |
t          ¦  «        r
‰||
k    z  ŠŒ(t          |
t          ¦  «        rÊ|
t          d ¦  «        k    r|                     |¦  «         Œf|
                     | j        |	         ¦  «        \  }}}|dk    rI|dk     r||k    ||k    z  }n||k    ||k     z  }t          j        ||z
  |¦  «        \  }}‰|dk    |z  z  Šn||k    ||k     z  }||z
  }‰|z  Š|                     |¦  «         �Œ|                     |¦  «         |                     |
¦  «         �Œ3|dk    r9| j        ‰                              ¦   «                              | j        d¬¦  «        S ˆfd„|D ¦   «         }| j        ‰         }|�r.t)          |Ž }|d         j        }t          j        |¦  «                             t          |¦  «        dd¦  «        }t          j        ˆfd	„|D ¦   «         ¦  «        d d …d d …d f         }||k                         d¬
¦  «        }|                     ¦   «         \  Š}|‰         }ˆfd„|D ¦   «         }t3          t          j        ||¬¦  «        ¦  «        }t          |¦  «        |d         |d         z
  dz   k    r!|d         }|d |…         |z   ||d …         z   }n||z   }|r¡|rt          j        |d         ¦  «        }n3t          j        t          |¦  «        | j
        d         j        ¬¦  «        }|                     |d         |¦  «         |dd …         D ]*}	|                     |	|                     ¦   «         ¦  «         Œ+t?          ||f|| j        ¬¦  «        S )Nr4   r	   r   r¿   FrO   c                 ó    •— g | ]
}|‰         ‘ŒS r¿   r¿   ©r9   r‰   Ú
index_masks     €r<   rÄ   z)_coo_base.__getitem__.<locals>.<listcomp>5  s   ø€ Ð<Ð<Ð<¨�b˜”nÐ<Ð<Ð<r>   r}   c                 ó    •— g | ]
}|‰         ‘ŒS r¿   r¿   r#  s     €r<   rÄ   z)_coo_base.__getitem__.<locals>.<listcomp>K  ó   ø€ Ð"GÐ"GÐ"G°b 2 j¤>Ð"GÐ"GÐ"Gr>   ©rž   c                 ó    •— g | ]
}|‰         ‘ŒS r¿   r¿   )r9   r‰   Úarr_cos     €r<   rÄ   z)_coo_base.__getitem__.<locals>.<listcomp>O  s   ø€ Ð:Ð:Ð:¨˜"˜Vœ*Ð:Ð:Ð:r>   rä   r  ) r$   re   rf   r7   ÚonesrA   r`   Úbool_r¬   rÉ   r_   rX   rœ   ÚslicerÙ   rê   rŒ   ÚsumrS   r5   r%   r8   r”   rÌ   rk   Úlistr�   rw   rÿ   ÚinsertrL   r   )rm   ÚkeyrG   Ú	new_shapeÚarr_int_posÚnone_posÚslice_coordsÚ
arr_coordsÚarr_indicesr¦   rC   r‰   ÚstartÚstopÚstepÚin_rangeÚnew_ixÚmr’   r“   Ú	arr_shapeÚkeyarrÚfoundÚarr_ixÚnew_arr_coordsÚposÚ
coord_liker)  r$  s                              @@r<   Ú__getitem__z_coo_base.__getitem__  s*  øø€ Ý2CØ�”˜Tœ[ñ3
ô 3
Ñ/ˆˆy˜+ xõ ”W�S ¤™^œ^µ2´8Ð<Ñ<Ô<ˆ
ØˆØˆ
ØˆÝ%¥c¨%°´Ñ&=Ô&=Ñ>Ô>ð 	(ñ 	(‰LˆA‰y��RÝ˜#�sÑ#Ô#ð (Ø˜r SšyÑ)�
�
Ý˜C¥Ñ'Ô'ð (Ø�% ™+œ+Ò%Ð%Ø ×'Ò'¨Ñ+Ô+Ð+Ð+à(+¯ª°D´J¸q´MÑ(BÔ(BÑ%�E˜4 Ø˜q’y�yØ !š8˜8Ø(*¨eª¸¸Tº	Ñ'B˜H˜Hà(*¨eª¸¸Tº	Ñ'B˜HÝ$&¤I¨b°5©j¸$Ñ$?Ô$?™	˜ Ø" q¨A¢v°Ñ&9Ñ9˜
˜
à$&¨%¢K°B¸²IÑ#>˜Ø!# e¡˜Ø" hÑ.˜
Ø ×'Ò'¨Ñ/Ô/Ð/Ñ/à×!Ò! "Ñ%Ô%Ð%Ø×"Ò" 3Ñ'Ô'Ð'Ñ'à˜Š?ˆ?Ø”9˜ZÔ(×,Ò,Ñ.Ô.×5Ò5°d´jÀuÐ5ÑMÔMÐMà<Ð<Ð<Ð<¨|Ð<Ñ<Ô<ˆ
Ø”9˜ZÔ(ˆð ñ  	9Ý+¨[Ð9ˆKØ# AœÔ,ˆIõ ”X˜kÑ*Ô*×2Ò2µ3°{Ñ3CÔ3CÀQÈÑKÔKˆFÝœÐ"GÐ"GÐ"GÐ"G¸JÐ"GÑ"GÔ"GÑHÔHÈÈÈÈAÈAÈAÈtÈÔTˆJØ˜zÒ)×.Ò.°AÐ.Ñ6Ô6ˆEØ"Ÿ]š]™_œ_‰NˆF�FØ Ô'ˆHØ:Ð:Ð:Ð:¨zÐ:Ñ:Ô:ˆJÝ!¥"Ô"2°6ÀÐ"KÑ"KÔ"KÑLÔLˆNõ �;ÑÔ ;¨r¤?°[À´^Ñ#CÀaÑ#GÒGÐGà! !”n�Ø'¨¨¨Ô-°Ñ>ÀÈCÈDÈDÔAQÑQ�
�
ð ,¨jÑ8�
àð 	8Øð QÝœ]¨:°a¬=Ñ9Ô9�
�
åœX¥c¨(¡m¤m¸4¼;Àq¼>Ô;OÐPÑPÔP�
Ø×Ò˜h qœk¨:Ñ6Ô6Ð6Ø˜a˜b˜b”\ð 8ð 8�Ø×!Ò! ! Z§_¢_Ñ%6Ô%6Ñ7Ô7Ð7Ð7Ý˜( JÐ/°yÈÌ
ÐSÑSÔSÐSr>   c           	      ó”  ‡‡— t          || j        | j        ¦  «        \  Š}}}|rAt          |¦  «        }|d d d…         D ]}|                     |¦  «         Œt          |¦  «        }|rTt          ‰¦  «        Šˆˆfd„|D ¦   «         }t          |                     ¦   «         Ž }t          ||¦  «        D ]
\  }	Š‰‰|	<   Œt          |¦  «        r%d|j        v rd S t          ||| j        ¦  «        \  }
}n;t          j        || j        ¬¦  «        }|j        dk    rd S t          ||¦  «        \  }
}|                      ‰¦  «        \  }}t#          |¦  «        dk    r*t#          |d         ¦  «        dk    r||c| _        | _        d S d }d}|rŒ‰D ]‰}t)          |t*          ¦  «        srt-          |¦  «        sc|j        }t#          |¦  «        |d         |d         z
  dz   k    r	|d         }nd}|||t#          |¦  «        z   …         }t/          ||¦  «        } nŒŠd}i }t1          ‰¦  «        D ]<\  }	}|	|k    r|t#          |¦  «        z  }t)          |t*          ¦  «        r
|||	<   |dz  }Œ=d g| j        z  }t#          |
¦  «        }t1          ‰¦  «        D ]œ\  }	}t-          |¦  «        rt          j        ||f¦  «        ||	<   Œ.t)          |t*          ¦  «        r<|                     | j        |	         ¦  «        \  }}}||||	                  |z  z   ||	<   Œ|                     ¦   «         |         ||	<   Œ�|
                     ¦   «         }t          j        |¦  «        }t          j        |dd¬¦  «        \  }}t          j         |||         g¦  «        | _        t          d„ t          ||d d …|f         ¦  «        D ¦   «         ¦  «        | _        d	| _!        d S )
Nr}   c                 óD   •— i | ]}t          ‰|         xŠ¦  «        °|‰“ŒS r¿   )r"   )r9   r¦   ÚarrrG   s     €€r<   ú
<dictcomp>z)_coo_base.__setitem__.<locals>.<dictcomp>v  s1   ø€ ÐUÐUÐU !½)È5ÐQRÌ8ÀOÀCÑ:TÔ:TÐU�q˜#ÐUÐUÐUr>   r   r4   r	   T)rž   Úreturn_indexc              3   ó>   K  — | ]}t          j        |¦  «        V — Œd S rN   )r7   Úhstack)r9   Úcs     r<   r=   z(_coo_base.__setitem__.<locals>.<genexpr>Ò  s*   è è € ÐVÐV¨Q�BœI a™LœLÐVÐVÐVÐVÐVÐVr>   F)"r$   re   rf   r.  ÚpoprY   r%   r  rÉ   r   Ú_get_sparse_data_and_coordsr5   r7   rh   rÃ   Ú_get_dense_data_and_coordsÚ
_zero_manyrA   r`   r_   rX   r,  r"   r‹   r¬   rj   Úbroadcast_torê   rØ   rL   r8   rþ   rK  ra   )rm   r0  rë   r1  r2  r3  ÚjÚarr_posr6  r¦   Úx_dataÚx_coordsÚold_dataÚ
old_coordsr=  rB  rC   Ú	x_arr_cooÚx_arr_coo_ravelÚx_axÚx_axesr’   Únew_nnzr7  r8  r9  r“   r:   ÚindrG  rG   s                                @@r<   Ú__setitem__z_coo_base.__setitem__e  s!  øø€ å2CØ�”˜Tœ[ñ3
ô 3
Ñ/ˆˆy˜+ xð ð 	)Ý˜Y™œˆIØ˜d˜d ˜d”^ð !ð !�Ø—’˜aÑ Ô Ð Ð Ý˜iÑ(Ô(ˆIð ð 	Ý˜‘K”KˆEØUÐUÐUÐUÐU {ÐUÑUÔUˆGÝ+¨W¯^ª^Ñ-=Ô-=Ð>ˆKÝ˜g {Ñ3Ô3ð ð ‘��3Ø��a‘�õ �A‰;Œ;ð 	HØ�A”Gˆ|ˆ|Ø�Ý:¸1¸iÈÌÑTÔTÑˆF�H�Hå”
˜1 D¤JÐ/Ñ/Ô/ˆAØŒv˜Š{ˆ{Ø�Ý9¸!¸YÑGÔGÑˆF�Hð  $Ÿš¨uÑ5Ô5Ñˆ�*åˆx‰=Œ=˜AÒÐ¥# h¨q¤kÑ"2Ô"2°aÒ"7Ð"7Ø%-¨zÐ"ˆDŒI�t”{àˆFð ˆ	ØˆØð 	ð ð ð �Ý! #¥uÑ-Ô-ð µiÀ±n´nð Ø #¤	�Iõ
 ˜;Ñ'Ô'¨K¸¬O¸kÈ!¼nÑ,LÈqÑ,PÒQÐQØ)¨!œn˜˜à˜ð !)¨¨Sµ3°y±>´>Ñ-AÐ)AÔ B�Iå&3°I¸yÑ&IÔ&I�OØ�Eøð ˆØˆÝ Ñ&Ô&ð 	ð 	‰FˆAˆsØ�CŠxˆxØ�˜I™œÑ&�Ý˜#�uÑ%Ô%ð Ø ��q‘	Ø˜‘	�øð �V˜dœiÑ'ˆ
Ý�f‘+”+ˆÝ Ñ&Ô&ð 	=ð 	=‰FˆAˆsÝ˜‰~Œ~ð =Ý!#¤°°w°jÑ!AÔ!A�
˜1‘ØÝ˜C¥Ñ'Ô'ð =Ø$'§K¢K°´
¸1´Ñ$>Ô$>Ñ!��t˜TØ!&¨°&¸´)Ô)<¸tÑ)CÑ!C�
˜1‘�à #§	¢	¡¤¨OÔ <�
˜1‘�à—;’;‘=”=ˆõ ”X˜jÑ)Ô)ˆ
Ý”˜:¨A¸DÐAÑAÔA‰ˆˆ3õ ”I˜x¨°#¬Ð7Ñ8Ô8ˆŒ	ÝÐVÐVµ#°jÀ*ÈQÈQÈQÐPSÈVÔBTÑ2UÔ2UÐVÑVÔVÑVÔVˆŒØ$)ˆÔ!Ð!Ð!r>   c                 óò  ‡— t          j        t          | j        ¦  «        t           j        ¬¦  «        Šg }g }t          t          || j        ¦  «        ¦  «        D �]&\  }\  }}t          |t          ¦  «        r
‰||k    z  ŠŒ(t          |t          ¦  «        r–|t          d ¦  «        k    rƒ|                     | j        |         ¦  «        \  }}}	|	dk    rF|	dk     r||k    ||k    z  }
n||k    ||k     z  }
t          j        ||z
  |	¦  «        }‰|dk    |
z  z  ŠŒÀ||k    ||k     z  }
‰|
z  ŠŒÓt          |t          ¦  «        r|t          d ¦  «        k    rŒü|                     |¦  «         |                     |¦  «         �Œ(|rÐt          j        |¦  «                             t          |¦  «        dd¦  «        }t          j        ˆfd„|D ¦   «         ¦  «        d d …d d …d f         }||k                         d¬¦  «        }|                     ¦   «         \  }}t          j        ‰¦  «        }d|‰                     ¦   «         d         |         <   ‰|z  Šˆfd„| j        D ¦   «         }| j        ‰          }||fS )	Nr4   r	   r   r}   c                 ó    •— g | ]
}|‰         ‘ŒS r¿   r¿   r#  s     €r<   rÄ   z(_coo_base._zero_many.<locals>.<listcomp>ô  r&  r>   r'  Tc                 ó"   •— g | ]}|‰          ‘ŒS r¿   r¿   r#  s     €r<   rÄ   z(_coo_base._zero_many.<locals>.<listcomp>ü  s   ø€ Ð?Ð?Ð?¨R˜˜Z˜KœÐ?Ð?Ð?r>   )r7   r*  rA   r`   r+  r¬   rÉ   r_   rX   rœ   r,  rê   re   ÚmodrÙ   r8   r”   rÌ   rk   rw   )rm   rG   r5  r6  r¦   rC   r‰   r7  r8  r9  r:  r<  r>  r?  Úarr_coor:   Úarr_index_maskÚpruned_coordsÚpruned_datar$  s                      @r<   rP  z_coo_base._zero_manyÕ  s�  ø€ õ ”7�3˜tœy™>œ>µ´Ð:Ñ:Ô:ˆ
Øˆ
ØˆÝ%¥c¨%°´Ñ&=Ô&=Ñ>Ô>ð 	(ñ 	(‰LˆA‰y��RÝ˜#�sÑ#Ô#ð (Ø˜r SšyÑ)�
�
Ý˜C¥Ñ'Ô'ð (¨Cµ5¸±;´;Ò,>Ð,>Ø$'§K¢K°´
¸1´Ñ$>Ô$>Ñ!��t˜TØ˜1’9�9Ø˜a’x�xØ$&¨%¢K°B¸²IÑ#>˜˜à$&¨%¢K°B¸²IÑ#>˜Ýœ˜r E™z¨4Ñ0Ô0�AØ 1¨¢6¨XÑ"5Ñ5�J�Jà " e¢°°T²	Ñ:�HØ (Ñ*�J�JÝ˜C¥Ñ'Ô'ð (¨Cµ5¸±;´;Ò,>Ð,>àà×!Ò! "Ñ%Ô%Ð%Ø×"Ò" 3Ñ'Ô'Ð'Ñ'ð ð 	)Ý”X˜kÑ*Ô*×2Ò2µ3°{Ñ3CÔ3CÀQÈÑKÔKˆFÝœÐ"GÐ"GÐ"GÐ"G¸JÐ"GÑ"GÔ"GÑHÔHÈÈÈÈAÈAÈAÈtÈÔTˆJØ˜zÒ)×.Ò.°AÐ.Ñ6Ô6ˆEØŸš™œ‰JˆG�QÝœ]¨:Ñ6Ô6ˆNØ?CˆN˜:×-Ò-Ñ/Ô/°Ô2°7Ô;Ñ<Ø˜.Ñ(ˆJð @Ð?Ð?Ð?°4´;Ð?Ñ?Ô?ˆØ”i  Ô,ˆØ˜MÐ)Ð)r>   c                 ó„   — | j         rdS |                      | j        | j        ¦  «        }|\  | _        | _        d| _         dS )zeEliminate duplicate entries by adding them together

        This is an *in place* operation
        NT)ra   r  r_   r`   )rm   Úsummeds     r<   r¡   z_coo_base.sum_duplicates   sI   € ð
 Ô$ð 	ØˆFØ×%Ò% d¤k°4´9Ñ=Ô=ˆØ!'ÑˆŒ�T”YØ$(ˆÔ!Ð!Ð!r>   c                 ó  ‡‡— t          |¦  «        dk    r||fS t          j        |d d d…         ¦  «        Št          ˆfd„|D ¦   «         ¦  «        }|‰         }t          j                             d„ |D ¦   «         ¦  «        Št          j        d‰¦  «        Št          ˆfd„|D ¦   «         ¦  «        }t          j        ‰¦  «        \  }t          j         	                    |t          |¦  «        | j        ¬¦  «        }||fS )Nr   r}   c              3   ó(   •K  — | ]}|‰         V — Œd S rN   r¿   )r9   rC   r…   s     €r<   r=   z,_coo_base._sum_duplicates.<locals>.<genexpr>  s'   øè è € Ð4Ð4 c�s˜5”zÐ4Ð4Ð4Ð4Ð4Ð4r>   c                 ó:   — g | ]}|d d…         |dd…         k    ‘ŒS )r	   Nr}   r¿   rB   s     r<   rÄ   z-_coo_base._sum_duplicates.<locals>.<listcomp>  s:   € ð ,
ð ,
ð ,
Ø$'ˆC���ŒG�s˜3˜B˜3”xÒð,
ð ,
ð ,
r>   Tc              3   ó(   •K  — | ]}|‰         V — Œd S rN   r¿   )r9   rC   Úunique_masks     €r<   r=   z,_coo_base._sum_duplicates.<locals>.<genexpr>  s(   øè è € Ð:Ð:¨C�s˜;Ô'Ð:Ð:Ð:Ð:Ð:Ð:r>   r4   )rA   r7   ÚlexsortrY   r  rË   rÙ   rk   ÚaddÚreduceatr   r5   )rm   r_   r`   Úunique_indsr…   rm  s       @@r<   r  z_coo_base._sum_duplicates  s
  øø€ åˆt‰9Œ9˜Š>ˆ>Ø˜4�<Ðõ ”
˜6 $ $ B $œ<Ñ(Ô(ˆÝÐ4Ð4Ð4Ð4¨VÐ4Ñ4Ô4Ñ4Ô4ˆØ�EŒ{ˆÝ”m×*Ò*ð ,
ð ,
Ø+1ð,
ñ ,
ô ,
ñ ô ˆõ ”i  kÑ2Ô2ˆÝÐ:Ð:Ð:Ð:°6Ð:Ñ:Ô:Ñ:Ô:ˆÝ”z +Ñ.Ô.‰ˆÝŒv�Š˜tÕ%8¸Ñ%EÔ%EÈTÌZˆÑXÔXˆØ�tˆ|Ðr>   c                 óŒ   ‡— | j         dk    Š| j         ‰         | _         t          ˆfd„| j        D ¦   «         ¦  «        | _        dS )z[Remove zero entries from the array/matrix

        This is an *in place* operation
        r   c              3   ó(   •K  — | ]}|‰         V — Œd S rN   r¿   rÆ   s     €r<   r=   z,_coo_base.eliminate_zeros.<locals>.<genexpr>%  s'   øè è € Ð=Ð=¨#˜C œIÐ=Ð=Ð=Ð=Ð=Ð=r>   N)r`   rY   r_   )rm   r£   s    @r<   Úeliminate_zerosz_coo_base.eliminate_zeros  sG   ø€ ð
 Œy˜AŠ~ˆØ”I˜d”OˆŒ	ÝÐ=Ð=Ð=Ð=°´Ð=Ñ=Ô=Ñ=Ô=ˆŒˆˆr>   c                 ó<  — |j         | j         k    r t          d| j         › d|j         › d�¦  «        ‚t          | j        j        |j        j        ¦  «        }t          j        ||d¬¦  «        }t          |j        j	        ¦  «        }| j
        dk    rWt          t          j        dg¦  «        | j        | j
        | j        d         | j        |                     d¦  «        |¦  «         �n | j
        d	k    rH| j        \  }}t#          ||| j        | j        | j        | j        |                     d¦  «        |¦  «         nÍ|r5t          j        dt          j        | j         d d
…         ¦  «        ¦  «        }nFt          j        t          j        | j         dd …         d d d
…         ¦  «        d d d
…         d¦  «        }t          j        | j        ¦  «        }t          || j        | j
        || j        |                     d¦  «        |¦  «         |                      |d¬¦  «        S )NúIncompatible shapes (ú and r§   T)r5   rL   r	   r   rÓ   r   r}   FrO   )re   rc   r   r5   Úcharr7   r8   rœ   rÕ   rÖ   rj   r   r—   r_   r`   rØ   rô   r   r{   rx   rÙ   rÚ   rÛ   Ú
_container)	rm   Úotherr5   rz   rÞ   rr   rß   rà   r_   s	            r<   Ú
_add_densez_coo_base._add_dense+  së  € ØŒ;˜$œ*Ò$Ð$ÝÐT°T´ZÐTÐTÀeÄkÐTÐTÐTÑUÔUÐUÝ˜DœJœO¨U¬[Ô-=Ñ>Ô>ˆÝ”˜% u°4Ð8Ñ8Ô8ˆÝ�f”lÔ/Ñ0Ô0ˆØŒ9˜Š>ˆ>Ý�2œ8 Q C™=œ=¨$¬(°D´IØœ; qœ>¨4¬9°f·l²lÀ3Ñ6GÔ6GÈñRô Rð Rñ RàŒY˜!Š^ˆ^ØÔ$‰DˆAˆqÝ˜˜1˜dœh¨¬°$´(¸D¼IØŸš SÑ)Ô)¨7ñ4ô 4ð 4ð 4ð ð OÝœ) A¥r¤z°$´*¸S¸b¸S´/Ñ'BÔ'BÑCÔC��åœ)¥B¤J¨t¬z¸!¸"¸"¬~¸d¸dÀ¸dÔ/CÑ$DÔ$DÀTÀTÀrÀTÔ$JÈAÑNÔN�Ý”^ D¤KÑ0Ô0ˆFÝ˜7 D¤H¨d¬iØ! 4¤9¨f¯lªl¸3Ñ.?Ô.?ÀñJô Jð Jà�Š˜v¨EˆÑ2Ô2Ð2r>   c                 óÎ  — | j         dk     r'|                      ¦   «                              |¦  «        S |j        | j        k    r t	          d| j        › d|j        › d�¦  «        ‚|                      |¦  «        }t          j        | j        |j        f¦  «        }t          t          j        | j
        |j
        fd¬¦  «        ¦  «        }|                      ||f| j        ¬¦  «        }|S ©Nr¨   rv  rw  r§   r	   r'  rä   )rj   rò   Ú_add_sparsere   rc   rŽ   r7   rÛ   r`   rY   r_   ©rm   rz  r“   r’   rÓ   s        r<   r~  z_coo_base._add_sparseC  sÍ   € ØŒ9�qŠ=ˆ=Ø—:’:‘<”<×+Ò+¨EÑ2Ô2Ð2àŒ;˜$œ*Ò$Ð$ÝÐT°T´ZÐTÐTÀeÄkÐTÐTÐTÑUÔUÐUØ—’˜uÑ%Ô%ˆÝ”> 4¤9¨e¬jÐ"9Ñ:Ô:ˆÝ�2œ>¨4¬;¸¼Ð*EÈAÐNÑNÔNÑOÔOˆ
Ø�NŠN˜H jÐ1¸¼ˆNÑDÔDˆØˆr>   c                 óÄ  — | j         dk     r'|                      ¦   «                              |¦  «        S |j        | j        k    r t	          d| j        › d|j        › d�¦  «        ‚|                      |¦  «        }t          j        | j        |j         f¦  «        }t          t          j        | j
        |j
        fd¬¦  «        ¦  «        }t          ||f| j        ¬¦  «        }|S r}  )rj   rò   Ú_sub_sparsere   rc   rŽ   r7   rÛ   r`   rY   r_   r   r  s        r<   r�  z_coo_base._sub_sparseO  sÌ   € ØŒ9�qŠ=ˆ=Ø—:’:‘<”<×+Ò+¨EÑ2Ô2Ð2àŒ;˜$œ*Ò$Ð$ÝÐT°T´ZÐTÐTÀeÄkÐTÐTÐTÑUÔUÐUØ—’˜uÑ%Ô%ˆÝ”> 4¤9¨u¬z¨kÐ":Ñ;Ô;ˆÝ�2œ>¨4¬;¸¼Ð*EÈAÐNÑNÔNÑOÔOˆ
Ý�x Ð,°D´JÐ?Ñ?Ô?ˆØˆr>   c           	      óN  — | j         dk    �r't          j        t          j        | j        d d…         ¦  «        t          | j        j        |j        j        ¦  «        ¬¦  «        }t          j	        | j        ¦  «        }t          j
        t          j        |d d…         d d d…         ¦  «        d d d…         dd …         d¦  «        }t          j        | j        ¦  «        }t          | j        t!          | j        ¦  «        ||| j        ||¦  «         |                     | j        d d…         ¦  «        }|S | j         dk    r| j        d         nd}t          j        |t          | j        j        |j        j        ¦  «        ¬¦  «        }| j         dk    r| j        }| j        }nD| j         dk    r"| j        d         }t          j        |¦  «        }nt-          d| j         › �¦  «        ‚t/          | j        ||| j        ||¦  «         t1          | t2          ¦  «        r|dk    r|d         S |S )Nr   r}   r4   r	   r   z$coo_matvec not implemented for ndim=)rj   r7   rÿ   rÇ   rÈ   re   r   r5   rx  r8   rÙ   rÚ   rÛ   r_   r   r—   rA   r`   r”   rx   r{   rw   ÚNotImplementedErrorr   rX   r   )	rm   rz  rz   re   rà   r_   Úresult_shaperx   r{   s	            r<   Ú_matmul_vectorz_coo_base._matmul_vector[  sþ  € ØŒ9�qŠ=‰=Ý”X�dœi¨¬
°3°B°3¬Ñ8Ô8Ý$/°´
´ÀÄÔAQÑ$RÔ$RðTñ Tô TˆFå”H˜TœZÑ(Ô(ˆEÝ”i¥¤
¨5°°"°¬:°d°d¸°dÔ+;Ñ <Ô <¸T¸T¸r¸TÔ BÀ1À2À2Ô FÈÑJÔJˆGÝ”^ D¤KÑ0Ô0ˆFÝ˜$œ(¥C¨¬
¡O¤O°W¸fÀdÄiØ ñ)ô )ð )ð —^’^ D¤J¨s°¨s¤OÑ4Ô4ˆFØˆMð )-¬	°Aª¨�t”z !”}�}¸1ˆÝ”˜,Ý +¨D¬J¬O¸U¼[Ô=MÑ NÔ NðPñ Pô PˆàŒ9˜Š>ˆ>Ø”(ˆCØ”(ˆCˆCØŒY˜!Š^ˆ^Ø”+˜a”.ˆCÝ”- Ñ$Ô$ˆCˆCå%ØB°t´yÐBÐBñDô Dð Dõ 	�4”8˜S # t¤y°%¸Ñ@Ô@Ð@å�d�GÑ$Ô$ð 	¨¸Ò):Ð):Ø˜!”9ÐØˆr>   c                 óÆ  — t          |¦  «        r|                      |¦  «        S 	 |j        }n+# t          $ r t	          j        |¦  «        }|j        }Y nw xY wt          t          |¦  «        d d…         ¦  «        t          t          |¦  «        dd …         d d d…         ¦  «        z   }|                     |¦  «        }| j        }t          t          |¦  «        d d…         ¦  «        t          t          |¦  «        dd …         d d d…         ¦  «        z   }|                      |¦  «         	                    |¦  «        }|t          u rt          S |dk    s|dk    rt          |j        ¦  «        }n\t          t          |j        ¦  «        d d…         ¦  «        t          t          |j        ¦  «        dd …         d d d…         ¦  «        z   }|                     |¦  «        S )Nru   r}   r	   )r!   Ú_mul_scalarrj   ÚAttributeErrorr7   rh   rY   r^   rº   Ú_matmul_dispatchÚNotImplemented)rm   rz  Úo_ndimÚpermÚtrÚs_ndimÚrets          r<   Ú_rmatmul_dispatchz_coo_base._rmatmul_dispatch|  s¶  € Ý˜ÑÔð 	'Ø×#Ò# EÑ*Ô*Ð*ð$Øœ��øÝ!ð $ð $ð $Ýœ
 5Ñ)Ô)�Øœ���ð$øøøõ �˜v™œ s¨ sÔ+Ñ,Ô,­uµU¸6±]´]À2À3À3Ô5GÈÈÈ"ÈÔ5MÑ/NÔ/NÑNˆDØ—’ Ñ&Ô&ˆBà”YˆFÝ�˜v™œ s¨ sÔ+Ñ,Ô,­uµU¸6±]´]À2À3À3Ô5GÈÈÈ"ÈÔ5MÑ/NÔ/NÑNˆDØ—.’. Ñ&Ô&×7Ò7¸Ñ;Ô;ˆCØ•nÐ$Ð$Ý%Ð%à˜Š{ˆ{˜f¨šk˜kÝ˜SœX‘”��å�U 3¤8™_œ_¨S¨b¨SÔ1Ñ2Ô2µU½5ÀÄ¹?¼?È2È3È3Ô;OÐPTÐPTÐRTÐPTÔ;UÑ5VÔ5VÑV�Ø—=’= Ñ&Ô&Ð&s   ¦. ®%AÁAc                 óÀ  — t          |¦  «        r|                      |¦  «        S t          |¦  «        set          |¦  «        sVt	          j        |¦  «        }|j        dk    r|j        t          j        k    rt          S 	 |j
         n# t          $ r |}Y nw xY w| j        dk     r |j        dk     rt          j        | |¦  «        S | j
        d         }d}|j        t          j        u �rB|j
        |fk    r|                      |¦  «        S |j
        |dfk    rC|                      |                     ¦   «         ¦  «        } |j        g | j
        d d…         ¢d‘R Ž S |j        dk    r%|› d|› d|j
        d         › d�}t'          |¦  «        ‚|j
        d	         |k    rm| j
        d d	…         }|j
        d d	…         }||k    r4	 t	          j        ||¦  «         n# t&          $ r t'          d
¦  «        ‚w xY w|                      |¦  «        S t'          |› d|› d|j
        d	         › d�¦  «        ‚t          |¦  «        r|                      |¦  «        S t          |¦  «        �r�| j        dk    }	|j        dk    }
|	r|                      | j        ¦  «        } |
r"|                     |j
        d         df¦  «        }||j
        d	         k    r#t'          |› d|› d|j
        d	         › d�¦  «        ‚| j        dk    s|j        dk    rX| j
        d d	…         }|j
        d d	…         }||k    r4	 t	          j        ||¦  «         n# t&          $ r t'          d
¦  «        ‚w xY w|                      |¦  «        }|	rL|                     t3          |j
        d d	…         ¦  «        t3          |j
        dd …         ¦  «        z   ¦  «        }|
r"|                     |j
        d d…         ¦  «        }|S d S )Nr   r¨   r}   z)matmul: dimension mismatch with signaturer	   z (n,k=z),(k=z,)->(n,)ru   z&Batch dimensions are not broadcastablez	 (n,..,k=z,..,m)->(n,..,m)r   )r!   Úmultiplyr   r#   r7   Ú
asanyarrayrj   r5   Úobject_rŠ  re   rˆ  r   r‰  rŽ   Úndarrayr…  rØ   r”   rc   Úbroadcast_shapesÚ_matmul_multivectorr‡  rô   Ú_matmul_sparserY   )rm   rz  Úother_arß   Ú
err_prefixrz   ÚmsgÚbatch_shape_AÚbatch_shape_BÚ
self_is_1dÚother_is_1ds              r<   r‰  z_coo_base._matmul_dispatch•  sd  € Ý˜ÑÔð 	(Ø—=’= Ñ'Ô'Ð'å˜‘”ð 	 ¥7¨5¡>¤>ð 	 å”m EÑ*Ô*ˆGàŒ|˜qÒ Ð  W¤]µb´jÒ%@Ð%@õ &Ð%ð Ø”��øÝ!ð  ð  ð  Ø���ð øøøð Œ9�qŠ=ˆ=˜UœZ¨!š^˜^ÝÔ+¨D°%Ñ8Ô8Ð8àŒJ�rŒNˆØ@ˆ
ØŒ?�bœjÐ(Ñ(ØŒ{˜q˜dÒ"Ð"Ø×*Ò*¨5Ñ1Ô1Ð1ØŒ{˜q !˜fÒ$Ð$Ø×,Ò,¨U¯[ª[©]¬]Ñ;Ô;�Ø%�v”~Ð: t¤z°#°2°#¤Ð:¸Ð:Ð:Ð:Ð:ØŒz˜QŠˆØ#ÐKÐK¨1ÐKÐK°5´;¸q´>ÐKÐKÐK�Ý  ‘o”oÐ%ØŒ{˜2Œ !Ò#Ð#à $¤
¨3¨B¨3¤�Ø %¤¨C¨R¨CÔ 0�Ø  MÒ1Ð1ðSåÔ+¨M¸=ÑIÔIÐIÐIøÝ%ð Sð Sð SÝ(Ð)QÑRÔRÐRðSøøøð ×/Ò/°Ñ6Ô6Ð6å Ø!ÐUÐU¨AÐUÐU°E´KÀ´OÐUÐUÐUñô ð õ ˜ÑÔð 	+à×#Ò# EÑ*Ô*Ð*å�E‰?Œ?ñ &	Øœ ašˆJØœ*¨š/ˆKð ð 7Ø—|’| DÔ$5Ñ6Ô6�àð ;ØŸš u¤{°1¤~°qÐ&9Ñ:Ô:�ð �E”K ”OÒ#Ð#Ý Ø!ÐUÐU¨AÐUÐU°E´KÀ´OÐUÐUÐUñô ð ð Œy˜1Š}ˆ} ¤
¨Q¢ Ø $¤
¨3¨B¨3¤�Ø %¤¨C¨R¨CÔ 0�Ø  MÒ1Ð1ðSåÔ+¨M¸=ÑIÔIÐIÐIøÝ%ð Sð Sð SÝ(Ð)QÑRÔRÐRðSøøøð ×(Ò(¨Ñ/Ô/ˆFð ð BàŸš­¨f¬l¸3¸B¸3Ô.?Ñ(@Ô(@Ý(-¨f¬l¸2¸3¸3Ô.?Ñ(@Ô(@ñ)Añ Bô B�àð ;ØŸš¨¬°S°b°SÔ(9Ñ:Ô:�ØˆMðM&	ð &	s*   Á?B ÂBÂBÆ>G ÇG.Ì"L8 Ì8Mc                 óÜ  — t          | j        j        |j        j        ¦  «        }| j        dk    s|j        dk    �rÎ| j        dk    r€|                      d| j        d         ¦  «                             |¦  «        }|                     t          |j        d d…         ¦  «        t          |j        dd …         ¦  «        z   ¦  «        S t          j	        | j        d d…         |j        d d…         ¦  «        }|| j        dd …         z   }||j        dd …         z   }|  
                    |¦  «        } t          j        ||¦  «        }|| j        dd…         z   |j        dd …         z   }t          j        ||¬¦  «        }t          | j        t          | j        ¦  «        |j        d         t          j        |¦  «        t          j        |¦  «        t          j        | j        ¦  «        | j        |                     d¦  «        |¦	  «	         |S | j        dk    r)| j        d         |j        d         f}| j        }| j        }	n:| j        dk    r/|j        d         f}| j        d         }t          j        |¦  «        }	t          j        ||¬¦  «        }t1          | j        |j        d         |	|| j        |                     d¦  «        |¦  «         |                     t5          |¦  «        ¬	¦  «        S )
Nr¨   r	   r   ru   r}   r4   r†   r   )Útype)r   r5   rx  rj   r”   re   r—  rY   r7   r–  Ú_broadcast_torQ  rÿ   r   r—   rA   r8   rÛ   r_   r`   rØ   rx   r{   rw   r   Úviewr¡  )
rm   rz  Úresult_dtyperz   Úbroadcast_shapeÚ
self_shapeÚother_shaper„  rx   r{   s
             r<   r—  z_coo_base._matmul_multivectorò  s‡  € Ý" 4¤:¤?°E´KÔ4DÑEÔEˆØŒ9˜Š>ˆ>˜UœZ¨1š_™_àŒy˜AŠ~ˆ~ØŸš a¨¬°A¬Ñ7Ô7×KÒKÈEÑRÔR�Ø—~’~¥e¨E¬K¸¸¸Ô,<Ñ&=Ô&=ÅÀeÄkÐRTÐRUÐRUÔFVÑ@WÔ@WÑ&WÑXÔXÐXå Ô1°$´*¸S¸b¸S´/À5Ä;ÈsÐPRÈsÔCSÑTÔTˆOØ(¨4¬:°b°c°c¬?Ñ:ˆJØ)¨E¬K¸¸¸Ô,<Ñ<ˆKà×%Ò% jÑ1Ô1ˆDÝ”O E¨;Ñ7Ô7ˆEØ*¨T¬Z¸¸2¸Ô->Ñ>ÀÄÈRÈSÈSÔAQÑQˆLÝ”X˜l°,Ð?Ñ?Ô?ˆFÝ ¤­#¨d¬j©/¬/¸5¼;Àr¼?Ý "¤¨Ñ 5Ô 5µr´xÀÑ7MÔ7MÝ "¤¨t¬{Ñ ;Ô ;Ø $¤	¨5¯;ª;°sÑ+;Ô+;¸VñEô Eð Eð ˆMàŒ9˜Š>ˆ>Ø œJ qœM¨5¬;°q¬>Ð:ˆLØ”(ˆCØ”(ˆCˆCØŒY˜!Š^ˆ^Ø!œK¨œNÐ,ˆLØ”+˜a”.ˆCÝ”- Ñ$Ô$ˆCÝ”˜,¨lÐ;Ñ;Ô;ˆÝ˜œ 5¤;¨r¤?°C¸Øœ E§K¢K°Ñ$4Ô$4°fñ	>ô 	>ð 	>à�{Š{¥ U¡¤ˆ{Ñ,Ô,Ð,r>   c                 ó¶  — t          |¦  «        s�t          |¦  «        s~t          |¦  «        sot          j        |¦  «        }|j        dk    r5|j        t          j        k    r t          dt          |¦  «        › d�¦  «        ‚	 |j
         n# t          $ r |}Y nw xY wt          |¦  «        r| |z  S | j
        d         |j
        dd…         d         k    r t          d| j
        › d|j
        › d	�¦  «        ‚| j        d
k     r|j        d
k     r| |z  S t          |¦  «        r|                      |¦  «        S |                      |                     ¦   «         ¦  «        S )a°  Return the dot product of two arrays.

        Strictly speaking a dot product involves two vectors.
        But in the sense that an array with ndim >= 1 is a collection
        of vectors, the function computes the collection of dot products
        between each vector in the first array with each vector in the
        second array. The axis upon which the sum of products is performed
        is the last axis of the first array and the second to last axis of
        the second array. If the second array is 1-D, the last axis is used.

        Thus, if both arrays are 1-D, the inner product is returned.
        If both are 2-D, we have matrix multiplication. If `other` is 1-D,
        the sum product is taken along the last axis of each array. If
        `other` is N-D for N>=2, the sum product is over the last axis of
        the first array and the second-to-last axis of the second array.

        Parameters
        ----------
        other : array_like (dense or sparse)
            Second array

        Returns
        -------
        output : array (sparse or dense)
            The dot product of this array with `other`.
            It will be dense/sparse if `other` is dense/sparse.

        Examples
        --------

        >>> import numpy as np
        >>> from scipy.sparse import coo_array
        >>> A = coo_array([[1, 2, 0], [0, 0, 3], [4, 0, 5]])
        >>> v = np.array([1, 0, -1])
        >>> A.dot(v)
        array([ 1, -3, -1], dtype=int64)

        For 2-D arrays it is the matrix product:

        >>> A = coo_array([[1, 0], [0, 1]])
        >>> B = coo_array([[4, 1], [2, 2]])
        >>> A.dot(B).toarray()
        array([[4, 1],
               [2, 2]])

        For 3-D arrays the shape extends unused axes by other unused axes.

        >>> A = coo_array(np.arange(3*4*5*6)).reshape((3,4,5,6))
        >>> B = coo_array(np.arange(3*4*5*6)).reshape((5,4,6,3))
        >>> A.dot(B).shape
        (3, 4, 5, 5, 4, 3)
        r   z"dot argument not supported type: 'ú'r}   ru   Nzshapes rw  z are not aligned for n-D dotr¨   )r   r#   r!   r7   r“  rj   r5   r”  rb   r¡  re   rˆ  rc   Ú
_dense_dotÚ_sparse_dotrg   )rm   rz  Úo_arrays      r<   Údotz_coo_base.dot  s  € õl ˜‘”ð 		 ¥7¨5¡>¤>ð 		 µ\À%Ñ5HÔ5Hð 		 å”m EÑ*Ô*ˆGàŒ|˜qÒ Ð  W¤]µb´jÒ%@Ð%@ÝÐ SÅTÈ%Á[Ä[Ð SÐ SÐ SÑTÔTÐTð Ø”��øÝ!ð  ð  ð  Ø���ð øøøõ ˜ÑÔð 	 Ø˜%‘<Ðð Œ:�bŒ>˜Uœ[¨¨¨Ô-¨aÔ0Ò0Ð0Ýð < t¤zð <ð <¸¼ð <ð <ð <ñ =ô =ð =ð Œ9�qŠ=ˆ=˜UœZ¨!š^˜^Ø˜%‘<ÐÝ�5‰>Œ>ð 	*Ø—?’? 5Ñ)Ô)Ð)Ø×Ò §¢¡¤Ñ.Ô.Ð.s   ÂB ÂBÂBc                 ó   — t          | | j        dz
  g¦  «        \  }}t          |t          d|j        dz
  ¦  «        g¦  «        \  }}||j        z  }|                     ¦   «         }||z   }g }|r||fn|f}	t          |j        |	¦  «        D ]-\  }
}|                     t          j	        |
|¦  «        ¦  «         Œ.t          |j        |f|¬¦  «        S )Nr	   r   r   rä   )Ú_convert_to_2drj   rH   ÚTrg   rÉ   r_   Úextendr7   r�   r   r`   )rm   rz  Úself_2dÚs_new_shapeÚother_2dÚo_new_shaperÈ   Úcombined_shaper_   Ú
new_shapesrL  Úss               r<   r«  z_coo_base._sparse_dote  sæ   € õ  .¨d°T´YÀ±]°OÑDÔDÑˆ�Ý .¨uµs¸1¸e¼jÈ1¹nÑ7MÔ7MÐ6NÑ OÔ OÑˆ�+à˜œÑ#ˆØ�zŠz‰|Œ|ˆð % {Ñ2ˆð ˆØ3>ÐR�k ;Ð/Ð/À[ÀNˆ
Ý˜œ ZÑ0Ô0ð 	2ð 	2‰DˆAˆqØ�MŠM�"Ô*¨1¨aÑ0Ô0Ñ1Ô1Ð1Ð1õ ˜$œ) VÐ,°NÐCÑCÔCÐCr>   c                 ó  — | j         }|dk    r|dk    rdn| j        d         f}| }nt          | | j         dz
  g¦  «        \  }}|j         }|dk    r|dk    rdn|j        d         f}|}n†|j        d d…         |j        dd …         z   }|dz
  gt          |dz
  ¦  «        ¢|dz
  ‘R }t	          j        ||¦  «        }	|	                     |j        d         t          j        |¦  «        f¦  «        }||z  }
||z   }|
                     |¦  «        S )Nr   r	   r¿   r   r}   ru   )	rj   re   r¯  r^   r7   rº   r”   rÇ   rÈ   )rm   rz  rŽ  r³  r²  r‹  rµ  r´  Úreorder_dimsÚo_reorgrÈ   r¶  s               r<   rª  z_coo_base._dense_dotz  s*  € ð ”ˆØ�QŠ;ˆ;Ø &¨!¢ ˜"˜"°$´*¸Q´-Ð1AˆKØˆGˆGå#1°$¸¼ÀQ¹¸Ñ#HÔ#HÑ ˆG�[à”ˆØ�QŠ;ˆ;Ø &¨!¢ ˜"˜"°%´+¸b´/Ð1CˆKØˆHˆHàœ+ c r cÔ*¨U¬[¸¸¸Ô-=Ñ=ˆKØ" Q™JÐG­¨v¸©zÑ):Ô):ÐG¸FÀQ¹JÐGÐGˆLÝ”l 5¨,Ñ7Ô7ˆGØ—’¨¬°B¬½¼À;Ñ9OÔ9OÐ'PÑQÔQˆHà˜Ñ!ˆð % {Ñ2ˆØ�|Š|˜NÑ+Ô+Ð+r>   r   c                 óH  ‡ ‡— t          ‰¦  «        s~t          ‰¦  «        sot          j        ‰¦  «        }|j        dk    r5|j        t          j        k    r t          dt          ‰¦  «        › d�¦  «        ‚	 ‰j	         n# t          $ r |ŠY nw xY wt          ‰ j        ‰j        |¦  «        \  }}t          ˆˆ fd„t          ||¦  «        D ¦   «         ¦  «        rt          d¦  «        ‚t          ‰¦  «        r‰                      ‰||¦  «        S ‰                      ‰||¦  «        S )aŒ  Return the tensordot product with another array along the given axes.

        The tensordot differs from dot and matmul in that any axis can be
        chosen for each of the first and second array and the sum of the
        products is computed just like for matrix multiplication, only not
        just for the rows of the first times the columns of the second. It
        takes the dot product of the collection of vectors along the specified
        axes.  Here we can even take the sum of the products along two or even
        more axes if desired. So, tensordot is a dot product computation
        applied to arrays of any dimension >= 1. It is like matmul but over
        arbitrary axes for each matrix.

        Given two tensors, `a` and `b`, and the desired axes specified as a
        2-tuple/list/array containing two sequences of axis numbers,
        ``(a_axes, b_axes)``, sum the products of `a`'s and `b`'s elements
        (components) over the axes specified by ``a_axes`` and ``b_axes``.
        The `axes` input can be a single non-negative integer, ``N``;
        if it is, then the last ``N`` dimensions of `a` and the first
        ``N`` dimensions of `b` are summed over.

        Parameters
        ----------
        a, b : array_like
            Tensors to "dot".

        axes : int or (2,) array_like
            * integer_like
              If an int N, sum over the last N axes of `a` and the first N axes
              of `b` in order. The sizes of the corresponding axes must match.
            * (2,) array_like
              A 2-tuple of sequences of axes to be summed over, the first applying
              to `a`, the second to `b`. The sequences must be the same length.
              The shape of the corresponding axes must match between `a` and `b`.

        Returns
        -------
        output : coo_array
            The tensor dot product of this array with `other`.
            It will be dense/sparse if `other` is dense/sparse.

        See Also
        --------
        dot

        Examples
        --------
        >>> import numpy as np
        >>> import scipy.sparse
        >>> A = scipy.sparse.coo_array([[[2, 3], [0, 0]], [[0, 1], [0, 5]]])
        >>> A.shape
        (2, 2, 2)

        Integer axes N are shorthand for (range(-N, 0), range(0, N)):

        >>> A.tensordot(A, axes=1).toarray()
        array([[[[ 4,  9],
                 [ 0, 15]],
        <BLANKLINE>
                [[ 0,  0],
                 [ 0,  0]]],
        <BLANKLINE>
        <BLANKLINE>
               [[[ 0,  1],
                 [ 0,  5]],
        <BLANKLINE>
                [[ 0,  5],
                 [ 0, 25]]]])
        >>> A.tensordot(A, axes=2).toarray()
        array([[ 4,  6],
               [ 0, 25]])
        >>> A.tensordot(A, axes=3)
        array(39)

        Using tuple for axes:

        >>> a = scipy.sparse.coo_array(np.arange(60).reshape(3,4,5))
        >>> b = np.arange(24).reshape(4,3,2)
        >>> c = a.tensordot(b, axes=([1,0],[0,1]))
        >>> c.shape
        (5, 2)
        >>> c
        array([[4400, 4730],
               [4532, 4874],
               [4664, 5018],
               [4796, 5162],
               [4928, 5306]])

        r   z#tensordot arg not supported type: 'r©  c              3   óV   •K  — | ]#\  }}‰j         |         ‰j         |         k    V — Œ$d S rN   rä   )r9   ÚaxÚbxrz  rm   s      €€r<   r=   z&_coo_base.tensordot.<locals>.<genexpr>ü  sL   øè è € ð 9ð 9Ù�2�rð Œz˜"Œ~ ¤¨R¤Ò0ð 9ð 9ð 9ð 9ð 9ð 9r>   z*sizes of the corresponding axes must match)r#   r   r7   r“  rj   r5   r”  rb   r¡  re   rˆ  Ú_process_axesrd   rÉ   rc   Ú_dense_tensordotÚ_sparse_tensordot)rm   rz  r·   Úother_arrayÚ	axes_selfÚ
axes_others   ``    r<   Ú	tensordotz_coo_base.tensordot•  sT  øø€ õr �u‰~Œ~ð 		$¥h¨u¡o¤oð 		$åœ-¨Ñ.Ô.ˆKàÔ 1Ò$Ð$¨Ô):½b¼jÒ)HÐ)HÝÐ TÅdÈ5ÁkÄkÐ TÐ TÐ TÑUÔUÐUð$Ø”��øÝ!ð $ð $ð $Ø#���ð$øøøõ !.¨d¬i¸¼ÀTÑ JÔ JÑˆ	�:õ ð 9ð 9ð 9ð 9ð 9Ý  ¨JÑ7Ô7ð9ñ 9ô 9ñ 9ô 9ð 	KåÐIÑJÔJÐJå�5‰>Œ>ð 	HØ×(Ò(¨°	¸:ÑFÔFÐFà×)Ò)¨%°¸JÑGÔGÐGs   Á6A> Á>BÂBc                 ó†  — t          | |¦  «        \  }}t          ||¦  «        \  }}||j        z  }t          |¦  «        s|S |                     ¦   «         }||z   }	g }
|r||fn|f}t	          |j        |¦  «        D ]/\  }}|r(|
                     t          j        ||¦  «        ¦  «         Œ0t          |j
        |
f|	¬¦  «        S )Nrä   )r¯  r°  r   rg   rÉ   r_   r±  r7   r�   r   r`   )rm   rz  Ús_axesÚo_axesr²  r³  r´  rµ  rÈ   r¶  r_   r·  rL  r¸  s                 r<   rÂ  z_coo_base._sparse_tensordot  sæ   € õ  .¨d°FÑ;Ô;Ñˆ�Ý .¨u°fÑ =Ô =Ñˆ�+ð ˜œÑ#ˆå˜‰~Œ~ð 	ØˆKØ�zŠz‰|Œ|ˆð % {Ñ2ˆð ˆØ3>ÐR�k ;Ð/Ð/À[ÀNˆ
Ý˜œ ZÑ0Ô0ð 	6ð 	6‰DˆAˆqØð 6Ø—’�bÔ.¨q°!Ñ4Ô4Ñ5Ô5Ð5øõ ˜$œ) VÐ,°NÐCÑCÔCÐCr>   c                 óº  ‡ ‡‡‡— t          ‰ j        ¦  «        }t          ‰j        ¦  «        }ˆfd„t          |¦  «        D ¦   «         }ˆ fd„‰D ¦   «         }ˆ fd„|D ¦   «         }ˆfd„t          |¦  «        D ¦   «         }	ˆfd„‰D ¦   «         }
ˆfd„|	D ¦   «         }‰                      |‰z   ¦  «        }t	          j        ‰|	d d…         ‰z   |	dd …         z   ¦  «        }g |¢t          j        |¦  «        ‘R }g |d d…         ¢t          j        |
¦  «        ‘|dd …         ¢R }|                     |¦  «                             |                     |¦  «        ¦  «        S )Nc                 ó   •— g | ]}|‰v¯|‘Œ	S r¿   r¿   )r9   r¦   rÈ  s     €r<   rÄ   z._coo_base._dense_tensordot.<locals>.<listcomp>#  ó   ø€ ÐBÐBÐB˜A°!¸6°/°/�a°/°/°/r>   c                 ó*   •— g | ]}‰j         |         ‘ŒS r¿   rä   r³   s     €r<   rÄ   z._coo_base._dense_tensordot.<locals>.<listcomp>$  s   ø€ Ð6Ð6Ð6¨!˜œ
 1œÐ6Ð6Ð6r>   c                 ó*   •— g | ]}‰j         |         ‘ŒS r¿   rä   r³   s     €r<   rÄ   z._coo_base._dense_tensordot.<locals>.<listcomp>%  s   ø€ Ð>Ð>Ð>¨a˜DœJ qœMÐ>Ð>Ð>r>   c                 ó   •— g | ]}|‰v¯|‘Œ	S r¿   r¿   )r9   r¦   rÉ  s     €r<   rÄ   z._coo_base._dense_tensordot.<locals>.<listcomp>'  rÌ  r>   c                 ó*   •— g | ]}‰j         |         ‘ŒS r¿   rä   ©r9   r¦   rz  s     €r<   rÄ   z._coo_base._dense_tensordot.<locals>.<listcomp>(  s   ø€ Ð7Ð7Ð7¨1˜œ AœÐ7Ð7Ð7r>   c                 ó*   •— g | ]}‰j         |         ‘ŒS r¿   rä   rÑ  s     €r<   rÄ   z._coo_base._dense_tensordot.<locals>.<listcomp>)  s   ø€ Ð?Ð?Ð?¨q˜EœK¨œNÐ?Ð?Ð?r>   r}   )	rA   re   r^   rº   r7   rÇ   rÈ   r”   r­  )rm   rz  rÈ  rÉ  rŽ  r‹  Ú
s_non_axesÚs_axes_shapeÚs_non_axes_shapeÚ
o_non_axesÚo_axes_shapeÚo_non_axes_shapeÚleftÚrightÚreshape_leftÚreshape_rights   ````            r<   rÁ  z_coo_base._dense_tensordot  s‘  øøøø€ Ý�T”Z‘”ˆÝ�U”[Ñ!Ô!ˆàBÐBÐBÐB¥ v¡¤ÐBÑBÔBˆ
Ø6Ð6Ð6Ð6¨vÐ6Ñ6Ô6ˆØ>Ð>Ð>Ð>°:Ð>Ñ>Ô>ÐàBÐBÐBÐB¥ v¡¤ÐBÑBÔBˆ
Ø7Ð7Ð7Ð7°Ð7Ñ7Ô7ˆØ?Ð?Ð?Ð?°JÐ?Ñ?Ô?Ðà�~Š~˜j¨6Ñ1Ñ2Ô2ˆÝ”˜U J¨s°¨s¤O°fÑ$<¸zÈ"È#È#¼Ñ$NÑOÔOˆàCÐ)ÐC­4¬9°\Ñ+BÔ+BÐCÐCˆð1Ð*¨3¨B¨3Ô/ð 1µ´¸<Ñ1HÔ1Hð 1Ø*¨2¨3¨3Ô/ð1ð 1ˆð �|Š|˜LÑ)Ô)×-Ò-¨e¯mªm¸MÑ.JÔ.JÑKÔKÐKr>   c                 ó@  — | j         dk     r |j         dk     rt          j        | |¦  «        S | j        }|j        }t	          j        |dd…         |dd…         ¦  «        }t          |¦  «        |dd…         z   }t          |¦  «        |dd…         z   }|                      |¦  «        }|                     |¦  «        }t          |¦  «        }	t          |¦  «        }
|	|
z   	                    ¦   «         }t          |g |¢| j        d         ‘|j        d         ‘R ¬¦  «        S )añ  
        Perform sparse-sparse matrix multiplication for two n-D COO arrays.
        The method converts input n-D arrays to 2-D block array format,
        uses csr_matmat to multiply them, and then converts the
        result back to n-D COO array.

        Parameters:
        self (COO): The first n-D sparse array in COO format.
        other (COO): The second n-D sparse array in COO format.

        Returns:
        prod (COO): The resulting n-D sparse array after multiplication.
        r¨   Nru   r}   rä   )rj   r   r˜  re   r7   r–  rY   r¢  Ú_block_diagrg   Ú_extract_block_diag)rm   rz  r¦  r§  r¥  Úself_new_shapeÚother_new_shapeÚself_broadcastedÚother_broadcastedÚself_block_diagÚother_block_diagÚprod_block_diags               r<   r˜  z_coo_base._matmul_sparse4  s3  € ð Œ9�qŠ=ˆ=˜UœZ¨!š^˜^ÝÔ)¨$°Ñ6Ô6Ð6ð ”Zˆ
Ø”kˆõ Ô-¨j¸¸"¸¬o¸{È3ÈBÈ3Ô?OÑPÔPˆÝ˜Ñ/Ô/°*¸R¸S¸S´/ÑAˆÝ Ñ0Ô0°;¸r¸s¸sÔ3CÑCˆà×-Ò-¨nÑ=Ô=ÐØ!×/Ò/°Ñ@Ô@Ðõ &Ð&6Ñ7Ô7ˆÝ&Ð'8Ñ9Ô9Ðð +Ð-=Ñ=×DÒDÑFÔFˆõ #ØØE�OÐE T¤Z°¤^ÐE°U´[À´_ÐEÐEð
ñ 
ô 
ð 	
r>   c                 óî  — | j         |k    r|r|                      ¦   «         n| S | j         }t          |¦  «        t          |¦  «        k     rt          d¦  «        ‚dt          |¦  «        t          |¦  «        z
  z  t	          |¦  «        z   }t          d„ t          ||¦  «        D ¦   «         ¦  «        rt          d|› d�¦  «        ‚|                      |¦  «        } t          | j	        t          |¦  «        ¬¦  «        }| j	        }| j        }|dd …         }d}	|d         |d         k    rT|d         }
|	|
z  }	t          j        ||
¦  «        }t          j        t          j        d	|
|¬
¦  «        | j        ¦  «        }|f}t#          dt          |¦  «        dz    d¦  «        D ]Ä}||         ||         k    r�||         }
|	|
z  }	t          |¦  «        }t          j        ||
¦  «        }t	          t          j        ||dz   d …         |
¦  «        ¦  «        }t          j        t          j        d	|
|¬
¦  «        |¦  «        }|f|z   }Œ£t          j        ||         |	¦  «        }|f|z   }ŒÅt%          ||f|¦  «        S )NzDNew shape must have at least as many dimensions as the current shaper½   c              3   ó4   K  — | ]\  }}|d k    o||k    V — ŒdS rE   r¿   )r9   ÚoÚns      r<   r=   z*_coo_base._broadcast_to.<locals>.<genexpr>m  s3   è è € ÐEÐE¡t q¨!��Q’Ð!˜1 š6ÐEÐEÐEÐEÐEÐEr>   zcurrent shape z- cannot be broadcast to new shape {new_shape}r/   r}   r	   r   r4   ru   )re   rL   rA   rc   rY   rd   rÉ   r”   r   r_   rH   r`   r7   ÚtileÚrepeatr  r—   r^   r   )rm   r1  rL   Ú	old_shapere   r;   r_   r“   r’   Ú
cum_repeatÚrepeat_countÚnew_dimr¦   r—   s                 r<   r¢  z_coo_base._broadcast_to^  s�  € ØŒ:˜Ò"Ð"Ø"&Ð0�4—9’9‘;”;�;¨DÐ0à”Jˆ	õ ˆy‰>Œ>�C 	™NœNÒ*Ð*Ýð 5ñ 6ô 6ð 6ð �˜I™œ­¨Y©¬Ñ7Ñ8½5ÀÑ;KÔ;KÑKˆõ ÐEÐE­s°5¸)Ñ/DÔ/DÐEÑEÔEÑEÔEð 	CÝð B¨ið Bð Bð Bñ Cô Cð Cð �|Š|˜EÑ"Ô"ˆå# D¤K½¸I¹¼ÐGÑGÔGˆ	Ø”ˆØ”9ˆØ˜B˜C˜C”[ˆ
Øˆ
à�Œ9˜	 "œÒ%Ð%Ø$ Rœ=ˆLØ˜,Ñ&ˆJÝ”w˜x¨Ñ6Ô6ˆHÝ”i¥¤	¨!¨\ÀÐ KÑ KÔ KÈTÌXÑVÔVˆGØ!˜ˆJå�r�S ™ZœZ¨™\˜?¨BÑ/Ô/ð 	5ð 	5ˆAØ�QŒx˜9 Qœ<Ò'Ð'Ø(¨œ|�Ø˜lÑ*�
Ý˜(‘m”m�õ œ7 8¨\Ñ:Ô:�Ý"¥2¤7¨:°a¸±c°d°dÔ+;¸\Ñ#JÔ#JÑKÔK�
õ œ)¥B¤I¨a°ÀYÐ$OÑ$OÔ$OÐQTÑUÔU�Ø%˜Z¨*Ñ4�
�
õ œ' &¨¤)¨ZÑ8Ô8�Ø%˜Z¨*Ñ4�
�
å˜( JÐ/°Ñ;Ô;Ð;r>   c                 ó¨   — t          | |¦  «        \  }}t          j        |j        d         df|¬¦  «        }||z                       |¦  «        |d<   |S )Nr	   r4   .)r¯  r7   r*  re   r”   )rm   rž   Ú	res_dtyperÜ   ÚA2dr1  r*  s          r<   Ú_sum_ndz_coo_base._sum_nd•  sT   € å'¨¨dÑ3Ô3‰ˆˆYÝŒw˜œ	 !œ aÐ(°	Ð:Ñ:Ô:ˆà˜$‘J×'Ò'¨	Ñ2Ô2ˆˆC‰Øˆ
r>   c                 óÄ   — t          | |¦  «        \  }}|                     d||¦  «        }t          j        |j        d         |¦  «        }t          |j        |f|¦  «        S )Nr	   r   )r¯  Ú_min_or_max_axisr7   r�   r_   r   r`   )rm   rž   Ú
min_or_maxÚexplicitró  r1  ÚresÚunraveled_coordss           r<   Ú_min_or_max_axis_ndz_coo_base._min_or_max_axis_nd�  s]   € Ý'¨¨dÑ3Ô3‰ˆˆYØ×"Ò" 1 j°(Ñ;Ô;ˆÝÔ+¨C¬J°q¬M¸9ÑEÔEÐå˜#œ(Ð$4Ð5°yÑAÔAÐAr>   c                 ó‚   — t          | |¦  «        \  }}|                     d|||¦  «        }|                     |¦  «        S )Nr	   )r¯  Ú_argminmax_axisr”   )rm   rž   Ú	argminmaxÚcomparerø  ró  r1  Úres_flats           r<   Ú_argminmax_axis_ndz_coo_base._argminmax_axis_nd¤  sB   € Ý'¨¨dÑ3Ô3‰ˆˆYØ×&Ò& q¨)°W¸hÑGÔGˆØ×Ò 	Ñ*Ô*Ð*r>   )NNFrN   )NF)r»   N)NN)F©r   )T)r   )6Ú__name__Ú
__module__Ú__qualname__Ú_formatr^   rZ   rW   Úpropertyr{   Úsetterrx   r”   r   Ú__doc__rŸ   r¢   rl   rº   rÑ   rá   rì   rò   rç   rg   r  r
  r  r   r  r   rD  r^  rP  r¡   r  rt  r{  r~  r�  r…  r�  r‰  r—  r­  r«  rª  rÆ  rÂ  rÁ  r˜  r¢  rô  rû  r  r¿   r>   r<   r'   r'      s@  € € € € € Ø€GØ��a˜‘”€IðGÈTð Gð Gð Gð Gð GðR ðð ñ „Xðð 	„ZðGð Gñ „ZðGð ðð ñ „Xðð 	„Zð4ð 4ñ „Zð4ð!Oð !Oð !OðF ”oÔ-€G„Oð;ð ;ð ;ð ;ð( ”oÔ-€G„OðWð Wð Wð Wð $Ô1Ô9€MÔðNð Nð Nð2?ð ?ð ?ð ?ð$  Ô)Ô1€IÔð$ð $ð $ð $ðL ”^Ô+€F„Nð%ð %ð %ð %ð2 ”oÔ-€G„Oðð ð ð ðB ð  ð  ð  ðD1ð 1ð 1ð 1ð6ð ð ð ð ”MÔ)€E„MðDð Dð Dð Dð, ”MÔ)€E„Mðð ð ð ð ”MÔ)€E„Mðð ð ð ð( $Ô,Ô4€HÔð$*ð $*ð $*ðNRð Rð Rð RðRTð RTð RTðhn*ð n*ð n*ð`)*ð )*ð )*ðV	)ð 	)ð 	)ð 	)ðð ð ð&>ð >ð >ð3ð 3ð 3ð0
ð 
ð 
ð
ð 
ð 
ðð ð ðB'ð 'ð 'ð2[ð [ð [ðz!-ð !-ð !-ðFN/ð N/ð N/ð`Dð Dð Dð*,ð ,ð ,ð6nHð nHð nHð nHð`Dð Dð Dð4Lð Lð Lð*(
ð (
ð (
ðT5<ð 5<ð 5<ð 5<ðnð ð ðBð Bð Bð+ð +ð +ð +ð +r>   r'   c                 óÞ  — | j         dk     rt          d¦  «        ‚t          j        | j        dd…         ¦  «        }| j        d         }| j        d         }|                      |||f¦  «        }|j        d         |j        d         |j        d         z  z   |j        d         |j        d         |j        d         z  z   f}||z  ||z  f}t          | j        t          |¦  «        f|¬¦  «        S )	zð
    Converts an N-D COO array into a 2-D COO array in block diagonal form.

    Parameters:
    self (coo_array): An N-Dimensional COO sparse array.

    Returns:
    coo_array: A 2-Dimensional COO sparse array in block diagonal form.
    r   zarray must have atleast dim=2Nru   r}   r	   r   rä   )
rj   rc   rÇ   rÈ   re   r”   r_   r   r`   rY   )rm   Ú
num_blocksÚn_colÚn_rowÚres_arrr’   r1  s          r<   rÞ  rÞ  ª  sè   € ð „y�‚{€{ÝÐ8Ñ9Ô9Ð9Ý”˜4œ: c r cœ?Ñ+Ô+€JØŒJ�rŒN€EØŒJ�rŒN€EØ�lŠl˜J¨¨uÐ5Ñ6Ô6€GàŒ�qÔ˜GœN¨1Ô-°´¸aÔ0@Ñ@Ñ@ØŒ�qÔ˜GœN¨1Ô-°´¸aÔ0@Ñ@Ñ@ð€Jð
 ˜eÑ# Z°%Ñ%7Ð8€IÝ�d”i¥ zÑ!2Ô!2Ð3¸9ÐEÑEÔEÐEr>   c                 ó†  — |d         |d         }}| j         }| j        | j        }}t          j        t          |¦  «        | j        ft          ¬¦  «        }||z  |d<   ||z  |d<   ||z  }t          t          |¦  «        dz
  dd¦  «        D ]}	||	         }
||
z  ||	<   ||
z  }Œt          |t          |¦  «        f|¬¦  «        S )Nru   r}   r4   r¨   rä   )r`   r{   rx   r7   rõ   rA   r—   rœ   r^   r   rY   )rm   re   r  r  r`   r{   rx   r’   Útemp_block_idxr¦   rÃ   s              r<   rß  rß  Ã  sÝ   € Ø˜”9˜e Bœiˆ5€Eð Œ9€DØŒx˜œˆ€Cõ ”�3˜u™:œ: t¤xÐ0½Ð<Ñ<Ô<€Jð ˜5‘[€Jˆr�NØ˜5‘[€Jˆr�Nð ˜E‘\€NÝ•3�u‘:”: ‘> 2 rÑ*Ô*ð 0ð 0ˆØ�QŒxˆØ&¨Ñ-ˆ
�1‰Ø'¨4Ñ/ˆˆõ �d�E *Ñ-Ô-Ð.°eÐ<Ñ<Ô<Ð<r>   c                 óJ  — |                       ¦   «         } |                      ¦   «          t          | j        ¦  «        }| j                             |d¬¦  «        }| j        }||k    r||fS t          |¦  «        t          |¦  «        z
  }|dk    rFdg|z  t          |¦  «        z   }t          j	        |d         ¦  «        }t          |g|z  |z   ¦  «        }|dk     rct          | ¦  «        D ]R}|d         dk    r|dd …         }|dd …         }Œ#|d         dk    r|d d…         }|d d…         }ŒDt          d¦  «        ‚d}	t          t          ||¦  «        ¦  «        D ]œ\  }
\  }}||k    rŒ|dk    rt          d¦  «        ‚t          |d         ¦  «        }t          j        t          j        |¦  «        |¦  «        ||
<   t          |¦  «        D ]$\  }}||
k    rŒt          j        ||¦  «        ||<   Œ%|	|z  }	Œ�t          j        |                     ¦   «         |	¦  «        }||fS )NFrO   r   r	   r}   zshape mismatch in assignment)rg   r¡   r.  r_   r`   rS   re   rA   r7   Ú	zeroslikerY   r^   rc   r¬   rÉ   rì  r  rë  rØ   )rë   r1  r5   rU  rT  Úx_shapeÚlen_diffÚcoord_zerosr:   Ú
tot_expandr¦   ÚnnÚnxÚx_nnzrR  r‰   s                   r<   rN  rN  Ü  s:  € Ø	�Š‰	Œ	€AØ×ÒÑÔÐå�A”H‰~Œ~€HØŒV�]Š]˜5 uˆ]Ñ-Ô-€FØŒg€Gà�GÒÐØ�xÐÐõ �9‰~Œ~¥ G¡¤Ñ,€HØ�!‚|€|à�#˜‘.¥4¨¡=¤=Ñ0ˆÝ”l 8¨A¤;Ñ/Ô/ˆÝ˜+˜¨Ñ1°HÑ<Ñ=Ô=ˆð �!‚|€|Ý˜�yÑ!Ô!ð 	Að 	AˆAØ�qŒz˜QŠˆØ! ! " "œ+�Ø# A B Bœ<��Ø˜” Ò!Ð!Ø! # 2 #œ,�Ø# C R Cœ=��å Ð!?Ñ@Ô@Ð@à€JÝ ¥ Y°Ñ!8Ô!8Ñ9Ô9ð ð ‰ˆ‰8ˆB�Ø�Š8ˆ8ØØ�Š7ˆ7ÝÐ;Ñ<Ô<Ð<Ý�H˜Q”KÑ Ô ˆÝ”i¥¤	¨"¡¤¨uÑ5Ô5ˆ�‰Ý˜xÑ(Ô(ð 	*ð 	*‰EˆAˆrØ�AŠvˆvØÝœ' " b™/œ/ˆH�Q‰KˆKØ�bÑˆ
ˆ
ÝŒW�V—\’\‘^”^ ZÑ0Ô0€FØ�8ÐÐr>   c                 óB  — | j         |k    r't          j        |                      ¦   «         |¦  «        } |dk    rHt	          t          j        dg¦  «        gt          |¦  «        z  ¦  «        }|                      ¦   «         }n|                      ¦   «         }| |         }||fS )Nr¿   r   )	re   r7   rQ  ÚsqueezerY   r8   rA   rØ   rk   )rë   r1  rU  rT  s       r<   rO  rO    s…   € Ø„w�)ÒÐÝŒO˜AŸIšI™KœK¨Ñ3Ô3ˆà�B‚€Ý�"œ( A 3™-œ-˜­3¨y©>¬>Ñ9Ñ:Ô:ˆØ—’‘”ˆˆà—9’9‘;”;ˆØ�8”ˆØ�8ÐÐr>   c                 óÌ  ‡ ‡— t          |t          ¦  «        rf|dk     s|t          ‰ ‰¦  «        k    rt          d¦  «        ‚t	          t          ‰ |z
  ‰ ¦  «        ¦  «        }t	          t          |¦  «        ¦  «        }nÈt          |t          t          z  ¦  «        rœt          |¦  «        dk    rt          d¦  «        ‚|\  }}t          |¦  «        t          |¦  «        k    rt          d¦  «        ‚t          ˆ fd„|D ¦   «         ¦  «        st          ˆfd„|D ¦   «         ¦  «        rt          d¦  «        ‚nt          d	¦  «        ‚ˆ fd
„|D ¦   «         }ˆfd„|D ¦   «         }||fS )Nr	   z.axes integer is out of bounds for input arraysr   z%axes must be a tuple/list of length 2z,axes lists/tuples must be of the same lengthc              3   ó2   •K  — | ]}|‰k    p|‰ k     V — Œd S rN   r¿   )r9   r¾  Úndim_as     €r<   r=   z _process_axes.<locals>.<genexpr>&  ó2   øè è € Ð=Ð=°ˆr�VŠ|Ð+˜r V Gš|Ð=Ð=Ð=Ð=Ð=Ð=r>   c              3   ó2   •K  — | ]}|‰k    p|‰ k     V — Œd S rN   r¿   )r9   r¿  Úndim_bs     €r<   r=   z _process_axes.<locals>.<genexpr>'  r  r>   z/axes indices are out of bounds for input arraysz3axes must be an integer or a tuple/list of integersc                 ó*   •— g | ]}|d k     r|‰z   n|‘ŒS r  r¿   )r9   rž   r  s     €r<   rÄ   z!_process_axes.<locals>.<listcomp>,  ó)   ø€ ÐEÐEÐE°d˜t ašx˜xˆd�V‰mˆm¨TÐEÐEÐEr>   c                 ó*   •— g | ]}|d k     r|‰z   n|‘ŒS r  r¿   )r9   rž   r!  s     €r<   rÄ   z!_process_axes.<locals>.<listcomp>-  r#  r>   )
rX   rœ   r¯   rc   r.  r^   rY   rA   rd   rb   )r  r!  r·   Úaxes_aÚaxes_bs   ``   r<   rÀ  rÀ    s…  øø€ Ý�$�ÑÔð OØ�!Š8ˆ8�t�c &¨&Ñ1Ô1Ò1Ð1ÝÐMÑNÔNÐNÝ•e˜F T™M¨6Ñ2Ô2Ñ3Ô3ˆÝ•e˜D‘k”kÑ"Ô"ˆˆÝ	�D�%¥$™,Ñ	'Ô	'ð 
OÝˆt‰9Œ9˜Š>ˆ>ÝÐDÑEÔEÐEØ‰ˆ�Ýˆv‰;Œ;�#˜f™+œ+Ò%Ð%ÝÐKÑLÔLÐLÝÐ=Ð=Ð=Ð=°fÐ=Ñ=Ô=Ñ=Ô=ð 	PÝÐ=Ð=Ð=Ð=°fÐ=Ñ=Ô=Ñ=Ô=ð	PåÐNÑOÔOÐOð	Põ ÐMÑNÔNÐNàEÐEÐEÐE¸fÐEÑEÔE€FØEÐEÐEÐE¸fÐEÑEÔE€FØ�6ˆ>Ðr>   c                 ó`  ‡ ‡— t          ˆ fd„‰D ¦   «         ¦  «        }t          ˆ fd„‰D ¦   «         ¦  «        }t          ||¦  «        }t          ‰ j        ¦  «        }t          ˆfd„t	          |¦  «        D ¦   «         ¦  «        }|rst          ˆ fd„|D ¦   «         ¦  «        }t          ˆ fd„|D ¦   «         ¦  «        }t          ||¦  «        }	|	|f}
t          j        |¦  «        t          j        |¦  «        f}n|f}
t          j        |¦  «        f}d}t          ‰ j        |
f|¬¦  «        }||fS )Nc              3   ó2   •K  — | ]}‰j         |         V — Œd S rN   r€   ©r9   r¦   r(   s     €r<   r=   z!_convert_to_2d.<locals>.<genexpr>2  s)   øè è € Ð4Ð4¨!˜œ
 1œÐ4Ð4Ð4Ð4Ð4Ð4r>   c              3   ó2   •K  — | ]}‰j         |         V — Œd S rN   rä   r)  s     €r<   r=   z!_convert_to_2d.<locals>.<genexpr>3  s)   øè è € Ð2Ð2¨�s”y ”|Ð2Ð2Ð2Ð2Ð2Ð2r>   c              3   ó$   •K  — | ]
}|‰v¯|V — Œd S rN   r¿   )r9   r¦   rž   s     €r<   r=   z!_convert_to_2d.<locals>.<genexpr>7  s'   øè è € Ð=Ð=˜1¨q¸¨}¨}�Q¨}¨}¨}¨}Ð=Ð=r>   c              3   ó2   •K  — | ]}‰j         |         V — Œd S rN   r€   r)  s     €r<   r=   z!_convert_to_2d.<locals>.<genexpr>9  s)   øè è € Ð@Ð@°! ¤
¨1¤Ð@Ð@Ð@Ð@Ð@Ð@r>   c              3   ó2   •K  — | ]}‰j         |         V — Œd S rN   rä   r)  s     €r<   r=   z!_convert_to_2d.<locals>.<genexpr>:  s)   øè è € Ð>Ð>°˜sœy¨œ|Ð>Ð>Ð>Ð>Ð>Ð>r>   r¿   rä   )	rY   r‹   rA   r_   r^   rÇ   rÈ   r   r`   )r(   rž   Úaxis_coordsÚ
axis_shapeÚ
axis_ravelrj   Únon_axisÚnon_axis_coordsÚnon_axis_shapeÚnon_axis_ravelÚ	coords_2dÚshape_2dÚnew_coos   ``           r<   r¯  r¯  1  sS  øø€ ÝÐ4Ð4Ð4Ð4¨tÐ4Ñ4Ô4Ñ4Ô4€KÝÐ2Ð2Ð2Ð2¨TÐ2Ñ2Ô2Ñ2Ô2€JÝ˜{¨JÑ7Ô7€JåˆsŒz‰?Œ?€DÝÐ=Ð=Ð=Ð=¥ d¡¤Ð=Ñ=Ô=Ñ=Ô=€HØð 	ÝÐ@Ð@Ð@Ð@°xÐ@Ñ@Ô@Ñ@Ô@ˆÝÐ>Ð>Ð>Ð>°XÐ>Ñ>Ô>Ñ>Ô>ˆÝ& ¸ÑGÔGˆØ# ZÐ0ˆ	Ý”I˜nÑ-Ô-­t¬y¸Ñ/DÔ/DÐEˆˆà�Mˆ	Ý”I˜jÑ)Ô)Ð+ˆØˆå˜œ 9Ð-°XÐ>Ñ>Ô>€GØ�NÐ"Ð"r>   r†   c                 ó&  — t          | ¦  «        dk    r| d         S t          | ¦  «        dk    rÍ|\  }}| \  }}|dk    rT|t          d|dz
  ¦  «        z  t          d|dz
  ¦  «        z   }t          |¬¦  «        }t          j        |||¬¦  «        |z   S |dk    rT|t          d|dz
  ¦  «        z  t          d|dz
  ¦  «        z   }t          |¬¦  «        }t          j        |||¬¦  «        |z   S t          d¦  «        ‚t          j        | ||¬	¦  «        S )
z;Like np.ravel_multi_index, but avoids some overflow issues.r	   r   r   r†   r/   r4   ÚFz'order' must be 'C' or 'F'r„   )rA   rH   r   r7   r’  rc   Úravel_multi_index)	r_   re   r…   ÚnrowsÚncolsr{   rx   r0   r;   s	            r<   r‹   r‹   G  s'  € å
ˆ6�{„{�aÒÐØ�aŒyÐå
ˆ6�{„{�aÒÐØ‰ˆˆuØ‰ˆˆSØ�CŠ<ˆ<Ø�c ! U¨Q¡YÑ/Ô/Ñ/µ#°a¸À¹Ñ2CÔ2CÑCˆFÝ'¨vÐ6Ñ6Ô6ˆIÝ”;˜u c°Ð;Ñ;Ô;¸cÑAÐAØ�cŠ\ˆ\Ø�c ! U¨Q¡YÑ/Ô/Ñ/µ#°a¸À¹Ñ2CÔ2CÑCˆFÝ'¨vÐ6Ñ6Ô6ˆIÝ”;˜u c°Ð;Ñ;Ô;¸cÑAÐAåÐ9Ñ:Ô:Ð:ÝÔ ¨°UÐ;Ñ;Ô;Ð;r>   c                 ó,   — t          | t          ¦  «        S )aÒ  Is `x` of coo_matrix type?

    Parameters
    ----------
    x
        object to check for being a coo matrix

    Returns
    -------
    bool
        True if `x` is a coo matrix, False otherwise

    Examples
    --------
    >>> from scipy.sparse import coo_array, coo_matrix, csr_matrix, isspmatrix_coo
    >>> isspmatrix_coo(coo_matrix([[5]]))
    True
    >>> isspmatrix_coo(coo_array([[5]]))
    False
    >>> isspmatrix_coo(csr_matrix([[5]]))
    False
    )rX   r   )rë   s    r<   r   r   \  s   € õ. �a�Ñ$Ô$Ð$r>   c                   ó   — e Zd ZdZdS )r   a  
    A sparse array in COOrdinate format.

    Also known as the 'ijv' or 'triplet' format.

    This can be instantiated in several ways:
        coo_array(D)
            where D is an ndarray

        coo_array(S)
            with another sparse array or matrix S (equivalent to S.tocoo())

        coo_array(shape, [dtype])
            to construct an empty sparse array with shape `shape`
            dtype is optional, defaulting to dtype='d'.

        coo_array((data, coords), [shape])
            to construct from existing data and index arrays:
                1. data[:]       the entries of the sparse array, in any order
                2. coords[i][:]  the axis-i coordinates of the data entries

            Where ``A[coords] = data``, and coords is a tuple of index arrays.
            When shape is not specified, it is inferred from the index arrays.

    Attributes
    ----------
    dtype : dtype
        Data type of the sparse array
    shape : tuple of integers
        Shape of the sparse array
    ndim : int
        Number of dimensions of the sparse array
    nnz
    size
    data
        COO format data array of the sparse array
    coords
        COO format tuple of index arrays
    has_canonical_format : bool
        Whether the matrix has sorted coordinates and no duplicates
    format
    T

    Notes
    -----

    Sparse arrays can be used in arithmetic operations: they support
    addition, subtraction, multiplication, division, and matrix power.

    Advantages of the COO format
        - facilitates fast conversion among sparse formats
        - permits duplicate entries (see example)
        - very fast conversion to and from CSR/CSC formats

    Disadvantages of the COO format
        - does not directly support:
            + arithmetic operations
            + slicing

    Intended Usage
        - COO is a fast format for constructing sparse arrays
        - Once a COO array has been constructed, convert to CSR or
          CSC format for fast arithmetic and matrix vector operations
        - By default when converting to CSR or CSC format, duplicate (i,j)
          entries will be summed together.  This facilitates efficient
          construction of finite element matrices and the like. (see example)

    Canonical format
        - Entries and coordinates sorted by row, then column.
        - There are no duplicate entries (i.e. duplicate (i,j) locations)
        - Data arrays MAY have explicit zeros.

    Examples
    --------

    >>> # Constructing an empty sparse array
    >>> import numpy as np
    >>> from scipy.sparse import coo_array
    >>> coo_array((3, 4), dtype=np.int8).toarray()
    array([[0, 0, 0, 0],
           [0, 0, 0, 0],
           [0, 0, 0, 0]], dtype=int8)

    >>> # Constructing a sparse array using ijv format
    >>> row  = np.array([0, 3, 1, 0])
    >>> col  = np.array([0, 3, 1, 2])
    >>> data = np.array([4, 5, 7, 9])
    >>> coo_array((data, (row, col)), shape=(4, 4)).toarray()
    array([[4, 0, 9, 0],
           [0, 7, 0, 0],
           [0, 0, 0, 0],
           [0, 0, 0, 5]])

    >>> # Constructing a sparse array with duplicate coordinates
    >>> row  = np.array([0, 0, 1, 3, 1, 0, 0])
    >>> col  = np.array([0, 2, 1, 3, 1, 0, 0])
    >>> data = np.array([1, 1, 1, 1, 1, 1, 1])
    >>> coo = coo_array((data, (row, col)), shape=(4, 4))
    >>> # Duplicate coordinates are maintained until implicitly or explicitly summed
    >>> np.max(coo.data)
    1
    >>> coo.toarray()
    array([[3, 0, 1, 0],
           [0, 2, 0, 0],
           [0, 0, 0, 0],
           [0, 0, 0, 1]])

    N)r  r  r  r	  r¿   r>   r<   r   r   w  s"   € € € € € ðkð kð kð kr>   r   c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )r   a.  
    A sparse matrix in COOrdinate format.

    Also known as the 'ijv' or 'triplet' format.

    This can be instantiated in several ways:
        coo_matrix(D)
            where D is a 2-D ndarray

        coo_matrix(S)
            with another sparse array or matrix S (equivalent to S.tocoo())

        coo_matrix((M, N), [dtype])
            to construct an empty matrix with shape (M, N)
            dtype is optional, defaulting to dtype='d'.

        coo_matrix((data, (i, j)), [shape=(M, N)])
            to construct from three arrays:
                1. data[:]   the entries of the matrix, in any order
                2. i[:]      the row indices of the matrix entries
                3. j[:]      the column indices of the matrix entries

            Where ``A[i[k], j[k]] = data[k]``.  When shape is not
            specified, it is inferred from the index arrays

    Attributes
    ----------
    dtype : dtype
        Data type of the matrix
    shape : 2-tuple
        Shape of the matrix
    ndim : int
        Number of dimensions (this is always 2)
    nnz
    size
    data
        COO format data array of the matrix
    row
        COO format row index array of the matrix
    col
        COO format column index array of the matrix
    has_canonical_format : bool
        Whether the matrix has sorted indices and no duplicates
    format
    T

    Notes
    -----

    Sparse matrices can be used in arithmetic operations: they support
    addition, subtraction, multiplication, division, and matrix power.

    Advantages of the COO format
        - facilitates fast conversion among sparse formats
        - permits duplicate entries (see example)
        - very fast conversion to and from CSR/CSC formats

    Disadvantages of the COO format
        - does not directly support:
            + arithmetic operations
            + slicing

    Intended Usage
        - COO is a fast format for constructing sparse matrices
        - Once a COO matrix has been constructed, convert to CSR or
          CSC format for fast arithmetic and matrix vector operations
        - By default when converting to CSR or CSC format, duplicate (i,j)
          entries will be summed together.  This facilitates efficient
          construction of finite element matrices and the like. (see example)

    Canonical format
        - Entries and coordinates sorted by row, then column.
        - There are no duplicate entries (i.e. duplicate (i,j) locations)
        - Data arrays MAY have explicit zeros.

    Examples
    --------

    >>> # Constructing an empty matrix
    >>> import numpy as np
    >>> from scipy.sparse import coo_matrix
    >>> coo_matrix((3, 4), dtype=np.int8).toarray()
    array([[0, 0, 0, 0],
           [0, 0, 0, 0],
           [0, 0, 0, 0]], dtype=int8)

    >>> # Constructing a matrix using ijv format
    >>> row  = np.array([0, 3, 1, 0])
    >>> col  = np.array([0, 3, 1, 2])
    >>> data = np.array([4, 5, 7, 9])
    >>> coo_matrix((data, (row, col)), shape=(4, 4)).toarray()
    array([[4, 0, 9, 0],
           [0, 7, 0, 0],
           [0, 0, 0, 0],
           [0, 0, 0, 5]])

    >>> # Constructing a matrix with duplicate coordinates
    >>> row  = np.array([0, 0, 1, 3, 1, 0, 0])
    >>> col  = np.array([0, 2, 1, 3, 1, 0, 0])
    >>> data = np.array([1, 1, 1, 1, 1, 1, 1])
    >>> coo = coo_matrix((data, (row, col)), shape=(4, 4))
    >>> # Duplicate coordinates are maintained until implicitly or explicitly summed
    >>> np.max(coo.data)
    1
    >>> coo.toarray()
    array([[3, 0, 1, 0],
           [0, 2, 0, 0],
           [0, 0, 0, 0],
           [0, 0, 0, 1]])

    c                 óœ   — d|vr-|                      d¦  «        |                      d¦  «        f|d<   | j                             |¦  «         d S )Nr_   r{   rx   )rM  Ú__dict__Úupdate)rm   Ústates     r<   Ú__setstate__zcoo_matrix.__setstate__W  sQ   € Ø˜5Ð Ð ð  %Ÿyšy¨Ñ/Ô/°·²¸5Ñ1AÔ1AÐBˆE�(‰OØŒ×Ò˜UÑ#Ô#Ð#Ð#Ð#r>   c                 ó    — t          d¦  «        ‚)Nz('coo_matrix' object is not subscriptable©rb   )rm   r0  s     r<   rD  zcoo_matrix.__getitem__^  s   € ÝÐBÑCÔCÐCr>   c                 ó    — t          d¦  «        ‚)Nz4'coo_matrix' object does not support item assignmentrF  )rm   r0  rë   s      r<   r^  zcoo_matrix.__setitem__a  s   € ÝÐNÑOÔOÐOr>   N)r  r  r  r	  rD  rD  r^  r¿   r>   r<   r   r   æ  sV   € € € € € ðnð nð`$ð $ð $ðDð Dð DðPð Pð Pð Pð Pr>   r   )r†   )8r	  Ú__docformat__Ú__all__rÇ   Úwarningsr   Únumpyr7   Ú
_lib._utilr   Ú_matrixr
   Ú_sparsetoolsr   r   r   r   r   r   r   Ú_baser   r   r   r   Ú_datar   r   Ú_sputilsr   r   r   r   r   r   r   r   r    r!   r"   r#   Ú_indexr$   r%   rF   r'   rÞ  rß  rN  rO  rÀ  r¯  r‹   r   r   r   r¿   r>   r<   ú<module>rS     sã  ðØ 8Ð 8à%€à
7Ð
7Ð
7€à €€€Ø Ð Ð Ð Ð Ð à Ð Ð Ð à 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø Ð Ð Ð Ð Ð ð0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð GÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ .Ð .Ð .Ð .Ð .Ð .Ð .Ð .ð+ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð 9Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8à €€€ðK+ð K+ð K+ð K+ð K+�˜mñ K+ô K+ð K+ð\,Fð Fð Fð2=ð =ð =ð2.ð .ð .ðb
ð 
ð 
ðð ð ð.#ð #ð #ð,<ð <ð <ð <ð*%ð %ð %ð6lð lð lð lð l�	˜7ñ lô lð lð^|Pð |Pð |Pð |Pð |P�˜9ñ |Pô |Pð |Pð |Pð |Pr>   