o
    Ö­jêB ã                   @   s²  d Z ddlZddlZddlZddlZddlZddlZddlZddlmZ	 ddl
Zddl
mZmZmZmZmZmZmZmZmZmZmZmZmZ ddlZddlmZmZmZmZmZm Z m!Z! ddl"Z#ddl$m%Z% ddl$m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 ddl8m9Z9 ddl:m;Z;m<Z<m=Z=m>Z>m?Z? dd	l@mAZAmBZBmCZC dd
lDmEZE ddlFmGZG dejHv ZId‡dd„ZJdd„ ZKeLdgƒZMdd„ ZNe!ƒ ZOeO PeG¡ 		dˆdd„ZQdd„ ZRG dd„ dƒZSG dd„ dƒZTG dd„ dƒZUG dd „ d ƒZVG d!d"„ d"ƒZWG d#d$„ d$ƒZXG d%d&„ d&ƒZYejZj[G d'd(„ d(ƒƒZ\G d)d*„ d*ƒZ]G d+d,„ d,ƒZ^G d-d.„ d.ƒZ_ej`d/d0„ ƒZaG d1d2„ d2ƒZbG d3d4„ d4ƒZcG d5d6„ d6ƒZdG d7d8„ d8ƒZeG d9d:„ d:ƒZfG d;d<„ d<ƒZgd‰d>d?„Zh	=	=	=	=dŠd@dA„ZiG dBdC„ dCeiƒ ƒZjej k¡  G dDdE„ dEeVejƒZlel k¡  G dFdG„ dGeiƒ ƒZmem k¡  G dHdI„ dIeVemƒZnen k¡  G dJdK„ dKeidddL�ƒZoG dMdN„ dNeVeoƒZpeo k¡  ep k¡  G dOdP„ dPeiddQ�ƒZqG dRdS„ dSeVeqƒZreq k¡  er k¡  G dTdU„ dUeiddddddV�ƒZsG dWdX„ dXeVesƒZtes k¡  et k¡  G dYdZ„ dZeidddddddd[�ƒZuG d\d]„ d]eVeuƒZveu k¡  ev k¡  G d^d_„ d_eiddddddd`�ƒZwG dadb„ dbeVewƒZxew k¡  ex k¡  dcdd„ ZyG dedf„ dfƒZzG dgdh„ dhezƒZ{G didj„ dje{ƒZ|G dkdl„ dle|ejƒZ}G dmdn„ dne}elƒZ~G dodp„ dpe|emƒZG dqdr„ dreenƒZ€G dsdt„ dte{ewƒZ�G dudv„ dve�exƒZ‚G dwdx„ dxezesƒZƒG dydz„ dzeƒetƒZ„d{d|„ Z…G d}d~„ d~ƒZ†G dd€„ d€ƒZ‡ejZj[ejZjˆG d�d‚„ d‚e‡ƒƒƒZ‰ejZj[G dƒd„„ d„e‡ƒƒZŠd…d†„ Z‹dS )‹zò Test functions for sparse matrices. Each class in the "Matrix class
based tests" section become subclasses of the classes in the "Generic
tests" section. This is done by the functions in the "Tailored base
class for generic tests" section.

é    N)Úraises)ÚarangeÚzerosÚarrayÚdotÚasarrayÚvstackÚndarrayÚ	transposeÚdiagÚkronÚinfÚ	conjugateÚint8)Úassert_equalÚassert_array_equalÚassert_array_almost_equalÚassert_almost_equalÚassert_Úassert_allcloseÚsuppress_warnings)Ú
csc_matrixÚ
csr_matrixÚ
dok_matrixÚ
coo_matrixÚ
lil_matrixÚ
dia_matrixÚ
bsr_matrixÚ	csc_arrayÚ	csr_arrayÚ	dok_arrayÚ	coo_arrayÚ	lil_arrayÚ	dia_arrayÚ	bsr_arrayÚeyeÚissparseÚSparseEfficiencyWarningÚsparray)Ú_formats)Úsupported_dtypesÚisscalarlikeÚget_index_dtypeÚasmatrixÚmatrix)ÚspluÚexpmÚinv)Ú	decorator)ÚComplexWarningzgoogle.colabc                 C   s.   |d ur|n| ›d|›�}t | |v |d� d S )Nz not found in )Úmsg)r   )ÚmemberÚ
collectionr4   Úmessage© r8   úY/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/sparse/tests/test_base.pyÚ	assert_in3   s   r:   c                 K   s&   t | j|jkƒ t| |fi |¤Ž d S ©N)r   Údtyper   )ÚxÚyÚkwargsr8   r8   r9   Úassert_array_equal_dtype8   s   r@   Údokc                 C   s<   dd„ }|| ƒD ]}||ƒD ]}t  ||¡r  dS qqdS )Nc                 S   s4   g }| j  ¡ D ]}t|tjtjB ƒr| |¡ q|S r;   )Ú__dict__ÚvaluesÚ
isinstanceÚnpr	   ÚgenericÚappend)r=   ÚarraysÚar8   r8   r9   Ú_underlying_arraysB   s   
€z3sparse_may_share_memory.<locals>._underlying_arraysTF)rE   Úmay_share_memory)ÚAÚBrJ   rI   Úbr8   r8   r9   Úsparse_may_share_memory?   s   
ÿÿrO   Fc                    s¢   ˆdu r
t  d¡‰nt  ˆ¡‰|rddd„‰n$ˆdur#d‡fdd„	‰n|r4t jjdd	�‰ d‡ fd
d„	‰nd‡fdd„	‰ˆdurE‡fdd„‰t‡‡‡fdd„ƒ}|S )z‚
    Monkeypatch the maxval threshold at which scipy.sparse switches to
    64-bit index arrays, or make it (pseudo-)random.

    Né
   r8   Fc                 S   sD   t | ||ƒ}tt |¡jt tj¡jƒ t|tjkp|tjkƒ |S r;   )r,   r   rE   ÚiinfoÚmaxÚint32r   Úintc)rH   ÚmaxvalÚcheck_contentsÚtpr8   r8   r9   Únew_get_index_dtypef   s   z4with_64bit_maxval_limit.<locals>.new_get_index_dtypec                    s   ˆ S r;   r8   ©rH   rU   rV   ©Úfixed_dtyper8   r9   rX   l   ó   éÒ  )Úseedc                    s   t jt jfˆ  d¡ S )Né   )rE   rS   Úint64ÚrandintrY   )Úcounterr8   r9   rX   q   s   c                    sŠ   t j}|d ur|ˆ krt j}| D ]2}t  |¡}|jt jkrB|r?|jdkr%qt  |jt j¡r?| ¡ }| 	¡ }|ˆ  kr?|ˆ kr?qt j}q|S ©Nr   )
rE   rS   r`   r   r<   ÚsizeÚ
issubdtypeÚintegerrR   Úmin)rH   rU   rV   r<   ÚarrÚminval©Úmaxval_limitr8   r9   rX   t   s$   

€c                    s    |   ¡ ˆ kr
tdƒ‚|  tj¡S )Nzdowncast limited)rR   ÚAssertionErrorÚastyperE   Úintp)rh   )Údowncast_maxvalr8   r9   Únew_downcast_intp_indexŠ   s   z8with_64bit_maxval_limit.<locals>.new_downcast_intp_indexc                    sú   g }t jjt jjt jjt jjt jjt jjt jjt jj	t jj
t jjg
}zG|D ]*}| |dt|dd ƒf¡ t|dˆƒ ˆ d urO| |dt|dd ƒf¡ t|dˆƒ q%| |i |¤ŽW |D ]\}}}|d urht|||ƒ qYS |D ]\}}}|d ur{t|||ƒ qlw )Nr,   Údowncast_intp_index)ÚscipyÚsparseÚ_bsrÚ_cooÚ_cscÚ_csrÚ_diaÚ_dokÚ_lilÚ_sputilsÚ_compressedÚ
_constructrG   ÚgetattrÚsetattr)ÚfuncrI   ÚkwÚbackupÚmodulesÚmodÚnameÚoldfunc)ro   rp   rX   r8   r9   Údeco�   s8   ý
ÿ
ÿ€€þ€þz%with_64bit_maxval_limit.<locals>.deco)r8   NF)rE   r`   ÚrandomÚRandomStater2   )rk   rˆ   r[   ro   Úassert_32bitr‡   r8   )rb   ro   r[   rk   rp   rX   r9   Úwith_64bit_maxval_limitW   s    
r‹   c                 C   s    t | tjƒs
t| ƒr| S |  ¡ S r;   )rD   rE   r	   r+   Útoarray)rI   r8   r8   r9   rŒ   ¨   s   rŒ   c                   @   óL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚBinopTesterc                 C   ó   dS ©Númatrix on the rightr8   ©ÚselfÚmatr8   r8   r9   Ú__add__±   r\   zBinopTester.__add__c                 C   r�   r�   r8   r’   r8   r8   r9   Ú__mul__´   r\   zBinopTester.__mul__c                 C   r�   r�   r8   r’   r8   r8   r9   Ú__sub__·   r\   zBinopTester.__sub__c                 C   r�   ©Númatrix on the leftr8   r’   r8   r8   r9   Ú__radd__º   r\   zBinopTester.__radd__c                 C   r�   r˜   r8   r’   r8   r8   r9   Ú__rmul__½   r\   zBinopTester.__rmul__c                 C   r�   r˜   r8   r’   r8   r8   r9   Ú__rsub__À   r\   zBinopTester.__rsub__c                 C   r�   r�   r8   r’   r8   r8   r9   Ú
__matmul__Ã   r\   zBinopTester.__matmul__c                 C   r�   r˜   r8   r’   r8   r8   r9   Ú__rmatmul__Æ   r\   zBinopTester.__rmatmul__N)Ú__name__Ú
__module__Ú__qualname__r•   r–   r—   rš   r›   rœ   r�   rž   r8   r8   r8   r9   rŽ   ®   s    rŽ   c                   @   sd   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚBinopTester_with_shapec                 C   ó
   || _ d S r;   ©Ú_shape)r“   Úshaper8   r8   r9   Ú__init__Ì   ó   
zBinopTester_with_shape.__init__c                 C   s   | j S r;   r¤   ©r“   r8   r8   r9   r¦   Ï   s   zBinopTester_with_shape.shapec                 C   s
   t | jƒS r;   )Úlenr¥   r©   r8   r8   r9   ÚndimÒ   r¨   zBinopTester_with_shape.ndimc                 C   r�   r�   r8   r’   r8   r8   r9   r•   Õ   r\   zBinopTester_with_shape.__add__c                 C   r�   r�   r8   r’   r8   r8   r9   r–   Ø   r\   zBinopTester_with_shape.__mul__c                 C   r�   r�   r8   r’   r8   r8   r9   r—   Û   r\   zBinopTester_with_shape.__sub__c                 C   r�   r˜   r8   r’   r8   r8   r9   rš   Þ   r\   zBinopTester_with_shape.__radd__c                 C   r�   r˜   r8   r’   r8   r8   r9   r›   á   r\   zBinopTester_with_shape.__rmul__c                 C   r�   r˜   r8   r’   r8   r8   r9   rœ   ä   r\   zBinopTester_with_shape.__rsub__c                 C   r�   r�   r8   r’   r8   r8   r9   r�   ç   r\   z!BinopTester_with_shape.__matmul__c                 C   r�   r˜   r8   r’   r8   r8   r9   rž   ê   r\   z"BinopTester_with_shape.__rmatmul__N)rŸ   r    r¡   r§   r¦   r«   r•   r–   r—   rš   r›   rœ   r�   rž   r8   r8   r8   r9   r¢   É   s    r¢   c                   @   ó<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚComparisonTesterc                 C   r�   )NÚeqr8   ©r“   Úotherr8   r8   r9   Ú__eq__ï   r\   zComparisonTester.__eq__c                 C   r�   )NÚner8   r¯   r8   r8   r9   Ú__ne__ò   r\   zComparisonTester.__ne__c                 C   r�   )NÚltr8   r¯   r8   r8   r9   Ú__lt__õ   r\   zComparisonTester.__lt__c                 C   r�   )NÚler8   r¯   r8   r8   r9   Ú__le__ø   r\   zComparisonTester.__le__c                 C   r�   )NÚgtr8   r¯   r8   r8   r9   Ú__gt__û   r\   zComparisonTester.__gt__c                 C   r�   )NÚger8   r¯   r8   r8   r9   Ú__ge__þ   r\   zComparisonTester.__ge__N)	rŸ   r    r¡   r±   r³   rµ   r·   r¹   r»   r8   r8   r8   r9   r­   í   s    r­   c                   @   sL   e Zd ZdZeZeZeZ	e
ZeZeZeZeeƒZdd„ Zdd„ Zdd„ ZdS )	Ú_MatrixMixinz8mixin to easily allow tests of both sparray and spmatrixc                 C   sP   t | j d¡ ¡ | jdgd d …f ƒ t | j d¡ ¡ | jdgd d …f ƒ d S ©Né   éÿÿÿÿ)r   ÚdatspÚgetrowrŒ   Údatr©   r8   r8   r9   Útest_getrow  ó   &*z_MatrixMixin.test_getrowc                 C   sP   t | j d¡ ¡ | jd d …dgf ƒ t | j d¡ ¡ | jd d …dgf ƒ d S r½   )r   rÀ   ÚgetcolrŒ   rÂ   r©   r8   r8   r9   Útest_getcol  rÄ   z_MatrixMixin.test_getcolc                 C   sš   |   tddd� dd¡¡}t| ¡ jt d¡ƒ t| ¡ j|jƒ t| d¡ ¡ jt d¡ƒ t| d	¡ ¡ jt d	¡ƒ | ¡ }| ¡ }t	||u ƒ d S )
Né   rS   ©r<   r_   é   Úfloat64Úint16Úfloat32Ú
complex128)
Ú	spcreatorr   Úreshaper   Úasfptyper<   rE   Úformatrm   r   )r“   rL   rM   ÚCr8   r8   r9   Útest_asfptype  s   z_MatrixMixin.test_asfptypeN)rŸ   r    r¡   Ú__doc__r   Úbsr_containerr   Úcoo_containerr   Úcsc_containerr   Úcsr_containerr   Údia_containerr   Údok_containerr   Úlil_containerÚstaticmethodr-   ÚasdenserÃ   rÆ   rÓ   r8   r8   r8   r9   r¼     s    r¼   c                   @   s  e Zd ZdZeZeZeZ	e
ZeZeZeZeZeZedd„ ƒZdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z dd„ Z!dd„ Z"dd„ Z#dd„ Z$dd„ Z%d d!„ Z&d"d#„ Z'd$d%„ Z(d&d'„ Z)d(d)„ Z*d*d+„ Z+d,d-„ Z,d.d/„ Z-d0d1„ Z.d2d3„ Z/e0j1j2d4d5„ ƒZ3d6d7„ Z4d8d9„ Z5d:d;„ Z6d<d=„ Z7d>d?„ Z8d@dA„ Z9dBdC„ Z:dDdE„ Z;dFdG„ Z<dHdI„ Z=dJdK„ Z>dLdM„ Z?dNdO„ Z@dPdQ„ ZAdRdS„ ZBeCdTdU„ ƒZDeCdVdW„ ƒZEeCdXdY„ ƒZFeCdZd[„ ƒZGd\d]„ ZHd^d_„ ZIeCd`da„ ƒZJeCdbdc„ ƒZKddde„ ZLdfdg„ ZMdhdi„ ZNdjdk„ ZOdldm„ ZPdndo„ ZQdpdq„ ZRdrds„ ZSdtdu„ ZTdvdw„ ZUdxdy„ ZVdzd{„ ZWd|d}„ ZXd~d„ ZYd€d�„ ZZd‚dƒ„ Z[d„d…„ Z\d†d‡„ Z]dˆd‰„ Z^dŠd‹„ Z_dŒd�„ Z`dŽd�„ Zad�d‘„ Zbd’d“„ Zcd”d•„ Zdd–d—„ Zed˜d™„ Zfdšd›„ Zgdœd�„ ZhdždŸ„ Zid d¡„ Zjd¢d£„ Zkd¤d¥„ Zld¦d§„ Zmd¨d©„ Zndªd«„ Zod¬d­„ Zpd®d¯„ Zqd°d±„ Zrd²S )³Ú_TestCommonz6test common functionality shared by all sparse formatsc                 C   sÂ   t g d¢g d¢g d¢gdƒ| _|  | j¡| _ttƒ | j¡| _i | _	i | _
| jD ]}| j |¡| j	|< |  | j |¡¡| j
|< q(t| j| j	tj ƒ t| j ¡ | j
tj  ¡ ƒ t| jtƒ| _d S )N)r¾   r   r   r_   )rÉ   r   r¾   r   )r   r_   r   r   Úd)r   rÂ   rÎ   rÀ   Úsetr*   ÚunionÚmath_dtypesÚchecked_dtypesÚ
dat_dtypesÚdatsp_dtypesrm   r   rE   rÊ   rŒ   rD   r(   Úis_array_test)Úclsr<   r8   r8   r9   Ú
init_class6  s   

ÿz_TestCommon.init_classc                    s8   ‡ fdd„}t ˆ tƒrt d¡ ˆ jD ]}||ƒ qd S )Nc                    s@   ˆ j |  }ttt|ƒ tˆ  dgg¡ƒ tˆ  dgg¡ ƒ d S )Nr¾   r   )rå   Úassert_raisesÚ
ValueErrorÚboolr   rÎ   )r<   rÀ   r©   r8   r9   ÚcheckO  s   
z$_TestCommon.test_bool.<locals>.checkz%Cannot create a rank <= 2 DOK matrix.)rD   ÚTestDOKÚpytestÚskiprã   ©r“   rì   r<   r8   r©   r9   Ú	test_boolN  s   



ÿz_TestCommon.test_boolc                 C   sH   t ddggƒ}|  |¡}tdƒD ]
}|| }|| }qt|| ¡ ƒ d S )NTFrP   )r   rÎ   Úranger   rŒ   )r“   rÂ   rÀ   Ú_r8   r8   r9   Útest_bool_rollover[  s   

z_TestCommon.test_bool_rolloverc                    óR   t ƒ }| t¡ |t‡ fdd„ƒƒ}ˆ jjdvrt d¡ ˆ jD ]}||ƒ q d S )Nc           	         s(  ˆ j |  }ˆ j|  }| ¡ }d|d d …df< ˆ  |¡}ˆ  |¡}ˆ  |¡}ˆ  |¡}ˆ  |¡}t||k||k 	¡ ƒ t||k||k 	¡ ƒ t||k||k 	¡ ƒ t||k||k 	¡ ƒ t||k||k 	¡ ƒ t||k||kƒ t|dk|dk 	¡ ƒ t|dk|dk 	¡ ƒ t|t
jk|t
jk 	¡ ƒ d S ©Nr   r¾   )rä   rå   ÚcopyrÎ   rÕ   rØ   r×   rÛ   r@   rŒ   rE   Únan)	r<   rÂ   rÀ   Údat2Údatsp2ÚdatbsrÚdatcsrÚdatcscÚdatlilr©   r8   r9   rì   j  s(   







ÿz"_TestCommon.test_eq.<locals>.check©ÚbsrÚcscÚcsrú8Bool comparisons only implemented for BSR, CSC, and CSR.©	r   Úfilterr'   Úsup_complexrÀ   rÑ   rî   rï   rã   ©r“   Úsuprì   r<   r8   r©   r9   Útest_eqf  s   



ÿz_TestCommon.test_eqc                    rõ   )Nc           	         sT  ˆ j |  }ˆ j|  }| ¡ }d|d d …df< ˆ  |¡}ˆ  |¡}ˆ  |¡}ˆ  |¡}ˆ  |¡}t||k||k 	¡ ƒ t||k||k 	¡ ƒ t||k||k 	¡ ƒ t||k||k 	¡ ƒ t||k||k 	¡ ƒ t||k||kƒ t|dk|dk 	¡ ƒ t|dk|dk 	¡ ƒ td|kd|k 	¡ ƒ td|kd|k 	¡ ƒ t|t
jk|t
jk 	¡ ƒ d S rö   )rä   rå   r÷   rÎ   rÕ   r×   rØ   rÛ   r@   rŒ   rE   rø   )	r<   rÂ   rÀ   rù   rú   rû   rý   rü   rþ   r©   r8   r9   rì   �  s,   







ÿz"_TestCommon.test_ne.<locals>.checkrÿ   r  r  r  r8   r©   r9   Útest_ne‹  s   



ÿz_TestCommon.test_nec                    rõ   )Nc                    sT  ˆ j |  }ˆ j|  }| ¡ }d|d d …df< ˆ  |¡}| t¡}d|d d …df< ˆ  |¡}ˆ  |¡}ˆ  |¡}ˆ  |¡}	ˆ  	|¡}
t
||k ||k  ¡ ƒ t
||k ||k  ¡ ƒ t
||k ||k  ¡ ƒ t
||k ||k  ¡ ƒ t
||k |	|k  ¡ ƒ t
||k |
|k  ¡ ƒ t
||k ||k  ¡ ƒ t
||k ||k  ¡ ƒ t
||k ||	k  ¡ ƒ t
||k ||
k  ¡ ƒ t
||k ||k ƒ t
||k ||k ƒ dD ]}t |¡}t
||k  ¡ ||k ƒ t
||k  ¡ ||k ƒ qÃtjdd�� t
|tjk  ¡ |tjk ƒ W d   ƒ n1 sÿw   Y  ˆ j |  }ˆ j|  }| ¡ }d|d d …df< ˆ  |¡}t
||k ||k ƒ d S ©Nr   ù      ð?      ð?)r_   r¾   r   r¿   éþÿÿÿÚignore©Úinvalid©rä   rå   r÷   rÎ   rm   ÚcomplexrÕ   r×   rØ   rÛ   r@   rŒ   rE   r`   Úerrstaterø   ©r<   rÂ   rÀ   rù   rú   Ú
datcomplexÚdatspcomplexrû   rý   rü   rþ   Úvalr©   r8   r9   rì   ¶  sR   









ÿ
ÿÿ


z"_TestCommon.test_lt.<locals>.checkrÿ   r  r  r  r8   r©   r9   Útest_lt²  s   
4


ÿz_TestCommon.test_ltc                    rõ   )Nc                    sT  ˆ j |  }ˆ j|  }| ¡ }d|d d …df< ˆ  |¡}| t¡}d|d d …df< ˆ  |¡}ˆ  |¡}ˆ  |¡}ˆ  |¡}	ˆ  	|¡}
t
||k||k ¡ ƒ t
||k||k ¡ ƒ t
||k||k ¡ ƒ t
||k||k ¡ ƒ t
||k|	|k ¡ ƒ t
||k|
|k ¡ ƒ t
||k||k ¡ ƒ t
||k||k ¡ ƒ t
||k||	k ¡ ƒ t
||k||
k ¡ ƒ t
||k||kƒ t
||k||kƒ dD ]}t |¡}t
||k ¡ ||kƒ t
||k ¡ ||kƒ qÃtjdd�� t
|tjk ¡ |tjkƒ W d   ƒ n1 sÿw   Y  ˆ j |  }ˆ j|  }| ¡ }d|d d …df< ˆ  |¡}t
||k||kƒ d S r  r  r  r©   r8   r9   rì   õ  sR   









ÿ
ÿÿ


z"_TestCommon.test_gt.<locals>.checkrÿ   r  r  r  r8   r©   r9   Útest_gtñ  s   
3


ÿz_TestCommon.test_gtc                    rõ   )Nc                    s  ˆ j |  }ˆ j|  }| ¡ }d|d d …df< ˆ  |¡}| t¡}d|d d …df< ˆ  |¡}ˆ  |¡}ˆ  |¡}ˆ  |¡}	ˆ  	|¡}
t
||k||k ¡ ƒ t
||k||k ¡ ƒ t
||k ¡ ||kƒ t
||k ¡ ||kƒ t
|	|k ¡ ||kƒ t
|
|k ¡ ||kƒ t
||k ¡ ||kƒ t
||k ¡ ||kƒ t
||	k ¡ ||kƒ t
||
k ¡ ||kƒ t
||k||kƒ t
||k||kƒ dD ]}t |¡}t
||k ¡ ||kƒ t
||k ¡ ||kƒ qÃˆ j |  }ˆ j|  }| ¡ }d|d d …df< ˆ  |¡}t
||k||kƒ d S ©Nr   r  )r_   r¾   r¿   r  ©rä   rå   r÷   rÎ   rm   r  rÕ   r×   rØ   rÛ   r@   rŒ   rE   r`   r  r©   r8   r9   rì   3  óH   









ÿ



z"_TestCommon.test_le.<locals>.checkrÿ   r  r  r  r8   r©   r9   Útest_le/  ó   
/


ÿz_TestCommon.test_lec                    rõ   )Nc                    s  ˆ j |  }ˆ j|  }| ¡ }d|d d …df< ˆ  |¡}| t¡}d|d d …df< ˆ  |¡}ˆ  |¡}ˆ  |¡}ˆ  |¡}	ˆ  	|¡}
t
||k||k ¡ ƒ t
||k||k ¡ ƒ t
||k ¡ ||kƒ t
||k ¡ ||kƒ t
|	|k ¡ ||kƒ t
|
|k ¡ ||kƒ t
||k ¡ ||kƒ t
||k ¡ ||kƒ t
||	k ¡ ||kƒ t
||
k ¡ ||kƒ t
||k||kƒ t
||k||kƒ dD ]}t |¡}t
||k ¡ ||kƒ t
||k ¡ ||kƒ qÃˆ j |  }ˆ j|  }| ¡ }d|d d …df< ˆ  |¡}t
||k||kƒ d S r  r  r  r©   r8   r9   rì   m  r  z"_TestCommon.test_ge.<locals>.checkrÿ   r  r  r  r8   r©   r9   Útest_gei  r  z_TestCommon.test_gec                 C   sr   t |  d¡ ¡ tdƒƒ t |  d¡jdƒ t |  d¡ ¡ dƒ | jjdv r7t |  d¡jdd�tg d¢ƒƒ d S d S )N©rÉ   rÉ   r   ©Úcoor  r  Úlil©Úaxis©r   r   r   )	r   rÎ   rŒ   r   ÚnnzÚcount_nonzerorÀ   rÑ   r   r©   r8   r8   r9   Ú
test_empty£  s   $ÿz_TestCommon.test_emptyc                 C   s¨   | j jdv }|rg d¢nd g}| j | j jfD ]}|D ]}tj| ¡ |d�}t|j|d�|ƒ qq|sRttdd�� | j jdd� W d   ƒ d S 1 sKw   Y  d S d S )Nr!  )Nr   r¾   r¿   r  r$  znot implemented .* format©Úmatchr   )	rÀ   rÑ   ÚTrE   r(  rŒ   r   ré   ÚNotImplementedError)r“   Úaxis_supportÚaxesrL   ÚaxÚexpectedr8   r8   r9   Útest_count_nonzero«  s   þ"ÿÿz_TestCommon.test_count_nonzeroc                 C   s.   t t| jdƒ t t| jdƒ t t| jdƒ d S )N©r¿   rÉ   ©rÉ   r¿   ©r¿   r¿   )ré   rê   rÎ   r©   r8   r8   r9   Útest_invalid_shapes¸  s   z_TestCommon.test_invalid_shapesc                 C   sœ   |   g d¢g d¢g d¢g¡}|jdkrdn|jdkrdnd}t|j \}}| jr*d	nd
}d|› d|› d|j› d|j› d|› d|j› d�}t|ƒ|ksLJ ‚d S )N©r¾   r   r   r&  ©r   r   r  Údiaú(1 diagonals) r   ú(blocksize=1x1) Ú r   r.   ú<ú sparse ú of dtype 'ú'
	with ú stored elements ú
and shape ú>)rÎ   rÑ   r)   ræ   r<   r'  r¦   Úrepr©r“   rÀ   Úextraró   ÚfmtÚ
sparse_clsr1  r8   r8   r9   Ú	test_repr½  s    ýÿÿÿÿz_TestCommon.test_reprc                 C   s$  |   t d¡ dd¡¡}|jdksJ ‚tt|ƒ d¡ƒdks J ‚t d¡ dd¡}|   |¡}|jdkr5d	n|j	}| j |d
d�}tt|ƒ d¡ƒ|d ksNJ ‚tt|ƒ d¡ƒdks[J ‚| j |ddddd�}| j |ddddd�}t
jtdd�� |   |dddd¡ W d   ƒ d S 1 s‹w   Y  d S )NéK   é   é   é2   Ú
é6   rÉ   r9  é   rÇ   )ÚmaxprintrP   )rK  rÉ   ÚiFé   )r¦   r<   r÷   rQ  z'positional argument|unpack non-iterabler*  )rÎ   rE   r   rÏ   rQ  rª   ÚstrÚsplitrÑ   r'  rî   r   Ú	TypeError)r“   rÀ   rÂ   Ú	nnz_smallÚ	datsp_mp6r8   r8   r9   Útest_str_maxprintÌ  s   
"ÿz_TestCommon.test_str_maxprintc                 C   sª   |   g d¢g d¢g d¢g¡}|jdkrd S |jdkrdn|jdkr#dnd	}t|j \}}| jr1d
nd}d|› d|› d|j› d|j› d|› d|j› d�}t|ƒ|ksSJ ‚d S )Nr7  r&  r8  r_   r9  r:  r   r;  r<  r   r.   r=  r>  r?  r@  rA  rB  z(>
  Coords	Values
  (0, 0)	1
  (2, 2)	-2)rÎ   r'  rÑ   r)   ræ   r<   r¦   rT  rE  r8   r8   r9   Útest_strà  s$   
ýÿÿÿÿz_TestCommon.test_strc           
      C   sÈ   d}t  d¡t  d¡t  d¡t  d¡t  d¡fD ]I}| j||d�}|| }d| }|| ¡  }|| ¡  }|| ¡  }||||||fD ]}	t|	 ¡ | ¡ | ¡  ƒ t|	j|ƒ t|	 ¡ j|ƒ qCqd S )	N©rK  rK  rS   rÌ   rÊ   Ú	complex64rÍ   rÈ   r_   )rE   r<   rÎ   ÚtocscÚtocsrÚtocoor   rŒ   )
r“   r¦   ÚmytyperI   rN   Úcrß   ÚeÚfÚmr8   r8   r9   Útest_empty_arithmeticô  s"   þü÷z!_TestCommon.test_empty_arithmeticc                 C   sB   t g d¢g d¢g d¢g d¢gdƒ}tt|ƒt|  |¡ƒ ¡ ƒ d S )N©r¿   r   é   ©r   éûÿÿÿr   ©r¾   éüÿÿÿr   r&  rß   )r   r   ÚabsrÎ   rŒ   ©r“   rL   r8   r8   r9   Útest_abs  s   " z_TestCommon.test_absc                 C   sD   d}t ddgddggdƒ}ttj||d�t|  |¡|d� ¡ ƒ d S )	Nr¾   gš™™™™™õ¿gìQ¸…ëá?g     @1@gìQ¸…ëÀrß   )Údecimals)Úndigits)r   r   rE   ÚaroundÚroundrÎ   rŒ   )r“   ÚdecimalrL   r8   r8   r9   Ú
test_round
  s
   ÿz_TestCommon.test_roundc                 C   sV   t g d¢g d¢g d¢gdƒ}tt |d¡|  |¡ d¡ ¡ ƒ tt|  |¡j|ƒ d S )N)rk  éýÿÿÿr  )r¿   r   r¾   ©r_   rÉ   rS  rß   r_   )r   r   rE   ÚpowerrÎ   rŒ   ré   r-  rm  r8   r8   r9   Útest_elementwise_power  s   "z"_TestCommon.test_elementwise_powerc                 C   sd   t g d¢g d¢g d¢g d¢gdƒ}t| |  |¡  ¡ ƒ t g d¢g d¢gƒ}tt|  |¡jƒ d S )Nrf  rh  rj  r&  rß   )TFF)FFT)r   r   rÎ   rŒ   ré   r-  Ú__neg__rm  r8   r8   r9   Útest_neg  s   "z_TestCommon.test_negc                 C   ó.   t ddggƒ}|  |¡}t|j ¡ |jƒ d S ©Nù      ð?      @y       @      À)r   rÎ   r   ÚrealrŒ   ©r“   ÚDrL   r8   r8   r9   Ú	test_real  ó   
z_TestCommon.test_realc                 C   r{  r|  )r   rÎ   r   ÚimagrŒ   r  r8   r8   r9   Ú	test_imag$  r‚  z_TestCommon.test_imagc                 C   s   g }|  g d¢g¡ |  dgdgdgg¡ |  ddgddgddgg¡ |  g d¢g d¢g d¢g¡ |  ddgddgg¡ |  t|d ddggƒ¡ |  t|d dgdggƒ¡ |  t|d ddgdd	ggƒ¡ |  t|d ddgdd	ggƒ¡ |  t|d ddgdd	ggƒ¡ |  t|d g d
¢gƒ¡ |D ]B}t|ƒj\}}|  |¡}t| d |d ƒD ]}t|j|d�t||d�ƒ q®t|jdd�t|dd�ƒ t|jdd�t|dd�ƒ q–t|  d¡ ¡ t	 
d¡ƒ t|  d¡ ¡ t	 d¡ƒ t|  d¡ ¡ t	 d¡ƒ t|  d¡ d¡t	 d¡ƒ d S )N©r¾   r   r_   r¾   r   r_   rÉ   ©r   r   r¾   )r   r   r_   ©r   rÉ   r   rS  ©r¾   r_   rÉ   rS  ©ÚkrP   i�ÿÿÿ)é(   i?  r‹  ©r   r   )rL  r   ©r   rK  )rG   r   r   r¦   rÎ   rò   r   Údiagonalr   rE   r   Úempty)r“   Úmatsrd  ÚrowsÚcolsÚ
sparse_matrŠ  r8   r8   r9   Útest_diagonal)  s.      
 z_TestCommon.test_diagonalc                 C   sž   t  g d¢g d¢g d¢g¡}|  |¡}tddƒD ]}t|j|d�|j|d�ƒ qt  g d¢g d¢g¡}|  |¡}tddƒD ]}t|j|d�|j|d�ƒ q=d S )N©r¾   r_   rÉ   ©rS  rK  rÇ   )é   é   é	   r  rÉ   )Úoffsetr¿   )rE   r   rÎ   rò   r   Útrace)r“   rL   rM   rŠ  r8   r8   r9   Ú
test_traceJ  s   

ÿz_TestCommon.test_tracec                 C   sÂ  |   g d¢g d¢g d¢g d¢g¡}dD ]}dD ]}t|j||d� ¡ | ¡ j||d�ƒ qq|   g d¢g d	¢g d
¢g¡}| d¡}g d¢g d¢g}t| ¡ |ƒ | d¡}t| ¡ |ƒ | d¡}t| ¡ |ƒ tt|jdƒ | dd¡}t| ¡ |ƒ tt|jdddd� | d¡}t||u ƒ |jddd�}t||uƒ t|jdƒ | j	rÁtt
dd�� d|_W d   ƒ n1 s»w   Y  n
d|_t| ¡ |ƒ tt|j|jfƒ tt|jd|jdfƒ d S )N)r¾   r   r—  r&  r‡  )r   r   rK  )rÒ   ÚF))é   r¾   )r¾   rž  ©Úorder©r   rP   r   r   ©r   r   r   r   ©r   é   é   r‹  ©r_   rÇ   )r   rP   r   r   r   r   )r   r   r   r¤  r¥  r‹  ©r_   r¿   )r¿   rÇ   r5  r_   rÇ   r¾   )Ú
not_an_arg©rÉ   rS  T©r÷   zhas no setter|n't set attributer*  )rÎ   r   rÏ   rŒ   ré   rê   rV  r   r¦   ræ   ÚAttributeErrorrd   )r“   r=   r   Úsr>   Údesiredr8   r8   r9   Útest_reshapeW  sB   "ÿÿ



ÿ€z_TestCommon.test_reshapec                    sÌ   ‡ fdd„‰ ‡ fdd„}t j d¡ g d¢}t jt jfD ]G}|D ]B\}}t  | d |d ¡}|D ]0}t j||f|d�}| j||f|d�}	|||	|ƒ t jj|t	t
|ƒd	ƒd
�D ]}
|||	|
ƒ qXq1q qd S )Nc                    sœ   t  |¡}|dkr>t| jd | jd | ƒ}|jdkr(t|t|ƒƒ}|d |… }t  d|¡}t  ||| ¡}|| ||f< d S |dk rLˆ | j|| ƒ d S d S rö   )rE   r   rg   r¦   r«   rª   r   r,  )rI   ÚvrŠ  ÚnrR  Új©Údense_setdiagr8   r9   r³  ˆ  s   

ÿz=_TestCommon.test_setdiag_comprehensive.<locals>.dense_setdiagc              	      s  dt t | |¡ƒddfD ]u}|dk rtj tddƒ¡}n	tjjdd|d�}ˆ | ||ƒ tƒ �}| t	d¡ | 
||¡ W d   ƒ n1 sEw   Y  t | |¡}t |¡jdkr`t||d	d
� ntt |ƒt |ƒƒ}t|d |… |d |… d	d
� t| ¡ | d	d
� qd S )Nr¿   r_   r¥  r   r¾   r¤  ©rd   zChanging the sparsity structuz	{msg} {r}©Úerr_msg)rª   rE   r   rˆ   Úchoicerò   ra   r   r  r'   Úsetdiagr   r«   r   rg   rŒ   )rI   rN   rŠ  Úrr¯  r  rß   r°  r²  r8   r9   Úcheck_setdiag•  s    þíz=_TestCommon.test_setdiag_comprehensive.<locals>.check_setdiagr]   )r�  ©rK  r   ©r¾   rK  ©rK  r¾   r[  r¾   rÈ   rK  r´  )rE   rˆ   r^   r   rÊ   r   r   rÎ   r·  rg   rª   )r“   rº  Úshapesr<   rd  r°  ÚksrŠ  rI   rN   Úk2r8   r²  r9   Útest_setdiag_comprehensive†  s"   ÿùþÿz&_TestCommon.test_setdiag_comprehensivec              	   C   s†  |   t d¡¡}|   d¡}g d¢}tƒ �¥}| td¡ tt|j|dd� | |¡ t	| 
¡ |ƒ |j|dd� t	| ¡ t g d¢g d	¢g d
¢g¡ƒ |j|dd� t	| ¡ t g d¢g d	¢g d¢g¡ƒ |jddd� t	| ¡ d dƒ |jddd� t	| ¡ d dƒ |jdgdd� t	| ¡ d g d¢ƒ |jddgdd� t	| ¡ d d… g d¢g d¢gƒ W d   ƒ d S 1 s¼w   Y  d S )NrÉ   ©rS  rS  )rÉ   r_   r¾   úChanging the sparsity structurerS  r‰  r¾   )rÉ   rÉ   r   )r   r_   r_   r†  r  ©rÉ   r   r¾   )r™  r_   ©r   r_   r™  ©r_   r   r   ©r   r   r¾   r   )r   r   r   r¾   )rÎ   rE   r%   r   r  r'   ré   rê   r¸  r   rŽ  rŒ   r   )r“   rd  Úm2rC   r  r8   r8   r9   Útest_setdiag½  s:   

þþÿ"êz_TestCommon.test_setdiagc                 C   s^   t g d¢g d¢g d¢gƒ}|  |¡}dd„ t| ¡ ƒD ƒ}dd„ t| ¡ ƒD ƒ}t||ƒ d S )N©r¾   r   r¾   ©r   r¾   r¾   r†  c                 S   ó   h | ]}t |ƒ’qS r8   ©Útuple©Ú.0Úijr8   r8   r9   Ú	<setcomp>ß  ó    z+_TestCommon.test_nonzero.<locals>.<setcomp>c                 S   rÌ  r8   rÍ  rÏ  r8   r8   r9   rÒ  à  rÓ  )r   rÎ   r
   Únonzeror   ©r“   rL   ÚAspÚA_nzÚAsp_nzr8   r8   r9   Útest_nonzeroÛ  s
   
z_TestCommon.test_nonzeroc                 C   sb   t g d¢g d¢g d¢gƒ}|  |¡}dd„ tt |¡ƒD ƒ}dd„ tt |¡ƒD ƒ}t||ƒ d S )NrÊ  rË  r†  c                 S   rÌ  r8   rÍ  rÏ  r8   r8   r9   rÒ  é  rÓ  z1_TestCommon.test_numpy_nonzero.<locals>.<setcomp>c                 S   rÌ  r8   rÍ  rÏ  r8   r8   r9   rÒ  ê  rÓ  )r   rÎ   r
   rE   rÔ  r   rÕ  r8   r8   r9   Útest_numpy_nonzeroä  s
   
z_TestCommon.test_numpy_nonzeroc           	         s¨   t j d¡ t  g d¢g d¢g d¢g¡}t j dd¡}t  g g¡}t  d¡}tjdddd� ¡ }|||||g‰ ‡ ‡fd	d
„}ˆjD ]}t	t
ˆ ƒƒD ]}|||ƒ qIqAd S )Nr]   ©r   r¾   r_   ©rÉ   rk  rK  ©éúÿÿÿr—  r™  rK  )r‹  r‹  g{®Gáz„?)Údensityc                    s¨  ˆj ˆ | | d�}ˆj|| d�}tjdd��´ t| ¡ | ¡ ƒ t| ¡ j| ¡ jƒ tt 	|jd d�¡ƒ t|jd d�|jd d�ƒ t|jd d�j|jd d�jƒ t|jdd�|jdd�ƒ t|jdd�j|jdd�jƒ t|jdd�|jdd�ƒ t|jdd�j|jdd�jƒ t|jdd�|jdd�ƒ t|jdd�j|jdd�jƒ t|jdd�|jdd�ƒ t|jdd�j|jdd�jƒ W d   ƒ d S 1 sÍw   Y  d S )	NrÈ   r  )Úoverr$  r   r¾   r  r¿   )
rÝ   rÎ   rE   r  r   Úsumr   r<   r   Úisscalar)r<   r±  rÂ   rÀ   ©Úmatricesr“   r8   r9   rì   ù  s*   
ÿÿ "ñz#_TestCommon.test_sum.<locals>.check)rE   rˆ   r^   r   Úrandr   rs   rŒ   rã   rò   rª   )	r“   Údat_1Údat_2Údat_3Údat_4Údat_5rì   r<   r±  r8   rã  r9   Útest_sumî  s    
þ

ÿÿz_TestCommon.test_sumc                 C   st   t  d¡}tg d¢g d¢g d¢gƒ}|  |¡}tt|jdd� tt|jdd� tt|jdd� tt|jd	|d
� d S ©N©r¾   rÉ   rÛ  rÜ  rÝ  rÉ   r$  ©r   r¾   ç      ø?r¾   ©r%  Úout)rE   r   r   rÎ   ré   rê   rá  rV  ©r“   rñ  rÂ   rÀ   r8   r8   r9   Útest_sum_invalid_params  s   
þ
z#_TestCommon.test_sum_invalid_paramsc                    óJ   t g d¢g d¢g d¢gƒ‰ |  ˆ ¡‰‡ ‡fdd„}| jD ]}||ƒ qd S )NrÛ  rÜ  rÝ  c                    ó4   ˆ j | d�}ˆj | d�}t||ƒ t|j|jƒ d S ©NrÈ   )rá  r   r   r<   )r<   Údat_sumÚ	datsp_sum©rÂ   rÀ   r8   r9   rì   #  ó   
z)_TestCommon.test_sum_dtype.<locals>.check©r   rÎ   rã   rð   r8   rù  r9   Útest_sum_dtype  ó   þ


ÿz_TestCommon.test_sum_dtypec                 C   ór  | j  }tg d¢g d¢g d¢gƒ}|  |¡}| j rtdƒntdggƒ}| j r*tdƒntdggƒ}|j||d� |j|d� t||ƒ | j rJt d¡nt d¡}| j rWt d¡ntt d¡ƒ}|jd	||d
� |jd	|d� t||ƒ tt	dd�� |jtdgƒd� W d   ƒ n1 sŒw   Y  tt	dd�� |jt| j r¢dggndƒd� W d   ƒ d S 1 s²w   Y  d S ©NrÛ  rÜ  rÝ  r   )rñ  Úkeepdims©rñ  ©rÉ   ©rÉ   r¾   r¾   )r%  rñ  r   rð  z"output parameter.*wrong.*dimensionr*  )
ræ   r   rÎ   r.   rá  r   rE   r   ré   rê   ©r“   ÚkeeprÂ   rÀ   Údat_outÚ	datsp_outr8   r8   r9   Útest_sum_out-  ó,   þ


ÿ "ÿz_TestCommon.test_sum_outc                 C   óT   t g d¢g d¢g d¢gƒ}|  |¡}t |¡}t |¡}t||ƒ t|j|jƒ d S ©NrÛ  rÜ  rÝ  )r   rÎ   rE   rá  r   r   r<   )r“   rÂ   rÀ   r÷  rø  r8   r8   r9   Útest_numpy_sumH  ó   þ



z_TestCommon.test_numpy_sumc                    s.   ˆj  ‰ ‡ ‡fdd„}ˆjD ]}||ƒ qd S )Nc                    s�  t g d¢g d¢g d¢g| d�}ˆj|| d�}t| ¡ | ¡ ƒ t| ¡ j| ¡ jƒ tt |jd d�¡ƒ t|jd ˆ d�|jd d�ƒ t|jd d�j|jd d�jƒ t|jdˆ d�|jdd�ƒ t|jdd�j|jdd�jƒ t|jdˆ d�|jdd�ƒ t|jdd�j|jdd�jƒ t|jd	ˆ d�|jd	d�ƒ t|jd	d�j|jd	d�jƒ t|jd
ˆ d�|jd
d�ƒ t|jd
d�j|jd
d�jƒ d S )NrÛ  ©rÉ   rS  rK  )rÇ   r—  r™  rÈ   r$  ©r%  r   r   r¾   r  r¿   )	r   rÎ   r   Úmeanr   r<   r   rE   râ  ©r<   rÂ   rÀ   ©r  r“   r8   r9   rì   W  s<   þþÿÿÿÿÿ"z$_TestCommon.test_mean.<locals>.check)ræ   rã   rð   r8   r  r9   Ú	test_meanU  s
   

ÿz_TestCommon.test_meanc                 C   sz   |   t d¡¡}tg d¢g d¢g d¢gƒ}|  |¡}tt|jdd� tt|jdd� tt|jdd� tt|jd	|d
� d S rì  )	rÝ   rE   r   r   rÎ   ré   rê   r  rV  rò  r8   r8   r9   Útest_mean_invalid_paramsx  s   þ
z$_TestCommon.test_mean_invalid_paramsc                    rô  )NrÛ  rÜ  rÝ  c                    rõ  rö  )r  r   r   r<   )r<   Údat_meanÚ
datsp_meanrù  r8   r9   rì   Š  rú  z*_TestCommon.test_mean_dtype.<locals>.checkrû  rð   r8   rù  r9   Útest_mean_dtype„  rý  z_TestCommon.test_mean_dtypec                 C   rþ  rÿ  )
ræ   r   rÎ   r.   r  r   rE   r   ré   rê   r  r8   r8   r9   Útest_mean_out”  r	  z_TestCommon.test_mean_outc                 C   r
  r  )r   rÎ   rE   r  r   r   r<   )r“   rÂ   rÀ   r  r  r8   r8   r9   Útest_numpy_mean¯  r  z_TestCommon.test_numpy_meanc           
      C   sø   t g d¢g d¢g d¢gtƒ}| j|dtd�}tj |¡}t g d¢g d¢g d¢gƒ}| j|dtd�}tj |¡}tƒ �&}| td	¡ | td
¡ | td¡ t|ƒ 	¡ }t|ƒ 	¡ }	W d   ƒ n1 scw   Y  t
|| tdƒƒ t
|	| tdƒƒ d S )Nr…  ©r   r   rÉ   ©rk  rK  rÇ   r   ©r¦   r<   )ç      @ç        ç      ð?)r  ç       @r  )r  r  r  ú&splu converted its input to CSC formatúCspsolve is more efficient when sparse b is in the CSC matrix formatú.spsolve requires A be CSC or CSR matrix format)r   ÚfloatrÎ   rr   Úlinalgr0   r   r  r'   rŒ   r   r   )
r“   ÚMÚsMÚMexpÚNÚsNÚNexpr  ÚsMexpÚsNexpr8   r8   r9   Ú	test_expm¼  s0   þþþòz_TestCommon.test_expmc                    s$   ‡ fdd„}t fD ]}||ƒ q	d S )Nc                    s¨   t g d¢g d¢g d¢g| ƒ}tƒ �&}| td¡ | td¡ | td¡ ˆ j|d| d�}t|ƒ}W d   ƒ n1 s:w   Y  t| |¡ ¡ t	 
d	¡ƒ ttt|ƒ d S )
Nr…  r  r  r#  r"  r!  r   r  rÉ   )r   r   r  r'   rÎ   r1   r   r   rŒ   rE   r%   ré   rV  )r<   r&  r  r'  ÚsMinvr©   r8   r9   rì   Ù  s    ÿÿÿ
÷
z#_TestCommon.test_inv.<locals>.check)r$  rð   r8   r©   r9   Útest_invØ  s   

ÿz_TestCommon.test_invc                 C   s„   t g d¢g d¢g d¢g d¢gƒ}t|  |¡ ¡ |ƒ t g d¢g d¢g d¢gƒ}t|  |¡ ¡ |ƒ t| j|dd� ¡ | d¡ƒ d S ©	Nr7  rv  )r   rK  r   r&  )r}  r   r   )r   ç      @r   rË   rÈ   )r   r   rÎ   rŒ   rm   rm  r8   r8   r9   Útest_from_arrayê  s    þ"z_TestCommon.test_from_arrayc                 C   sˆ   |   g d¢g d¢g d¢g d¢g¡}t|  |¡ ¡ |ƒ |   g d¢g d¢g d¢g¡}t|  |¡ ¡ |ƒ t| j|dd� ¡ | d¡ƒ d S r1  )rÝ   r   rÎ   Útodenserm   rm  r8   r8   r9   Útest_from_matrixõ  s   "
þÿz_TestCommon.test_from_matrixc                 C   s„   g d¢g d¢g d¢g d¢g}t |  |¡ ¡ |ƒ g d¢g d¢g d¢g}t |  |¡ ¡ t|ƒƒ t | j|dd� ¡ t|ƒ d¡ƒ d S r1  )r   rÎ   rŒ   r   rm   rm  r8   r8   r9   Útest_from_list  s   þÿz_TestCommon.test_from_listc                 C   sò   t g d¢g d¢g d¢g d¢gƒ}|  |¡}t|  |¡ ¡ |ƒ |  |¡}t|  |¡ ¡ |ƒ t g d¢g d¢g d¢gƒ}|  |¡}t|  |¡ ¡ |ƒ t| j|dd� ¡ | d¡ƒ |  |¡}t|  |¡ ¡ |ƒ t| j|dd� ¡ | d¡ƒ d S r1  )r   rØ   r   rÎ   rŒ   rm   ©r“   r€  ÚSr8   r8   r9   Útest_from_sparse  s&    

þ
ÿ
ÿz_TestCommon.test_from_sparsec           
      C   sÜ  | j  ¡ }t|| jrtjntjƒsJ ‚t|| jƒ t	|j
j|j
jkƒ | j jdd�}t|| jƒ t	|j
jƒ t	|j
j ƒ | j jdd�}t|| jƒ t	|j
j ƒ t	|j
jƒ tj| j j| j jd�}| j j|d�}t| j|ƒ t| j|ƒ t ||¡s}J ‚|  tj| j j| j jd�¡}| j j|d�}t| j|ƒ t| j|ƒ t ||¡s¦J ‚tg d¢gƒ}|| j }|| j  ¡  }t||ƒ tg d¢gƒj}| j| }| j  ¡ | }t||ƒ | j| jtd�}| j t¡}	t| ¡ |	ƒ d S )NrÒ   rŸ  r�  rÈ   r  ©r  r   r  ©r  r   r  ç      @)rÀ   r4  rD   ræ   rE   r	   r.   r   rÂ   r   ÚflagsÚc_contiguousÚf_contiguousr   r¦   r<   rK   rÝ   r   r,  rÎ   rë   rm   )
r“   Úchkrñ  rI   Údense_dot_denserì   rN   Úcheck2ÚspboolÚmatboolr8   r8   r9   Útest_todense'  sB   




z_TestCommon.test_todensec                 C   sp  t | jƒ}| j ¡ }t||ƒ t|jj|jjkƒ | jjdd�}t||ƒ t|jjƒ t|jj ƒ | jjdd�}t||ƒ t|jj ƒ t|jjƒ t	j
| jj| jjd�}| jj|d� t||ƒ d|d< | jj|d� t||ƒ tg d¢ƒ}t||ƒ}t|| j ¡ ƒ}t||ƒ tg d	¢ƒ}t||ƒ}t| j ¡ |ƒ}t||ƒ | j| jtd�}	| t¡}
t|	 ¡ |
ƒ d S )
NrÒ   rŸ  r�  rÈ   r  r  .r:  r;  )r   rÂ   rÀ   rŒ   r   r   r=  r>  r?  rE   r   r¦   r<   r   r   rÎ   rë   rm   )r“   rÂ   r@  rñ  rI   rA  rì   rN   rB  rC  Úarrboolr8   r8   r9   Útest_toarrayP  s:   











z_TestCommon.test_toarrayc                    s  t g d¢g d¢g d¢gƒ}|  |¡}tD ]s}| |¡}dD ]}|j||d�‰ tˆ j|jƒ tˆ  ¡ |ƒ tˆ j|jƒ qtˆ j|dd�ˆ u ƒ ˆ j|dd�‰tˆˆ uƒ ‡ ‡fdd	„}ˆ jd
v rjdD ]}||ƒ qbqˆ jdkrydD ]}||ƒ qqqˆ jdkr‡dD ]}||ƒ q€qd S )N©y       @      @r   r   ©r   y      @      @r   r&  )TFrª  FTc                    sj   t ˆ | ƒ}t ˆ| ƒ}t||ƒ t||uƒ d|j }|| }||  ||< t|| || kƒ |||< d S )N)r   )r~   r   r   r«   )Ú	attributerI   rN   rR  Úb_i©ÚS_castedÚS_copiedr8   r9   Ú(check_equal_but_not_same_array_attribute‰  s   



zI_TestCommon.test_astype.<locals>.check_equal_but_not_same_array_attribute©r  r  r   )ÚindicesÚindptrÚdatar"  )ÚrowÚcolrS  r9  )ÚoffsetsrS  )	r   rÎ   r*   rm   r   r<   rŒ   rÑ   r   )r“   r€  r8  r=   ÚD_castedr÷   rO  rJ  r8   rL  r9   Útest_astypeu  s:   þ



ÿ

ÿ

€àz_TestCommon.test_astypec                 C   s†   t g d¢g d¢g d¢gƒ}|  |¡}t|dƒrd|jj_|jdv r+d|jj_d|jj_t	D ]}| 
|¡}| 
|¡}t|j|jƒ q-d S )NrH  rI  r&  rS  FrP  )r   rÎ   ÚhasattrrS  r=  Ú	writeablerÑ   rR  rQ  r*   rm   r   r<   )r“   r€  r8  r=   rW  rM  r8   r8   r9   Útest_astype_immutablež  s   þ







ýz!_TestCommon.test_astype_immutablec                    ó$   ‡ fdd„}ˆ j D ]}||ƒ q	d S )Nc                    sD   ˆ j |  }ˆ j|  }t|d |d  ¡ ƒ t|d |d  ¡ ƒ d S ©Nr_   çÍÌÌÌÌL1@©rä   rå   r   rŒ   r  r©   r8   r9   rì   ¯  ó   

z*_TestCommon.test_mul_scalar.<locals>.check©râ   rð   r8   r©   r9   Útest_mul_scalar®  ó   

ÿz_TestCommon.test_mul_scalarc                    r\  )Nc                    sD   ˆ j |  }ˆ j|  }td| d|  ¡ ƒ td| d|  ¡ ƒ d S r]  r_  r  r©   r8   r9   rì   º  r`  z+_TestCommon.test_rmul_scalar.<locals>.checkra  rð   r8   r©   r9   Útest_rmul_scalar¹  rc  z_TestCommon.test_rmul_scalarc                 C   sB   | j tj }ttƒ� d |  W d   ƒ d S 1 sw   Y  d S r;   )rå   rE   rÊ   ré   rV  )r“   rÀ   r8   r8   r9   Útest_rmul_scalar_type_errorÅ  s   

"ÿz'_TestCommon.test_rmul_scalar_type_errorc                    r\  )Nc                    sŽ   ˆ j |  }ˆ j|  }| ¡ }d|d< |}|| }t|| ¡ | ƒ || ¡  }t| ¡ | ¡ | ¡  ƒ ||d  }t|| ¡ |d  ƒ d S )Nr   rÅ  r   )rä   rå   r÷   r   rŒ   r^  ©r<   rÂ   rÀ   rI   rN   ra  r©   r8   r9   rì   Ë  s   

ÿz#_TestCommon.test_add.<locals>.checkra  rð   r8   r©   r9   Útest_addÊ  s   

ÿz_TestCommon.test_addc                    r\  )Nc                    sF   ˆ j |  }ˆ j|  }| ¡ }d|d< |}|| }t||| ¡  ƒ d S )Nr   rÅ  )rä   rå   r÷   r   rŒ   rf  r©   r8   r9   rì   á  s   

z$_TestCommon.test_radd.<locals>.checkra  rð   r8   r©   r9   Ú	test_raddà  ó   


ÿz_TestCommon.test_raddc                    ó4   ‡ fdd„}ˆ j D ]}|t d¡krq	||ƒ q	d S )Nc                    s´   ˆ j |  }ˆ j|  }t||  ¡ t d¡ƒ t|d  ¡ |ƒ ˆ  t g d¢g d¢g d¢gd¡¡}t||  ¡ || ¡  ƒ t||  ¡ | ¡ | ƒ t||d  ||d  ƒ d S )Nr©  r   ©r¾   r   r   rS  ©r¿   r   r   r   ©r   r˜  r   ri  rß   )rä   rå   r   rŒ   rE   r   rÎ   r   ©r<   rÂ   rÀ   rL   r©   r8   r9   rì   ï  s   

ÿz#_TestCommon.test_sub.<locals>.checkrë   ©râ   rE   r<   rð   r8   r©   r9   Útest_subî  s   

ûz_TestCommon.test_subc                    rj  )Nc                    s  ˆ j |  }ˆ j|  }t|| g d¢g d¢g d¢gƒ t|| g d¢g d¢g d¢gƒ td|  ¡ | ƒ ˆ jg d¢g d¢g d¢gdd�}t|| || ¡  ƒ t|| | ¡ | ƒ t| ¡ | | ¡ | ƒ t|| ¡  || ¡  ƒ t|d | |d | ƒ d S )Nr¢  r   rk  rl  rm  rß   rÈ   )rä   rå   r   rŒ   rÎ   rn  r©   r8   r9   rì     s   

   z$_TestCommon.test_rsub.<locals>.checkrë   ro  rð   r8   r©   r9   Ú	test_rsub  s   

ûz_TestCommon.test_rsubc                    r\  )Nc                    sp   ˆj |  ‰ ˆj|  ‰tˆd  ¡ ˆ ƒ t‡fdd„tddƒD ƒƒ}t‡ fdd„tddƒD ƒƒ}t| ¡ |ƒ d S )Nr   c                    ó   g | ]}|ˆ  ‘qS r8   r8   ©rÐ  rŠ  )rÀ   r8   r9   Ú
<listcomp>'  rÓ  z8_TestCommon.test_add0.<locals>.check.<locals>.<listcomp>r¾   rÉ   c                    rr  r8   r8   rs  )rÂ   r8   r9   rt  (  rÓ  )rä   rå   r   rŒ   rá  rò   r   )r<   ÚsumSÚsumDr©   rù  r9   rì      s   

z$_TestCommon.test_add0.<locals>.checkra  rð   r8   r©   r9   Ú	test_add0  s   

ÿz_TestCommon.test_add0c           	      C   s  t g d¢g d¢gƒ}t g d¢g d¢gƒ}|  |¡}|  |¡}t| |¡ ¡ || ƒ t| |¡ ¡ || ƒ t g d¢g d¢gƒ}t g d¢g d¢gƒ}|  |¡}|  |¡}t| |¡ ¡ || ƒ t| |¡ ¡ || ƒ t| |¡ ¡ || ƒ t| |¡ ¡ || ƒ d S )	N)rS  r   r™  )r_   ru  rK  )r   r—  r   )r   rk  r   ©y      ð?       Ày              @y      ð¿        ©y      @      Ày      À      @rK  ©y      @       @y      @      Ày       À      ð?©y              ð¿y      À       @r™  )r   rÎ   r   ÚmultiplyrŒ   )	r“   rL   rM   rÖ  ÚBsprÒ   r€  ÚCspÚDspr8   r8   r9   Útest_elementwise_multiply.  s   



z%_TestCommon.test_elementwise_multiplyc                 C   s  t dgƒ}t dggƒ}t g d¢ƒ}t g d¢gƒ}t dgdgdggƒ}t g d¢g d	¢g d
¢gƒ}g d¢}t d¡}|j}	t dggƒ}
t ddgddgggƒ}|  |¡}|  |¡}|  |¡}|  |¡}|  |¡}|  |d ¡}|  |	¡}|  |	d d …dd f ¡}|  |
¡}|||||||||	|
|g}|||||||||g	}|D ].}|D ])}z
| ¡ | ¡  }W n ty¼   tt|j|ƒ Y q w | |¡}t	| ¡ |ƒ q qœ|D ]?}|D ]:}z| ¡ | }W n t
yä   Y qÑ tyó   tt|j|ƒ Y qÑw | |¡}t|ƒ�rt	| ¡ |ƒ qÑt	||ƒ qÑqÍd S )NrS  é÷ÿÿÿ©r¾   r¿   r   )r—  r™  r�  rÉ   r_   r¾   )r˜  rÇ   rÉ   )rk  rÉ   r_   )rÇ   rÇ   rÇ   r•  r©  r   ©r   N)r   rE   Úonesr,  rÎ   rŒ   rê   ré   r|  r   rV  r&   )r“   rL   rM   rÒ   r€  ÚEr�  ÚGÚHÚJÚKÚLr}  r  ÚEspÚFspÚHspÚHsppÚJspÚJsppÚKsprä  Ú
spmatricesrR  r±  Ú
dense_multÚsp_multr8   r8   r9   Ú#test_elementwise_multiply_broadcastC  sb   








þ
ù
þ

ôÿz/_TestCommon.test_elementwise_multiply_broadcastc                 C   s  dt jt jdgdt jdt jgt jdt jt jgg}tt| j| j ƒ|ƒ | jg d¢g d¢g d¢gdd�}dt jt jdgdt jtt jgt jd	t jd
gg}tt| j| ƒ|ƒ tg d¢g d¢gƒ}tg d¢g d¢gƒ}|  |¡}|  |¡}tt|| ƒ|| ƒ tg d¢g d¢gƒ}tg d¢g d¢gƒ}|  |¡}|  |¡}t j	dd�� tt|| ƒ|| ƒ W d   ƒ n1 s·w   Y  td
dgdd
ggƒ}tdd
gdd
ggƒ}|  |¡}|  |¡}t j	ddd�� tt  t|| ƒ¡|| ƒ W d   ƒ d S 1 sûw   Y  d S )Nr¾   rk  rl  rm  rß   rÈ   ç      à?ru  g      Ð?r   rx  ry  rz  r{  r•  )ru  r_   r¾   rÛ  )r   r  rÉ   r  )Údivide)r—  r  )
rE   rø   r   rŒ   rÀ   rÎ   r   r   r   r  )r“   r1  ÚdenomrL   rM   rÖ  r}  r8   r8   r9   Útest_elementwise_dividez  s<   þ þ



ÿ

"ÿz#_TestCommon.test_elementwise_dividec                 C   s6  t g d¢g d¢g d¢g d¢gƒ}|  |¡}| jr[dD ]}|| }|| }t| ¡ |ƒ t|j|jƒ qtt|j	dƒ tt
|j	dƒ |  |d d…d d …f ¡}t|d	  ¡ | ¡ ƒ d S d
D ]}|| }tj ||¡}t| ¡ |ƒ t|j|jƒ q]dD ]	}tt
|j	|ƒ q{|  |d d…d d …f ¡}tt|j	d	ƒ d S )N©r¾   r   r_   r   )r   rÉ   rS  r   )r   rK  r   r   )r   rÇ   r—  r˜  )r¾   r_   çš™™™™™@rÉ   r   r¿   rÉ   r¾   ©r   r¾   r_   rÉ   )r¿   r›  r}  )r   rÎ   ræ   r   rŒ   r   r<   ré   r-  Ú__pow__rê   rE   r%  Úmatrix_powerrV  )r“   rL   rM   ÚexponentÚret_spÚret_npr8   r8   r9   Útest_pow�  s*    
z_TestCommon.test_powc                 C   sj   |   g d¢g d¢g d¢g d¢g¡}tg d¢| tg d¢| ¡ ƒƒ tg d¢gƒ}t|| || ¡  ƒ d S )N©rÉ   r   r   ©r   r¾   r   ©r_   r   r  ©r_   rÉ   r   rˆ  )rÎ   r   r   rŒ   r   )r“   r&  rT  r8   r8   r9   Útest_rmatvecÄ  s   " z_TestCommon.test_rmatvecc                 C   sÐ   |   dgdgdgg¡}tt|tdƒ ƒƒ t|tdƒ  ¡ dgdgdggƒ t|tdgƒ tg d¢ƒƒ t|tdggƒ tdgdgdggƒƒ t|t d¡ tdgdgdggƒƒ t|t d¡ t d¡ƒ d S )Nr¾   r_   rÉ   r•  ©r¾   r¾   ©r¾   r   ©rÉ   r   )rÎ   r   r&   r   r   rŒ   rE   r„  rm  r8   r8   r9   Útest_small_multiplicationÊ  s   "&$z%_TestCommon.test_small_multiplicationc                 C   s¼   t  dgdgdgg¡}|  |¡}| jr.t|t  d¡  ¡ |ƒ t|tdggƒ  ¡ |ƒ d S t|tdgƒ tg d¢ƒƒ t|tdggƒ tdgdgdggƒƒ t|t  d¡ t  d¡ƒ d S )Nr¾   r_   rÉ   r  r•  r©  rª  )rE   r   rÎ   ræ   r   r„  rŒ   r   )r“   rL   rÖ  r8   r8   r9   Ú-test_star_vs_at_sign_for_sparray_and_spmatrixÖ  s   
&z9_TestCommon.test_star_vs_at_sign_for_sparray_and_spmatrixc                 C   s�   |   dgdgdgg¡}tƒ }t|| dƒ t|| dƒ t|| dƒ t|| dƒ t|| dƒ t|| dƒ t|| dƒ t|| dƒ d S )Nr¾   r_   rÉ   r™   r‘   )rÎ   rŽ   r   ©r“   rL   rM   r8   r8   r9   Útest_binop_custom_typeã  s   z"_TestCommon.test_binop_custom_typec                 C   s’   |   dgdgdgg¡}tdƒ}t|| dƒ t|| dƒ t|| dƒ t|| dƒ t|| dƒ t|| dƒ t|| dƒ t|| dƒ d S )Nr¾   r_   rÉ   r  r™   r‘   )rÎ   r¢   r   r­  r8   r8   r9   Ú!test_binop_custom_type_with_shapeô  s   z-_TestCommon.test_binop_custom_type_with_shapec                 C   sd   G dd„ dƒ}d}|   dgdgdgg¡}||ƒ}|| }|| }t| ¡ | ¡ ƒ t|j|jƒ d S )Nc                   @   s   e Zd Zdd„ Zdd„ ZdS )z0_TestCommon.test_mul_custom_type.<locals>.Customc                 S   r£   r;   ©Úscalar)r“   r±  r8   r8   r9   r§     r¨   z9_TestCommon.test_mul_custom_type.<locals>.Custom.__init__c                 S   s
   || j  S r;   r°  r¯   r8   r8   r9   r›     r¨   z9_TestCommon.test_mul_custom_type.<locals>.Custom.__rmul__N)rŸ   r    r¡   r§   r›   r8   r8   r8   r9   ÚCustom  s    r²  r_   r¾   rÉ   )rÎ   r@   rŒ   r   rÑ   )r“   r²  r±  rL   ra  ÚA_scalarÚA_cr8   r8   r9   Útest_mul_custom_type  s   z _TestCommon.test_mul_custom_typec                 C   st   |   dgdgdgg¡}tƒ }t||kdƒ t||kdƒ t||kdƒ t||kdƒ t||k dƒ t||kd	ƒ d S )
Nr¾   r_   rÉ   r®   r²   r´   r¶   r¸   rº   )rÎ   r­   r   r­  r8   r8   r9   Útest_comparisons_custom_type  s   z(_TestCommon.test_comparisons_custom_typec                 C   sR   |   tg d¢g d¢g d¢g d¢gƒ¡}d}| |¡}|| }t| ¡ | ¡ ƒ d S )Nr£  r¤  r¥  r¦  rP   )rÎ   r   r   r   rŒ   )r“   r&  r±  Úactualr1  r8   r8   r9   Útest_dot_scalar  s
   &
z_TestCommon.test_dot_scalarc                 C   sê   |   tg d¢g d¢g d¢g d¢gƒ¡}|   tddgddgddggdƒ¡}tg d	¢gƒj}tj}t|||ƒ| ¡ | ƒ t|||ƒ ¡ ||  ¡ ƒ t|| ¡ |ƒ||  ¡ ƒ t||| ¡ ƒ||  ¡ ƒ tt||dƒ tt|d|ƒ d S )
Nr£  r¤  r¥  r¦  r   r¾   r_   rß   r•  )	rÎ   r   r,  ÚoperatorÚmatmulr   rŒ   ré   rê   )r“   r&  rM   rU  rº  r8   r8   r9   Útest_matmul#  s   &"z_TestCommon.test_matmulc                 C   s”  |   g d¢g d¢g d¢g d¢g¡}tg d¢gƒj}t|| | ¡ | ƒ t|tg d¢ƒ jdƒ t|tdgdgd	ggƒ jd
ƒ t|tdgdgd	ggƒ jd
ƒ tt	|tg d¢ƒ t
ƒƒ | jrbt
ntj}tt	|tg d¢ƒj |ƒƒ tddgƒtg d¢ƒtdgdggƒtg d¢ƒtdgdggƒg}|D ]	}tt|j|ƒ q”t|tg d¢ƒ t| ¡ g d¢ƒƒ t|dgdgd	gg t t| ¡ g d¢ƒ¡jƒ d S )Nr£  r¤  r¥  r¦  r•  )rS  r¾   r_   rÉ   )rS  r¾   rˆ  )rÎ   r   r,  r   rŒ   r   r¦   r.   r   rD   r	   ræ   rE   ré   rê   r�   r   r   Ú
atleast_2d)r“   r&  rU  Úmatrix_or_arrayÚbad_vecsr=   r8   r8   r9   Útest_matvec5  s    "  "ÿ$4z_TestCommon.test_matvecc                 C   s˜  t g d¢g d¢g d¢g d¢gƒ}tg d¢g d¢g d¢g d¢gƒ}t ddgddgddggdƒ}|  |¡}|  |¡}t||  ¡ || ƒ t|| || ƒ t|| || ƒ t|| || ƒ | ¡ }|}|| }t||  ¡ |ƒ t|| |ƒ t|| |ƒ t|| |ƒ | ¡ }t||  ¡ |ƒ t|| |ƒ t|| |ƒ t|| |ƒ | ¡ }t||  ¡ |ƒ t|| |ƒ t|| |ƒ t|| |ƒ d	}	d
}
t 	d¡ t
|	dfƒ}t|	ƒD ]}tdƒD ]}t ¡ }||
k rõ||
 |||f< qãqÝ|  |¡}||j }t| ¡ | ¡ |j ¡  ƒ t| ¡ | ¡ | ¡ j ƒ |  ddgddgg¡}|  ddgddgddgg¡}tt|j|ƒ | j�rJtt|j|ƒ d S d S )Nr£  r¤  r¥  r¦  r   r¾   r_   rß   r¥  g333333Ó?rÉ   rS  rK  rÇ   )r.   r   rÎ   r   rŒ   r]  r^  r_  rˆ   r^   r   rò   r,  ré   rê   r�   ræ   r–   )r“   rI   Úa2rN   ÚaspÚbspÚcspra  ÚwantrŠ  ÚfracrL   rR  r±  r¹  rM   r8   r8   r9   Útest_matmat_sparseT  s^     


€ý

ÿz_TestCommon.test_matmat_sparsec                 C   s¨   g d¢g d¢g d¢g d¢g}|   |¡}tddgddgd	d
ggƒtddgddgd	d
ggƒg}|D ]"}|| }tt|| jr=tnt|ƒƒƒ t|j	dƒ t|t
||ƒƒ q/d S )Nr£  r¤  r¥  r¦  r¾   r_   rÉ   rS  rK  rÇ   ©rS  r_   )rÎ   r   r.   r   rD   ræ   r	   Útyper   r¦   r   )r“   rI   rÁ  ÚbsrN   Úresultr8   r8   r9   Útest_matmat_denseŒ  s   
4üz_TestCommon.test_matmat_densec                 C   s
  t  g d¢g d¢g d¢gddgddgg¡}| ¡ }|  |¡}dD ]B}| |¡}t|j|ƒ t| ¡ |ƒ |  |d	 ¡ |¡}t|j|ƒ t| ¡ |d	 ƒ |  |¡ |¡}t|j|ƒ t| ¡ |ƒ q d
D ]}| |¡}t||ƒ |  |d	 ¡ |¡}t||d	 ƒ qed S )Nr…  ©r   rÉ   rS  )rK  r   r   r¾   r_   r   rÉ   )r   r"  r  r  r9  rA   r#  ù              @)r   Údense)rs   r   rŒ   rÎ   Úasformatr   rÑ   r   )r“   rL   r€  rÑ   rI   rN   ra  r8   r8   r9   Útest_sparse_format_conversions™  s&   *



ûz*_TestCommon.test_sparse_format_conversionsc           	      C   sŠ   t g d¢g d¢g d¢gƒ}t g d¢g d¢gƒ}t||ƒ}|  |¡}dD ]}t|d| ƒ}dD ]}d	D ]}t|||fd
� ¡ |ƒ q2q.q#d S )Nrš  r¢  ©r   r   rS  rK  rÛ  ©rÉ   r   rK  )r   Úto)r¾   r_   rÉ   rÇ   )r¾   r_   rÉ   rS  rÇ   rž  ©Ú	blocksize)r   r   rÎ   r~   r   rŒ   )	r“   r=   r>   rL   rÖ  rÑ   ÚfnÚXÚYr8   r8   r9   Ú
test_tobsr²  s   

ÿÿýz_TestCommon.test_tobsrc                    s    ˆj }t g g¡}||g‰ ‡ ‡fdd„}ˆ d¡}tt |¡ ¡ t tdƒ¡ƒ t|j ¡ tdƒƒ t	t
|jdd� ˆjD ]}ttˆ ƒƒD ]}|||ƒ qEq=d S )Nc                    sr   t ˆ | | d�}ˆ |¡}| ¡ }| ¡ }t| ¡ |ƒ t| ¡  ¡ |ƒ t|jdd� ¡ |ƒ t|j|jƒ d S )NrÈ   r©  ©r/  )r   rÎ   r
   r   rŒ   r   r<   )r<   r±  rÂ   rÀ   rI   rN   rã  r8   r9   rì   Ã  s   
z)_TestCommon.test_transpose.<locals>.checkr©  ©rS  rÉ   r   rÚ  )rÂ   rE   r   rÎ   r   r
   rŒ   r   r,  ré   rê   rã   rò   rª   )r“   ræ  rç  rì   r�  r<   r±  r8   rã  r9   Útest_transpose¾  s   
ÿ
ÿÿz_TestCommon.test_transposec                    r\  )Nc                    sD   ˆ j |  }ˆ j|  }|| }t||| ƒ || }t||| ƒ d S r;   )rä   rå   r   ©r<   rÂ   rÀ   Úsum1Úsum2r©   r8   r9   rì   Û  s   

z)_TestCommon.test_add_dense.<locals>.checkra  rð   r8   r©   r9   Útest_add_denseÚ  ri  z_TestCommon.test_add_densec                    rj  )Nc                    sŽ   ˆ j |  }ˆ j|  }|jtkr'|| }t||| ƒ || }t||| ƒ d S || | | }t||| ƒ || | | }t||| ƒ d S r;   )rä   rå   r<   rë   r   rÝ  r©   r8   r9   rì   ê  s   


z)_TestCommon.test_sub_dense.<locals>.checkrë   ro  rð   r8   r©   r9   Útest_sub_denseè  s   

ûz_TestCommon.test_sub_densec                    s®   t  g d¢g d¢g d¢g¡‰ t  g d¢g d¢g d¢g¡‰t  g d¢g d¢g d¢g¡‰‡ ‡‡‡fd	d
„}ˆjD ]}t jt jt jfD ]}dD ]}|t  |¡t  |¡|ƒ qDq@q6d S )N)r¾   r   rÉ   )r   rS  rK  r&  )r¾   r¾   r_   )r   rÉ   rÇ   r‚  )r   y      @       @rK  )r   ù              ð?y       €      ð¿c           
         s6  t  | t j¡rˆ ˆ | ¡¡}nˆ ˆ  | ¡¡}|dkr"| d¡}n$|dkr,| d¡}n|dkr6ˆ |¡}n|dkrCˆ ˆ |¡¡}ntƒ ‚tƒ �}| t	d¡ | 
|¡}| |¡}W d   ƒ n1 sdw   Y  t  
t|ƒt|ƒ¡}tt|ƒ|ƒ t|j|jƒ t  t|ƒt|ƒ¡}	tt|ƒ|	ƒ t|j|	jƒ d S )Nr±  r¾   Úscalar2r¿   rÎ  rs   zHTaking maximum .minimum. with > 0 .< 0. number results to a dense matrix)rE   re   ÚcomplexfloatingrÎ   rm   rÈ  rê   r   r  r'   ÚmaximumÚminimumrŒ   r   r   r<   )
r<   Údtype2ÚbtyperL   rM   r  Úmax_sÚmin_sÚmax_dÚmin_d©ÚA_denseÚA_dense_cpxÚB_denser“   r8   r9   rì   	  s2   ÿ
úz/_TestCommon.test_maximum_minimum.<locals>.check)r±  rã  rÎ  rs   )rE   r   râ   r   rÊ   rÍ   r<   )r“   rì   r<   rç  rè  r8   rí  r9   Útest_maximum_minimum  s   
 ÿÿÿz _TestCommon.test_maximum_minimumc                 C   s
  | j }t| ¡ j|jƒ t|j|dd�j|jƒ t|j|dd�j|jƒ t| ¡  ¡ | ¡ ƒ t|j|dd� ¡ | ¡ ƒ t|j|dd� ¡ | ¡ ƒ t|d|j ƒ}t|ƒ |u ƒ t|dd�|u ƒ t|dd�j|jƒ t|dd� ¡ | ¡ ƒ tt| ¡ |ƒ ƒ d S )NTrª  FrÓ  )	rÀ   r   r÷   rÑ   Ú	__class__rŒ   r~   r   rO   )r“   rL   Útoselfr8   r8   r9   Ú	test_copy.  s   z_TestCommon.test_copyc                 C   sH   |   t d¡ dd¡¡}|  |¡}t||ƒD ]\}}t| ¡ |ƒ qd S )NrM  rK  rP   )rÝ   rE   r   rÏ   rÎ   Úzipr   rŒ   )r“   rM   rL   r=   r>   r8   r8   r9   Útest_iteratorF  s
   
ÿz_TestCommon.test_iteratorc                 C   s  t g ƒ}| d¡}| d¡}| d¡}| d¡}| d¡}t ddg¡}|  |¡}|  |¡}	|  |¡}
|  |¡}|  |¡}|  |¡}t| |¡ ¡ t ||¡ƒ t|	 |¡ ¡ t ||¡ƒ t| |	¡ ¡ t ||¡ƒ t|
 |¡ ¡ t ||¡ƒ t|
 |¡ ¡ t ||¡ƒ t| |
¡ ¡ t ||¡ƒ t| |
¡ ¡ t ||¡ƒ t| |¡ ¡ t ||¡ƒ tt	|j|ƒ tt	|j|ƒ t| 
|¡ ¡ t 
||¡ƒ t|	 
|	¡ ¡ t 
||¡ƒ t| 
|¡ ¡ t 
||¡ƒ t| 
|¡ ¡ t 
||¡ƒ t|	 
|¡ ¡ t 
||¡ƒ t| 
|¡ ¡ t 
||¡ƒ t| 
d¡ ¡ t 
|d¡ƒ t|	 
d¡ ¡ t 
|d¡ƒ t| 
d¡ ¡ t 
|d¡ƒ tt	|j
|ƒ tt	|j
|ƒ t| |¡ ¡ | |¡ƒ t|	 |	¡ ¡ | |¡ƒ t| |¡ ¡ | |¡ƒ tt	|j|ƒ tt	|	j|ƒ d S )NrŒ  rî  r�  r©  r»  rK  rÇ   )r   rÏ   rE   r„  rÎ   r   r   rŒ   ré   rê   r|  r•   )r“   r”   rI   rN   ra  rß   rb  rc  rÁ  rÂ  rÃ  ÚdspÚespÚfspr8   r8   r9   Ú test_size_zero_matrix_arithmeticM  sN   










z,_TestCommon.test_size_zero_matrix_arithmeticc                 C   s°   t g ƒ}| d¡}| d¡}| d¡}|||fD ]=}|  |¡}t| ¡  ¡ |ƒ t| ¡  ¡ |ƒ t| ¡  ¡ |ƒ t| ¡  ¡ |ƒ t| 	¡  ¡ |ƒ t| 
¡  ¡ |ƒ qd S )NrŒ  r�  r»  )r   rÏ   rÎ   r   r_  rŒ   r^  r]  ÚtolilÚtodokÚtobsr)r“   r”   rI   rN   ra  rd  Úspmr8   r8   r9   Útest_size_zero_conversions‡  s   



ùz&_TestCommon.test_size_zero_conversionsc                 C   s¦   t jg d¢g d¢gt jd�}ttdd�� |  |¡ W d   ƒ n1 s$w   Y  |  | t j¡¡}ttdd�� | j|t jd� W d   ƒ d S 1 sLw   Y  d S )N)g      @r   gš™™™™™ñ?r&  rÈ   zdoes not support dtyper*  )rE   r   Úfloat16ré   rê   rÎ   rm   rÌ   )r“   rI   ÚA32r8   r8   r9   Útest_dtype_check–  s   ÿ"ÿz_TestCommon.test_dtype_checkc                    s4   dd l ‰ tƒ }| t¡ |‡ ‡fdd„ƒ}|ƒ  d S )Nr   c                     sÔ   ˆj  ¡ } tˆ jƒD ]]}ˆ  ˆ j| |d�¡}t| j|jƒ t|  	¡ | 	¡ ƒ t| j
|j
ƒ | j ¡ D ]4\}}t|tjƒrEt||j| ƒ q2t|tƒr]|r]t|d tjƒr]t||j| ƒ q2t||j| kƒ q2q
d S )N)Úprotocolr   )rÀ   r÷   rò   ÚHIGHEST_PROTOCOLÚloadsÚdumpsr   r¦   r   rŒ   rÑ   rB   ÚitemsrD   rE   r	   rÎ  r   )rÀ   r  ÚsploadedÚkeyr  ©Úpickler“   r8   r9   rì   ¤  s    
ÿùöz&_TestCommon.test_pickle.<locals>.check)r  r   r  r'   )r“   r  rì   r8   r
  r9   Útest_pickleŸ  s   

z_TestCommon.test_picklec                    s"   ‡ fdd„}dD ]}||ƒ qd S )Nc                    st   | dkr	t  d¡ ˆ jjdv rt  d¡ tt| ƒ}ˆ  t d¡ dd¡d ¡}|| 	¡ ƒ}||ƒ}t
| 	¡ |ƒ d S )	NÚsignz2sign conflicts with comparison op support on Numpy)rA   r#  z%Unary ops not implemented for dok/lilr¤  rS  rK  ç      4@)rî   rï   rÀ   rÑ   r~   rE   rÎ   r   rÏ   rŒ   r   )r…   Úufuncr×  ÚX0ÚX2r©   r8   r9   rì   ¼  s   


z5_TestCommon.test_unary_ufunc_overrides.<locals>.check)ÚsinÚtanÚarcsinÚarctanÚsinhÚtanhÚarcsinhÚarctanhÚrintr  Úexpm1Úlog1pÚdeg2radÚrad2degÚfloorÚceilÚtruncÚsqrtrl  r8   )r“   rì   r…   r8   r©   r9   Útest_unary_ufunc_overrides»  s   
üz&_TestCommon.test_unary_ufunc_overridesc                 C   sr  t  g d¢g d¢g d¢g¡}|  |¡}t| d¡d u ƒ t| ¡ ddgddgddggƒ | d	¡ t| ¡ ddgddggƒ | d¡ t| ¡ ddgddgddggƒ | d
¡ t| ¡ g d¢g d¢g d¢gƒ | d
¡ t| ¡ g d¢g d¢g d¢gƒ | dd¡ t| ¡ ddgddgddggƒ | jr¡|jdv r¡| d¡ n
t	t
ttf|jdƒ dD ]	}t	t
|j|ƒ q­d S )N©r¾   r   rÉ   rS  ©r_   r   r   r   ©rÉ   r   r   r   ©rÉ   r_   r¾   r   r_   rÉ   ©r_   r_   r   r7  )r_   r   r   r&  )r"  r  ))r¿   r_   r§  r•  )rE   r   rÎ   r   Úresizer   rŒ   ræ   rÑ   ré   rê   r-  Ú
IndexError)r“   r€  r8  Ú	bad_shaper8   r8   r9   Útest_resizeÐ  sP   
þ
þ
ÿ
þ
þ
þþÿz_TestCommon.test_resizec                 C   sB  | j }|j}|j|dd�}t| ¡ | ¡ ƒ |tvr!tt||ƒƒ |j||jdd�}t| ¡ | ¡ ƒ |tvr>tt||ƒƒ |j|t	j
dd�}t| ¡ | ¡ ƒ |j|dd�}t| ¡ | ¡ ƒ tt||ƒ ƒ dD ]4}||krqqj| |¡}|j|dd�}t| ¡ | ¡ ƒ |j|dd�}t| ¡ | ¡ ƒ tt||ƒ ƒ qjd S )NFrª  )r<   r÷   T)r  r  r"  r9  rA   r#  )rÀ   rÑ   rò  r@   rŒ   ÚNON_ARRAY_BACKED_FORMATSr   rO   r<   rE   rÌ   r   rÏ  )r“   rL   Úself_formatrÒ   Úother_formatrM   r8   r8   r9   Útest_constructor1_baseù  s2   
÷z"_TestCommon.test_constructor1_baseN)srŸ   r    r¡   rÔ   r*   râ   r$   rÕ   r!   rÖ   r   r×   r   rØ   r#   rÙ   r    rÚ   r"   rÛ   r   rÝ   Úclassmethodrè   rñ   rô   r	  r
  r  r  r  r  r)  r2  r6  rI  rY  rZ  re  rn  rt  rx  rz  r�  r„  r”  rœ  r®  rî   ÚmarkÚslowrÁ  rÉ  rÙ  rÚ  rë  ró  rü  r  r  r  r  r  r  r  r.  r0  r  r3  r5  r6  r9  rE  rG  rX  r[  rb  rd  re  rg  rh  rp  rq  rw  r€  r•  r™  r¢  r§  r«  r¬  r®  r¯  rµ  r¶  r¸  r»  r¿  rÆ  rË  rÐ  rÙ  rÜ  rà  rá  rñ  rô  rö  rú  rÿ  r  r  r#  r,  r0  r8   r8   r8   r9   rÞ   )  sÖ    
%'?>::!/
6	
##




)%
(
7#'
8+:	)rÞ   c                   @   ó,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú_TestInplaceArithmeticc                 C   s   t  d¡}|  |¡}| ¡ }| ¡ }||7 }||7 }t||ƒ | ¡ }| ¡ }||8 }||8 }t||ƒ | jrj| ¡ }| ¡ }ttdd�� ||j9 }W d   ƒ n1 sUw   Y  || }||9 }t|| 	¡ ƒ n2| ¡ }| ¡ }ttdd�� ||9 }W d   ƒ n1 s‡w   Y  | 
|j¡}||j9 }t||ƒ | ¡ }z||j }W n	 ty°   Y n3w | ¡ }| ¡ }ttdd�� || }W d   ƒ n1 sÎw   Y  | 
|j¡}||j }t||ƒ ttdd�� || }W d   ƒ d S 1 sùw   Y  d S )Nr©  úinconsistent shapesr*  zdimension mismatchúunsupported operand)rE   r„  rÎ   r÷   r   ræ   ré   rê   r,  rŒ   r   rV  )r“   rI   rN   r=   r>   r8   r8   r9   Útest_inplace_dense	  s\   



ÿ
ÿ

ÿ
ÿ


"ÿz)_TestInplaceArithmetic.test_inplace_densec                    r\  )Nc                    s˜   ˆ j |  }ˆ j|  }tjt| dd�r)| ¡ }|d9 }| ¡ }|d9 }t|| ¡ ƒ tjt| dd�rJ| ¡ }|d9 }| ¡ }|d9 }t|| ¡ ƒ d S d S ©NÚ	same_kind)Úcastingr_   r^  ©	rä   rå   rE   Úcan_castÚintr÷   r   rŒ   r$  ©r<   rÂ   rÀ   rI   rN   r©   r8   r9   rì   U	  s   

ûz6_TestInplaceArithmetic.test_imul_scalar.<locals>.checkra  rð   r8   r©   r9   Útest_imul_scalarT	  s   

ÿz'_TestInplaceArithmetic.test_imul_scalarc                    s6   ‡ fdd„}ˆ j D ]}t |t t¡¡s||ƒ q	d S )Nc                    s˜   ˆ j |  }ˆ j|  }tjt| dd�r)| ¡ }|d }| ¡ }|d }t|| ¡ ƒ tjt| dd�rJ| ¡ }|d }| ¡ }|d }t|| ¡ ƒ d S d S r9  r<  r?  r©   r8   r9   rì   l	  s   

ûz6_TestInplaceArithmetic.test_idiv_scalar.<locals>.check)râ   rE   r=  r<   r>  rð   r8   r©   r9   Útest_idiv_scalark	  s   
€üz'_TestInplaceArithmetic.test_idiv_scalarc                 C   sø   |   t d¡¡}|   t d¡¡}|   t d¡¡}||7 }|| }t| ¡ | ¡ ƒ | jr=||9 }|| }t| ¡ | ¡ ƒ || }|| }t| ¡ | ¡ ƒ ||8 }|| }t| ¡ | ¡ ƒ ttdd�� || }W d   ƒ d S 1 suw   Y  d S )NrK  r7  r*  )rÎ   rE   r%   r   rŒ   ræ   ré   rV  )r“   rI   rN   Úbpr8   r8   r9   Útest_inplace_success„	  s&   
"ÿz+_TestInplaceArithmetic.test_inplace_successN)rŸ   r    r¡   r8  r@  rA  rC  r8   r8   r8   r9   r5  	  s
    8r5  c                   @   ó4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )Ú_TestGetSetc                    ó(   ‡ fdd„}t D ]	}|t |¡ƒ qd S )Nc                    s¨   t g d¢g d¢g d¢g d¢g| d�}ˆ  |¡}|j\}}t| |ƒD ]}t| |ƒD ]}t|||f |||f ƒ q*q"tt|d ƒ| ƒ dD ]}tttf|j	|ƒ qFd S )Nr7  ©rS  rÉ   r   ©r   r_   r   r&  rÈ   r¨  ©©r   rÉ   r3  )rS  r   rÛ  )rS  r¿   r•  )
r   rÎ   r¦   rò   r   rÈ  ré   r*  rV  Ú__getitem__)r<   r€  rL   r&  r)  rR  r±  rÑ  r©   r8   r9   rì   ¢	  s"   ýý

ÿÿz*_TestGetSet.test_getelement.<locals>.check©r*   rE   r<   rð   r8   r©   r9   Útest_getelement¡	  s   ÿz_TestGetSet.test_getelementc                    rF  )Nc                    sN  ˆ j d| d�}tƒ �?}| td¡ |  d¡|d< |  d¡|d< |  d¡|d	< |  d
¡|d< |  d¡|d< |  d¡|d< |  d¡|d	< W d   ƒ n1 sLw   Y  | tjkrft| ¡ g d¢g d¢g d¢gƒ dD ]
}t	t
|j|dƒ qhg d¢tg d¢ƒfD ]
}t	t|jd|ƒ q}t | tj¡s¡| tjkr£dD ]}t	t|jd|ƒ q–d S d S d S )Nr©  rÈ   rÃ  r   rŒ  r<  ©r¾   r_   rÉ   rî  r   rÆ  r˜  ©r   r¿   r—  ©r¿   r  rK  )r   rK  r   r˜  )r   r   rS  r   )r_   r   r—  r   ))r   rS  )r¿   rS  rª  r©  r4  g     À^@r•  )rÍ  )rÎ   r   r  r'   rÈ  rE   Úbool_r   rŒ   ré   r*  Ú__setitem__r   rê   re   rä  rV  )r<   rL   r  rÑ  r¯  r©   r8   r9   rì   ¸	  s<   ø

ýþ	
ýz*_TestGetSet.test_setelement.<locals>.checkrL  rð   r8   r©   r9   Útest_setelement·	  s   !ÿz_TestGetSet.test_setelementc                    s*   ‡ fdd„}ˆ j D ]	}|t |¡ƒ q	d S )Nc                    sZ   ˆ j d| d�}tƒ �}| td¡ d|d< W d   ƒ n1 sw   Y  t|d dƒ d S )N)rÉ   rP   rÈ   rÃ  r¾   )r   rk  )rÎ   r   r  r'   r   ©r<   rL   r  r©   r8   r9   rì   ß	  s   
þz9_TestGetSet.test_negative_index_assignment.<locals>.checkro  rð   r8   r©   r9   Útest_negative_index_assignmentÜ	  s   
ÿz*_TestGetSet.test_negative_index_assignmentc                    s^   d\‰‰ ‡ ‡‡fdd„}dddt dƒdfdt dƒft dƒt dƒffD ]
\}}|||d	ƒ q"d S )
N©rK  rP   c                    sŒ   | ›d|›d|›�}ˆ  ˆˆ f¡}tƒ �}| td¡ d|| |f< W d   ƒ n1 s+w   Y  t| ¡ ||d� t|| |f d|d� d S )Nz ; rÃ  r¾   rµ  )rÎ   r   r  r'   r   rá  )rR  r±  Únitemsr4   rL   r  ©rd  r°  r“   r8   r9   Ú	_test_setì	  s   þz3_TestGetSet.test_scalar_assign_2.<locals>._test_set©r_   rÉ   ©r¿   r˜  rP  r¿   r  r¾   )r   ©r“   rY  rR  r±  r8   rX  r9   Útest_scalar_assign_2é	  s   
ÿþz _TestGetSet.test_scalar_assign_2c                 C   s~   |   d¡}t d¡}tƒ �!}| td¡ ||fD ]}d|d< d|d< d|d< qW d   ƒ n1 s1w   Y  t| ¡ |ƒ d S )Nr[  rÃ  r¾   rî  rS  rª  r™  ©rÎ   rE   r   r   r  r'   r   rŒ   ©r“   rL   rM   r  rÒ   r8   r8   r9   Útest_index_scalar_assignú	  s   


ýþz$_TestGetSet.test_index_scalar_assignN)rŸ   r    r¡   rM  rS  rU  r]  r`  r8   r8   r8   r9   rE   	  s    %rE  c                   @   ó   e Zd Zdd„ ZdS )Ú
_TestSolvec                 C   s  d}t j d¡ t||ftd�}t j |¡}t j |d ¡dt j |d ¡  }t j |¡}tt|ƒƒD ]
}|| |||f< q4tt|ƒƒD ]}|| |||d f< t|| ƒ||d |f< qE|  	|¡}t
ƒ �}| td¡ t|ƒ |¡}W d   ƒ n1 s~w   Y  t|| |ƒ d S )Nr¤  r   rÈ   r¾   râ  r!  )rE   rˆ   r^   r   r  rå  rò   rª   r   rÎ   r   r  r'   r/   Úsolver   )r“   r°  rL   r=   r>   r¹  rR  r  r8   r8   r9   Ú
test_solve
  s&   $
ÿýz_TestSolve.test_solveN)rŸ   r    r¡   rd  r8   r8   r8   r9   rb  
  s    rb  c                   @   s€   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	e
j d¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )Ú_TestSlicingc                 C   sœ   t | jdtjd�ddd…f jtjƒ t | jdtjd�ddd…f jtjƒ t | jdtjd�ddd…f jtjƒ t | jdtjd�ddd…f jtjƒ d S )N©r¾   rP   rÈ   r   r¾   rK  )r   rÎ   rE   rË   r<   rS   rÌ   rÊ   r©   r8   r8   r9   Útest_dtype_preservation
  s   &&&*z$_TestSlicing.test_dtype_preservationc                 C   sœ   t jt jt jt jfD ]A}| jd|d�}t|d d …ddd…f j|ƒ t|ddd…d d …f j|ƒ t|dddd…f j|ƒ t|ddd…df j|ƒ q
d S )Nr'  rÈ   r   r_   ©rE   rË   rS   rÌ   rÊ   rÎ   r   r<   ©r“   ÚdtrL   r8   r8   r9   Ú#test_dtype_preservation_empty_slice%
  s   ûz0_TestSlicing.test_dtype_preservation_empty_slicec           
      C   sˆ  |   tdƒ dd¡¡}|  |¡}| jrdndgdgdgf\}}}t||d d …f |dd d …f  ¡ ƒ t||dd…f |ddd…f  ¡ ƒ |   g d¢g d	¢g d
¢g d¢g¡}|  |¡}t||dd…f |ddd…f  ¡ ƒ |   g d¢g d¢g d
¢g d¢g¡}|  |¡}	t||dd…f |	ddd…f  ¡ ƒ t||dd …f |	ddd …f  ¡ ƒ tt|j	t
d ƒdfƒ tt|j	dt
ddƒfƒ d S )Nç      I@rK  rP   rÛ  r   r¾   r_   ©r¾   r_   r¾   ©rS  r   rÇ   r&  r†  rÉ   ©rS  r   r   r  é   rÇ   r—  )rÝ   r   rÏ   rÎ   ræ   r   rŒ   ré   r*  rK  Úslice)
r“   rM   rL   Úr0Úr1Úr2rÒ   r€  r…  r�  r8   r8   r9   Útest_get_horiz_slice/
  s   
 &&"
&"
&&z!_TestSlicing.test_get_horiz_slicec           
      C   s¤  t dƒ dd¡}|  |¡}| jrdndgdgdgf\}}}t|dd…|f |dd…df  ¡ ƒ t|d d …|f |d d …df  ¡ ƒ tg d¢g d	¢g d
¢g d¢gƒ}|  |¡}t|dd…|f |dd…df  ¡ ƒ t|d d …|f |d d …df  ¡ ƒ tg d¢g d¢g d
¢g d¢gƒ}|  |¡}	t|d d …|f |	d d …df  ¡ ƒ t|dd …|f |	dd …df  ¡ ƒ tt|j	t
d ƒdfƒ tt|j	dt
ddƒfƒ d S )Nrl  rK  rP   rÛ  r   r¾   r_   rm  rn  r&  r†  rÉ   rÊ  ro  r  rp  rÇ   r—  )r   rÏ   rÎ   ræ   r   rŒ   r   ré   r*  rK  rq  )
r“   rM   rL   Úc0Úc1Úc2rÒ   r€  r…  r�  r8   r8   r9   Útest_get_vert_sliceD
  s   
 && 
&& 
&&z _TestSlicing.test_get_vert_slicec                 C   s.  t dƒ dd¡}|  |¡}t|dd…dd…f  ¡ |dd…dd…f ƒ t|dd …d d…f  ¡ |dd …d d…f ƒ t|d d…dd …f  ¡ |d d…dd …f ƒ tg d	¢g d
¢g d¢g d¢gƒ}|  |¡}t|dd…dd…f |dd…dd…f  ¡ ƒ t|d d …dd …f |d d …dd …f  ¡ ƒ d S )Nrl  rK  rP   r_   r   rÉ   r¾   r¿   rÊ  ro  r&  r†  )r   rÏ   rÎ   r   rŒ   r   )r“   rM   rL   r…  r�  r8   r8   r9   Útest_get_slicesZ
  s   
... 
.2z_TestSlicing.test_get_slicesc                 C   sp   t j dd¡}z|  |¡ddd…ddd…f }W n ty$   t d¡‚w t| ¡ |ddd…ddd…f ƒ d S )NrM  r   é   r_   r¥  rÉ   úfeature not implemented)	rE   rˆ   rå  rÎ   rê   rî   rï   r   rŒ   )r“   Úv0r¯  r8   r8   r9   Ú test_non_unit_stride_2d_indexingg
  s   "
þ&z-_TestSlicing.test_non_unit_stride_2d_indexingc                 C   s¶  |   tdƒ dd¡¡}|  |¡}t|d |d ƒ t|d |d ƒ t|d |d ƒ t|tdƒdf |d ƒ t|dtdƒf |d ƒ t|tdƒtdƒf |d ƒ t|d	d d …f  ¡ |d	d d …f ƒ t|d	dd…f  ¡ |d	dd…f ƒ t|td	ƒdd…f  ¡ |d	dd…f ƒ t|d d …d	f  ¡ |d d …d	f ƒ t|d
d…df  ¡ |d
d…df ƒ t|dd…df  ¡ |dd…df ƒ t|d	d…d
f  ¡ |d	d…d
f ƒ t|d	d…td
ƒf  ¡ |d	d…d
f ƒ t|dd	…dd	…f  ¡ |dd	…dd	…f ƒ t|dd …d
d …f  ¡ |dd …d
d …f ƒ t|d d…d d…f  ¡ |d d…d d…f ƒ t|d	d…d d…f  ¡ |d	d…d d…f ƒ t|dd d …f  ¡ |dd d …f ƒ t|dd d …f  ¡ |dd d …f ƒ t|tdƒd d …f  ¡ |dd d …f ƒ t|dd…  ¡ |dd… ƒ t|dd…  ¡ |dd… ƒ ttd	ƒtdƒd ƒ}t||d d …f  ¡ |d	d…d d …f ƒ t|d d …|f  ¡ |d d …d	d…f ƒ d S )NrM  rK  rP   rZ  r[  rP  r¿   r  r_   rÉ   rS  r™  r¾   ri  )	rÝ   r   rÏ   rÎ   r   r   rŒ   rq  r   )r“   rM   rL   r¬  r8   r8   r9   Útest_slicing_2r
  s8   
&&*&&&&*....&&**.z_TestSlicing.test_slicing_2r_   c                    s„  |   tdƒ dd¡¡‰|  ˆ¡‰ tj}|d d… |dd… |dd … |dd d… |dd… |dd… |d	dd
… |dd d… |d dd
… dd|d d … |dd… d
ddtd
ƒt d¡g}‡ ‡fdd„}t|ƒD ]\}}||ƒ qg‡ ‡fdd„}t|ƒD ]\}}t|ƒD ]	\}}|||ƒ qƒq{g }	t	j
dgd Ž D ]\}}}
|
dkr¢q˜|	 t|||
ƒ¡ q˜|	D ]}|||ƒ ||dƒ |d|ƒ q®d S )NrM  rK  rP   r_   r¾   rÉ   rL  r¤  r˜  r¿   rS  r  r   ri  ru  c                    s^   ˆ |  }ˆ|  }|j dkrt||t| ƒƒ d S |jdkr#|jdkr#d S t| ¡ |t| ƒƒ d S ©Nr8   r   )r¦   r   rD  rd   r   rŒ   )rI   r=   r>   ©rL   rM   r8   r9   Úcheck_1«
  s   
z,_TestSlicing.test_slicing_3.<locals>.check_1c                    s¢   t | tjƒrt| ƒ}n| }t |tjƒrt|ƒ}n|}ˆ | |f }ˆ||f }|jdkr7t||t| |fƒƒ d S |jdkrC|jdkrCd S t| 	¡ |t| |fƒƒ d S r€  )
rD   rE   r	   r>  r¦   r   rD  rd   r   rŒ   )rI   rN   ÚaiÚbir=   r>   r�  r8   r9   Úcheck_2¹
  s   


z,_TestSlicing.test_slicing_3.<locals>.check_2)
Nr   r¾   r_   rK  rL  r¿   r  rK  iñÿÿÿ)rÝ   r   rÏ   rÎ   rE   Ús_r   r   Ú	enumerateÚ	itertoolsÚproductrG   rq  )r“   r†  Úslicesr‚  r±  rI   r…  rR  rN   Úextra_slicesra  r8   r�  r9   Útest_slicing_3Ÿ
  s:   
*$ü
ÿÿ

ýz_TestSlicing.test_slicing_3c                 C   sP  |   tdƒ dd¡¡}|  |¡}|d jdksJ ‚|d ddd…f jdks'J ‚|d	 jd
ks0J ‚|d jdks9J ‚|d jdksBJ ‚|d dd d …f jdksPJ ‚|dd d d …f jdks^J ‚|dd d …d f jdkslJ ‚|d dd…df j|d dd…df j  kr‡dksŠJ ‚ J ‚|dd…d df j|dd…d df j  kr¥dks¨J ‚ J ‚|dd…dd f j|dd…dd f j  krÃdksÆJ ‚ J ‚|d ddd…f j|d ddd…f j  krádksäJ ‚ J ‚|dd dd…f j|dd dd…f j  k�rdk�sJ ‚ J ‚|ddd…d f j|ddd…d f j  k�r!dk�s$J ‚ J ‚| j�r¨|dd…df j|dd…df j  k�rCdk�sFJ ‚ J ‚|ddd…f j|ddd…f j  k�radk�sdJ ‚ J ‚|d j|d j  k�rwdk�szJ ‚ J ‚|d j|d j  k�r�dk�s�J ‚ J ‚|d j|d j  k�r£dk�s¦J ‚ J ‚d S |ddd…f j|ddd…f j  k�rÃdk�sÆJ ‚ J ‚|dd…df j|dd…df j  k�rádk�säJ ‚ J ‚|d j|d j  k�r÷d
k�súJ ‚ J ‚|d j|d j  k�rd
k�sJ ‚ J ‚|d j|d j  k�r#d
k�s&J ‚ J ‚d S )NrM  rK  rP   rN  r   r¾   r_   rS  )Nr¾   r_   Nr¨  )Nr¾   rf  )r¾   N)rP   r¾   rÉ   ©r_   r¾   )r_   )Nr¾   r_   )r¾   )r¾   Nr_   )r¾   r_   N)rÝ   r   rÏ   rÎ   r«   r¦   ræ   )r“   rM   rL   r8   r8   r9   Útest_None_slicingâ
  s6   
<<<<@@<<,,0<<,,0z_TestSlicing.test_None_slicingc                 C   sÒ  |   tdƒ dd¡¡}|  |¡}t|d  ¡ |d ƒ t|d  ¡ |d ƒ t|d  ¡ |d ƒ t|d  ¡ |d ƒ t|d  ¡ |d ƒ tjtd	d
�� |d  W d   ƒ n1 s]w   Y  tjtdd
�� |d  W d   ƒ n1 sxw   Y  tjtd	d
�� |j	d  W d   ƒ n1 s”w   Y  t|dd …df  ¡ |dd …df ƒ t|ddd …f  ¡ |ddd …f ƒ t|d d…df  ¡ |d d…df ƒ t|dd d…f  ¡ |dd d…f ƒ t|d d…df  ¡ |d d…df ƒ t|dd d…f  ¡ |dd d…f ƒ t|dd …df  ¡ |dd …df ƒ t|ddd …f  ¡ |ddd …f ƒ t|dd …df  ¡ |dd …df ƒ t|ddd …f  ¡ |ddd …f ƒ t|dd …ddf  ¡ |dd …ddf ƒ t|dddd …f  ¡ |dddd …f ƒ t|dddd …f  ¡ |dddd …f ƒ t|d d…ddf  ¡ |d d…ddf ƒ t|ddd d…f  ¡ |ddd d…f ƒ t|ddd d…f  ¡ |ddd d…f ƒ t
|d |d ƒ t
|d |d ƒ d S )NrM  rK  rP   .).)rS  .).rS  ).rK  zindex .5. out of ranger*  )rK  .zindex .10. out of range).rP   r¾   r_   )r¾   r¾   .)r¾   .r¾   )rÝ   r   rÏ   rÎ   r   rŒ   rî   r   r*  r,  r   ©r“   rN   rI   r8   r8   r9   Útest_ellipsis_slicing  sD   

ÿ
ÿÿ&&&&&&&&&&******z"_TestSlicing.test_ellipsis_slicingc                 C   sd  |   tdƒ dd¡¡}|  |¡}g d¢}dgd | }|| }|gd }tt||df ƒ||df ƒ tt|d|f ƒ|d|f ƒ tt||df ƒ||df ƒ tt|d|f ƒ|d|f ƒ tt||d|f ƒ||d|f ƒ tt|d||f ƒ|d||f ƒ tt|||df ƒ|||df ƒ ttdd�� |||f  W d   ƒ d S 1 s«w   Y  d S )	NrM  rK  rP   )TFTFTF.zshape mismatchr*  )rÝ   r   rÏ   rÎ   r   rŒ   ré   rê   )r“   Únumpy_arI   Úix5Úix10Ú
ix10_6TrueÚfull_ixr8   r8   r9   Útest_ellipsis_fancy_bool/  s    

""""ÿz%_TestSlicing.test_ellipsis_fancy_boolc                 C   s´  |   tdƒ dd¡¡}|  |¡}t|dgdf  ¡ |dgdf ƒ t|ddgdf  ¡ |ddgdf ƒ t|ddgf  ¡ |ddgf ƒ t|dddgf  ¡ |dddgf ƒ t|dgddf  ¡ |dgddf ƒ t|ddgddf  ¡ |ddgddf ƒ t|dgddf  ¡ |dgddf ƒ t|ddgdf  ¡ |ddgdf ƒ tt|ddgdddgf ƒ|ddgdddgf ƒ tt|dddgddgf ƒ|dddgddgf ƒ d S )NrM  rK  rP   rS  .r_   r¾   )rÝ   r   rÏ   rÎ   r   rŒ   r�  r8   r8   r9   Útest_ellipsis_fancy_slicingE  s   
"&"&&*&&26z(_TestSlicing.test_ellipsis_fancy_slicingc                 C   sˆ   |   tdƒ dd¡¡}tjtdd�� |d  W d   ƒ n1 s!w   Y  tjtdd�� |d  W d   ƒ d S 1 s=w   Y  d S )NrÇ   rÉ   r_   z(an index can only have a single ellipsisr*  )..).r¾   .)rÎ   r   rÏ   rî   r   r*  ©r“   rI   r8   r8   r9   Útest_multiple_ellipsis_slicingV  s   ÿ
þÿ
"þz+_TestSlicing.test_multiple_ellipsis_slicingN)rŸ   r    r¡   rg  rk  ru  ry  rz  r~  r  rî   r2  Ú	fail_slowrŒ  rŽ  r�  r–  r—  r™  r8   r8   r8   r9   re  
  s    

-
B$)re  c                   @   r�   )Ú_TestSlicingAssignc                 C   s¼   |   d¡}t d¡}tƒ �@}| td¡ ||fD ]-}d|dd…df< d|dd…df< d|dd…df< d|ddd …f< d|dd d…dd …f< qW d   ƒ n1 sPw   Y  t| ¡ |ƒ d S )	Nr[  rÃ  r¾   r   rS  rÉ   r™  r¿   r^  r_  r8   r8   r9   Útest_slice_scalar_assignb  s   

ûþz+_TestSlicingAssign.test_slice_scalar_assignc                    sh   d\‰‰ ‡ ‡‡fdd„}dt dƒfdt d ddƒfdt dd	ƒftdƒt dd	ƒffD ]	\}}|||ƒ q(d S )
NrV  c                    sŒ   d| ›d|›�}ˆ  ˆˆ f¡}tƒ �}| td¡ d|| |f< W d   ƒ n1 s)w   Y  t ˆˆ f¡}d|| |f< t| ¡ ||d� d S )Nzi=z; j=rÃ  r¾   rµ  )rÎ   r   r  r'   rE   r   r   rŒ   )rR  r±  r4   rL   r  rM   rX  r8   r9   rY  r  s   þz9_TestSlicingAssign.test_slice_assign_2.<locals>._test_setr_   rÉ   rP   rS  rK  r  )rq  r   r\  r8   rX  r9   Útest_slice_assign_2o  s   $
ÿþz&_TestSlicingAssign.test_slice_assign_2c                 C   sL  |   d¡}tƒ �”}| td¡ d|d< d|d< d|d< d	|d
< |d	 }|dd d …f |dd d …f< t|dd d …f  ¡ |dd d …f  ¡ ƒ |d	 }|d d…d d…f |d d …d d …f< tt d¡|d  | ¡ ƒ |d	 }|d dd d …f j|d d…df< t|dd d …f  ¡ j|d d…df  ¡ ƒ W d   ƒ d S 1 sŸw   Y  d S )NrÛ  rÃ  r_   rŒ  r—  rN  rÉ   r�  rP   rª  r   r¾   r¿   )	rÎ   r   r  r'   r   rŒ   rE   r   r,  )r“   rM   r  rL   r8   r8   r9   Útest_self_self_assignment€  s"   
*$ ."ïz,_TestSlicingAssign.test_self_self_assignmentc                 C   sì   |   d¡}tg d¢g d¢g d¢g d¢gƒ}ddgddgg}tƒ �L}| td	¡ d
|d< d|d< d|d< || |d d …d d …f< t| ¡ |ƒ |  t|ƒ¡|d d…d d…f< t| ¡ d d…d d…f |ƒ W d   ƒ d S 1 sow   Y  d S )NrÛ  ©rP   r   r   )r   r   rÇ   )r   rP  r   r&  r¾   r   rS  rÃ  rK  rŒ  rÉ   rN  r—  r�  r_   )rÎ   r   r   r  r'   r   rŒ   r×   )r“   rM   r1  Úblockr  r8   r8   r9   Útest_slice_assignment–  s"   
ý "÷z(_TestSlicingAssign.test_slice_assignmentc                 C   s¦   |   d¡}tƒ �*}| td¡ d|d< d|d< d|d< d	|d
< |  t d¡¡|d d…< W d   ƒ n1 s5w   Y  tg d¢g d¢g d¢g d¢gƒ}t| 	¡ |ƒ d S )NrÛ  rÃ  rK  rŒ  rÉ   rN  r—  r�  rP   rª  r7  r¤  r†  rŸ  )
rÎ   r   r  r'   rØ   rE   r%   r   r   rŒ   )r“   rM   r  r1  r8   r8   r9   Ú"test_sparsity_modifying_assignment©  s   
ú z5_TestSlicingAssign.test_sparsity_modifying_assignmentc           
      C   s$  |   d¡}ttdtƒƒ}tj}|d d… |dd… |dd … |dd d… |ddd… |dd d… |d d	d… d
d|d d … |dd	… dddtdƒt d¡g}tƒ �±}| t	d¡ t
|ƒD ]\}}|||< |||< t| ¡ |t|ƒƒ q\t
|ƒD ]5\}}t
|ƒD ],\}}	d| d|d   |||	f< d| d|d   |||	f< t| ¡ |t||	fƒƒ qqwtdddƒ|d
ddd…f< tdddƒ|d
ddd…f< t| ¡ |ƒ t dd	d¡d d …d f |dd	d…d
f< t dd	d¡d d … |dd	d…d
f< t| ¡ |ƒ W d   ƒ n	1 �sw   Y  tt|jdttdƒƒƒ tt|jdtdƒƒ tt|jd
td ƒfttdƒƒƒ tt|jtd ƒdfttdƒƒƒ tt|jtd ƒdf| ¡ ƒ tt|jg d¢g d¢gg d¢fg d¢ƒ tt|jg d¢g d¢g d¢gg d¢g d¢gfg d¢ƒ tt|jtdƒd
fddgddggƒ d S )NrV  r_   r¾   rÉ   r˜  r¿   rS  r  rK  r   ri  ru  rÃ  rP   éè  rŒ  éd   r•  rÌ  rˆ  )rS  r¾   rÉ   ©r¾   r_   rS  )r   r¾   rÉ   rv  )rÎ   r   r   r$  rE   r†  r   r   r  r'   r‡  r   rŒ   rD  rò   r   ré   rê   rR  Úlistrq  r÷   )
r“   rL   rM   r†  rŠ  r  r±  rI   rR  rN   r8   r8   r9   Útest_set_slice¶  s`   
*$ýý($î
ÿ
ÿÿÿþÿz!_TestSlicingAssign.test_set_slicec                 C   sH   |   t d¡¡}|   d¡}||dd d…f< t| ¡ g d¢g d¢gƒ d S )NrZ  rN  r¾   r_   ©r¾   r¾   r¾   r†  )rÎ   rE   r„  r   rŒ   r­  r8   r8   r9   Útest_assign_emptyã  s   
z$_TestSlicingAssign.test_assign_emptyc                 C   s^   |   t d¡¡}t d¡}||d d …df< ||dd d …f< t| ¡ g d¢g d¢g d¢gƒ d S )Nr   rÉ   r   r¾   rË  r&  )rÎ   rE   r„  r   r   rŒ   ©r“   rL   r=   r8   r8   r9   Útest_assign_1d_sliceé  s
   
$z'_TestSlicingAssign.test_assign_1d_sliceN)rŸ   r    r¡   rœ  r�  rž  r¡  r¢  r§  r©  r«  r8   r8   r8   r9   r›  a  s    -r›  c                   @   sh   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )Ú_TestFancyIndexingz†Tests fancy indexing features.  The tests for any matrix formats
    that implement these features should derive from this class.
    c                 C   s”   t jt jt jt jfD ]=}| jd|d�}t|d d …ddgf j|ƒ t|g d¢d d …f j|ƒ t|d d …g f j|ƒ t|g d d …f j|ƒ q
d S )Nr'  rÈ   F)FFFrh  ri  r8   r8   r9   Ú#test_dtype_preservation_empty_indexö  s   ûz6_TestFancyIndexing.test_dtype_preservation_empty_indexc                 C   s^   |   t ddg¡¡}ttttf|jdƒ ttttf|jdƒ tttf|jg d¢g d¢fƒ d S )NrK  Úfoo©r_   r®  r•  rˆ  )rÎ   rE   r   ré   r*  rê   rV  rK  rm  r8   r8   r9   Útest_bad_index   s   ÿz!_TestFancyIndexing.test_bad_indexc                 C   sd
  |   tdƒ dd¡¡}|  |¡}t|dg  ¡ |dg ƒ t|ddg  ¡ |ddg ƒ t|ddgf  ¡ |ddgf ƒ t|dddgf  ¡ |dddgf ƒ t|dddgf  ¡ |dddgf ƒ t|tdƒddgf  ¡ |dddgf ƒ t|dtddgƒf  ¡ |dddgf ƒ t|tdƒtddgƒf  ¡ |dddgf ƒ t|d d …g d	¢f  ¡ |d d …g d	¢f ƒ t|dd
…dgf  ¡ |dd
…dgf ƒ t|dd
…ddgf  ¡ |dd
…ddgf ƒ t|dd
…tddgƒf  ¡ |dd
…ddgf ƒ t|dgdf  ¡ |dgdf ƒ t|ddgdf  ¡ |ddgdf ƒ t|ddgdf  ¡ |ddgdf ƒ t|tddgƒdf  ¡ |ddgdf ƒ t|ddgtdƒf  ¡ |ddgdf ƒ t|tddgƒtdƒf  ¡ |ddgdf ƒ t|dgd d …f  ¡ |dgd d …f ƒ t|ddgd d …f  ¡ |ddgd d …f ƒ t|ddgdd…f  ¡ |ddgdd…f ƒ t|tddgƒdd…f  ¡ |ddgdd…f ƒ tt|dgd
gf ƒ|dgd
gf ƒ tt|ddgdd
gf ƒ|ddgdd
gf ƒ tt|ddgddgf ƒ|ddgddgf ƒ tt|tddgƒddgf ƒ|ddgddgf ƒ tt|ddgtddgƒf ƒ|ddgddgf ƒ tt|tddgƒtddgƒf ƒ|ddgddgf ƒ t|dgdggdd
gf  ¡ |dgdggdd
gf ƒ t|dgdgdggddgf  ¡ |dgdgdggddgf ƒ t|tdgdgdggƒddgf  ¡ |dgdgdggddgf ƒ t|dgdgdggtddgƒf  ¡ |dgdgdggddgf ƒ t|tdgdgdggƒtddgƒf  ¡ |dgdgdggddgf ƒ t|ddg  ¡ |ddg ƒ t|ddg  ¡ |ddg ƒ t|tddgƒ  ¡ |ddg ƒ t|dgd d …f d d …d
gf  ¡ |dgd d …f d d …d
gf ƒ t|ddgd d …f d d …dd
gf  ¡ |ddgd d …f d d …dd
gf ƒ t|ddgd d …f d d …ddgf  ¡ |ddgd d …f d d …ddgf ƒ t|tddgƒd d …f d d …tddgƒf  ¡ |ddgd d …f d d …ddgf ƒ t|dddggf ddggdf  ¡ |dddggf ddggdf ƒ t|dddggf ddggdf  ¡ |dddggf ddggdf ƒ tjt	dd�� |d d…ddggf  W d   ƒ n	1 �s0w   Y  tjt	dd�� |ddggd d…f  W d   ƒ n	1 �sSw   Y  t|d d …ddgf dd
gd d …f  ¡ |d d …ddgf dd
gd d …f ƒ t|d d …ddgf ddgd d …f  ¡ |d d …ddgf ddgd d …f ƒ t|d d …tddgƒf tddgƒd d …f  ¡ |d d …ddgf ddgd d …f ƒ t
tdƒtd
ƒd ƒ}t||d d …f  ¡ |dd
…d d …f ƒ t|d d …|f  ¡ |d d …dd
…f ƒ tjdggtd�}t|||f  ¡ |||f ƒ t|g gg gf  ¡ |g gg gf ƒ d S )NrM  rK  rP   rÉ   r¾   r¿   r_   ri  )r_   r˜  rÉ   r¿   rS  r™  rk  r˜  ru  r  r   zOnly 1D or 2D arrays allowedr*  rÈ   )rÝ   r   rÏ   rÎ   r   rŒ   r   rî   r   r*  rq  r   rE   r>  )r“   rM   rL   r¬  rR  r8   r8   r9   Útest_fancy_indexing  s¾   
"&&**..*.2"&&**.*..2&..,ÿ,ÿ0ÿ6þ"þ"þ&þ"FHÿHÿ."þ@ÿ@ÿÿÿHÿHÿ."þ***z&_TestFancyIndexing.test_fancy_indexingc                 C   sÜ   t j d¡ d}d}d}|  t j ||¡¡}t  ||dk¡}t jj| d ||d�}t jj| d ||d�}|  |¡}|||f }t|ƒrI| 	¡ }t
||||f ƒ || }	|| }
tt|j|	|fƒ tt|j||
fƒ d S )Nr]   rM  rÇ   rS  r–  r¾   r´  )rE   rˆ   r^   rÝ   rå  r|  ra   rÎ   r&   rŒ   r   ré   r*  rK  )r“   ÚNUM_SAMPLESr&  r)  r€  ÚIrˆ  r8  ÚSIJÚI_badÚJ_badr8   r8   r9   Útest_fancy_indexing_randomized„  s"   
z1_TestFancyIndexing.test_fancy_indexing_randomizedc              	   C   sö   d\}}|   t|| ƒ ||¡¡}|  |¡}tj|d td�}tj|d td�}tj|d td�}tj|d td�}d}	t ||t	d ƒf||t	d ƒf¡D ],\}
}t
|
t	ƒr[t
|t	ƒr[qLtjt|	d�� ||
|f }W d   ƒ n1 ssw   Y  qLd S )NrV  r¾   rÈ   r_   z(bool index .* has shape .* instead of .*r*  )rÝ   r   rÏ   rÎ   rE   r„  rë   rˆ  r‰  rq  rD   rî   r   r*  )r“   r&  r)  rM   rL   Úrow_longÚ	row_shortÚcol_longÚ	col_shortr+  rR  r±  ró   r8   r8   r9   Útest_missized_maskingž  s&   
þÿ€úz(_TestFancyIndexing.test_missized_maskingc           	      C   s¨  t j d¡ |  tdƒ dd¡¡}|  |¡}t jt jjdddd�t	d�}t jt jjdddd�t	d�}t jt jjddd	d�t	d�}t
t|| ƒ|| ƒ t
t|d d …|f ƒ|d d …|f ƒ t
t|| ƒ|| ƒ t
t||d
k ƒ||d
k ƒ t  g d¢¡}t  g d¢¡}t
t|||f ƒ|||f ƒ t jdt	d�}t jdt	d�}d|d< t jdt	d�}d|d< tt|j|ƒ tt|j|ƒ tt|j|ƒ tttf|j|dfƒ d S )Nr]   rM  rK  rP   r   r_   r´  rÈ   rV  r™  )TFTTF)
FTTFTFFFFF)rÇ   rp  TrO  )r¿   r   r¾   )rE   rˆ   r^   rÝ   r   rÏ   rÎ   r   ra   rë   r   rŒ   r   ré   r*  rK  rê   )	r“   rM   rL   r³  rˆ  r×  ÚZ1ÚZ2ÚZ3r8   r8   r9   Útest_fancy_indexing_boolean´  s,   
&z._TestFancyIndexing.test_fancy_indexing_booleanc           	      C   s  t j d¡ |  tdƒ dd¡¡}|  |¡}t jt jjdddd�t	d	�}|  
|¡}tt|| ƒ|| ƒ tt||d
k ƒ||d
k ƒ t jt jjdddd�t	d	�}t jt jjdddd�t	d	�}|  
|¡}|  
|¡}tt|j|ƒ tt|j|ƒ tttf|j|dfƒ d S )Nr]   rM  rK  rP   r   r_   rV  r´  rÈ   r™  )rK  rp  )rÇ   rP   r¾   )rE   rˆ   r^   rÝ   r   rÏ   rÎ   r   ra   rë   rØ   r   rŒ   ré   r*  rK  rê   )	r“   rM   rL   r×  ÚXspÚZrØ  ÚZspÚYspr8   r8   r9   Ú"test_fancy_indexing_sparse_booleanÔ  s   



z5_TestFancyIndexing.test_fancy_indexing_sparse_booleanc                 C   sd   |   tg d¢g d¢g d¢gƒ¡}t | d¡¡dk}t|d d …|f  ¡ ddgddgddggƒ d S )Nr7  r¤  r   r¾   )rÎ   r   rE   Úravelrá  r   rŒ   )r“   r”   Údesired_colsr8   r8   r9   Ú#test_fancy_indexing_regression_3087ë  s    0z6_TestFancyIndexing.test_fancy_indexing_regression_3087c                 C   s8   |   tddgddggƒ¡}tt|jdt ddg¡ƒ d S )Nr¾   r   rŒ  r_   )rÎ   r   ré   rê   rR  rE   r’   r8   r8   r9   Útest_fancy_indexing_seq_assignð  s   z1_TestFancyIndexing.test_fancy_indexing_seq_assignc                 C   s’   |   tddgddggƒ¡}tƒ � }| td¡ |ddgddgf |ddgddgf< W d   ƒ n1 s3w   Y  tt|ƒtddgddggƒƒ d S )Nr¾   r   r_   rÉ   rÃ  )rÎ   r   r   r  r'   r   rŒ   )r“   r”   r  r8   r8   r9   Útest_fancy_indexing_2d_assignô  s   &þ"z0_TestFancyIndexing.test_fancy_indexing_2d_assignc                 C   s  |   tdƒ dd¡¡}d|dd d …f< d|d d …df< d|d< |  |¡}t g d¢¡}tt|| ƒ|| ƒ tjg td	�}tt|| ƒ|| ƒ tt|||f ƒ|||f ƒ tjg d
¢td	�d d …d f }tt|||f ƒ|||f ƒ tt|||f ƒ|||f ƒ d S )NrM  rK  rP   r   r¾   r_   ©rÉ   rÇ   ©FFFFFrÈ   ©r   r¾   r_   rÉ   rS  ©	rÝ   r   rÏ   rÎ   rE   r   r   rŒ   r>  ©r“   rM   rL   r‰  rˆ  r8   r8   r9   Útest_fancy_indexing_emptyü  s   
"z,_TestFancyIndexing.test_fancy_indexing_emptyN)rŸ   r    r¡   rÔ   r­  r°  r±  r·  r¼  rÀ  rÅ  rÈ  rÉ  rÊ  rÐ  r8   r8   r8   r9   r¬  ñ  s    
} r¬  c                 c   sL   � t | dƒr	| jsdV  dS dV  | j ¡ }d| _|  ¡  t|| jdƒ dS )zIChecks that sorted indices property is retained through an operation
    Úhas_sorted_indicesNFz'Expected sorted indices, found unsorted)rY  rÑ  rQ  r÷   Úsort_indicesr   )r×  rQ  r8   r8   r9   Úcheck_remains_sorted  s   €
ÿrÓ  c                   @   rD  )Ú_TestFancyIndexingAssignc                 C   sD   |   t ddg¡¡}ttttf|jddƒ ttttf|jddƒ d S )NrK  r®  r_   r¯  )rÎ   rE   r   ré   r*  rê   rV  rR  rm  r8   r8   r9   Útest_bad_index_assign  s   z._TestFancyIndexingAssign.test_bad_index_assignc                    s’   d\‰‰ ‡ ‡‡fdd„}dt d ddƒft d¡t dd	ƒft d
dƒt dd	ƒffD ]	\}}|||ƒ q't d¡t d¡fdfD ]	\}}|||ƒ q=d S )NrV  c              	      s¦   ˆ  ˆˆ f¡}ˆ t ˆˆ f¡¡}tƒ �.}| td¡ d|| |f< t|ƒ� d|| |f< W d   ƒ n1 s6w   Y  W d   ƒ n1 sEw   Y  t| 	¡ |ƒ d S ©NrÃ  r¾   )
rÎ   rÝ   rE   r   r   r  r'   rÓ  r   rŒ   )rR  r±  rL   rM   r  rX  r8   r9   Ú_test_set_slice%  s   
ÿ€ýzI_TestFancyIndexingAssign.test_fancy_indexing_set.<locals>._test_set_slicerv  rP   rS  rÉ   rK  r  r_   )rÌ  r¥  )rq  rE   r   ©r“   r×  rR  r±  r8   rX  r9   Útest_fancy_indexing_set"  s   
þ ÿz0_TestFancyIndexingAssign.test_fancy_indexing_setc                    rF  )Nc                    sÚ   ˆ j d| d�}tƒ �Y}| td¡ |  d¡|ddgddgf< t| ¡ |  d¡d ƒ |  d¡|dd…dd…f< t| ¡ |  d¡d ƒ |  d¡|d	< t| ¡ |  d¡d |  d¡ ƒ W d   ƒ d S 1 sfw   Y  d S )
Nr[  rÈ   rÃ  r¾   r   r_   r  rS  r(  )rÎ   r   r  r'   rÈ  r   rá  rT  r©   r8   r9   rì   7  s   $"ùzD_TestFancyIndexingAssign.test_fancy_assignment_dtypes.<locals>.checkrL  rð   r8   r©   r9   Útest_fancy_assignment_dtypes6  s   ÿz5_TestFancyIndexingAssign.test_fancy_assignment_dtypesc              	   C   s   |   d¡}|   tddƒ¡}g d¢}d}t|ƒ}tƒ ��*}| td¡ t|ƒ�) ||df j|d|f< ||df j|d|f< ||df j|d|f< W d   ƒ n1 sRw   Y  t| 	¡ |j 	¡ ƒ |   d	¡}t|ƒ� d
dg|ddd…f< W d   ƒ n1 sw   Y  t| 	¡ g d¢g d¢gƒ |   d¡}t|ƒ� d
gdgg|dd…df< W d   ƒ n1 s±w   Y  t| 	¡ ddgdd
gddggƒ |   d¡}|  
t d¡¡}t|ƒ� ||fD ]}g d¢|g d¢g d¢f< qÜW d   ƒ n1 sõw   Y  t| 	¡ |ƒ |   d¡}t|ƒ� g d¢|d< W d   ƒ n	1 �sw   Y  t| ¡ dƒ |  
t d¡¡}g d¢|d< t| 	¡ |ƒ W d   ƒ d S 1 �sIw   Y  d S )NrÛ  rÉ   rS  rÛ  rÃ  r   r¾   r_   rZ  rP   r¤  r&  )r   rP   r¤  r'  r   r–  r•  )r•  rÛ  rÇ   )rÎ   r%   r   r   r  r'   rÓ  r,  r   rŒ   rÝ   rE   r   r   rá  )r“   rL   rM   Úi0Úi1Úi2r  rÒ   r8   r8   r9   Útest_sequence_assignmentE  sP   


ý

ÿ

ÿ 

ÿÿ

ÿ$Ýz1_TestFancyIndexingAssign.test_sequence_assignmentc                 C   s   |   tdƒ dd¡¡}d|dd d …f< d|d d …df< d|d< |  |¡}t g d¢¡}d	||< tt|ƒ|ƒ tjg td
�}d	||< tt|ƒ|ƒ d	|||f< tt|ƒ|ƒ tjg d¢td
�d d …d f }d	|||f< tt|ƒ|ƒ d	|||f< tt|ƒ|ƒ d S )NrM  rK  rP   r   r¾   r_   rË  rÌ  é*   rÈ   rÍ  rÎ  rÏ  r8   r8   r9   Útest_fancy_assign_emptyr  s$   
z0_TestFancyIndexingAssign.test_fancy_assign_emptyN)rŸ   r    r¡   rÕ  rÙ  rÚ  rÞ  rà  r8   r8   r8   r9   rÔ    s    -rÔ  c                   @   ra  )Ú_TestFancyMultidimc           	   
   C   sŒ  t  dgdgdgg¡t  g d¢¡ft  dgdgdgg¡t  g d¢g¡ft  g d¢g¡t  dgdgdgg¡ft  g d¢¡t  dgdgdgg¡ft  g d¢g d¢g¡t  g d¢g d¢g¡fg}|D ]d\}}t j d	¡ |  t j d
d¡¡}|  |¡}|||f }t|ƒr†| ¡ }t	||||f ƒ |d
 }|d }t
t|j||fƒ t
t|j||fƒ t
t|j||gtd ƒfƒ t
t|jtd ƒ||gfƒ q_d S )Nr¾   r_   rÉ   ©rÉ   rS  r_   r•  rS  ©rK  rÇ   rÉ   ©r_   rÉ   r¾   r]   rK  r—  )rE   r   rˆ   r^   rÝ   rå  rÎ   r&   rŒ   r   ré   r*  rK  rq  )	r“   Úsetsr³  rˆ  r€  r8  r´  rµ  r¶  r8   r8   r9   Útest_fancy_indexing_ndarray‹  s.   "$$"ÿû
îz._TestFancyMultidim.test_fancy_indexing_ndarrayN)rŸ   r    r¡   ræ  r8   r8   r8   r9   rá  Š  ó    rá  c                   @   r4  )
Ú_TestFancyMultidimAssignc           	      C   s’  t j d¡ |  t j dd¡¡}|  |¡}t j dd¡}t  g d¢g d¢g¡}t  g d¢g d	¢g¡}t|ƒ� ||||f< W d   ƒ n1 sGw   Y  ||||f< t| 	¡ |ƒ |d }|d }g d¢}t|ƒ� ||||f< W d   ƒ n1 szw   Y  ||||f< t| 	¡ |ƒ t|ƒ� d|||f< W d   ƒ n1 s¡w   Y  d|||f< t| 	¡ |ƒ t
t|j||f|ƒ t
t|j||f|ƒ d S )
Nr]   rK  r—  r_   rÉ   r•  râ  rã  rä  )rE   rˆ   r^   rÝ   rå  rÎ   r   rÓ  r   rŒ   ré   r*  rR  ©	r“   r€  r8  r×  r³  rˆ  rµ  r¶  rÒ   r8   r8   r9   Útest_fancy_assign_ndarray®  s4   

ÿ
ÿ
ÿz2_TestFancyMultidimAssign.test_fancy_assign_ndarrayc                    sŠ   d\‰‰ ‡ ‡‡fdd„}t  ddgddgg¡ddgft  ddg¡ddgddggfg d	¢g d
¢gg d¢g d¢gffD ]	\}}|||ƒ q9d S )NrV  c              	      s¦   ˆ  ˆˆ f¡}t|ƒ�' tƒ �}| td¡ d|| |f< W d   ƒ n1 s&w   Y  W d   ƒ n1 s5w   Y  ˆ t ˆˆ f¡¡}d|| |f< t| 	¡ |ƒ d S rÖ  )
rÎ   rÓ  r   r  r'   rÝ   rE   r   r   rŒ   )rR  r±  rL   r  rM   rX  r8   r9   r×  Ò  s   þ€ zR_TestFancyMultidimAssign.test_fancy_indexing_multidim_set.<locals>._test_set_slicer¾   r_   rÉ   r   rS  r•  ©r   r_   rS  )r   rS  rÉ   )rS  r¾   r_   )rE   r   rØ  r8   rX  r9   Ú test_fancy_indexing_multidim_setÏ  s   	þýz9_TestFancyMultidimAssign.test_fancy_indexing_multidim_setc           	      C   s  t j d¡ |  t j dd¡¡}|  |¡}t j dd¡}g d¢g d¢g}g d¢g d	¢g}||||f< ||||f< t| ¡ |ƒ d
d„ |D ƒ}dd„ |D ƒ}g d¢}||||f< ||||f< t| ¡ |ƒ d|||f< d|||f< t| ¡ |ƒ tt	|j
||f|ƒ tt	|j
||f|ƒ d S )Nr]   rK  r—  r_   rÉ   r•  râ  rã  rä  c                 S   ó   g | ]	}d d„ |D ƒ‘qS )c                 S   ó   g | ]}|d  ‘qS ©rK  r8   ©rÐ  Úiir8   r8   r9   rt  î  rÓ  úN_TestFancyMultidimAssign.test_fancy_assign_list.<locals>.<listcomp>.<listcomp>r8   )rÐ  rR  r8   r8   r9   rt  î  ó    zC_TestFancyMultidimAssign.test_fancy_assign_list.<locals>.<listcomp>c                 S   rí  )c                 S   rî  ©r—  r8   ©rÐ  Újjr8   r8   r9   rt  ï  rÓ  rò  r8   )rÐ  r±  r8   r8   r9   rt  ï  ró  )rE   rˆ   r^   rÝ   rå  rÎ   r   rŒ   ré   r*  rR  ré  r8   r8   r9   Útest_fancy_assign_listà  s(   
z/_TestFancyMultidimAssign.test_fancy_assign_listc           	      C   s¨   t j d¡ |  t j dd¡¡}|  |¡}g d¢}g d¢}dd„ |D ƒ}dd„ |D ƒ}g d	¢}t  d¡d d …d f }tt|j	|t
d ƒf|ƒ tt|j	t
d ƒ|f|ƒ d S )
Nr]   rK  r—  )r¾   r_   rÉ   rÉ   rS  r_   )rK  rÇ   rÉ   r_   rÉ   r¾   c                 S   rî  rï  r8   rð  r8   r8   r9   rt    rÓ  zD_TestFancyMultidimAssign.test_fancy_assign_slice.<locals>.<listcomp>c                 S   rî  rô  r8   rõ  r8   r8   r9   rt    rÓ  )r¾   r_   rÉ   rS  rK  rÇ   r—  )rE   rˆ   r^   rÝ   rå  rÎ   r   ré   r*  rR  rq  )	r“   r€  r8  r³  rˆ  rµ  r¶  ÚC1ÚC2r8   r8   r9   Útest_fancy_assign_sliceý  s   
z0_TestFancyMultidimAssign.test_fancy_assign_sliceN)rŸ   r    r¡   rê  rì  r÷  rú  r8   r8   r8   r9   rè  ­  s
    !rè  c                   @   s4   e Zd ZdZdd„ Zej d¡dd„ ƒZdd„ Z	d	S )
Ú_TestArithmeticz&
    Test real/complex arithmetic
    c                 C   sØ   t g d¢g d¢g d¢g d¢gdƒ}t g d¢g d¢g d¢g d	¢gd
ƒ}t g d¢g d¢g d¢g d¢gdƒ|_t|d  d¡d| ƒ t|jd  d¡d|j ƒ t|jd  d¡d|j ƒ |  |¡}|  |¡}||||fS )N)g      ø¿g      @r   ç      @r   r   )g      	@g     €Àg      ä?r   r   r   )r   r   ç      À¿r  r   r   )r   r   g     À @r   r   r   rÊ   )g      Ø?r   r   r   ri  g      @)g     €,@g      Àr   r   rý  r   )r   g      @r   r   r   r   )g     €2@ç      °¿r   r   r   r   rÍ   )g      ô?r   r   r   rÇ   g      À)rü  ç     €@r   r   r   g      @)r   rÿ  r   r   r   r   )rþ  r   r   r   r   r   é   rS   )r   rƒ  r   rm   r~  rÎ   )r“   Ú_TestArithmetic__AÚ_TestArithmetic__BÚ_TestArithmetic__AspÚ_TestArithmetic__Bspr8   r8   r9   Ú__arith_init  s6   ýýýýýý

z_TestArithmetic.__arith_initr¤  c              
   C   s~  |   ¡ \}}}}t||  ¡ || ƒ tD ]§}tjdd�� | |¡}W d   ƒ n1 s-w   Y  |  |¡}tD ]‚}t |tj	¡s_tjdd�� |j
 |¡}	W d   ƒ n1 sYw   Y  n| |¡}	|  |	¡}
||	 }||
 }t|j|jƒ t| ¡ |ƒ t||	 |ƒ t||
 |ƒ t d¡||fv r—q9||	 }||
 }t|j|jƒ t| ¡ |ƒ t||	 |ƒ t||
 |ƒ q9qd S )Nr  r  rë   )Ú_TestArithmetic__arith_initr   rŒ   r*   rE   r  rm   rÎ   re   rä  r~  r   r<   ©r“   r  r  r  r  r=   rL   rÖ  r>   rM   r}  ÚD1ÚS1r8   r8   r9   Útest_add_sub+  sB   ÿÿ
ÿ€

äüz_TestArithmetic.test_add_subc              
   C   s  |   ¡ \}}}}t||j  ¡ ||j ƒ tD ]u}tjdd�� | |¡}W d   ƒ n1 s/w   Y  |  |¡}tD ]P}t 	|tj
¡rJ| |¡}	ntjdd�� |j |¡}	W d   ƒ n1 saw   Y  |  |	¡}
||	j }||
j }t| ¡ |dt|ƒ ¡  d� t|j|jƒ q;qd S )Nr  r  g›+¡†›„=)Úatol)r  r   r,  rŒ   r*   rE   r  rm   rÎ   re   rä  r~  r   rl  rR   r   r<   r  r8   r8   r9   Útest_muW  s0   ÿÿ
ÿ



ÿóüz_TestArithmetic.test_muN)
rŸ   r    r¡   rÔ   r  rî   r2  rš  r
  r  r8   r8   r8   r9   rû    s    

+rû  c                   @   r¬   )Ú_TestMinMaxc                 C   sú  t jt jt jt jt jfD ]^}t jd|d� dd¡}|  |¡}t	| 
¡ dƒ t	| ¡ dƒ t	| 
¡ j|ƒ t	| ¡ j|ƒ |d9 }|  |¡}t	| 
¡ dƒ t	| ¡ dƒ |d7 }|  |¡}t	| 
¡ d	ƒ t	| ¡ dƒ q|  t  d
d¡ dd¡¡}t	| 
¡ d
ƒ t	| 
¡ j|jƒ | }t	| ¡ dƒ |  t  d¡¡}t	| 
¡ dƒ t	| ¡ dƒ t	| ¡ j|jƒ t jdtd� dd¡}d|dd…d d …f< |  |¡}t	| 
¡ dƒ t	| ¡ dƒ t  d¡t  d¡t  d¡fD ]}|  |¡}tt|j
ƒ tt|jƒ qçd S )Nr¤  rÈ   rK  rS  r   é   r¿   iíÿÿÿiòÿÿÿr¾   rP   rÉ   r¨  r_   rŒ  ©r   rP   ©rP   r   )rE   rÌ   rÊ   rS   r`   rÍ   r   rÏ   rÎ   r   rg   rR   r<   r   r$  ré   rê   )r“   r<   r€  r×  rÂ  r8   r8   r9   Útest_minmaxs  sD   



 
ýz_TestMinMax.test_minmaxc                 C   sâ  | j  }t d¡ dd¡}d|dd d …f< d|d d …df< d|d< d|d	< |  |¡}dd
g}ddg}|| D ]"}t|j|d� ¡ |j||d�ƒ t|j|d� ¡ |j||d�ƒ q6|D ]6}t	|j|dd� ¡ |  
g d¢¡ƒ t |jdk¡r~|  
g d¢¡}n|  
g d¢¡}t	|j|dd� ¡ |ƒ q[|D ]5}t g d¢¡}t g d¢¡}	| j s±| d¡}|	 d¡}	t	|j|dd� ¡ |ƒ t	|j|dd� ¡ |	ƒ q”t dd¡ dd¡}|  |¡}|| D ]"}t|j|d� ¡ |j||d�ƒ t|j|d� ¡ |j||d�ƒ qÝ|D ]A}|dd d …f }|dd d …f }	| j �s*|d dd d …f }|d dd d …f }	t	|j|dd� ¡ |ƒ t	|j|dd� ¡ |	ƒ �q|D ]A}|d d …df }|d d …df }	| j �sn|d d …dd f }|d d …dd f }	t	|j|dd� ¡ |ƒ t	|j|dd� ¡ |	ƒ �qF|  
t d¡¡}|  |¡}|| D ]#}t	|j|dd� ¡ |j|d�ƒ t	|j|dd� ¡ |j|d�ƒ �q™|  
t d¡¡}|  |¡}ddg}
tt ||
¡ƒ}tt ||
¡ƒ}|D ]\}}tt|j||d� tt|j||d� �qà|D ]%\}}t	|j||d� ¡ |j|d�ƒ t	|j||d� ¡ |j|d�ƒ �qú|  
t d¡¡}|  |¡}|D ]\}}tt|j||d� tt|j||d� �q/|D ]%\}}t	|j||d� ¡ |j|d�ƒ t	|j||d� ¡ |j|d�ƒ �qId S )NrM  rK  rP   r   r¾   r™  r   r¿   r(  r  r$  r  T©r%  Úexplicit)
r‹  é)   rß  é+   é,   é-   é.   é/   é0   r   )
r¤  r¾   r¿   rÉ   rS  rK  r   r—  r˜  r   )
r¤  r¾   r¿   rÉ   rS  rK  rÇ   r—  r˜  r   )r˜  r   é   é&   r  )r¾   r   r¿   r¥  r‹  r½  é3   )rP   rK  r  Fr  )ræ   rE   r   rÏ   rÎ   r   rR   rŒ   rg   r   rÝ   ÚanyrS  r   r   r¦  rˆ  r‰  ré   rê   )r“   r  r€  r×  Ú	axes_evenÚaxes_oddr%  r1  Úexpected_maxÚexpected_minÚexplicit_valuesÚeven_explicit_pairsÚodd_explicit_pairsÚexr8   r8   r9   Útest_minmax_axis¢  s¦   
ÿÿþ


ÿÿ
 $
 $
 $þz_TestMinMax.test_minmax_axisc           	      C   s8  | j t d¡ dd¡td�}d|dd d …f< d|d d …df< d|d< d	|d
< tj|d< tj|d< |  |¡}| ¡ }t |¡s@J ‚|t |¡ksIJ ‚| 	¡ }t |¡sTJ ‚|t 	|¡ks]J ‚g d¢}|D ]6}|j|d�}t
| ¡ tj||d�ƒ t|| jƒsJ ‚|j	|d�}t
| ¡ tj	||d�ƒ t|| jƒs™J ‚qcd S )NrM  rK  rP   rÈ   r   r¾   r™  r   r¿   r(  rÇ  )r¾   rS  )r  r¿   r   r¾   r$  )rÝ   rE   r   rÏ   r$  rø   rÎ   Únanmaxrâ  Únanminr   rŒ   rD   rÖ   )	r“   r€  r×  ÚX_nan_maximumÚX_nan_minimumr/  r%  ÚX_nan_maximaÚX_nan_minimar8   r8   r9   Útest_nanminmax  s.   


ùz_TestMinMax.test_nanminmaxc                 C   sv   t g d¢g d¢g d¢gƒ}|  |¡}dD ]$}t||ƒ}tt|dd� tt|dd� tt|dd� tt|d	d	d
� qd S )NrÛ  rÜ  rÝ  )rg   rR   rÉ   r$  rî  rï  r¾   rð  )r   rÎ   r~   ré   rê   rV  )r“   rÂ   rÀ   Úfnamer€   r8   r8   r9   Útest_minmax_invalid_params#  s   þ

ûz&_TestMinMax.test_minmax_invalid_paramsc                 C   sp   ddl m} tg d¢g d¢g d¢gƒ}|  |¡}t||jƒr6tt |¡t |¡ƒ tt 	|¡t 	|¡ƒ d S d S )Nr   ©Ú_datarÛ  rÜ  rÝ  )
Úscipy.sparser2  r   rÎ   rD   Ú_minmax_mixinr   rE   rg   rR   )r“   r2  rÂ   rÀ   r8   r8   r9   Útest_numpy_minmax0  s   þ
þz_TestMinMax.test_numpy_minmaxc              	   C   s  ddl m} t g d¢g d¢g d¢g d¢g d¢g¡}| ¡ }t dd	gd
dgg¡}t dd	gd
dgg¡}t g d¢g d¢g d¢g¡}|||||fD ]_}|  |¡}|  |¡}t||jƒs\qIt	| 
¡ t 
|¡ƒ t	| ¡ t |¡ƒ t	|j
dd�tj
|dd�ƒ t	|jdd�tj|dd�ƒ t	|j
dd�tj
|dd�ƒ t	|jdd�tj|dd�ƒ qI|  t d¡¡}	|  t d¡¡}
ddg}t |	|
gg d¢|¡D ]y\}}}|d u sÙ|j| dk�rtjtdd�� |j
||d� W d   ƒ n1 sòw   Y  tjtdd�� |j||d� W d   ƒ n	1 �sw   Y  qÈ| j�r!t d¡}nt |dk�r*dnd¡}t	|j||d�|ƒ t	|j
||d�|ƒ qÈ|  |¡}t	|j
ddd�|  g d¢¡ƒ t	|jddd�|  g d¢¡ƒ t g d¢¡}t g d¢¡}|jdk�r}d |d!< | j�s‹| d"¡}| d"¡}t	|j
ddd�|ƒ t	t|jddd�ƒ|ƒ t d#¡}|  |¡}|jdk�rÇt	|jd dd�dƒ t	|j
d dd�dƒ d S tjtdd�� |jd dd� W d   ƒ n	1 �sáw   Y  tjtdd�� |j
d dd� W d   ƒ d S 1 �sw   Y  d S )$Nr   r1  )r¿   rK  r_   rÉ   )r   r   r¿   r  )r¿   r  ru  rk  rˆ  )r¾   r_   r   r   rS  rÉ   r—  rK  )rK  rK  rÉ   )rS  r™  rP   )rÉ   rS  r™  r$  r¾   r�  r»  TFrö   zCannot applyr*  r  rî  r©  )rÉ   r   rÉ   rÉ   )r   r_   r_   r_   )r¾   r_   r   rÉ   r¾   )r   rÉ   rÉ   r   r   r   r_   r¿   r½  r(  )r3  r2  rE   r   r
   rÝ   rÎ   rD   r4  r   ÚargmaxÚargminr�  rˆ  r‰  r¦   rî   r   rê   ræ   r   r'  rÏ   r   )r“   r2  r  ÚD2ÚD3ÚD4ÚD5r€  r”   ÚD6ÚD7Ú	explicitsr%  r&  r1  r!  r"  r8   r8   r9   Útest_argmaxB  s~   û

 ÿÿ€




ÿ$ÿz_TestMinMax.test_argmaxN)	rŸ   r    r¡   r  r'  r.  r0  r5  r?  r8   r8   r8   r9   r  r  s    /er  c                   @   ra  )Ú_TestGetNnzAxisc                 C   s.  t ddgddgddggƒ}| t¡}|  |¡}tjtjf}| jr#|jn|j	}t
|jd d�|d d�ƒ t
| ¡ |ƒ ƒ t
|jdd�|dd�ƒ t|dd�j|ƒ t
|jdd�|dd�ƒ t|dd�j|ƒ t
|jd	d�|d	d�ƒ t|d	d�j|ƒ t
|jd
d�|d
d�ƒ t|d
d�j|ƒ tt|dd� d S )Nr   r_   rÉ   rK  rÞ  r™  r$  r¾   r  r¿   )r   rm   rë   rÎ   rE   rS   r`   ræ   r(  Úgetnnzr   rá  r:   r<   ré   rê   )r“   rÂ   Úbool_datrÀ   Úaccepted_return_dtypesrA  r8   r8   r9   Útest_getnnz_axis“  s&   þ

z _TestGetNnzAxis.test_getnnz_axisN)rŸ   r    r¡   rD  r8   r8   r8   r9   r@  ’  rç  r@  Tc                 C   sX   |r| S dd„ }t | jƒ}| j ¡ D ]\}}| d¡r!||ƒ||< qt| jd | j|ƒS )z…
    Construct a class that either runs tests as usual (require=True),
    or each method skips if it encounters a common error.
    c                    s   t  ˆ ¡‡ fdd„ƒ}|S )Nc                     s4   zˆ | i |¤ŽW S  t ttttfy   t d¡‚w )Nr|  )r-  rV  rê   r*  r«  rî   rï   )rI   r�   ©Úfcr8   r9   Úwrapper¸  s   
ÿ
þz6_possibly_unimplemented.<locals>.wrap.<locals>.wrapper)Ú	functoolsÚwraps)rF  rG  r8   rE  r9   Úwrap·  s   z%_possibly_unimplemented.<locals>.wrapÚtest_ÚNotImplemented)ÚdictrB   r  Ú
startswithrÈ  rŸ   Ú	__bases__)rç   ÚrequirerJ  Únew_dictr…   r€   r8   r8   r9   Ú_possibly_unimplemented¯  s   

€
þrR  c	                 C   sÆ   t tt| ƒttttt|ƒtt|ƒtt|ƒtt	|ƒtt
|o|ƒtt|o#|ƒtt|ƒtt|ƒf}	i }
|	D ]*}|jD ]$}| d¡s?q7|
 |¡}|durWtd|j› d|› d|j› �ƒ‚||
|< q7q2td|	i ƒS )zˆ
    Construct a base class, optionally converting some of the tests in
    the suite to check that the feature is not implemented.
    rK  NzTest class z overloads test z defined in ÚTestBase)rÞ   rR  rE  rb  r5  rû  re  r›  r¬  rÔ  rá  rè  r  r@  rB   rN  Úgetrê   rŸ   rÈ  )ÚgetsetÚslicingÚslicing_assignÚfancy_indexingÚfancy_assignÚfancy_multidim_indexingÚfancy_multidim_assignÚminmaxÚnnz_axisÚbasesÚnamesrç   r…   Úold_clsr8   r8   r9   Úsparse_test_classË  sF   ÿÿÿñ


ÿÿ
ù	ra  c                   @   s¼   e Zd Zedd„ ƒZejejejej	gZ
dd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'S )(ÚTestCSRc                 O   óD   t ƒ �}| td¡ t|i |¤ŽW  d   ƒ S 1 sw   Y  d S ©NrÃ  )r   r  r'   r   ©rç   Úargsr?   r  r8   r8   r9   rÎ   ø  ó   $þzTestCSR.spcreatorc                 C   s€   t g d¢g d¢g d¢gdƒ}|  |¡}t|jg d¢ƒ t|jg d¢ƒ t|jg d¢ƒ t|jdƒ t|j	d	ƒ t| 
¡ |ƒ d S )
N)r   rS  r   r£  rH  rß   )rS  rÉ   r_   rÊ  rœ  rÉ   r  )r   rØ   r   rS  r   rQ  rR  r   r'  rÑ   rŒ   ©r“   rN   rÂ  r8   r8   r9   Útest_constructor1ÿ  s   þþ
zTestCSR.test_constructor1c                 C   sZ   t ddƒ}d|d< |  |¡}t|jdgƒ t|jdgƒ t|jg d¢ƒ t| ¡ |ƒ d S )N©rÇ   rÇ   rß   rK  r©  rS  )r   r   r   r   r¾   r¾   r¾   )r   rØ   r   rS  r   rQ  rR  rŒ   rh  r8   r8   r9   Útest_constructor2  s   

zTestCSR.test_constructor2c                 C   sh   t ddgddgddggdƒ}|  |¡}t|jg d¢ƒ t|jg d¢ƒ t|jg d¢ƒ t| ¡ |ƒ d S )	Nr¾   r   r_   rÉ   rß   r•  r¤  rœ  )r   rØ   r   rS  r   rQ  rR  rŒ   rh  r8   r8   r9   Útest_constructor3  s   þþ
zTestCSR.test_constructor3c                 C   sÖ   t g d¢ƒ}t g d¢ƒ}t g d¢ƒ}t||fƒ}|  ||fd¡}ttdƒ dd¡| ¡ ƒ | jdd	gd
d	gd
d	gfftjd�}t dd
gd
d	ggtjd�}t|| ¡ ƒ |  g d¢g d¢g d¢ff¡}|j	dksiJ ‚d S )N©r_   rÉ   r¾   rÉ   r   r¾   rÉ   r   r_   r¾   r_   ©r   r¾   r   r   r¾   r¾   r_   r_   r_   r_   r¾   ©g      @g      $@r  g      "@r  r<  g      &@r   g       @g      @r2  rÛ  rž  rS  rÉ   ì           r¾   r   rÈ   ©r¾   r¾   r¾   r¾   ©r   r_   r_   r   ©r   r¾   r¾   r   r_   )
r   r   rØ   r   r   rÏ   rŒ   rE   Úuint64r'  )r“   rT  rU  rS  rÑ  r  rÎ  r8   r8   r9   Útest_constructor4  s   $zTestCSR.test_constructor4c                 C   óD   t g d¢ƒ}t g d¢ƒ}t g d¢ƒ}|  |||f¡}t|jdƒ d S ©N©r   r¾   rÉ   rÉ   ©r   rK  r¾   r_   rˆ  rË  )r   rØ   r   r¦   ©r“   rR  rQ  rS  r  r8   r8   r9   Útest_constructor52  ó
   zTestCSR.test_constructor5c                 C   óL   g d¢}g d¢}g d¢}|   |||f¡}t|jdƒ tt |jtj¡ƒ d S rw  )rØ   r   r¦   r   rE   re   r<   Úsignedintegerrz  r8   r8   r9   Útest_constructor6:  ó   zTestCSR.test_constructor6c                 C   s¦   t dƒd }tg d¢tjd�}tg d¢tjd�}| j|||fdd�}tg d¢g d	¢g d
¢gdƒ}t | jr8tjntj¡}t|j	j|ƒ t|j
j|ƒ t| ¡ |ƒ d S )NrÇ   r¾   )r¾   r_   r¾   r   r   r_   rÈ   ©r   r_   rS  rÇ   r   ©r¦   rÛ  rG  )rK  r   rÇ   rß   )r   r   rE   r`   rØ   r<   ræ   rS   r   rR  rQ  r   rŒ   )r“   rS  rU  ÚptrrI   rN   Úexpected_dtyper8   r8   r9   Útest_constructor_smallcolC  s   þþz!TestCSR.test_constructor_smallcolc                 C   sª   t dƒd }t tj¡jd }tddd||d |d gtjd�}tg d¢tjd�}|  |||f¡}t|j	j
t 
tj¡ƒ t|jj
t 
tj¡ƒ t|jdt|ƒd fƒ d S )	NrÇ   r¾   r¤  r   r_   rÈ   r�  rÉ   )r   rE   rQ   rS   rR   r   r`   rØ   r   rR  r<   rQ  r   r¦   )r“   rS  ÚlargerU  rƒ  rI   r8   r8   r9   Útest_constructor_largecolU  s   "z!TestCSR.test_constructor_largecolc                 C   sj   t dƒ}tg d¢ƒ}tg d¢ƒ}| j|||fdd�}| ¡ }| ¡  t|jg d¢ƒ t| ¡ | ¡ ƒ d S )NrK  ©r—  r_   r¾   rK  rS  ©r   rÉ   rK  ©r_   rP   r‚  ©r¾   r_   r—  rS  rK  )r   r   rØ   r÷   rÒ  r   rQ  rŒ   ©r“   rS  rQ  rR  rÁ  rÂ  r8   r8   r9   Útest_sort_indicesb  s   zTestCSR.test_sort_indicesc                 C   óz   t g d¢ƒ}t g d¢ƒ}t g d¢ƒ}| j|||fdd�}| ¡ }| ¡  t|jdƒ t|jg d¢ƒ t| ¡ | ¡ ƒ d S )N©r¾   r   r   r   r_   r   rÉ   r   ©r¾   r_   rÉ   rS  rK  rÇ   r—  r˜  ©r   rÉ   r˜  rŠ  r‚  rÉ   r•  )r   rØ   r÷   Úeliminate_zerosr   r'  rS  rŒ   rŒ  r8   r8   r9   Útest_eliminate_zerosl  ó   zTestCSR.test_eliminate_zerosc                 C   óŽ   |   t d¡ dd¡d ¡}dD ]4}tt| j|ƒdƒ t||ƒƒ }t|j|jƒ t	|j
|j
ƒ t	|j|jƒ t	| ¡ tt|ƒ| ¡ ƒƒ qd S )Nr¤  rS  rK  r  ©r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  T)rØ   rE   r   rÏ   r   rY  rÀ   r~   r¦   r   rQ  rR  rŒ   ©r“   r×  rc  r  r8   r8   r9   Útest_ufuncsw  ó   øzTestCSR.test_ufuncsc                 C   óŠ   t dƒ}tg d¢ƒ}tg d¢ƒ}| j|||fdd�}t dƒ}tg d¢ƒ}tg d¢ƒ}| j|||fdd�}t||  ¡ | ¡ | ¡  ƒ d S )	NrK  rˆ  r‰  rŠ  r‚  rÇ   ©r˜  r¾   rK  r—  r_   rS  ©r   r_   rÇ   )r   r   rØ   r   rŒ   rŒ  r8   r8   r9   Útest_unsorted_arithmeticƒ  ó   "z TestCSR.test_unsorted_arithmeticc                 C   ó€   t  dgdgdgg¡}t  g d¢¡}t j d¡ |  t j dd¡¡}|  |¡}|||f }t|ƒr5| ¡ }t	||||f ƒ d S ©Nr¾   r_   rÉ   râ  r]   rK  r—  ©
rE   r   rˆ   r^   rÝ   rå  rÎ   r&   rŒ   r   ©r“   r³  rˆ  r€  r8  r´  r8   r8   r9   Útest_fancy_indexing_broadcastŽ  ó   
z%TestCSR.test_fancy_indexing_broadcastc                 C   sò   t  ddg¡}t  ddg¡}t  ddg¡}t  ddg¡}|  |||f¡ ¡ }td|jƒ t|jtƒs4J ‚|  |||f¡ ¡ }td|jƒ | ¡  td|jƒ t	|j
|ƒ |  |||f¡ ¡ }d|_td|jƒ t	|j
|ƒ | ¡  t	|j
|ƒ dS )z@Ensure has_sorted_indices memoizes sorted state for sort_indicesr   r¾   r_   TFN)rE   r   rØ   r÷   r   rÑ  rD   rë   rÒ  r   rQ  )r“   Úsorted_indsÚunsorted_indsrS  rR  r&  r8   r8   r9   Útest_has_sorted_indicesœ  s$   zTestCSR.test_has_sorted_indicesc                 C   s  |   t dg¡t dg¡t ddg¡f¡}td|jƒ t ddg¡}t ddg¡}t ddg¡}|   |||f¡ ¡ }td|jƒ t|jtƒsHJ ‚| ¡  td|jƒ tdt	|j
ƒƒ |   |||f¡ ¡ }d|_td|jƒ tdt	|j
ƒƒ | ¡  tdt	|j
ƒƒ dS )z=Ensure has_canonical_format memoizes state for sum_duplicatesr_   r   r¾   TFN)rØ   rE   r   r   Úhas_canonical_formatr÷   rD   rë   Úsum_duplicatesrª   rQ  )r“   r&  rQ  rS  rR  r8   r8   r9   Útest_has_canonical_format¸  s"   *z!TestCSR.test_has_canonical_formatc                 C   s  t jdt jd�}t jdt jd�}t  d¡}| j|||fdd�}| j|||fdd�}t jdt jd�}| j||fdd�}| j||fdd�}|  d¡}	|  d¡}
t|jjt jƒ t|jjt jƒ t|jjt jƒ t|jjt jƒ t|	jjt jƒ t|
jjt jƒ |||||	|
fD ]}||  q…d S )Nr_   rÈ   r   ©r¾   éÿÿÿr‚  ©r¾   ì        rÆ  )rE   r   rS   rØ   r   rR  r<   r`   ©r“   rR  rQ  ÚvalsrI   rN   rÑ  ra  rß   rb  rc  r=   r8   r8   r9   Útest_scalar_idx_dtypeÕ  ó&   



ÿzTestCSR.test_scalar_idx_dtypec                 C   óT   | j t d¡gdgfdd�}|  |¡}| dt |jd ¡ ¡ |d dks(J ‚d S ©Néê  r   )rµ  rµ  r‚  rK  r5  ©rÙ   rE   r   rÎ   r¸  r„  r¦   r  r8   r8   r9   Útest_setdiag_csrí  ó   
zTestCSR.test_setdiag_csrc                 C   sJ   |   g d¢g¡}|   g d¢g¡}|| jdksJ ‚| |¡jdks#J ‚d S )Nr¤  ©r¾   r¾   r   r_   r¾   )rØ   r'  r|  ©r“   rI   rN   r8   r8   r9   Útest_binop_explicit_zerosô  s   z!TestCSR.test_binop_explicit_zerosN)rŸ   r    r¡   r1  rÎ   rE   rQ  Úint_rÊ   rÍ   râ   ri  rk  rl  ru  r{  r  r…  r‡  r�  r“  r˜  r�  r£  r§  rª  r±  r·  r»  r8   r8   r8   r9   rb  ÷  s,    
	
	
rb  c                   @   ó   e Zd Zedd„ ƒZdS )ÚTestCSRMatrixc                 O   rc  rd  )r   r  r'   r   re  r8   r8   r9   rÎ     rg  zTestCSRMatrix.spcreatorN©rŸ   r    r¡   r1  rÎ   r8   r8   r8   r9   r¾     ó    r¾  c                   @   s”   e Zd Zedd„ ƒZejejejej	gZ
dd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestCSCc                 O   rc  rd  )r   r  r'   r   re  r8   r8   r9   rÎ     rg  zTestCSC.spcreatorc                 C   s€   t g d¢g d¢g d¢gdƒ}|  |¡}t|jg d¢ƒ t|jg d¢ƒ t|jg d¢ƒ t|jdƒ t|j	|j	ƒ t|j
d	ƒ d S )
N©r¾   r   r   r   rÇ  ©r   r_   r   rÉ   rß   )r¾   r_   r¾   rÉ   )r   r_   r¾   r_   rÍ  rS  r  )r   r×   r   rS  r   rQ  rR  r   r'  r¦   rÑ   rh  r8   r8   r9   ri    s   
zTestCSC.test_constructor1c                 C   sL   t ddƒ}d|d< |  |¡}t|jdgƒ t|jdgƒ t|jg d¢ƒ d S )Nrj  rß   rK  ©r_   rS  r_   )r   r   r   r   r   r¾   r¾   )r   r×   r   rS  r   rQ  rR  rh  r8   r8   r9   rk    s   

zTestCSC.test_constructor2c                 C   sZ   t ddgddgddggdƒ}|  |¡}t|jddgƒ t|jddgƒ t|jg d¢ƒ d S )Nr¾   r   r_   rß   rÛ  )r   r×   r   rS  r   rQ  rR  rh  r8   r8   r9   rl  %  s
   
zTestCSC.test_constructor3c                 C   sŠ   t g d¢ƒ}t g d¢ƒ}t g d¢ƒ}t||fƒ}|  ||fd¡}ttdƒ dd¡| ¡ ƒ |  g d¢g d	¢g d
¢ff¡}|jdksCJ ‚d S )Nrm  rn  ro  rÛ  rž  rS  rÉ   rq  rr  rs  r_   )r   r   r×   r   r   rÏ   rŒ   r'  )r“   rT  rU  rS  rÑ  r  r8   r8   r9   ru  ,  s   zTestCSC.test_constructor4c                 C   rv  ©Nrx  ry  rˆ  )rÇ   rÉ   )r   r×   r   r¦   ©r“   rR  rQ  rS  r  r8   r8   r9   r{  :  r|  zTestCSC.test_constructor5c                 C   r}  rÅ  )r×   r   r¦   r   rE   re   r<   r~  rÆ  r8   r8   r9   r  B  r€  zTestCSC.test_constructor6c                 C   rŽ  )Nr�  r�  r‘  ©rP   r_   r‚  rÉ   r•  )r   r×   r÷   r’  r   r'  rS  rŒ   rŒ  r8   r8   r9   r“  K  r”  zTestCSC.test_eliminate_zerosc                 C   sf   t dƒ}tg d¢ƒ}g d¢}| j|||fdd�}| ¡ }| ¡  t|jg d¢ƒ t| ¡ | ¡ ƒ d S )NrK  rˆ  r‰  rÇ  r‚  r‹  )r   r   r×   r÷   rÒ  r   rQ  rŒ   )r“   rS  rT  rƒ  rÁ  rÂ  r8   r8   r9   r�  V  s   zTestCSC.test_sort_indicesc                 C   r•  )Né   r—  rÉ   g      5@r–  T)r×   rE   r   rÏ   r   rY  rÀ   r~   r¦   r   rQ  rR  rŒ   r—  r8   r8   r9   r˜  `  r™  zTestCSC.test_ufuncsc                 C   rš  )	NrK  rˆ  r‰  rÇ  r‚  rÇ   r›  rœ  )r   r   r×   r   rŒ   rŒ  r8   r8   r9   r�  l  rž  z TestCSC.test_unsorted_arithmeticc                 C   rŸ  r   r¡  r¢  r8   r8   r9   r£  w  r¤  z%TestCSC.test_fancy_indexing_broadcastc                 C   s  t jdt jd�}t jdt jd�}t  d¡}| j|||fdd�}| j|||fdd�}t jdt jd�}| j||fdd�}| j||fdd�}|  d¡}	|  d	¡}
t|jjt jƒ t|jjt jƒ t|jjt jƒ t|jjt jƒ t|	jjt jƒ t|
jjt jƒ |||||	|
fD ]}||  q…d S )
Nr_   rÈ   r   )r¬  r¾   r‚  )r®  r¾   rÆ  r«  r­  )	rE   r   rS   r×   rØ   r   rR  r<   r`   r¯  r8   r8   r9   r±  …  r²  zTestCSC.test_scalar_idx_dtypec                 C   r³  r´  r¶  r  r8   r8   r9   Útest_setdiag_csc�  r¸  zTestCSC.test_setdiag_cscN)rŸ   r    r¡   r1  rÎ   rE   rQ  r¼  rÊ   rÍ   râ   ri  rk  rl  ru  r{  r  r“  r�  r˜  r�  r£  r±  rÉ  r8   r8   r8   r9   rÁ    s"    

	
rÁ  c                   @   r½  )ÚTestCSCMatrixc                 O   rc  rd  )r   r  r'   r   re  r8   r8   r9   rÎ   ©  rg  zTestCSCMatrix.spcreatorNr¿  r8   r8   r8   r9   rÊ  ¨  rÀ  rÊ  c                   @   sP   e Zd ZeZejejejgZ	dd„ Z
dd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )rí   c                 C   sH   |   d¡}d|d< d|d< ||j }||j ¡  }t| ¡ | ¡ ƒ d S )N)rP   rž  rP   rJ  r¤  ©rK  rÇ   )rÚ   r,  r   r   rŒ   )r“   rL   r€  r…  r8   r8   r9   Ú	test_mult·  s   

zTestDOK.test_multc                 C   sl   |   d¡}d|d< d|d< |d }tddgddgddggƒ}t| ¡ |ƒ |d	 }|d	 }t| ¡ |ƒ d S )
Nr'  éöÿÿÿrî  r¤  rÆ  rP   r   r¥  râ  )rÎ   r   r   rŒ   r­  r8   r8   r9   Útest_add_nonzero¿  s   
zTestDOK.test_add_nonzeroc                 C   óR   |   d¡}d|d< d|d< t|d  ¡ | ¡ d ƒ t|d  ¡ | ¡ d ƒ d S ©Nr'  rÍ  rî  r¤  rÆ  râ  r™  ©rÎ   r   rŒ   rm  r8   r8   r9   Útest_dok_divide_scalarË  ó
   
zTestDOK.test_dok_divide_scalarc                 C   s  d\}}|   ||f¡}d|d< d|d< d|d< d|d	< d
|d< d|d< t| ¡ d d …|d f t|ƒƒ | ¡ }t| ¡ d d …|d f t|ƒƒ ||}}| ¡ }t|j||fƒ t| ¡ |d d d …f t|ƒƒ | ¡ }t| ¡ |d d d …f t|ƒƒ d S )N)rÇ   r—  r¾   r�  r_   rÅ  rÉ   r  rS  r¼  rK  rÛ  rÇ   rÇ  )	rÚ   r   rŒ   r   r]  r
   r   r¦   r^  )r“   rd  r°  rI   r  rN   r  r8   r8   r9   Útest_convertÓ  s"   ""
"&zTestDOK.test_convertc                 C   s¼   t t| jƒ tg d¢g d¢g d¢gdƒ}|  |¡}t|j|jƒ t| ¡ |ƒ |  |¡}t| ¡ | ¡ ƒ g d¢g d¢g}| j|tj	d�}t|jtj	ƒ | ¡ }t|jtj	ƒ t
||ƒ d S )NrÂ  rÇ  rÃ  rß   rÛ  r£  rÈ   )ré   rV  rÚ   r   r   r<   rŒ   rØ   rE   rÌ   r   )r“   rN   rL   ra  rS  rß   Údar8   r8   r9   Ú	test_ctorò  s   

zTestDOK.test_ctorc                 C   sX   |   d¡}d|d< td| ¡ vdƒ |   d¡}d|d d …df< tt| ¡ ƒdkdƒ d S )Nr   r   rŒ  zUnexpected entry (0,0) in keyszUnexpected entries in keys)rÚ   r   Úkeysrª   rº  r8   r8   r9   Útest_ticket1160  s   

zTestDOK.test_ticket1160N)rŸ   r    r¡   r    rÎ   rE   r¼  rÊ   rÍ   râ   rÌ  rÎ  rÒ  rÔ  rÖ  rØ  r8   r8   r8   r9   rí   ³  s    rí   )r\  r]  c                   @   ó   e Zd ZeZdS )ÚTestDOKMatrixN)rŸ   r    r¡   r   rÎ   r8   r8   r8   r9   rÚ    ó    rÚ  c                   @   sh   e Zd ZeZejejejgZ	dd„ Z
dd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestLILc                 C   sˆ   t dtjƒ}d|d< d|d< | jdtjd�}d|d< d|d< t ¡ dkr1t||j ||j  ¡ ƒ t|| 	¡ j || 	¡ j  ¡ ƒ d S )N©rP   rP   rP   rJ  y              4@rË  rÈ   Úppc64le)
r   rE   rÍ   rÛ   ÚplatformÚmachiner   r,  rŒ   r   r­  r8   r8   r9   Útest_dot!  s   &zTestLIL.test_dotc                 C   sB   |   d¡}d|d< |d }t|d dƒ |d }t|d dƒ d S )Nr   r_   rŒ  rS  r   )rÛ   r   )r“   r=   r8   r8   r9   Útest_scalar_mul0  s   
zTestLIL.test_scalar_mulc                 C   rÏ  rÐ  rÑ  rm  r8   r8   r9   Útest_truediv_scalar:  rÓ  zTestLIL.test_truediv_scalarc                 C   sî   |   g d¢g d¢g¡}|   g d¢g d¢g¡}||| f||| fd|d fdœ}| ¡ D ]\}\}}| ¡ }t|d|› d�ƒ|ƒ t| ¡ | ¡ ƒ q,| j dt d	¡d
�}|  g d¢¡}|dd d …f  |7  < t|dd d …f  ¡ |ƒ d S )N©r   r_   rÉ   rn  r¤  rÉ   )ÚaddÚsubÚmulÚ__iÚ__rí  rÊ   rÈ   )çš™™™™™¹?rê  rê  r   )	rÛ   r  r÷   r~   r   rŒ   rE   r<   rÝ   )r“   rL   rM   rS  Úopr°   r1  rÊ  r8   r8   r9   Útest_inplace_opsB  s   


þzTestLIL.test_inplace_opsc                 C   sP   g d¢g d¢g}|   t|ƒ¡}t|ƒD ]\}}t| ¡ t|| |jd�ƒ qd S )Nr•  r–  )Úndmin)rÛ   r   r‡  r   rŒ   r«   )r“   Úrow_datarM   r¹  rT  r8   r8   r9   Útest_lil_iterationV  s
   ÿzTestLIL.test_lil_iterationc                 C   sZ   |   d¡}d|d< d|d< d|d< d|d	< d
|d< | ¡ }|   |¡}t| ¡ | ¡ ƒ d S )NrÝ  rP   rJ  r¤  rË  r¥  )r˜  rÉ   r‹  )rÉ   r˜  rM  )r˜  r™  )rÛ   r^  r   rŒ   )r“   rM   rÒ   r€  r8   r8   r9   Útest_lil_from_csr\  s   

zTestLIL.test_lil_from_csrc                 C   sZ   |   tdƒ dd¡¡}|  |¡}t|tg d¢ƒdd…f  ¡ |tg d¢ƒdd…f ƒ d S )Nr{  rK  r•  r_   rÉ   )rÝ   r   rÏ   rÛ   r   r   rŒ   )r“   r&  rL   r8   r8   r9   Útest_fancy_indexing_lilh  s
   
ÿzTestLIL.test_fancy_indexing_lilc                 C   sª   |   d¡}d|d< d|d< d|d< d|d	< |   d¡}d|d< d|d
< d|d< d|d	< d|d< t| |¡ ¡ | |¡ ¡ ƒ t| |¡ ¡ g d¢g d¢g d¢g d¢gƒ d S )NrÛ  r¾   rŒ  r_   r¨  rÉ   r(  rS  r  rî  r'  r7  r&  ©r   r   r™  )r   r   r   )rÛ   r   r|  rŒ   )r“   Úlrd  r8   r8   r9   Útest_point_wise_multiplyo  s*   

ÿýÿz TestLIL.test_point_wise_multiplyc                 C   s,   |   t d¡¡}|d9 }d|dd d …f< d S )Nr   r   r   )rÛ   rE   r„  r˜  r8   r8   r9   Útest_lil_multiply_removal†  s   z!TestLIL.test_lil_multiply_removalN)rŸ   r    r¡   r"   rÎ   rE   r¼  rÊ   rÍ   râ   rá  râ  rã  rì  rï  rð  rñ  rô  rõ  r8   r8   r8   r9   rÜ    s    
rÜ  )r\  c                   @   rÙ  )ÚTestLILMatrixN)rŸ   r    r¡   r   rÎ   r8   r8   r8   r9   rö  �  rÛ  rö  c                   @   s˜   e Zd ZeZejejejgZ	dd„ Z
dd„ Zdd„ Zdd„ Zd	d
„ Zejjddd�dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestCOOc                 C   s¢   t g d¢ƒ}t g d¢ƒ}t g d¢ƒ}|  |||ffd¡}ttdƒ dd¡| ¡ ƒ | jdd	gd
d	gd
d	gfftjd�}t dd
gd
d	ggtjd�}t|| ¡ ƒ d S )Nrm  rn  ro  rÛ  rž  rS  rÉ   rp  r¾   r   rÈ   )r   rÖ   r   r   rÏ   rŒ   rE   rt  )r“   rT  rU  rS  r"  rÎ  r8   r8   r9   ri  ›  s   $zTestCOO.test_constructor1c                 C   sd   t g d¢ƒ}t g d¢ƒ}t g d¢ƒ}|  |||ffd¡}t g d¢g d¢g d¢gƒ}t|| ¡ ƒ d S )N)
r   r¾   r_   r_   r_   r_   r   r   r_   r_   )
r   r_   r   r_   r¾   r¾   r¾   r   r   r_   )
r_   r™  rk  rK  r—  r   r¿   r_   r¾   ri  r   )rS  r¿   r   rò  )ru  r—  r   )r   rÖ   r   rŒ   )r“   rT  rU  rS  r"  r”   r8   r8   r9   rk  ©  s   zTestCOO.test_constructor2c                 C   sP   |   d¡}t|jdƒ t|jg ƒ t|jg ƒ t|jg ƒ t| ¡ tdƒƒ d S )NrÛ  )rÖ   r   r¦   rT  rU  rS  rŒ   r   ©r“   r"  r8   r8   r9   rl  ´  s   
zTestCOO.test_constructor3c                 C   sü   t g d¢g d¢g d¢gƒ}|  |¡}t| ¡ |ƒ t g d¢ƒ}|  |¡}| jr)|n| dd¡}t| ¡ |ƒ tjtdd�� |  g d¢g d	¢g d
¢f¡ W d   ƒ n1 sVw   Y  tjt	dd�� | jg d¢dd� W d   ƒ d S 1 sww   Y  d S )N©r   r¾   r   r   )r—  r   rÉ   r   )r   rS  r   r   r¾   r¿   zobject cannot be interpretedr*  )r   rp  é   é!   rœ  r¢  r6  rÂ  r‚  )
r   rÖ   r   rŒ   ræ   rÏ   rî   r   rV  rê   )r“   r”   r"  r1  r8   r8   r9   ru  ¾  s    þ

ÿ"ÿzTestCOO.test_constructor4c                 C   s:   dg}| j |dgdgffd d�}|jt |¡jksJ ‚d S )Nr¾   r   rÈ   )rÖ   r<   rE   r   )r“   rS  r"  r8   r8   r9   Ú"test_constructor_data_ij_dtypeNoneÔ  s   z*TestCOO.test_constructor_data_ij_dtypeNoneFzCOO does not have a __getitem__©ÚrunÚreasonc                 C   ó   d S r;   r8   r©   r8   r8   r9   rö  Ù  ó   zTestCOO.test_iteratorc                 C   s*   ddgg}|   |¡ ¡ }t| ¡ |ƒ d S rc   )rÖ   Útodiar   rŒ   )r“   r   r9  r8   r8   r9   Útest_todia_all_zerosÝ  s   
zTestCOO.test_todia_all_zerosc                 C   sÀ   |   d¡}| ¡  |   ddgddgddgff¡}| ¡  t| ¡ ddgddggƒ |   ddgddgddgff¡}| ¡  t| ¡ ddgddggƒ t|jdgƒ t|jdgƒ t|jdgƒ d S )NrÛ  r¾   r_   r   rÉ   )rÖ   r©  r   rŒ   rT  rU  rS  rø  r8   r8   r9   Útest_sum_duplicatesâ  s   
zTestCOO.test_sum_duplicatesc                 C   s<   |   g d¢g d¢g d¢ff¡}| ¡ }t| ¡ | ¡ ƒ d S )Nrq  rr  rs  )rÖ   rü  r   rŒ   )r“   r"  rA   r8   r8   r9   Útest_todok_duplicatesï  s   zTestCOO.test_todok_duplicatesc                 C   sV   |   g d¢g d¢g d¢ff¡}| ¡ }t|jd |jƒ | ¡ }t|jd |jƒ d S )Nrq  rr  rs  r_   )rÖ   r^  r   r'  r]  )r“   r"  r  r  r8   r8   r9   Útest_tocompressed_duplicatesô  s
   z$TestCOO.test_tocompressed_duplicatesc                 C   sr   t g d¢ƒ}t g d¢ƒ}t g d¢ƒ}| j|||ffdd�}| ¡ }| ¡  t|jdk ¡ ƒ t| ¡ | ¡ ƒ d S )Nr�  )r   r   r   r¾   r¾   r¾   r¾   r¾   r�  rŠ  r‚  r   )	r   rÖ   r÷   r’  r   rS  Úallr   rŒ   )r“   rS  rT  rU  rÁ  rÂ  r8   r8   r9   r“  û  s   zTestCOO.test_eliminate_zerosc                 C   s„   g d¢g d¢g d¢g}d}|   |¡}| |¡}t|j|ju ƒ |j|dd�}t|j|ju ƒ |j|dd�}tt |j|j¡ ƒ d S )Nr¡  r¢  r£  r¦  Frª  T)rÖ   rÏ   r   rS  rE   rK   )r“   rh   Ú	new_shaper=   r>   r8   r8   r9   Útest_reshape_copy  s   

zTestCOO.test_reshape_copyc                 C   sp   |   dgdgdgffd¡}|   dgdgdgffd¡}t|jddd�|kjdkƒ t|jdd	d�|kjdkƒ d S )
Nr¾   iÀÆ- r£  )éÁÆ- éé  )r  r
  rÒ   rŸ  r   r�  )rÖ   r   rÏ   r'  )r“   Úmat1Úmat2r8   r8   r9   Útest_large_dimensions_reshape  s    z%TestCOO.test_large_dimensions_reshapeN)rŸ   r    r¡   r!   rÎ   rE   r¼  rÊ   rÍ   râ   ri  rk  rl  ru  rü  rî   r2  Úxfailrö  r  r  r  r  r“  r	  r  r8   r8   r8   r9   r÷  •  s"    


r÷  )rU  rV  rW  rX  rY  c                   @   rÙ  )ÚTestCOOMatrixN)rŸ   r    r¡   r   rÎ   r8   r8   r8   r9   r    rÛ  r  c                   @   s†   e Zd ZeZejejejgZ	dd„ Z
ejjddd�dd„ ƒZedƒd	d
„ ƒZejjdd�dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestDIAc                 C   sh   t g d¢g d¢g d¢g d¢gƒ}t  g d¢g¡jddd�}t  g d	¢¡}t| j||fd
d� ¡ |ƒ d S )N)r¾   r   rÉ   r   )r¾   r_   r   rS  )r   r_   rÉ   r   )r   r   rÉ   rS  rˆ  rÉ   r   r$  ©r   r¿   r_   rÂ  r‚  )r   rE   Úrepeatr   rÙ   rŒ   )r“   r€  rS  rV  r8   r8   r9   ri  -  s   ý zTestDIA.test_constructor1FzDIA does not have a __getitem__rý  c                 C   r   r;   r8   r©   r8   r8   r9   rö  6  r  zTestDIA.test_iteratorrÉ   c                 C   s€   |   t d¡¡}t|jjtjƒ |jddd� t|jjtjƒ |   t d¡¡}t|jjtjƒ |jddd� t|jjtjƒ d S )NrÉ   r  r_   r‰  rS  )	rÙ   rE   r%   r   rV  r<   rS   r¸  r`   ©r“   rd  r8   r8   r9   Útest_setdiag_dtype:  s   zTestDIA.test_setdiag_dtypezDIA stores extra zeros©rÿ  c                 C   r   r;   r8   r©   r8   r8   r9   rD  F  r  zTestDIA.test_getnnz_axisc                 C   sJ   | j g d¢gdgfdd�}| ¡ }t| ¡  ¡ |ƒ t| ¡  ¡ |ƒ d S )Nr¹  r¿   rÇ  r‚  )rÙ   rŒ   r   r]  r^  )r“   rd  r1  r8   r8   r9   Útest_convert_gh14555J  s   zTestDIA.test_convert_gh14555c                 C   sV   |   ddgddgg¡ ¡ }t |j|jf|j¡}t t |¡dk¡}|j	|ks)J ‚d S )Nr¾   r_   rÉ   rS  r   )
rÙ   r_  rE   Úravel_multi_indexrT  rU  r¦   r  Údiffr¨  )r“   rd  Ú	flat_indsÚinds_are_sortedr8   r8   r9   Útest_tocoo_gh10050Q  s   zTestDIA.test_tocoo_gh10050c                 C   s’   t  g d¢g¡jddd�}t jg d¢t jd�}tj||fdd�}| ¡ }|jjt jks-J ‚| 	¡ }|j
jt jks:J ‚| ¡ }|j
jt jksGJ ‚d S )	Nrˆ  rÉ   r   r$  r  rÈ   rÂ  r‚  )rE   r   r  rS   rs   r#   r_  rU  r<   r^  rQ  r]  )r“   rS  rV  r9  r"  r  r  r8   r8   r9   Útest_tocoo_tocsr_tocsc_gh19245X  s   z&TestDIA.test_tocoo_tocsr_tocsc_gh19245c                 C   s€   |   ddgddgg¡}|d }t||jƒsJ ‚t| ¡ ddgddggƒ | d¡}t||jƒs1J ‚t| ¡ ddgddggƒ d S )Nr¾   r_   r   rS  rÉ   rÇ   rž  )rÙ   rD   rò  r   rŒ   r|  )r“   rd  ÚresÚres2r8   r8   r9   rb  e  s   
zTestDIA.test_mul_scalarN)rŸ   r    r¡   r#   rÎ   rE   r¼  rÊ   rÍ   râ   ri  rî   r2  r  rö  r‹   r  rï   rD  r  r  r  rb  r8   r8   r8   r9   r  '  s    	


r  )rU  rV  rW  rX  rY  r\  r]  c                   @   rÙ  )ÚTestDIAMatrixN)rŸ   r    r¡   r   rÎ   r8   r8   r8   r9   r   q  rÛ  r   c                   @   sà   e Zd ZeZejejejgZ	dd„ Z
dd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zejjddd�dd„ ƒZejjddd�dd„ ƒZdd „ Zejjddd�d!d"„ ƒZejjed#d$�d%d&„ ƒZd'S )(ÚTestBSRc                 C   sì   t g d¢ƒ}t g d¢ƒ}tdƒ}t g d¢g d¢gƒ|d< t g d¢g d¢gƒ|d	< t g d
¢g d¢gƒ|d< t g d¢g d¢gƒ|d< tg d¢g d¢g d¢gg d¢g d¢gƒ}| j|||fdd�}t| ¡ |ƒ |  |||f¡}t| ¡ |ƒ d S ©N)r   r_   r_   rS  )r   r_   r_   rÉ   )rS  r_   rÉ   rÛ  rÒ  r   rë  )rÇ   r   rP   r¾   )r   rS  r˜  )rž  r   r¤  r_   )r   rK  rP   )rL  r   r{  rÉ   rš  r¢  rÑ  ©rÇ   rž  r‚  )r   r   r   rÕ   r   rŒ   )r“   rR  rQ  rS  rL   rÖ  r8   r8   r9   ri  €  s(   
ÿ
ÿ
ÿ
ÿ(zTestBSR.test_constructor1c                 C   s†  dD ]}t |ƒ}t|  |¡ ¡ |ƒ qt dƒ}t| j|dd� ¡ |ƒ t| j|dd� ¡ |ƒ tg d¢g d¢g d¢gg d	¢g d
¢gƒ}t|  |¡ ¡ |ƒ t| j|dd� ¡ |ƒ t| j|dd� ¡ |ƒ t| j|dd� ¡ |ƒ t| j|dd� ¡ |ƒ t| j|dd� ¡ |ƒ t| j|dd� ¡ |ƒ t| j|dd� ¡ |ƒ tg d¢g d¢g d¢gg d	¢g d
¢gƒ}t| j|dd� ¡ |ƒ d S )N)r¨  r½  rf  )rP   rS  )rÉ   r—  r�  )rS  rÇ   r(  rÔ  rZ  rš  r¢  rÑ  rÛ  rÒ  r#  r‚  r¨  r¦  )r_   rž  )rÉ   rž  rù  )r   r   rÕ   rŒ   r   )r“   r¦   rL   r8   r8   r9   rk  —  s"   ((zTestBSR.test_constructor2c                 C   sH   g d¢g d¢g d¢ff}t ddgddggƒ}t| j|dd	� ¡ |ƒ d S )
Nr•  rË  r†  r¾   r   r_   rÉ   r(  rÔ  )r   r   rÕ   rŒ   )r“   ÚargrL   r8   r8   r9   rl  ¯  s   zTestBSR.test_constructor3c                 C   s\   d}t j||dft jd�}t jd|gt jd�}t j|t jd�}| j|||f|dfdd� d S )Nr˜  r¾   rÈ   r   F)rÕ  r÷   )rE   r„  r   r   rS   r   rÕ   )r“   r°  rS  rR  rQ  r8   r8   r9   ru  µ  s
   zTestBSR.test_constructor4c                 C   sì   d}t  |¡}t  |||f¡}t  d|g¡}t  |¡}ttƒ� |  |||f¡ W d   ƒ n1 s2w   Y  ttƒ� | j|||fdd� W d   ƒ n1 sPw   Y  ttƒ� | j|||fdd� W d   ƒ d S 1 sow   Y  d S )Nr˜  r   r¨  rÔ  r¨  )rE   r„  r   r   ré   rê   rÕ   )r“   r°  Ú	data_1dimrS  rR  rQ  r8   r8   r9   r{  ¾  s   


þ
þ
"þzTestBSR.test_constructor5c                 C   sn   dgdggdgdggg}t jddgt jd�}t jddgt jd�}| j|||fdd�}|jt  |¡jks5J ‚d S )Nr¾   r   r_   rÈ   r�  rÔ  )rE   r   rS   rÕ   r<   )r“   rC   rR  rQ  rN   r8   r8   r9   Útest_default_dtypeÒ  s
   zTestBSR.test_default_dtypec                 C   sô   t g d¢ƒ}t g d¢ƒ}tdƒ}t g d¢g d¢gƒ|d< t g d¢g d¢gƒ|d	< t g d
¢g d¢gƒ|d< t g d¢g d¢gƒ|d< tg d¢g d¢g d¢gg d¢g d¢gƒ}| j|||fdd�}| ¡ }| ¡  ¡ }t| ¡ |ƒ t| ¡ | ¡ ƒ d S r"  )r   r   r   rÕ   r^  r_  r   rŒ   )r“   rR  rQ  rS  rL   ÚAbsrÚAcsrÚAcsr_via_coor8   r8   r9   Útest_bsr_tocsrÚ  s.   
ÿ
ÿ
ÿ
ÿÿzTestBSR.test_bsr_tocsrc                 C   sˆ   t g d¢ddgddggƒj}| ddd¡}tg d¢ƒ}tg d¢ƒ}| j|||fdd�}| ¡ }| ¡  t|jd	ƒ t| 	¡ | 	¡ ƒ d S )
Nr�  r¾   r¿   r_   r�  r‘  )rS  r¤  r‚  rž  )
r   r,  rÏ   r   rÕ   r÷   r’  r   r'  rŒ   rŒ  r8   r8   r9   r“  ñ  s   zTestBSR.test_eliminate_zerosc                 C   sÔ   t j d¡ | jt j d¡dd�}d|j|jdk< | ¡  t|jdƒ t|jj	dƒ d|j|jdk< | ¡  t|jdƒ t|jj	d	ƒ t| 
¡ t  d¡ƒ | ¡  t|jdƒ t|jj	d	ƒ t| 
¡ t  d¡ƒ d S )
Nr   )rž  rž  rZ  rÔ  gÍÌÌÌÌÌì?éB   )rp  r_   rÉ   r  rä  )rE   rˆ   r^   rÕ   rS  r’  r   r'  r   r¦   rŒ   r   r  r8   r8   r9   Útest_eliminate_zeros_all_zeroý  s   z%TestBSR.test_eliminate_zeros_all_zeroc                 C   sJ   | j tdƒ dd¡dd�}t|jd ƒ dd¡}t|| | ¡ | ƒ d S )Néx   r˜  rL  ©rS  rK  rÔ  r¾   r¿   ©rÕ   r   rÏ   r¦   r   rŒ   rª  r8   r8   r9   Útest_bsr_matvec  s   zTestBSR.test_bsr_matvecc                 C   sN   | j tdƒ dd¡dd�}t|jd d ƒ dd¡}t|| | ¡ | ƒ d S )	Nr-  r˜  rL  r.  rÔ  r¾   rÇ   r¿   r/  rª  r8   r8   r9   Útest_bsr_matvecs  s   zTestBSR.test_bsr_matvecsFzBSR does not have a __getitem__rý  c                 C   r   r;   r8   r©   r8   r8   r9   rö    r  zTestBSR.test_iteratorzBSR does not have a __setitem__c                 C   r   r;   r8   r©   r8   r8   r9   rÉ  "  r  zTestBSR.test_setdiagc                 C   sæ   t  g d¢g d¢g d¢g¡}| j|dd�}t| d¡d u ƒ t| ¡ ddgd	dgd
dggƒ | d¡ t| ¡ ddgd	dggƒ | d¡ t| ¡ ddgd	dgddggƒ | d¡ t| ¡ g d¢g d¢g d¢gƒ tt|jdƒ d S )Nr$  r%  r&  rN  rÔ  r'  r¾   r   r_   rÉ   r(  r©  rÂ  r¢  rZ  )	rE   r   rÎ   r   r)  r   rŒ   ré   rê   r7  r8   r8   r9   Útest_resize_blocked&  s2   
þþ
ÿ
þ
þzTestBSR.test_resize_blockedc                 C   r   r;   r8   r©   r8   r8   r9   rÁ  =  r  z"TestBSR.test_setdiag_comprehensivezexceeds memory limitr  c              	   C   sH  t jdt jd�}t jdt jd�}t  d¡}| j|||fdd�}| j|||fdd�}|  d¡}|  d¡}t|jjt jƒ t|jjt jƒ t|jjt jƒ t|jjt jƒ z0t  d¡}t  d	¡}	| j|||fdd�}
| j|	||fdd�}t|
jjt jƒ t|jjt jƒ W n tt	fy’   d}
d}Y nw |||||
|fD ]}||  q›d S )
Nr_   rÈ   r   rË  r«  r‚  r­  )r   r¾   r¬  )r   r¾   r®  )
rE   r   rS   rÕ   r   rR  r<   r`   ÚMemoryErrorrê   )r“   rR  rQ  r°  rI   rN   ra  rß   Úvals2Úvals3rb  rc  r=   r8   r8   r9   r±  A  s2   




ý
ÿzTestBSR.test_scalar_idx_dtypeN)rŸ   r    r¡   r$   rÎ   rE   r¼  rÊ   rÍ   râ   ri  rk  rl  ru  r{  r&  r*  r“  r,  r0  r1  rî   r2  r  rö  rÉ  r2  rÁ  ÚskipifÚIS_COLABr±  r8   r8   r8   r9   r!  y  s.    	


r!  )rU  rV  rW  rX  rY  r]  c                   @   rÙ  )ÚTestBSRMatrixN)rŸ   r    r¡   r   rÎ   r8   r8   r8   r9   r8  b  rÛ  r8  c                 O   s,  |  dd¡}t | jtj¡st | jtj¡r'|du r| f| S | f| |f S | dk ¡ }| jddd�} | ddd…  d8  < d| ddd…< |d jdkrzt	dd„ |D ƒƒ}d|d  f|dd…  }d|d  d f|dd…  }d| |< d| |< t	d	d„ |D ƒƒ}|du rŒ| f| S | f| |d f S )
z-Duplicates entries to produce the same matrixrR  Nr   r_   r$  r¾   c                 s   s   � | ]}|d  V  qdS rƒ  r8   )rÐ  Úpr8   r8   r9   Ú	<genexpr>�  s   € z&_same_sum_duplicate.<locals>.<genexpr>c                 s   s   � | ]}|  d ¡V  qdS )r_   N)r  )rÐ  rQ  r8   r8   r9   r:  ‡  s   € )
ÚpoprE   re   r<   rQ  ÚunsignedintegerrÔ  r  rd   rÎ  )rS  Úindsr?   rR  Ú	zeros_posÚposÚpos1Úpos2r8   r8   r9   Ú_same_sum_duplicaten  s*   ÿ

rB  c                       sd   e Zd Zddœ‡ fdd„
Zejjdd�dd„ ƒZejjd	d�d
d„ ƒZejjdd�dd„ ƒZ	‡  Z
S )Ú_NonCanonicalMixinF©Úsorted_indicesc                   s  t ƒ j}||g|¢R i |¤Ž}| ¡ dk ¡ }|d jdk}|rO|d jd }	tƒ �}
|
 td¡ |  ||d |	 |d |	 ¡}W d  ƒ n1 sJw   Y  |  	||¡}d|vr^|j
|d< ||fi |¤Ž}|jtjtjfv rrd}nd}t| ¡ | ¡ |d	� |rŠt|jdk ¡ ƒ |S )
zcReplace D with a non-canonical equivalent: containing
        duplicate elements and explicit zerosr   r_   rÃ  r¾   Nr¦   gñhãˆµøä>gH¯¼šò×z>)Úrtol)ÚsuperrÎ   rŒ   rÔ  rd   r   r  r'   Ú_insert_explicit_zeroÚ_arg1_for_noncanonicalr¦   r<   rE   rÌ   r\  r   r   rS  r  )r“   r€  rE  rf  r?   Ú	constructr&  Úzero_posÚ	has_zerosrŠ  r  Úarg1ÚNCrF  ©rò  r8   r9   rÎ   �  s*    þ
z_NonCanonicalMixin.spcreatorz"bool(matrix) counts explicit zerosr  c                 C   r   r;   r8   r©   r8   r8   r9   rñ   µ  r  z_NonCanonicalMixin.test_boolz!getnnz-axis counts explicit zerosc                 C   r   r;   r8   r©   r8   r8   r9   rD  ¹  r  z#_NonCanonicalMixin.test_getnnz_axisznnz counts explicit zerosc                 C   r   r;   r8   r©   r8   r8   r9   r)  ½  r  z_NonCanonicalMixin.test_empty)rŸ   r    r¡   rÎ   rî   r2  rï   rñ   rD  r)  Ú__classcell__r8   r8   rO  r9   rC  �  s    %

rC  c                   @   s   e Zd Zddd„Zdd„ ZdS )Ú_NonCanonicalCompressedMixinFc                 C   sˆ   t |j|j|jd�\}}}|s?t||dd… ƒD ]&\}}|||… ddd…  ¡ |||…< |||… ddd…  ¡ |||…< q|||fS )ú5Return non-canonical constructor arg1 equivalent to M)rR  r¾   Nr¿   )rB  rS  rQ  rR  rõ  r÷   )r“   r&  rE  rS  rQ  rR  ÚstartÚstopr8   r8   r9   rI  Ã  s   
ÿ"$
z3_NonCanonicalCompressedMixin._arg1_for_noncanonicalc                 C   s   d|||f< |S rc   r8   ©r“   r&  rR  r±  r8   r8   r9   rH  Í  s   z2_NonCanonicalCompressedMixin._insert_explicit_zeroN)F)rŸ   r    r¡   rI  rH  r8   r8   r8   r9   rQ  Â  s    

rQ  c                   @   sL   e Zd Zdd„ Zdd„ Zejjddd�dd	„ ƒZejjdd
d�dd„ ƒZ	dS )Ú_NonCanonicalCSMixinc                    s4   ‡ fdd„}t D ]}dD ]
}|t |¡|ƒ qqd S )Nc           	         sš   t g d¢g d¢g d¢g d¢g| d�}ˆ j||d�}|j\}}t| |ƒD ]}t| |ƒD ]}t|||f |||f ƒ q,q$dD ]}tttf|j|ƒ q?d S )Nr7  rG  rH  r&  rÈ   rD  rI  )	r   rÎ   r¦   rò   r   ré   r*  rV  rK  )	r<   rE  r€  rL   r&  r)  rR  r±  rÑ  r©   r8   r9   rì   Ô  s    ýý
ÿÿz3_NonCanonicalCSMixin.test_getelement.<locals>.check)FTrL  )r“   rì   r<   rE  r8   r©   r9   rM  Ó  s   ÿÿz$_NonCanonicalCSMixin.test_getelementc                 C   sö   t  d¡}|  |¡}|  g d¢g¡}| ¡ |dd d …f< tƒ �}| td¡ ||dd d …f< W d   ƒ n1 s8w   Y  t| ¡ |ƒ | ¡  ¡ |d d …df< tƒ �}| td¡ |j	|d d …df< W d   ƒ n1 smw   Y  t| ¡ |ƒ d S )NrÉ   r•  r¾   rÃ  r_   )
rE   r%   rÎ   rŒ   r   r  r'   r   rÆ  r,  )r“   r€  rL   rM   r  r8   r8   r9   Útest_setitem_sparseè  s   

þþz(_NonCanonicalCSMixin.test_setitem_sparseFz(inverse broken with non-canonical matrixrý  c                 C   r   r;   r8   r©   r8   r8   r9   r0  ù  r  z_NonCanonicalCSMixin.test_invz&solve broken with non-canonical matrixc                 C   r   r;   r8   r©   r8   r8   r9   rd  ý  r  z_NonCanonicalCSMixin.test_solveN)
rŸ   r    r¡   rM  rW  rî   r2  r  r0  rd  r8   r8   r8   r9   rV  Ò  s    
rV  c                   @   ó   e Zd ZdS )ÚTestCSRNonCanonicalN©rŸ   r    r¡   r8   r8   r8   r9   rY    ó    rY  c                   @   rX  )ÚTestCSRNonCanonicalMatrixNrZ  r8   r8   r8   r9   r\    r[  r\  c                   @   rX  )ÚTestCSCNonCanonicalNrZ  r8   r8   r8   r9   r]  
  r[  r]  c                   @   rX  )ÚTestCSCNonCanonicalMatrixNrZ  r8   r8   r8   r9   r^    r[  r^  c                   @   sD   e Zd Zdd„ Zejjddd�dd„ ƒZejjddd�d	d
„ ƒZdS )ÚTestBSRNonCanonicalc                 C   s"   |  ¡ }d|||f< |j|jd�S )Nr   rÔ  )r^  rý  rÕ  )r“   r&  rR  r±  r=   r8   r8   r9   rH    s   z)TestBSRNonCanonical._insert_explicit_zeroFz&diagonal broken with non-canonical BSRrý  c                 C   r   r;   r8   r©   r8   r8   r9   r”    r  z!TestBSRNonCanonical.test_diagonalz"expm broken with non-canonical BSRc                 C   r   r;   r8   r©   r8   r8   r9   r.    r  zTestBSRNonCanonical.test_expmN)	rŸ   r    r¡   rH  rî   r2  r  r”  r.  r8   r8   r8   r9   r_    s    
r_  c                   @   rX  )ÚTestBSRNonCanonicalMatrixNrZ  r8   r8   r8   r9   r`  !  r[  r`  c                   @   s&   e Zd Zddd„Zdd„ Zdd„ ZdS )	ÚTestCOONonCanonicalNc                 C   s$   t |j|j|jƒ\}}}|||ffS )rR  )rB  rS  rT  rU  )r“   r&  rE  rS  rT  rU  r8   r8   r9   rI  &  s   z*TestCOONonCanonical._arg1_for_noncanonicalc                 C   sX   t j|jj d¡|jf |_t j|jj |¡|jf |_t j|jj |¡|jf |_|S rc   )rE   Úr_rS  r<   rÈ  rT  rU  rU  r8   r8   r9   rH  +  s   z)TestCOONonCanonical._insert_explicit_zeroc                 C   sP   |   t d¡¡}| ¡  |jddgdd� | ¡  tt t |j¡dk¡ƒ d S )NrÉ   r_   r¾   r‰  r   )	rÎ   rE   r%   r©  r¸  r   r  r  rU  r  r8   r8   r9   Útest_setdiag_noncanonical1  s
   z-TestCOONonCanonical.test_setdiag_noncanonicalr;   )rŸ   r    r¡   rI  rH  rc  r8   r8   r8   r9   ra  %  s    
ra  c                   @   rX  )ÚTestCOONonCanonicalMatrixNrZ  r8   r8   r8   r9   rd  9  r[  rd  c           
   	   c   s  � | dkrt ttttttg}n| dkrttt	t
tttg}ntd| ›d�ƒ‚dddddd	d
d	dœ}|D ]N}tt|ƒƒD ]E}t||ƒ}| d¡rt|ddƒsg }| |¡}t|ƒra|tjj|d�g7 }t|dg ƒ}|D ]}	|	jdv ru| |	¡ qitj|||d�V  q:q2dS )a�  Yield all tests for all formats that use get_index_dtype

    This is more than testing get_index_dtype. It allows checking whether upcasting
    or downcasting the index dtypes affects test results. The approach used here
    does not try to figure out which tests might fail due to 32/64-bit issues.
    We just run them all.
    So, each test method in that uses cases_64bit reruns most of the test suite!
    r(   Úspmatrixzparameter sp_api=z& is not one of 'sparray' or 'spmatrix'z%expm for 64-bit indices not availablez)linsolve for 64-bit indices not availableztest implemented in base classz%test actually requires 64-bit to workztest verifies int32 indexesztest verifies int64 indexes)r.  r0  rd  r±  r  r…  r‡  r  rK  r3  Fr  Ú
pytestmark)r6  rï   r  Úxslow)ÚmarksN)r!  r÷  rÁ  rb  r  rí   rÜ  r8  r  rÊ  r¾  r   rÚ  rö  rê   ÚsortedÚdirr~   rN  rT  rë   rî   r2  rï   r…   rG   Úparam)
Úsp_apiÚTEST_CLASSESÚ
SKIP_TESTSrç   Úmethod_nameÚmethodrh  r4   Úmarkersr2  r8   r8   r9   Úcases_64bit>  sN   €	
ûýø


ÿ


€€ñÿrr  c                
   @   s\   e Zd Zeeeeeee	e
eeg
Zdd„ Zejjdd„ ƒZejjdd„ ƒZejjdd„ ƒZd	S )
Ú	Test64Bitc                 C   st   t  |¡}|jdv r|jj|ko|jj|kS |jdkr'|jj|ko&|jj|kS |jdkr2|jj|kS td|›d�ƒ‚)N)r  r  r   r"  r9  zmatrix z has no integer indices)	rE   r<   rÑ   rQ  rR  rT  rU  rV  rê   )r“   rd  r<   r8   r8   r9   Ú_compare_index_dtype~  s   



zTest64Bit._compare_index_dtypec                    ó.   t dd�‡ fdd„ƒ}ˆ jD ]}||ƒ qd S )NrP   rj   c                    sL   | t j dd¡ƒ}tˆ  |t j¡ƒ | t j dd¡ƒ}tˆ  |t j¡ƒ d S )NrP   r¾   rp  )rE   rˆ   rå  r   rt  rS   r`   )Úmat_clsrd  r©   r8   r9   rì   �  s   z4Test64Bit.test_decorator_maxval_limit.<locals>.check©r‹   ÚMAT_CLASSES©r“   rì   rv  r8   r©   r9   Útest_decorator_maxval_limit‰  s
   

ÿz%Test64Bit.test_decorator_maxval_limitc                    ru  )NT©rˆ   c                    sb   d}d}t dƒD ]$}| tj dd¡ƒ}|pˆ  |tj¡}|p$ˆ  |tj¡}|r,|r, d S qtdƒ‚)NFr¤  r™  z#both 32 and 64 bit indices not seen)rò   rE   rˆ   rå  rt  rS   r`   rl   )rv  Úseen_32Úseen_64rŠ  rd  r©   r8   r9   rì   ›  s   €z5Test64Bit.test_decorator_maxval_random.<locals>.checkrw  ry  r8   r©   r9   Útest_decorator_maxval_random—  s
   

ÿz&Test64Bit.test_decorator_maxval_randomc                 C   s^   t tjdd�dd„ ƒ}t tjd�dd„ ƒ}|tttƒ |tttƒ |tttƒ |tttƒ d S )Nr¾   )r[   ro   c                 S   s¨   | ddgddgddggƒ}t t|jdd� t t|jdd� |g d	¢g d
¢gƒ}t t|jdd� t t|jdd� |g d	¢g d¢gƒ}t t|jdd� d|_t t|jƒ d S ©Nr¾   r_   rÉ   rS  rK  rÇ   r$  r   r•  )rÉ   rS  rÇ   r  F)ré   rl   r(  rá  r¨  r©  ©r×   rØ   rÖ   rI   r8   r8   r9   Úcheck_limited³  s   z3Test64Bit.test_downcast_intp.<locals>.check_limitedrZ   c                 S   s�   | ddgddgddggƒ}|j dd� |jdd� |g d	¢g d
¢gƒ}|j dd� |jdd� |g d	¢g d¢gƒ}|j dd� d|_| ¡  d S r  )r(  rá  r¨  r©  r€  r8   r8   r9   Úcheck_unlimitedÃ  s   z5Test64Bit.test_downcast_intp.<locals>.check_unlimited)	r‹   rE   r`   r   r   r!   r   r   r   )r“   r�  r‚  r8   r8   r9   Útest_downcast_intp«  s   


zTest64Bit.test_downcast_intpN)rŸ   r    r¡   r   r   r   r   r   r$   r!   r   r   r#   rx  rt  rî   r2  Úthread_unsaferz  r~  rƒ  r8   r8   r8   r9   rs  w  s    

þ

rs  c                   @   ra  )ÚRunAll64Bitc                 K   s$   t di |¤Ždd„ ƒ}|||ƒ d S )Nc              	   S   sX   | ƒ }t |dƒr| ¡  zt||ƒƒ  W t |dƒr| ¡  d S d S t |dƒr+| ¡  w w )NÚsetup_methodÚteardown_method)rY  r†  r~   r‡  )rç   ro  Úinstancer8   r8   r9   rì   à  s   

ÿ
ÿz,RunAll64Bit._check_resiliency.<locals>.checkr8   )r‹   )r“   rç   ro  r�   rì   r8   r8   r9   Ú_check_resiliencyÜ  s   

zRunAll64Bit._check_resiliencyN)rŸ   r    r¡   r‰  r8   r8   r8   r9   r…  Û  rç  r…  c                   @   s€   e Zd Zej dedƒ¡dd„ ƒZej d¡ej dedƒ¡dd„ ƒƒZ	ej dedƒ¡dd	„ ƒZ
ej dedƒ¡d
d„ ƒZdS )ÚTest64BitArrayúcls,method_namer(   c                 C   ó   | j ||dd� d S ©NrP   rj   ©r‰  ©r“   rç   ro  r8   r8   r9   Útest_resiliency_limit_10ó  ó   z'Test64BitArray.test_resiliency_limit_10r_   c                 C   rŒ  ©NTr{  rŽ  r�  r8   r8   r9   Útest_resiliency_random÷  ó   z%Test64BitArray.test_resiliency_randomc                 C   ó   | j ||tjd� d S ©NrZ   ©r‰  rE   rS   r�  r8   r8   r9   Útest_resiliency_all_32ÿ  ó   z%Test64BitArray.test_resiliency_all_32c                 C   r•  r–  ©r‰  rE   r`   r�  r8   r8   r9   Útest_resiliency_all_64  r™  z%Test64BitArray.test_resiliency_all_64N)rŸ   r    r¡   rî   r2  Úparametrizerr  r�  rš  r“  r˜  r›  r8   r8   r8   r9   rŠ  î  s    


rŠ  c                   @   s¦   e Zd Zej d¡ej dedƒ¡dd„ ƒƒZej dedƒ¡dd„ ƒZ	ej d¡ej dedƒ¡d	d
„ ƒƒZ
ej dedƒ¡dd„ ƒZej dedƒ¡dd„ ƒZdS )ÚTest64BitMatrixrK  r‹  re  c                 C   rŒ  )NT)rŠ   rŽ  r�  r8   r8   r9   Ú
test_no_64  s   zTest64BitMatrix.test_no_64c                 C   rŒ  r�  rŽ  r�  r8   r8   r9   r�    r‘  z(Test64BitMatrix.test_resiliency_limit_10r_   c                 C   rŒ  r’  rŽ  r�  r8   r8   r9   r“    r”  z&Test64BitMatrix.test_resiliency_randomc                 C   r•  r–  r—  r�  r8   r8   r9   r˜    r™  z&Test64BitMatrix.test_resiliency_all_32c                 C   r•  r–  rš  r�  r8   r8   r9   r›  "  r™  z&Test64BitMatrix.test_resiliency_all_64N)rŸ   r    r¡   rî   r2  rš  rœ  rr  rž  r�  r“  r˜  r›  r8   r8   r8   r9   r�    s    



r�  c               	   C   sÜ  t  g d¢g¡} t  dgdgdgg¡}t  g d¢g d¢g¡}t  dgg¡}t  dgg¡}t  g d¢g¡}ttttfD ]±}|| ƒ d¡}||ƒ d	¡}||ƒ d¡}	||ƒ d
¡}
||ƒ d¡}||ƒ d¡}t| ¡ t  	| d¡ƒ t| ¡ t  	|d	¡ƒ t|	 ¡ |ƒ t|
 ¡ t  	|d
¡ƒ t| ¡ t  	|d¡ƒ t| ¡ t  	|d¡ƒ t
jtdd�� |g d¢g d¢gƒjdd� W d   ƒ n1 sÄw   Y  t
jtdd�� |g d¢gƒjdd� W d   ƒ n1 sæw   Y  q:d S )Nr…  r¾   r   r_   r‡  r—  r¢  rZ  r©  rÂ  rË  rÄ  zcannot be broadcastr*  )r¾   r_   r   rÄ  r�  r‚  rÛ  r'  )rE   r   r   r   r   r   Ú_broadcast_tor   rŒ   Úbroadcast_torî   r   rê   )rI   rN   ra  rß   rb  rc  Ú	containerÚres_aÚres_bÚres_cÚres_dÚres_eÚres_fr8   r8   r9   Útest_broadcast_to&  s6   ÿÿ€ïr¨  r;   )NFNNF)T)	TTTTTTTTT)ŒrÔ   Ú
contextlibrH  r¹  rß  rˆ  Úsysrî   r   ré   ÚnumpyrE   r   r   r   r   r   r   r	   r
   r   r   r   r   r   rˆ   Únumpy.testingr   r   r   r   r   r   r   Úscipy.linalgrr   r3  rs   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   Úscipy.sparse._baser)   Úscipy.sparse._sputilsr*   r+   r,   r-   r.   Úscipy.sparse.linalgr/   r0   r1   Úscipy._lib.decoratorr2   Úscipy._lib._utilr3   rƒ   r7  r:   r@   Ú	frozensetr-  rO   r  r  r‹   rŒ   rŽ   r¢   r­   r¼   rÞ   r5  rE  r2  r„  rb  re  r›  r¬  ÚcontextmanagerrÓ  rÔ  rá  rè  rû  r  r@  rR  ra  rb  rè   r¾  rÁ  rÊ  rí   rÚ  rÜ  rö  r÷  r  r  r   r!  r8  rB  rC  rQ  rV  rY  r\  r]  r^  r_  r`  ra  rd  rr  rs  r…  r3  rŠ  r�  r¨  r8   r8   r8   r9   Ú<module>   s$  <$P




ÿQ$"                 f  E   
n#bc  "

ý,   bpþ þJý j!309d