a
    ˆù»jšþ ã                   @   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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!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/m0Z0m1Z1m2Z2 ddl3m4Z4m5Z5m6Z6m7Z7m8Z8 dd	l9m:Z:m;Z;m<Z< dd
l=m>Z> ddl?m@Z@ ddl!Z!dejAv ZBdgdd„ZCdd„ ZDeEdgƒZFdd„ ZGe ƒ ZHeH Ie@¡ dhdd„ZJdd„ ZKG dd„ dƒZLG dd„ dƒZMG dd„ dƒZNG dd „ d ƒZOG d!d"„ d"ƒZPG d#d$„ d$ƒZQG d%d&„ d&ƒZRG d'd(„ d(ƒZSG d)d*„ d*ƒZTG d+d,„ d,ƒZUejVd-d.„ ƒZWG d/d0„ d0ƒZXG d1d2„ d2ƒZYG d3d4„ d4ƒZZG d5d6„ d6ƒZ[G d7d8„ d8ƒZ\G d9d:„ d:ƒZ]did<d=„Z^djd>d?„Z_G d@dA„ dAe_ƒ ƒZ`e` a¡  G dBdC„ dCe_ƒ ƒZbeb a¡  G dDdE„ dEe_dddF�ƒZcec a¡  G dGdH„ dHe_ddI�ƒZded a¡  G dJdK„ dKe_ddddddL�ƒZeee a¡  G dMdN„ dNe_ddddddddO�ƒZfef a¡  G dPdQ„ dQe_dddddddR�ƒZgeg a¡  dSdT„ ZhG dUdV„ dVƒZiG dWdX„ dXeiƒZjG dYdZ„ dZejƒZkG d[d\„ d\eke`ƒZlG d]d^„ d^ekebƒZmG d_d`„ d`ejegƒZnG dadb„ dbeieeƒZodcdd„ ZpG dedf„ dfƒZqdS )kzò 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)Ú_pep440)Ú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)Úraises)Ú
csc_matrixÚ
csr_matrixÚ
dok_matrixÚ
coo_matrixÚ
lil_matrixÚ
dia_matrixÚ
bsr_matrixÚeyeÚissparseÚSparseEfficiencyWarningÚsparray)Ú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   )ÚmemberZ
collectionr-   Úmessage© r0   úBE:\soccer\ml_env\Lib\site-packages\scipy/sparse/tests/test_base.pyÚ	assert_in2   s    r2   c                 K   s&   t | j|jkƒ t| |fi |¤Ž d S ©N)r   Údtyper   )ÚxÚyÚkwargsr0   r0   r1   Úassert_array_equal_dtype7   s    r8   Ú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fƒr| |¡ q|S r3   )Ú__dict__ÚvaluesÚ
isinstanceÚnpr	   ZgenericÚappend)r5   ÚarraysÚar0   r0   r1   Ú_underlying_arraysA   s
    z3sparse_may_share_memory.<locals>._underlying_arraysTF)r=   Úmay_share_memory)ÚAÚBrA   r@   Úbr0   r0   r1   Úsparse_may_share_memory>   s    
rF   Fc                    s¢   ˆdu rt  d¡‰n
t  ˆ¡‰|r.ddd„‰nHˆdurFd‡fdd„	‰n0|rht jjdd	�‰ d‡ fd
d„	‰nd‡fdd„	‰ˆdurŠ‡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é
   r0   Fc                 S   sD   t | ||ƒ}tt |¡jt tj¡jƒ t|tjkp<|tjkƒ |S r3   )r%   r   r=   ÚiinfoÚmaxÚint32r   Zintc)r?   ÚmaxvalÚcheck_contentsÚtpr0   r0   r1   Únew_get_index_dtypee   s    z4with_64bit_maxval_limit.<locals>.new_get_index_dtypec                    s   ˆ S r3   r0   ©r?   rK   rL   ©Úfixed_dtyper0   r1   rN   k   s    éÒ  )Úseedc                    s   t jt jfˆ  d¡ S )Né   )r=   rJ   Úint64ÚrandintrO   )Úcounterr0   r1   rN   p   s    c                    sŒ   t j}|d ur|ˆ krt j}| D ]f}t  |¡}|jt jkr |r€|jdkrLq n4t  |jt j¡r€| ¡ }| 	¡ }|ˆ  kr€|ˆ kr€q t j}q |S ©Nr   )
r=   rJ   rU   r   r4   ÚsizeÚ
issubdtypeÚintegerrI   Úmin)r?   rK   rL   r4   ÚarrÚminval©Úmaxval_limitr0   r1   rN   s   s"    

c                    s    |   ¡ ˆ krtdƒ‚|  tj¡S )Nzdowncast limited)rI   ÚAssertionErrorÚastyper=   Zintp)r]   )Údowncast_maxvalr0   r1   Ú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
}z°|D ]T}| |dt|dd ƒf¡ t|dˆƒ ˆ d urJ| |dt|dd ƒf¡ t|dˆƒ qJ| |i |¤ŽW |D ]\}}}|d ur²t|||ƒ q²S ]\}}}|d urÔt|||ƒ qÔn*|D ]"\}}}|d u� rút|||ƒ � qú0 d S )Nr%   Zdowncast_intp_index)ÚscipyÚsparseZ_bsrZ_cooZ_cscZ_csrZ_diaZ_dokZ_lilZ_sputilsZ_compressedZ
_constructr>   ÚgetattrÚsetattr)Úfuncr@   ÚkwÚbackupÚmodulesÚmodÚnameZoldfunc)rc   rd   rN   r0   r1   ÚdecoŽ   s8    ý
ÿ
ÿü
þ
z%with_64bit_maxval_limit.<locals>.deco)r0   NF)r0   NF)r0   NF)r0   NF)r=   rU   ÚrandomZRandomStater+   )r`   rp   rQ   rc   Úassert_32bitro   r0   )rW   rc   rQ   r`   rd   rN   r1   Úwith_64bit_maxval_limitV   s     
rr   c                 C   s    t | tjƒst| ƒr| S |  ¡ S r3   )r<   r=   r	   r$   Útoarray©r@   r0   r0   r1   rs   §   s    rs   c                   @   sL   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   s   dS ©Númatrix on the rightr0   ©ÚselfÚmatr0   r0   r1   Ú__add__°   s    zBinopTester.__add__c                 C   s   dS rv   r0   rx   r0   r0   r1   Ú__mul__³   s    zBinopTester.__mul__c                 C   s   dS rv   r0   rx   r0   r0   r1   Ú__sub__¶   s    zBinopTester.__sub__c                 C   s   dS ©Númatrix on the leftr0   rx   r0   r0   r1   Ú__radd__¹   s    zBinopTester.__radd__c                 C   s   dS r~   r0   rx   r0   r0   r1   Ú__rmul__¼   s    zBinopTester.__rmul__c                 C   s   dS r~   r0   rx   r0   r0   r1   Ú__rsub__¿   s    zBinopTester.__rsub__c                 C   s   dS rv   r0   rx   r0   r0   r1   Ú
__matmul__Â   s    zBinopTester.__matmul__c                 C   s   dS r~   r0   rx   r0   r0   r1   Ú__rmatmul__Å   s    zBinopTester.__rmatmul__N)Ú__name__Ú
__module__Ú__qualname__r{   r|   r}   r€   r�   r‚   rƒ   r„   r0   r0   r0   r1   ru   ­   s   ru   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   s
   || _ d S r3   ©Ú_shape)ry   Úshaper0   r0   r1   Ú__init__Ë   s    zBinopTester_with_shape.__init__c                 C   s   | j S r3   r‰   ©ry   r0   r0   r1   r‹   Î   s    zBinopTester_with_shape.shapec                 C   s
   t | jƒS r3   )ÚlenrŠ   r�   r0   r0   r1   ÚndimÑ   s    zBinopTester_with_shape.ndimc                 C   s   dS rv   r0   rx   r0   r0   r1   r{   Ô   s    zBinopTester_with_shape.__add__c                 C   s   dS rv   r0   rx   r0   r0   r1   r|   ×   s    zBinopTester_with_shape.__mul__c                 C   s   dS rv   r0   rx   r0   r0   r1   r}   Ú   s    zBinopTester_with_shape.__sub__c                 C   s   dS r~   r0   rx   r0   r0   r1   r€   Ý   s    zBinopTester_with_shape.__radd__c                 C   s   dS r~   r0   rx   r0   r0   r1   r�   à   s    zBinopTester_with_shape.__rmul__c                 C   s   dS r~   r0   rx   r0   r0   r1   r‚   ã   s    zBinopTester_with_shape.__rsub__c                 C   s   dS rv   r0   rx   r0   r0   r1   rƒ   æ   s    z!BinopTester_with_shape.__matmul__c                 C   s   dS r~   r0   rx   r0   r0   r1   r„   é   s    z"BinopTester_with_shape.__rmatmul__N)r…   r†   r‡   rŒ   r‹   r�   r{   r|   r}   r€   r�   r‚   rƒ   r„   r0   r0   r0   r1   rˆ   È   s   rˆ   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S )ÚComparisonTesterc                 C   s   dS )NÚeqr0   ©ry   Úotherr0   r0   r1   Ú__eq__î   s    zComparisonTester.__eq__c                 C   s   dS )NÚner0   r’   r0   r0   r1   Ú__ne__ñ   s    zComparisonTester.__ne__c                 C   s   dS )NÚltr0   r’   r0   r0   r1   Ú__lt__ô   s    zComparisonTester.__lt__c                 C   s   dS )NÚler0   r’   r0   r0   r1   Ú__le__÷   s    zComparisonTester.__le__c                 C   s   dS )NÚgtr0   r’   r0   r0   r1   Ú__gt__ú   s    zComparisonTester.__gt__c                 C   s   dS )NÚger0   r’   r0   r0   r1   Ú__ge__ý   s    zComparisonTester.__ge__N)	r…   r†   r‡   r”   r–   r˜   rš   rœ   rž   r0   r0   r0   r1   r�   ì   s   r�   c                   @   s   e Zd Zd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ej j!d2d3„ ƒZ"d4d5„ Z#d6d7„ Z$d8d9„ Z%d:d;„ Z&d<d=„ Z'd>d?„ Z(d@dA„ Z)dBdC„ Z*dDdE„ Z+dFdG„ Z,dHdI„ Z-dJdK„ Z.dLdM„ Z/dNdO„ Z0dPdQ„ Z1dRdS„ Z2dTdU„ Z3e4dVdW„ ƒZ5e4dXdY„ ƒZ6e4dZd[„ ƒZ7e4d\d]„ ƒZ8d^d_„ Z9d`da„ Z:e4dbdc„ ƒZ;e4ddde„ ƒZ<dfdg„ Z=dhdi„ Z>djdk„ Z?dldm„ Z@dndo„ ZAdpdq„ ZBdrds„ ZCdtdu„ ZDdvdw„ ZEdxdy„ ZFdzd{„ ZGd|d}„ ZHd~d„ ZId€d�„ ZJd‚dƒ„ ZKd„d…„ ZLd†d‡„ ZMdˆd‰„ ZNdŠd‹„ ZOdŒd�„ ZPdŽd�„ ZQd�d‘„ ZRd’d“„ ZSd”d•„ ZTd–d—„ ZUd˜d™„ ZVdšd›„ 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´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
|< qPt| j| j	tj ƒ t| j ¡ | j
tj  ¡ ƒ d S )N)é   r   r   rT   )é   r   r    r   )r   rT   r   r   Úd)r   ÚdatÚ	spcreatorÚdatspÚsetr#   ÚunionÚmath_dtypesÚchecked_dtypesÚ
dat_dtypesÚdatsp_dtypesrb   r   r=   Úfloat64rs   )Úclsr4   r0   r0   r1   Ú
init_class  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¤   )r4   r¥   r�   r0   r1   Úcheck#  s    
z$_TestCommon.test_bool.<locals>.checkz%Cannot create a rank <= 2 DOK matrix.)r<   ÚTestDOKÚpytestÚskipr©   ©ry   r²   r4   r0   r�   r1   Ú	test_bool"  s
    


z_TestCommon.test_boolc                 C   sH   t ddggƒ}|  |¡}tdƒD ]}|| }|| }q t|| ¡ ƒ d S )NTFrG   )r   r¤   Úranger   rs   )ry   r£   r¥   Ú_r0   r0   r1   Útest_bool_rollover/  s    

z_TestCommon.test_bool_rolloverc                    sV   t ƒ }| t¡ |t‡ fdd„ƒƒ}tˆ tttfƒs>t 	d¡ ˆ j
D ]}||ƒ qDd S )Nc           	         s   ˆ j |  }ˆ j|  }| ¡ }d|d d …df< ˆ  |¡}t|ƒ}t|ƒ}t|ƒ}t|ƒ}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   r8   rs   r=   Únan)	r4   r£   r¥   Údat2Údatsp2ÚdatbsrÚdatcsrÚdatcscÚdatlilr�   r0   r1   r²   >  s(    



ÿz"_TestCommon.test_eq.<locals>.checkú8Bool comparisons only implemented for BSR, CSC, and CSR.©r   Úfilterr!   Úsup_complexr<   ÚTestBSRÚTestCSCÚTestCSRr´   rµ   r©   ©ry   Úsupr²   r4   r0   r�   r1   Útest_eq:  s    


z_TestCommon.test_eqc                    sV   t ƒ }| t¡ |t‡ fdd„ƒƒ}tˆ tttfƒs>t 	d¡ ˆ j
D ]}||ƒ qDd S )Nc           	         sL  ˆ j |  }ˆ j|  }| ¡ }d|d d …df< ˆ  |¡}t|ƒ}t|ƒ}t|ƒ}t|ƒ}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   r8   rs   r=   r½   )	r4   r£   r¥   r¾   r¿   rÀ   rÂ   rÁ   rÃ   r�   r0   r1   r²   c  s,    



ÿz"_TestCommon.test_ne.<locals>.checkrÄ   rÅ   rË   r0   r�   r1   Útest_ne_  s    


z_TestCommon.test_nec                    sV   t ƒ }| t¡ |t‡ fdd„ƒƒ}tˆ tttfƒs>t 	d¡ ˆ j
D ]}||ƒ qDd S )Nc                    sP  ˆ j |  }ˆ j|  }| ¡ }d|d d …df< ˆ  |¡}| t¡}d|d d …df< ˆ  |¡}t|ƒ}t|ƒ}t|ƒ}	t	|ƒ}
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ú0    Y  ˆ j |  }ˆ j|  }| ¡ }d|d d …df< ˆ  |¡}t
||k ||k ƒ d S ©Nr   ù      ð?      ð?)rT   r    r   éÿÿÿÿéþÿÿÿÚignore©Úinvalid©rª   r«   r¼   r¤   rb   Úcomplexr   r   r   r   r8   rs   r=   rU   Úerrstater½   ©r4   r£   r¥   r¾   r¿   Z
datcomplexZdatspcomplexrÀ   rÂ   rÁ   rÃ   Úvalr�   r0   r1   r²   Š  sP    





ÿ
ÿ$


z"_TestCommon.test_lt.<locals>.checkrÄ   rÅ   rË   r0   r�   r1   Útest_lt†  s    
4

z_TestCommon.test_ltc                    sV   t ƒ }| t¡ |t‡ fdd„ƒƒ}tˆ tttfƒs>t 	d¡ ˆ j
D ]}||ƒ qDd S )Nc                    sP  ˆ j |  }ˆ j|  }| ¡ }d|d d …df< ˆ  |¡}| t¡}d|d d …df< ˆ  |¡}t|ƒ}t|ƒ}t|ƒ}	t	|ƒ}
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ú0    Y  ˆ j |  }ˆ j|  }| ¡ }d|d d …df< ˆ  |¡}t
||k||kƒ d S rÏ   rÖ   rÙ   r�   r0   r1   r²   É  sP    





ÿ
ÿ$


z"_TestCommon.test_gt.<locals>.checkrÄ   rÅ   rË   r0   r�   r1   Útest_gtÅ  s    
3

z_TestCommon.test_gtc                    sV   t ƒ }| t¡ |t‡ fdd„ƒƒ}tˆ tttfƒs>t 	d¡ ˆ j
D ]}||ƒ qDd S )Nc                    s  ˆ j |  }ˆ j|  }| ¡ }d|d d …df< ˆ  |¡}| t¡}d|d d …df< ˆ  |¡}t|ƒ}t|ƒ}t|ƒ}	t	|ƒ}
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Ð   )rT   r    rÑ   rÒ   ©rª   r«   r¼   r¤   rb   r×   r   r   r   r   r8   rs   r=   rU   rÙ   r�   r0   r1   r²     sH    





ÿ



z"_TestCommon.test_le.<locals>.checkrÄ   rÅ   rË   r0   r�   r1   Útest_le  s    
/

z_TestCommon.test_lec                    sV   t ƒ }| t¡ |t‡ fdd„ƒƒ}tˆ tttfƒs>t 	d¡ ˆ j
D ]}||ƒ qDd S )Nc                    s  ˆ j |  }ˆ j|  }| ¡ }d|d d …df< ˆ  |¡}| t¡}d|d d …df< ˆ  |¡}t|ƒ}t|ƒ}t|ƒ}	t	|ƒ}
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�   r0   r1   r²   A  sH    





ÿ



z"_TestCommon.test_ge.<locals>.checkrÄ   rÅ   rË   r0   r�   r1   Útest_ge=  s    
/

z_TestCommon.test_gec                 C   sB   t |  d¡ ¡ tdƒƒ t |  d¡jdƒ t |  d¡ ¡ dƒ d S )N©r¡   r¡   r   )r   r¤   rs   r   ÚnnzÚcount_nonzeror�   r0   r0   r1   Ú
test_emptyw  s    z_TestCommon.test_emptyc                 C   s6   t  | j ¡ ¡}t| j ¡ |ƒ t| jj ¡ |ƒ d S r3   )r=   rã   r¥   rs   r   ÚT)ry   Úexpectedr0   r0   r1   Ú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�   r0   r0   r1   Útest_invalid_shapes‚  s    z_TestCommon.test_invalid_shapesc                 C   s   t | jƒ d S r3   )Úreprr¥   r�   r0   r0   r1   Ú	test_repr‡  s    z_TestCommon.test_reprc                 C   s   t | jƒ d S r3   )Ústrr¥   r�   r0   r0   r1   Útest_strŠ  s    z_TestCommon.test_strc           
      C   sÈ   d}t  d¡t  d¡t  d¡t  d¡t  d¡fD ]’}| j||d�}|| }d| }|| ¡  }|| ¡  }|| ¡  }||||||fD ]:}	t|	 ¡ | ¡ | ¡  ƒ t|	j|ƒ t|	 ¡ j|ƒ q†q0d S )	N©é   rñ   rJ   Úfloat32r¬   Ú	complex64Ú
complex128©r4   rT   )r=   r4   r¤   ÚtocscÚtocsrÚtocoor   rs   )
ry   r‹   Zmytyper@   rE   Úcr¢   ÚeÚfÚmr0   r0   r1   Ú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¢   )r   r   Úabsr¤   rs   ©ry   rC   r0   r0   r1   Ú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¢   )Zdecimals)Úndigits)r   r   r=   ÚaroundÚroundr¤   rs   )ry   ÚdecimalrC   r0   r0   r1   Ú
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)r  éýÿÿÿrÒ   )rÑ   r   r    ©rT   r¡   é   r¢   rT   )r   r   r=   Úpowerr¤   rs   r¯   ÚNotImplementedErrorr  r0   r0   r1   Ú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 )Nrþ   r   r  r  r¢   )TFF)FFT)r   r   r¤   rs   r¯   r  Ú__neg__r  r0   r0   r1   Útest_neg°  s    "z_TestCommon.test_negc                 C   s.   t ddggƒ}|  |¡}t|j ¡ |jƒ d S ©Nù      ð?      @y       @      À)r   r¤   r   Úrealrs   ©ry   ÚDrC   r0   r0   r1   Ú	test_real¸  s    
z_TestCommon.test_realc                 C   s.   t ddggƒ}|  |¡}t|j ¡ |jƒ d S r  )r   r¤   r   Úimagrs   r  r0   r0   r1   Ú	test_imag½  s    
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 ]ˆ}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   rT   r    r   rT   r¡   ©r   r   r    )r   r   rT   ©r   r¡   r   r  ©r    rT   r¡   r  ©ÚkrG   i�ÿÿÿ)é(   i?  r#  ©r   r   )é   r   ©r   rñ   )r>   r   r   r‹   r¤   r¸   r   Údiagonalr   r=   r   Úempty)ry   Zmatsrü   ÚrowsÚcolsZ
sparse_matr"  r0   r0   r1   Ú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�ƒ q0t  g d¢g d¢g¡}|  |¡}tddƒD ]}t|j|d�|j|d�ƒ qzd S )N©r    rT   r¡   ©r  rñ   é   )é   é   é	   rÒ   r¡   )ÚoffsetrÑ   )r=   r   r¤   r¸   r   Útrace)ry   rC   rD   r"  r0   r0   r1   Ú
test_traceã  s    

z_TestCommon.test_tracec                 C   sˆ  |   g d¢g d¢g d¢g d¢g¡}dD ]4}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ƒ d|_t| ¡ |ƒ tt|j|j	fƒ tt|jd|j	dfƒ d S )N)r    r   r/  r  r  )r   r   rñ   )ÚCÚF))é   r    )r    r7  ©Úorder©r   rG   r   r   ©r   r   r   r   ©r   é   é   r#  ©rT   r.  )r   rG   r   r   r   r   )r   r   r   r=  r>  r#  ©rT   rÑ   )rÑ   r.  rê   rT   r.  r    )Z
not_an_arg©r¡   r  T©r¼   )
r¤   r   Úreshapers   r¯   r°   Ú	TypeErrorr   r‹   rY   )ry   r5   r9  Úsr6   Zdesiredr0   r0   r1   Útest_reshapeð  s6    "ÿ



z_TestCommon.test_reshapec                    sÞ   ‡ fdd„‰ ‡ ‡fdd„}t j d¡ g d¢}t jt jfD ]ž}|D ]”\}}t  | d |d ¡}|D ]p}t||||fƒ‰t j||f|d�}| j||f|d�}	|||	|ƒ t jj	|t
t|ƒd	ƒd
�D ]}
|||	|
ƒ qÂqdqBq:d S )Nc                    s–   t  |¡}|dkrzt| jd | jd | ƒ}|jdkrPt|t|ƒƒ}|d |… }t  d|¡}t  ||| ¡}|| ||f< n|dk r’ˆ | j|| ƒ d S r»   )r=   r   r\   r‹   r�   rŽ   r   rå   )r@   Úvr"  ÚnÚiÚj)Údense_setdiagr0   r1   rK    s    

z=_TestCommon.test_setdiag_comprehensive.<locals>.dense_setdiagc           	   	      s&  dt t | |¡ƒddfD �]}|dk r:tj tddƒ¡}ntjjdd|d�}ˆ | ||ƒ tƒ �,}d}| t	|¡ | 
||¡ W d   ƒ n1 s�0    Y  t | |¡}t |¡jdkrÎt||d	ˆ|f d
� n8tt |ƒt |ƒƒ}t|d |… |d |… d	ˆ|f d
� t| ¡ | d	ˆ|f d
� qd S )NrÑ   rT   r>  r   r    r=  ©rY   ú?Changing the sparsity structure of a cs[cr]_matrix is expensivez%s %d©Úerr_msg)rŽ   r=   r   rp   Úchoicer¸   rV   r   rÆ   r!   Úsetdiagr   r�   r   r\   rs   )	r@   rE   r"  ÚrrG  rÌ   r/   r¢   rH  ©rK  r-   r0   r1   Úcheck_setdiag+  s    *&z=_TestCommon.test_setdiag_comprehensive.<locals>.check_setdiagrR   )r&  ©rñ   r   ©r    rñ   ©rñ   r    rð   r    rõ   rñ   rL  )r=   rp   rS   r   r¬   r   rì   r   r¤   rP  r\   rŽ   )ry   rT  Zshapesr4   rü   rH  Úksr"  r@   rE   Zk2r0   rS  r1   Útest_setdiag_comprehensive  s    z&_TestCommon.test_setdiag_comprehensivec              	   C   sˆ  |   t d¡¡}|   d¡}g d¢}tƒ ��H}| 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   ƒ n1 �sz0    Y  d S )Nr¡   ©r  r  )r¡   rT   r    rM  r  r!  r    )r¡   r¡   r   )r   rT   rT   r  rÒ   )r¡   r   r    )r1  rT   ©r   rT   r1  ©rT   r   r   ©r   r   r    r   )r   r   r   r    )r¤   r=   r   r   rÆ   r!   r¯   r°   rQ  r   r'  rs   r   )ry   rü   Úm2r;   rÌ   r0   r0   r1   Útest_setdiagV  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   s   h | ]}t |ƒ’qS r0   ©Útuple©Ú.0Úijr0   r0   r1   Ú	<setcomp>{  ó    z+_TestCommon.test_nonzero.<locals>.<setcomp>c                 S   s   h | ]}t |ƒ’qS r0   rb  rd  r0   r0   r1   rg  |  rh  )r   r¤   r
   Únonzeror   ©ry   rC   ÚAspZA_nzZAsp_nzr0   r0   r1   Útest_nonzerow  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`  ra  r  c                 S   s   h | ]}t |ƒ’qS r0   rb  rd  r0   r0   r1   rg  …  rh  z1_TestCommon.test_numpy_nonzero.<locals>.<setcomp>c                 S   s   h | ]}t |ƒ’qS r0   rb  rd  r0   r0   r1   rg  †  rh  )r   r¤   r
   r=   ri  r   rj  r0   r0   r1   Útest_numpy_nonzero€  s
    
z_TestCommon.test_numpy_nonzeroc                 C   sP   t | j d¡ ¡ | jdgd d …f ƒ t | j d¡ ¡ | jdgd d …f ƒ d S ©Nr    rÑ   )r   r¥   Zgetrowrs   r£   r�   r0   r0   r1   Útest_getrowŠ  s    &z_TestCommon.test_getrowc                 C   sP   t | j d¡ ¡ | jd d …dgf ƒ t | j d¡ ¡ | jd d …dgf ƒ d S rn  )r   r¥   Zgetcolrs   r£   r�   r0   r0   r1   Útest_getcolŽ  s    &z_TestCommon.test_getcolc           	         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 ]}|||ƒ q�q€d S )NrR   ©r   r    rT   ©r¡   r  rñ   ©éúÿÿÿr/  r1  rñ   )r#  r#  g{®Gáz„?)Zdensityc                    s¨  t ˆ | | d�}ˆj|| d�}tjdd���f 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   ƒ n1 �sš0    Y  d S )	Nrõ   rÓ   )Zover©Úaxisr   r    rÒ   rÑ   )
r'   r¤   r=   rØ   r   Úsumr   r4   r   Úisscalar)r4   rJ  r£   r¥   ©Úmatricesry   r0   r1   r²   �  s(    
ÿÿz#_TestCommon.test_sum.<locals>.check)r=   rp   rS   r'   Úrandr   r   rf   rs   r©   r¸   rŽ   )	ry   Údat_1Údat_2Zdat_3Zdat_4Zdat_5r²   r4   rJ  r0   ry  r1   Ú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¡   rq  rr  rs  r¡   ru  ©r   r    ç      ø?r    ©rv  Úout)r=   r   r   r¤   r¯   r°   rw  rD  ©ry   r„  r£   r¥   r0   r0   r1   Útest_sum_invalid_paramsµ  s    
þ
z#_TestCommon.test_sum_invalid_paramsc                    sJ   t g d¢g d¢g d¢gƒ‰ |  ˆ ¡‰‡ ‡fdd„}| jD ]}||ƒ q8d S )Nrq  rr  rs  c                    s4   ˆ j | d�}ˆj | d�}t||ƒ t|j|jƒ d S ©Nrõ   ©Úmeanr   r   r4   ©r4   Údat_meanÚ
datsp_mean©r£   r¥   r0   r1   r²   Ç  s    
z)_TestCommon.test_sum_dtype.<locals>.check©r   r¤   r©   r¶   r0   r�  r1   Útest_sum_dtypeÁ  s    þ

z_TestCommon.test_sum_dtypec                 C   s¤   t g d¢g d¢g d¢gƒ}|  |¡}t dggƒ}tdggƒ}|j|dd� |j|d� t||ƒ t d¡}tt d¡ƒ}|jd	|dd
� |jd	|d� t||ƒ d S ©Nrq  rr  rs  r   T)r„  Úkeepdims©r„  ©r¡   r    r    )rv  r„  r‘  rƒ  )r   r¤   r'   rw  r   r=   r   r&   ©ry   r£   r¥   Zdat_outZ	datsp_outr0   r0   r1   Útest_sum_outÑ  s    þ


z_TestCommon.test_sum_outc                 C   sT   t g d¢g d¢g d¢gƒ}|  |¡}t |¡}t |¡}t||ƒ t|j|jƒ d S ©Nrq  rr  rs  )r   r¤   r=   rw  r   r   r4   ©ry   r£   r¥   r‹  rŒ  r0   r0   r1   Útest_numpy_sumå  s    þ



z_TestCommon.test_numpy_sumc                    s$   ‡ 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d�|jd d�ƒ t|jd d�j|jd d�jƒ t|jddd�|jdd�ƒ t|jdd�j|jdd�jƒ t|jd	dd�|jd	d�ƒ t|jd	d�j|jd	d�jƒ t|jd
dd�|jd
d�ƒ t|jd
d�j|jd
d�jƒ t|jddd�|jdd�ƒ t|jdd�j|jdd�jƒ d S )Nrq  ©r¡   r  rñ   )r.  r/  r1  rõ   ru  T©rv  r‘  r   r    rÒ   rÑ   )	r   r¤   r   r‰  r   r4   r   r=   rx  ©r4   r£   r¥   r�   r0   r1   r²   ó  s<    þþÿÿÿÿÿz$_TestCommon.test_mean.<locals>.check)r©   r¶   r0   r�   r1   Ú	test_meanò  s    
z_TestCommon.test_meanc                 C   sx   t 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&   r=   r   r   r¤   r¯   r°   r‰  rD  r…  r0   r0   r1   Útest_mean_invalid_params  s    þ
z$_TestCommon.test_mean_invalid_paramsc                    sJ   t g d¢g d¢g d¢gƒ‰ |  ˆ ¡‰‡ ‡fdd„}| jD ]}||ƒ q8d S )Nrq  rr  rs  c                    s4   ˆ j | d�}ˆj | d�}t||ƒ t|j|jƒ d S r‡  rˆ  rŠ  r�  r0   r1   r²   &  s    
z*_TestCommon.test_mean_dtype.<locals>.checkrŽ  r¶   r0   r�  r1   Útest_mean_dtype   s    þ

z_TestCommon.test_mean_dtypec                 C   s¤   t g d¢g d¢g d¢gƒ}|  |¡}t dggƒ}tdggƒ}|j|dd� |j|d� t||ƒ t d¡}tt d¡ƒ}|jd	|dd
� |jd	|d� t||ƒ d S r�  )r   r¤   r'   r‰  r   r=   r   r”  r0   r0   r1   Útest_mean_out0  s    þ


z_TestCommon.test_mean_outc                 C   sT   t g d¢g d¢g d¢gƒ}|  |¡}t |¡}t |¡}t||ƒ t|j|jƒ d S r–  )r   r¤   r=   r‰  r   r   r4   r—  r0   r0   r1   Útest_numpy_meanD  s    þ



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ƒ �L}| td	¡ | td
¡ | td¡ t|ƒ 	¡ }t|ƒ 	¡ }	W d   ƒ n1 sÆ0    Y  t
|| tdƒƒ t
|	| tdƒƒ d S )Nr  ©r   r   r¡   ©r  rñ   r.  rá   ©r‹   r4   )ç      @ç        ç      ð?)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¤   re   Úlinalgr)   r   rÆ   r!   rs   r   r   )
ry   ÚMÚsMZMexpÚNZsNZNexprÌ   ZsMexpZsNexpr0   r0   r1   Ú	test_expmQ  s.    þþþ*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ƒ �L}| td¡ | td¡ | td¡ ˆ j|d| d�}t|ƒ}W d   ƒ n1 st0    Y  t| |¡ ¡ t	 
d	¡ƒ ttt|ƒ d S )
Nr  r¡  r¢  rª  r©  r¨  rá   r£  r¡   )r   r   rÆ   r!   r¤   r*   r   r   rs   r=   r   r¯   rD  )r4   r­  rÌ   r®  ZsMinvr�   r0   r1   r²   n  s    ÿÿÿ&z#_TestCommon.test_inv.<locals>.check)r«  r¶   r0   r�   r1   Útest_invm  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 ©	N©r    r   r   r  )r   rñ   r   r  )r  r   r   )r   ç      @r   Úint16rõ   )r   r   r¤   rs   rb   r  r0   r0   r1   Útest_from_array  s     þz_TestCommon.test_from_arrayc                 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 r²  )r'   r   r¤   Útodenserb   r  r0   r0   r1   Ú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 r²  )r   r¤   rs   r   rb   r  r0   r0   r1   Útest_from_list—  s    þÿz_TestCommon.test_from_listc                 C   sî   t g d¢g d¢g d¢g d¢gƒ}t|ƒ}t|  |¡ ¡ |ƒ |  |¡}t|  |¡ ¡ |ƒ t g d¢g d¢g d¢gƒ}t|ƒ}t|  |¡ ¡ |ƒ t| j|dd� ¡ | d¡ƒ |  |¡}t|  |¡ ¡ |ƒ t| j|dd� ¡ | d¡ƒ d S r²  )r   r   r   r¤   rs   rb   ©ry   r  ÚSr0   r0   r1   Útest_from_sparse¤  s&     
þÿ
ÿz_TestCommon.test_from_sparsec           
      C   sÐ  | j  ¡ }t|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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 )Nr5  r8  r6  rõ   r’  ©r¦  r§  r¤  ©r¦  r§  r¤  ç      @)r¥   r·  r<   r=   r'   r   r£   r   ÚflagsÚc_contiguousÚf_contiguousr   r‹   r4   rB   r&   r   rå   r¤   r±   rb   )
ry   Úchkr„  r@   Údense_dot_denser²   rE   Úcheck2ÚspboolZmatboolr0   r0   r1   Ú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 )
Nr5  r8  r6  rõ   r’  r¦  .r½  r¾  )r   r£   r¥   rs   r   r   rÀ  rÁ  rÂ  r=   r   r‹   r4   r   r   r¤   r±   rb   )ry   r£   rÃ  r„  r@   rÄ  r²   rE   rÅ  rÆ  Zarrboolr0   r0   r1   Útest_toarrayå  s:    











z_TestCommon.test_toarrayc                    s  t g d¢g d¢g d¢gƒ}|  |¡}tD ]è}| |¡}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 rÔdD ]}||ƒ qÄq(ˆ jdkròdD ]}||ƒ qâq(ˆ jdkr(dD ]}||ƒ �q q(d S )N©y       @      @r   r   ©r   y      @      @r   r  )TFrB  FTc                    sj   t ˆ | ƒ}t ˆ| ƒ}t||ƒ t||uƒ d|j }|| }||  ||< t|| || kƒ |||< d S )N)r   )rg   r   r   r�   )Ú	attributer@   rE   rI  Zb_i©ÚS_castedZS_copiedr0   r1   Ú(check_equal_but_not_same_array_attribute  s    



zI_TestCommon.test_astype.<locals>.check_equal_but_not_same_array_attribute©ÚcsrÚcscÚbsr)ÚindicesÚindptrÚdataÚcoo)ÚrowÚcolrÕ  Údia)ÚoffsetsrÕ  )	r   r¤   r#   rb   r   r4   rs   Úformatr   )ry   r  r»  r5   ÚD_castedr¼   rÎ  rË  r0   rÌ  r1   Útest_astype
  s2    þ




z_TestCommon.test_astypec                 C   s†   t g d¢g d¢g d¢gƒ}|  |¡}t|dƒr8d|jj_|jdv rVd|jj_d|jj_t	D ]&}| 
|¡}| 
|¡}t|j|jƒ qZd S )NrÉ  rÊ  r  rÕ  FrÏ  )r   r¤   ÚhasattrrÕ  rÀ  Z	writeablerÛ  rÔ  rÓ  r#   rb   r   r4   )ry   r  r»  r5   rÜ  rÍ  r0   r0   r1   Útest_astype_immutable3  s    þ







z!_TestCommon.test_astype_immutablec                 C   s¬   |   tddd� dd¡¡}t|jt d¡ƒ t| ¡ jt d¡ƒ t| ¡ j|jƒ t| d¡ ¡ jt d¡ƒ t| d	¡ ¡ jt d	¡ƒ | ¡ }| ¡ }t	||u ƒ d S )
Nr.  rJ   rõ   rT   r¡   r¬   rµ  rò   rô   )
r¤   r   rC  r   r4   r=   ZasfptyperÛ  rb   r   )ry   rC   rD   r5  r0   r0   r1   Útest_asfptypeD  s    z_TestCommon.test_asfptypec                    s$   ‡ fdd„}ˆ j D ]}||ƒ qd S )Nc                    sD   ˆ j |  }ˆ j|  }t|d |d  ¡ ƒ t|d |d  ¡ ƒ d S ©NrT   çÍÌÌÌÌL1@©rª   r«   r   rs   r›  r�   r0   r1   r²   R  s    

z*_TestCommon.test_mul_scalar.<locals>.check©r¨   r¶   r0   r�   r1   Útest_mul_scalarQ  s    
z_TestCommon.test_mul_scalarc                    s$   ‡ fdd„}ˆ j D ]}||ƒ qd S )Nc                    sD   ˆ j |  }ˆ j|  }td| d|  ¡ ƒ td| d|  ¡ ƒ d S rá  rã  r›  r�   r0   r1   r²   ]  s    

z+_TestCommon.test_rmul_scalar.<locals>.checkrä  r¶   r0   r�   r1   Útest_rmul_scalar\  s    
z_TestCommon.test_rmul_scalarc                 C   s@   | j tj }ttƒ� d |  W d   ƒ n1 s20    Y  d S r3   )r«   r=   r¬   r¯   rD  )ry   r¥   r0   r0   r1   Útest_rmul_scalar_type_errorh  s    
z'_TestCommon.test_rmul_scalar_type_errorc                    s$   ‡ fdd„}ˆ j D ]}||ƒ qd S )Nc                    sŽ   ˆ j |  }ˆ j|  }| ¡ }d|d< |}|| }t|| ¡ | ƒ || ¡  }t| ¡ | ¡ | ¡  ƒ ||d  }t|| ¡ |d  ƒ d S )Nr§  r[  r   )rª   r«   r¼   r   rs   r÷   ©r4   r£   r¥   r@   rE   rù   r�   r0   r1   r²   n  s    

ÿz#_TestCommon.test_add.<locals>.checkrä  r¶   r0   r�   r1   Útest_addm  s    
z_TestCommon.test_addc                    s$   ‡ fdd„}ˆ j D ]}||ƒ qd S )Nc                    sF   ˆ j |  }ˆ j|  }| ¡ }d|d< |}|| }t||| ¡  ƒ d S )Nr§  r[  )rª   r«   r¼   r   rs   rè  r�   r0   r1   r²   „  s    

z$_TestCommon.test_radd.<locals>.checkrä  r¶   r0   r�   r1   Ú	test_raddƒ  s    

z_TestCommon.test_raddc                    s4   ‡ 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 )NrA  r   ©r    r   r   r  ©rÑ   r   r   r   ©r   r0  r   r  r¢   )rª   r«   r   rs   r=   r   r¤   r   ©r4   r£   r¥   rC   r�   r0   r1   r²   ’  s    

ÿz#_TestCommon.test_sub.<locals>.checkr±   ©r¨   r=   r4   r¶   r0   r�   r1   Útest_sub‘  s
    
z_TestCommon.test_subc                    s4   ‡ fdd„}ˆ j D ]}|t d¡kr&q||ƒ qd S )Nc                    s  ˆ j |  }ˆ j|  }t|| g d¢g d¢g d¢gƒ t|| g d¢g d¢g d¢gƒ td|  ¡ | ƒ ˆ  tg d¢g d¢g d¢gdƒ¡}t|| || ¡  ƒ t|| | ¡ | ƒ t| ¡ | | ¡ | ƒ t|| ¡  || ¡  ƒ t|d | |d | ƒ d S )Nr;  r   rë  rì  rí  r¢   )rª   r«   r   rs   r¤   r'   rî  r�   r0   r1   r²   ª  s    

  "z$_TestCommon.test_rsub.<locals>.checkr±   rï  r¶   r0   r�   r1   Ú	test_rsub©  s
    
z_TestCommon.test_rsubc                    s$   ‡ fdd„}ˆ j D ]}||ƒ qd S )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                    s   g | ]}|ˆ  ‘qS r0   r0   ©re  r"  )r¥   r0   r1   Ú
<listcomp>Ê  rh  z8_TestCommon.test_add0.<locals>.check.<locals>.<listcomp>r    r¡   c                    s   g | ]}|ˆ  ‘qS r0   r0   rò  )r£   r0   r1   ró  Ë  rh  )rª   r«   r   rs   rw  r¸   r   )r4   ZsumSZsumDr�   r�  r1   r²   Ã  s    

z$_TestCommon.test_add0.<locals>.checkrä  r¶   r0   r�   r1   Ú	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)r  r   r1  )rT   r  rñ   )r   r/  r   )r   r  r   ©y      ð?       Ày              @y      ð¿        ©y      @      Ày      À      @rñ   ©y      @       @y      @      Ày       À      ð?©y              ð¿y      À       @r1  )r   r¤   r   Úmultiplyrs   )	ry   rC   rD   rk  ÚBspr5  r  ZCspÚDspr0   r0   r1   Ú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 ]h}|D ]\}z| ¡ | ¡  }W n( t�y€   tt|j|ƒ Y �q@Y n0 | |¡}t	| ¡ |ƒ �q@�q8|D ]’}|D ]†}z| ¡ | }W n@ t
�yÜ   Y �q®Y n( t�y   tt|j|ƒ Y �q®Y n0 | |¡}t|ƒ�r(t	| ¡ |ƒ n
t	||ƒ �q®�q¦d S )Nr  é÷ÿÿÿ©r    rÑ   r   )r/  r1  rý  r¡   rT   r    )r0  r.  r¡   )r  r¡   rT   )r.  r.  r.  r,  rA  r   ©r   N)r   r=   Úonesrå   r¤   rs   r°   r¯   rù  r   rD  r    )ry   rC   rD   r5  r  ÚEr6  ÚGÚHÚJÚKÚLrú  rû  ZEspZFspZHspZHsppZJspZJsppZKsprz  Z
spmatricesrI  rJ  Z
dense_multZsp_multr0   r0   r1   Ú#test_elementwise_multiply_broadcastæ  sX    












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 ƒ|ƒ |  tg d¢g d¢g d¢g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 �sr0    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   ƒ n1 �sú0    Y  d S )Nr    rë  rì  rí  r¢   ç      à?r  g      Ð?r   rõ  rö  r÷  rø  r,  )r  rT   r    rq  )r   rÒ   r¡   rÓ   )Údivide)r	  rÕ   )r=   r½   r   rs   r¥   r¤   r'   r   r   r   rØ   )ry   ræ   ÚdenomrC   rD   rk  rú  r0   r0   r1   Útest_elementwise_divide  s8    þ"þ



6

z#_TestCommon.test_elementwise_dividec                 C   sª   t g d¢g d¢g d¢g d¢gƒ}|  |¡}dD ]6}|| }tj ||¡}t| ¡ |ƒ t|j|jƒ q.dD ]}t	t
|j|ƒ qj|  |d d…d d …f ¡}t	t|jdƒ d S )	N©r    r   rT   r   )r   r¡   r  r   )r   rñ   r   r   )r   r.  r/  r0  ©r   r    rT   r¡   )rÑ   gš™™™™™@r  r¡   r    )r   r¤   r=   r¬  Zmatrix_powerr   rs   r   r4   r¯   r°   Ú__pow__rD  )ry   rC   rD   ÚexponentZret_spZret_npr0   r0   r1   Útest_pow@  s     
z_TestCommon.test_powc                 C   sn   |   t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   ©rT   r   r¤  ©rT   r¡   r   r   )r¤   r'   r   r   rs   r   )ry   r­  r×  r0   r0   r1   Útest_rmatvecR  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    rT   r¡   r,  ©r    r    ©r    r   ©r¡   r   )r¤   r   r    r   r   rs   r=   r   r  r0   r0   r1   Útest_small_multiplicationX  s    "&$z%_TestCommon.test_small_multiplicationc                 C   sÀ   |   dgdgdgg¡}t|tƒr`t|t d¡ |ƒ t|tdggƒ |ƒ t|t d¡ |ƒ n\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    rT   r¡   r“  r,  r  r  )r¤   r<   r"   r   r=   r   r   r   r  r0   r0   r1   Ú.test_start_vs_at_sign_for_sparray_and_spmatrixd  s    
&z:_TestCommon.test_start_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    rT   r¡   r   rw   )r¤   ru   r   ©ry   rC   rD   r0   r0   r1   Útest_binop_custom_typeq  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    rT   r¡   r“  r   rw   )r¤   rˆ   r   r  r0   r0   r1   Ú!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   s
   || _ d S r3   ©Úscalar)ry   r  r0   r0   r1   rŒ   ‘  s    z9_TestCommon.test_mul_custom_type.<locals>.Custom.__init__c                 S   s
   || j  S r3   r  r’   r0   r0   r1   r�   ”  s    z9_TestCommon.test_mul_custom_type.<locals>.Custom.__rmul__N)r…   r†   r‡   rŒ   r�   r0   r0   r0   r1   ÚCustom�  s   r   rT   r    r¡   )r¤   r8   rs   r   rÛ  )ry   r   r  rC   rù   ZA_scalarZA_cr0   r0   r1   Ú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    rT   r¡   r‘   r•   r—   r™   r›   r�   )r¤   r�   r   r  r0   r0   r1   Ú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  rG   )r¤   r   r   r   rs   )ry   r­  r  Úactualræ   r0   r0   r1   Útest_dot_scalar©  s
    &
z_TestCommon.test_dot_scalarc                 C   sJ  |   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ƒ�s*t|||ƒ ¡ ||  ¡ ƒ t|| ¡ |ƒ||  ¡ ƒ t||| ¡ ƒ||  ¡ ƒ t	t
||dƒ t	t
|d|ƒ d S )
Nr  r  r  r  r   r    rT   r¢   r,  )r¤   r   rå   ÚoperatorÚmatmulr   rs   r<   r"   r¯   r°   )ry   r­  rD   rØ  r&  r0   r0   r1   Útest_matmul±  s    &"z_TestCommon.test_matmulc                 C   sŠ  |   t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
ƒƒ tt	|tg d¢ƒj t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,  )r  r    rT   r¡   )r  r    r   )r¤   r'   r   rå   r   rs   r   r‹   r   r<   r	   r=   r¯   r°   r|   r   r&   )ry   r­  rØ  Zbad_vecsr5   r0   r0   r1   Útest_matvecÇ  s    &  "ÿ$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 ]8}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|ƒ t|tƒ�rštt|j|ƒ d S )Nr  r  r  r  r   r    rT   r¢   r>  g333333Ó?r¡   r  rñ   r.  )r'   r   r¤   r   rs   rö   r÷   rø   rp   rS   r   r¸   rå   r¯   r°   rƒ   r<   r"   r|   )ry   r@   Za2rE   ÚaspÚbspÚcsprù   Zwantr  ÚfracrC   rI  rJ  rR  rD   r0   r0   r1   Útest_matmat_sparseå  sX      





z_TestCommon.test_matmat_sparsec                 C   s¢   t 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|t|ƒƒƒ t|jdƒ t|t||ƒƒ qbd S )Nr  r  r  r  r    rT   r¡   r  rñ   r.  ©r  rT   )	r'   r¤   r   r   r<   Útyper   r‹   r   )ry   r@   r)  ÚbsrE   Úresultr0   r0   r1   Ú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 ]„}| |¡}t|j|ƒ t| ¡ |ƒ |  |d	 ¡ |¡}t|j|ƒ t| ¡ |d	 ƒ t|d
 ƒ|ƒ}t|j|ƒ t| ¡ |ƒ q@dD ]:}| |¡}t||ƒ |  |d	 ¡ |¡}t||d	 ƒ qÊd S )Nr  ©r   r¡   r  )rñ   r   r   r    rT   r   r¡   )rÒ  rÖ  rÑ  rÐ  rÙ  r9   Úlilù              @Z_matrix)r   Údense)	rf   r   rs   r¤   Úasformatr   rÛ  r   Úeval)ry   rC   r  rÛ  r@   rE   rù   r0   r0   r1   Ú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
� ¡ |ƒ qdq\qFd S )Nr  r;  ©r   r   r  rñ   rq  ©r¡   r   rñ   )rÒ  Úto)r    rT   r¡   r.  )r    rT   r¡   r  r.  r7  ©Ú	blocksize)r   r   r¤   rg   r   rs   )	ry   r5   r6   rC   rk  rÛ  ÚfnÚXÚYr0   r0   r1   Ú
test_tobsrC  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 ]}|||ƒ qŠqzd S )Nc                    sr   t ˆ | | d�}ˆ |¡}| ¡ }| ¡ }t| ¡ |ƒ t| ¡  ¡ |ƒ t|jdd� ¡ |ƒ t|j|jƒ d S )Nrõ   r  ©Úaxes)r   r¤   r
   r   rs   r   r4   )r4   rJ  r£   r¥   r@   rE   ry  r0   r1   r²   T  s    
z)_TestCommon.test_transpose.<locals>.checkrA  ©r  r¡   r   rC  )r£   r=   r   r¤   r   r
   rs   r   rå   r¯   r°   r©   r¸   rŽ   )ry   r|  r}  r²   r(  r4   rJ  r0   ry  r1   Útest_transposeO  s    
ÿ
z_TestCommon.test_transposec                    s$   ‡ fdd„}ˆ j D ]}||ƒ qd S )Nc                    sD   ˆ j |  }ˆ j|  }|| }t||| ƒ || }t||| ƒ d S r3   )rª   r«   r   ©r4   r£   r¥   Zsum1Zsum2r�   r0   r1   r²   l  s    

z)_TestCommon.test_add_dense.<locals>.checkrä  r¶   r0   r�   r1   Útest_add_densek  s    

z_TestCommon.test_add_densec                    s4   ‡ fdd„}ˆ j D ]}|t d¡kr&q||ƒ qd S )Nc                    sŒ   ˆ j |  }ˆ j|  }|jtkrL|| }t||| ƒ || }t||| ƒ n<|| | | }t||| ƒ || | | }t||| ƒ d S r3   )rª   r«   r4   r±   r   rG  r�   r0   r1   r²   {  s    


z)_TestCommon.test_sub_dense.<locals>.checkr±   rï  r¶   r0   r�   r1   Útest_sub_densey  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  |¡|ƒ qˆq€qld S )N)r    r   r¡   )r   r  rñ   r  )r    r    rT   )r   r¡   r.  rþ  )r   y      @       @rñ   )r   ù              ð?y       €      ð¿c           
         s6  t  | t j¡r ˆ ˆ | ¡¡}nˆ ˆ  | ¡¡}|dkrD| d¡}nH|dkrX| d¡}n4|dkrlˆ |¡}n |dkr†ˆ ˆ |¡¡}ntƒ ‚tƒ �0}| t	d¡ | 
|¡}| |¡}W d   ƒ n1 sÈ0    Y  t  
t|ƒt|ƒ¡}tt|ƒ|ƒ t|j|jƒ t  t|ƒt|ƒ¡}	tt|ƒ|	ƒ t|j|	jƒ d S )Nr  r    Úscalar2rÑ   r6  rf   zHTaking maximum .minimum. with > 0 .< 0. number results to a dense matrix)r=   rZ   Úcomplexfloatingr¤   rb   r/  r°   r   rÆ   r!   ÚmaximumÚminimumrs   r   r   r4   )
r4   Údtype2ÚbtyperC   rD   rÌ   Zmax_sZmin_sZmax_dZmin_d©ZA_denseZA_dense_cpxZB_densery   r0   r1   r²   š  s0    ÿ
(z/_TestCommon.test_maximum_minimum.<locals>.check)r  rK  r6  rf   )r=   r   r¨   r   r¬   rô   r4   )ry   r²   r4   rO  rP  r0   rQ  r1   Ú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 )NTrB  Fr<  )	r¥   r   r¼   rÛ  Ú	__class__rs   rg   r   rF   )ry   rC   Ztoselfr0   r0   r1   Ú	test_copy¿  s    z_TestCommon.test_copyc                 C   sF   t t d¡ dd¡ƒ}|  |¡}t||ƒD ]\}}t| ¡ |ƒ q*d S )Né2   rñ   rG   )r'   r=   r   rC  r¤   Úzipr   rs   )ry   rD   rC   r5   r6   r0   r0   r1   Útest_iterator×  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  rU  rñ   r.  )r   rC  r=   r   r¤   r   r   rs   r¯   r°   rù  r{   )ry   rz   r@   rE   rù   r¢   rú   rû   r)  r*  r+  ZdspZespZfspr0   r0   r1   Ú test_size_zero_matrix_arithmeticÞ  sN    










z,_TestCommon.test_size_zero_matrix_arithmeticc                 C   s°   t g ƒ}| d¡}| d¡}| d¡}|||fD ]z}|  |¡}t| ¡  ¡ |ƒ t| ¡  ¡ |ƒ t| ¡  ¡ |ƒ t| ¡  ¡ |ƒ t| 	¡  ¡ |ƒ t| 
¡  ¡ |ƒ q0d S )Nr$  r&  rU  )r   rC  r¤   r   rø   rs   r÷   rö   ZtolilÚtodokÚtobsr)ry   rz   r@   rE   rù   rü   Zspmr0   r0   r1   Útest_size_zero_conversions  s    



z&_TestCommon.test_size_zero_conversionsc                    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 ]h\}}t|tjƒrŠt||j| ƒ qdt|tƒrº|rºt|d tjƒrºt||j| ƒ qdt||j| kƒ qdqd S )N)Úprotocolr   )r¥   r¼   r¸   ÚHIGHEST_PROTOCOLÚloadsÚdumpsr   r‹   r   rs   rÛ  r:   Úitemsr<   r=   r	   rc  r   )r¥   r\  ZsploadedÚkeyrÚ   ©Úpicklery   r0   r1   r²   ,  s    
ÿz&_TestCommon.test_pickle.<locals>.check)rc  r   rÆ   r!   )ry   rÌ   r²   r0   rb  r1   Útest_pickle'  s    
z_TestCommon.test_picklec                    s"   ‡ fdd„}dD ]}||ƒ qd S )Nc                    sv   | dkrt  d¡ ˆ jttfv r*t  d¡ tt| ƒ}ˆ  t d¡ dd¡d ¡}|| 	¡ ƒ}||ƒ}t
| 	¡ |ƒ d S )NÚsignz2sign conflicts with comparison op support on Numpyz%Unary ops not implemented for dok/lilr=  r  rñ   ç      4@)r´   rµ   r¤   r   r   rg   r=   r   rC  rs   r   )rn   Zufuncr@  ZX0ÚX2r�   r0   r1   r²   D  s    


z5_TestCommon.test_unary_ufunc_overrides.<locals>.check)ÚsinÚtanÚarcsinÚarctanÚsinhÚtanhÚarcsinhÚarctanhÚrintre  Úexpm1Úlog1pÚdeg2radÚrad2degÚfloorÚceilÚtruncÚsqrtr  r0   )ry   r²   rn   r0   r�   r1   Útest_unary_ufunc_overridesC  s    z&_TestCommon.test_unary_ufunc_overridesc                 C   sD  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ƒ dD ]}tt|j|ƒ �q*d S )N©r    r   r¡   r  ©rT   r   r   r   ©r¡   r   r   r   ©r¡   rT   r    r   rT   r¡   ©rT   rT   rá   r³  )rT   r   r   r  )r    )rÑ   rT   r@  r,  ©	r=   r   r¤   r   Úresizer   rs   r¯   r°   )ry   r  r»  Z	bad_shaper0   r0   r1   Útest_resizeX  sH    
þ
þ
ÿ
þ
þ
þþz_TestCommon.test_resizec                 C   sB  | j }|j}|j|dd�}t| ¡ | ¡ ƒ |tvrBt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 ]h}||krâqÔ| |¡}|j|dd�}t| ¡ | ¡ ƒ |j|dd�}t| ¡ | ¡ ƒ tt||ƒ ƒ qÔd S )NFrB  )r4   r¼   T)rÐ  rÑ  rÖ  rÙ  r9   r4  )r¥   rÛ  rS  r8   rs   ÚNON_ARRAY_BACKED_FORMATSr   rF   r4   r=   rò   r   r7  )ry   rC   Zself_formatr5  Zother_formatrD   r0   r0   r1   Útest_constructor1_base|  s0    
z"_TestCommon.test_constructor1_baseN)dr…   r†   r‡   Ú__doc__r#   r¨   Úclassmethodr®   r·   rº   rÍ   rÎ   rÛ   rÜ   rß   rà   rä   rç   rë   rí   rï   rý   r  r  r  r  r  r  r+  r4  rF  r´   ÚmarkÚslowrY  r_  rl  rm  ro  rp  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ô  rü  r  r  r  r  r  r  r  r  r!  r"  r$  r'  r(  r-  r2  r9  rB  rF  rH  rI  rR  rT  rW  rX  r[  rd  ry  r�  rƒ  r0   r0   r0   r1   rŸ     sÆ   
%'?>::!,
9!	
#"




)%
(
7#
8+:$rŸ   c                   @   s,   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||ƒ | ¡ }| ¡ }t|tƒr¦ttt	j
||jƒ || }||9 }n&ttt	j
||ƒ | |j¡}||j9 }t||ƒ ttt	j||ƒ d S )NrA  )r=   r   r¤   r¼   r   r<   r"   r¯   r°   r%  Úimulrå   r   rD  Ú	ifloordiv)ry   r@   rE   r5   r6   r0   r0   r1   Útest_inplace_denseŸ  s.    







z)_TestInplaceArithmetic.test_inplace_densec                    s$   ‡ fdd„}ˆ j D ]}||ƒ qd S )Nc                    s”   ˆ j |  }ˆ j|  }tjt| dd�rR| ¡ }|d9 }| ¡ }|d9 }t|| ¡ ƒ tjt| dd�r�| ¡ }|d9 }| ¡ }|d9 }t|| ¡ ƒ d S ©NZ	same_kind)ZcastingrT   râ  ©	rª   r«   r=   Úcan_castÚintr¼   r   rs   r«  ©r4   r£   r¥   r@   rE   r�   r0   r1   r²   À  s    

z6_TestInplaceArithmetic.test_imul_scalar.<locals>.checkrä  r¶   r0   r�   r1   Útest_imul_scalar¿  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�rR| ¡ }|d }| ¡ }|d }t|| ¡ ƒ tjt| dd�r�| ¡ }|d }| ¡ }|d }t|| ¡ ƒ d S rŒ  r�  r�  r�   r0   r1   r²   ×  s    

z6_TestInplaceArithmetic.test_idiv_scalar.<locals>.check)r¨   r=   rŽ  r4   r�  r¶   r0   r�   r1   Útest_idiv_scalarÖ  s    
z'_TestInplaceArithmetic.test_idiv_scalarc                 C   sª   |   t d¡¡}|   t d¡¡}|   t d¡¡}||7 }|| }t| ¡ | ¡ ƒ ||9 }|| }t| ¡ | ¡ ƒ ||8 }|| }t| ¡ | ¡ ƒ tttj||ƒ d S )Nrñ   )	r¤   r=   r   r   rs   r¯   rD  r%  rŠ  )ry   r@   rE   Úbpr0   r0   r1   Útest_inplace_successï  s    z+_TestInplaceArithmetic.test_inplace_successN)r…   r†   r‡   r‹  r‘  r’  r”  r0   r0   r0   r1   rˆ  ž  s    rˆ  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )Ú_TestGetSetc                    s(   ‡ 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 ]0}t| |ƒD ]}t|||f |||f ƒ qTqDtt|d ƒ| ƒ dD ]}tttf|j	|ƒ qŒd S )Nr³  ©r  r¡   r   ©r   rT   r   r  rõ   r  ©©r   r¡   rè   )r  r   rE  )r  rÑ   r,  )
r   r¤   r‹   r¸   r   r/  r¯   Ú
IndexErrorrD  Ú__getitem__)r4   r  rC   r­  r¯  rI  rJ  rf  r�   r0   r1   r²   	  s    ýý

z*_TestGetSet.test_getelement.<locals>.check©r#   r=   r4   r¶   r0   r�   r1   Útest_getelement	  s    z_TestGetSet.test_getelementc                    s(   ‡ fdd„}t D ]}|t |¡ƒ qd S )Nc                    sL  ˆ j d| d�}tƒ �~}| td¡ |  d¡|d< |  d¡|d< |  d¡|d	< |  d
¡|d< |  d¡|d< |  d¡|d< |  d¡|d	< W d   ƒ n1 s˜0    Y  | tjkrÌt| ¡ g d¢g d¢g d¢gƒ dD ]}t	t
|j|dƒ qÐg d¢tg d¢ƒfD ]}t	t|jd|ƒ qút | tj¡�sH| tjk�rHdD ]}t	t|jd|ƒ �q0d S )NrA  rõ   rM  r   r$  r¿  ©r    rT   r¡   r�  r§  r\  r0  ©r   rÑ   r/  ©rÑ   rÒ   rñ   )r   rñ   r   r0  )r   r   r  r   )rT   r   r/  r   ))r   r  )rÑ   r  r  rA  ré   g     À^@r,  )r5  )r¤   r   rÆ   r!   r/  r=   Úbool_r   rs   r¯   rš  Ú__setitem__r   r°   rZ   rL  rD  )r4   rC   rÌ   rf  rG  r�   r0   r1   r²   	  s<    þ,
ýþ	ÿz*_TestGetSet.test_setelement.<locals>.checkrœ  r¶   r0   r�   r1   Ú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>0    Y  t|d dƒ d S )N)r¡   rG   rõ   rM  r    )r   r  )r¤   r   rÆ   r!   r   ©r4   rC   rÌ   r�   r0   r1   r²   G	  s    þ&z9_TestGetSet.test_negative_index_assignment.<locals>.checkrï  r¶   r0   r�   r1   Útest_negative_index_assignmentD	  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	ƒ qDd S )
N©rñ   rG   c                    sŒ   | ›d|›d|›�}ˆ  ˆˆ f¡}tƒ �(}| td¡ d|| |f< W d   ƒ n1 sV0    Y  t| ¡ ||d� t|| |f d|d� d S )Nz ; rM  r    rN  )r¤   r   rÆ   r!   r   rw  )rI  rJ  Znitemsr-   rC   rÌ   ©rü   rH  ry   r0   r1   Ú	_test_setW	  s    þ*z3_TestGetSet.test_scalar_assign_2.<locals>._test_set©rT   r¡   ©rÑ   r0  r   rÑ   rÒ   r    )r   ©ry   r¨  rI  rJ  r0   r§  r1   Útest_scalar_assign_2T	  s    ÿz _TestGetSet.test_scalar_assign_2c                 C   s~   |   d¡}t d¡}tƒ �B}| td¡ ||fD ]}d|d< d|d< d|d< q0W d   ƒ n1 sb0    Y  t| ¡ |ƒ d S )Nrð   rM  r    r�  r  r  r1  ©r¤   r=   r   r   rÆ   r!   r   rs   ©ry   rC   rD   rÌ   r5  r0   r0   r1   Útest_index_scalar_assignh	  s    

þ(z$_TestGetSet.test_index_scalar_assignN)r…   r†   r‡   r�  r£  r¥  r¬  r¯  r0   r0   r0   r1   r•  	  s
   (r•  c                   @   s   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< qhtt|ƒƒD ]0}|| |||d f< t|| ƒ||d |f< qŠ|  	|¡}t
ƒ �*}| td¡ t|ƒ |¡}W d   ƒ n1 sü0    Y  t|| |ƒ d S )Nr=  r   rõ   r    rJ  r¨  )r=   rp   rS   r   r×   r{  r¸   rŽ   r   r¤   r   rÆ   r!   r(   Zsolver   )ry   rH  rC   r5   r6   rR  rI  rÌ   r0   r0   r1   Ú
test_solvex	  s$    $
ÿ,z_TestSolve.test_solveN)r…   r†   r‡   r±  r0   r0   r0   r1   r°  w	  s   r°  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	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    rG   rõ   r   r    rñ   )r   r¤   r=   rµ  r4   rJ   rò   r¬   r�   r0   r0   r1   Útest_dtype_preservation�	  s    &&&z$_TestSlicing.test_dtype_preservationc                 C   sœ   t jt jt jt jfD ]‚}| 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   rT   ©r=   rµ  rJ   rò   r¬   r¤   r   r4   ©ry   ÚdtrC   r0   r0   r1   Ú#test_dtype_preservation_empty_slice•	  s    z0_TestSlicing.test_dtype_preservation_empty_slicec                 C   sb  t tdƒ dd¡ƒ}|  |¡}t|dd d …f |dd d …f  ¡ ƒ t|ddd…f |ddd…f  ¡ ƒ tg d¢g d¢g d¢g d	¢gƒ}|  |¡}t|ddd
…f |ddd
…f  ¡ ƒ tg d¢g d¢g d¢g d	¢gƒ}|  |¡}t|ddd
…f |ddd
…f  ¡ ƒ t|d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@rñ   rG   r    rT   ©r    rT   r    ©r  r   r.  r  r  r¡   ©r  r   r   rÒ   é   r.  r/  )r&   r   rC  r¤   r   rs   r'   r¯   rš  r›  Úslice©ry   rD   rC   r5  r  r  r6  r0   r0   r1   Útest_get_horiz_sliceŸ	  s    
&& 
& 
&&z!_TestSlicing.test_get_horiz_slicec                 C   s�  t dƒ dd¡}|  |¡}t|dd…dgf |dd…df  ¡ ƒ t|d d …dgf |d d …df  ¡ ƒ tg d¢g d¢g d	¢g d
¢gƒ}|  |¡}t|dd…dgf |dd…df  ¡ ƒ t|d d …dgf |d d …df  ¡ ƒ tg d¢g d¢g d	¢g d
¢gƒ}|  |¡}t|d d …dgf |d d …df  ¡ ƒ t|dd …dgf |dd …df  ¡ ƒ tt|jt	d ƒdfƒ tt|jdt	ddƒfƒ d S )Nr¹  rñ   rG   rT   r   r    rº  r»  r  r  r¡   r`  r¼  rÒ   r½  r.  r/  )
r   rC  r¤   r   rs   r   r¯   rš  r›  r¾  r¿  r0   r0   r1   Útest_get_vert_slice³	  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 )Nr¹  rñ   rG   rT   r   r¡   r    rÑ   r`  r¼  r  r  )r   rC  r¤   r   rs   r   )ry   rD   rC   r  r6  r0   r0   r1   Útest_get_slicesÈ	  s    
... 
.z_TestSlicing.test_get_slicesc                 C   st   t j dd¡}z"|  |¡ddd…ddd…f }W n tyL   t d¡‚Y n0 t| ¡ |ddd…ddd…f ƒ d S )NrU  r   é   rT   r>  r¡   úfeature not implemented)	r=   rp   r{  r¤   r°   r´   rµ   r   rs   )ry   Zv0rG  r0   r0   r1   Ú test_non_unit_stride_2d_indexingÕ	  s    "z-_TestSlicing.test_non_unit_stride_2d_indexingc                 C   s´  t 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 )NrU  rñ   rG   r©  rª  r   rÑ   rÒ   rT   r¡   r  r1  r    r  )	r&   r   rC  r¤   r   r   rs   r¾  r   )ry   rD   rC   rE  r0   r0   r1   Útest_slicing_2à	  s8    
&&*&&&&*....&&**z_TestSlicing.test_slicing_2c                    sŒ  t 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 ]\}}||ƒ qÌ‡ ‡fdd„}t|ƒD ]&\}}t|ƒD ]\}}|||ƒ �qqôg }	t	j
dgd Ž D ],\}}}
|
dk�rH�q0|	 t|||
ƒ¡ �q0|	D ]$}|||ƒ ||dƒ |d|ƒ �qbd S )NrU  rñ   rG   rT   r    r¡   r%  r=  r0  rÑ   r  rÒ   r   r  r  c                    sZ   ˆ |  }ˆ|  }|j dkr,t||t| ƒƒ n*|jdkrB|jdkrBnt| ¡ |t| ƒƒ d S ©Nr0   r   )r‹   r   rì   rY   r   rs   )r@   r5   r6   ©rC   rD   r0   r1   Úcheck_1
  s    
z,_TestSlicing.test_slicing_3.<locals>.check_1c                    sž   t | tjƒrt| ƒ}n| }t |tjƒr0t|ƒ}n|}ˆ | |f }ˆ||f }|jdkrlt||t| |fƒƒ n.|jdkr‚|jdkr‚nt| 	¡ |t| |fƒƒ d S rÇ  )
r<   r=   r	   r�  r‹   r   rì   rY   r   rs   )r@   rE   ZaiZbir5   r6   rÈ  r0   r1   Úcheck_2&
  s    


z,_TestSlicing.test_slicing_3.<locals>.check_2)
Nr   r    rT   rñ   r%  rÑ   rÒ   rñ   iñÿÿÿ)r&   r   rC  r¤   r=   Ús_r   r   Ú	enumerateÚ	itertoolsÚproductr>   r¾  )ry   rË  ÚslicesrÉ  rJ  r@   rÊ  rI  rE   Zextra_slicesrù   r0   rÈ  r1   Útest_slicing_3
  s6    
*$ü
ÿ


z_TestSlicing.test_slicing_3c                 C   sN  t tdƒ dd¡ƒ}|  |¡}t|d  ¡ |d jƒ t|d  ¡ |d jƒ t|d  ¡ |d jƒ t|d  ¡ |d jƒ t|dd …df  ¡ |dd …df jƒ t|ddd …f  ¡ |ddd …f jƒ t|dd …ddf  ¡ |dd …ddf jƒ t|dddd …f  ¡ |dddd …f jƒ t|d	 |d	 ƒ t|d
 |d
 ƒ d S )NrU  rñ   rG   .).)r    .).r    r    )r    r    .)r    .r    )r&   r   rC  r¤   r   rs   rC   r   )ry   rE   r@   r0   r0   r1   Útest_ellipsis_slicingO
  s    
((,,z"_TestSlicing.test_ellipsis_slicingc                 C   s†   |   tdƒ dd¡¡}tjtdd�� |d  W d   ƒ n1 sB0    Y  tjtdd�� |d  W d   ƒ n1 sx0    Y  d S )Nr.  r¡   rT   z(an index can only have a single ellipsis©Úmatch)..).r    .)r¤   r   rC  r´   r   rš  ©ry   r@   r0   r0   r1   Útest_multiple_ellipsis_slicinga
  s    ÿ&ÿz+_TestSlicing.test_multiple_ellipsis_slicingN)r…   r†   r‡   r´  r¸  rÀ  rÁ  rÂ  rÅ  rÆ  rÐ  rÑ  rÕ  r0   r0   r0   r1   r²  Ž	  s   
-Br²  c                   @   sL   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 )Ú_TestSlicingAssignc                 C   s¼   |   d¡}t d¡}tƒ �€}| td¡ ||fD ]Z}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< q0W d   ƒ n1 s 0    Y  t| ¡ |ƒ d S )	Nrð   rM  r    r   r  r¡   r1  rÑ   r­  r®  r0   r0   r1   Útest_slice_scalar_assignm
  s    

þ6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 ]\}}|||ƒ qPd S )
Nr¦  c                    sŒ   d| ›d|›�}ˆ  ˆˆ f¡}tƒ �(}| td¡ d|| |f< W d   ƒ n1 sR0    Y  t ˆˆ f¡}d|| |f< t| ¡ ||d� d S )Nzi=z; j=rM  r    rN  )r¤   r   rÆ   r!   r=   r   r   rs   )rI  rJ  r-   rC   rÌ   rD   r§  r0   r1   r¨  €
  s    þ*z9_TestSlicingAssign.test_slice_assign_2.<locals>._test_setrT   r¡   rG   r  rñ   rÒ   )r¾  r   r«  r0   r§  r1   Útest_slice_assign_2}
  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 …f j|d d…df< t|dd d …f  ¡ j|d d…df  ¡ ƒ W d   ƒ n1 �s>0    Y  d S )NrE  rM  rT   r$  r/  rž  r¡   ©rT   r    rG   r  r   r    rÑ   )	r¤   r   rÆ   r!   r   rs   r=   r   rå   )ry   rD   rÌ   rC   r0   r0   r1   Ú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ƒ �”}| td	¡ d
|d< d|d< d|d< || |d d …d d …f< t| ¡ |ƒ tt|ƒƒ|d d…d d…f< t| ¡ d d…d d…f |ƒ W d   ƒ n1 sÚ0    Y  d S )NrE  ©rG   r   r   )r   r   r.  )r   é   r   r  r    r   r  rM  rñ   r$  r¡   rž  r/  rÙ  rT   )r¤   r   r   rÆ   r!   r   rs   r   )ry   rD   ræ   ÚblockrÌ   r0   r0   r1   Útest_slice_assignment«
  s&    
ýþz(_TestSlicingAssign.test_slice_assignmentc                 C   s¤   |   d¡}tƒ �R}| td¡ d|d< d|d< d|d< d	|d
< tt d¡ƒ|d d…< W d   ƒ n1 sh0    Y  tg d¢g d¢g d¢g d¢gƒ}t| 	¡ |ƒ d S )NrE  rM  rñ   r$  r¡   rž  r/  rÙ  rG   r  r³  r  r  rÛ  )
r¤   r   rÆ   r!   r   r=   r   r   r   rs   )ry   rD   rÌ   ræ   r0   r0   r1   Ú"test_sparsity_modifying_assignmentÁ
  s    
þ4 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ƒ ��d}| t	d¡ t
|ƒD ],\}}|||< |||< t| ¡ |t|ƒƒ qºt
|ƒD ]l\}}t
|ƒD ]Z\}}	d| d|d   |||	f< d| d|d   |||	f< t| ¡ |t||	fƒƒ �q qðt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0    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 )Nr¦  rT   r    r¡   r0  rÑ   r  rÒ   rñ   r   r  r  rM  rG   éè  r$  éd   r,  r3  r   )r  r    r¡   ©r    rT   r  )r   r    r¡   r  )r¤   r   r   r«  r=   rË  r   r   rÆ   r!   rÌ  r   rs   rì   r¸   r   r¯   r°   r¢  Úlistr¾  r¼   )
ry   rC   rD   rË  rÏ  rÌ   rJ  r@   rI  rE   r0   r0   r1   Útest_set_sliceÑ
  sb    
*$ý
þ($.
ÿ
ÿÿÿþÿz!_TestSlicingAssign.test_set_slicec                 C   sH   |   t d¡¡}|   d¡}||dd d…f< t| ¡ g d¢g d¢gƒ d S )Nr©  rž  r    rT   ©r    r    r    r  )r¤   r=   r   r   rs   r  r0   r0   r1   Ú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    ra  r  )r¤   r=   r   r   r   rs   ©ry   rC   r5   r0   r0   r1   Útest_assign_1d_slice  s
    
z'_TestSlicingAssign.test_assign_1d_sliceN)r…   r†   r‡   r×  rØ  rÚ  rÞ  rß  rä  ræ  rè  r0   r0   r0   r1   rÖ  l
  s   0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 ]z}| 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)FFFrµ  r¶  r0   r0   r1   Ú#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 )Nrñ   Úfoo©rT   rë  r,  r   )r¤   r=   r   r¯   rš  r°   rD  r›  r  r0   r0   r1   Útest_bad_index  s    ÿz!_TestFancyIndexing.test_bad_indexc                 C   sV  t tdƒ dd¡ƒ}|  |¡}t|ddg  ¡ |ddg ƒ 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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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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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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 )NrU  rñ   rG   r    r¡   rÑ   rT   r  )rT   r0  r¡   rÑ   r  r1  r  r0  r  rÒ   rõ   )r&   r   rC  r¤   r   rs   r   r¾  r   r=   r�  )ry   rD   rC   rE  rI  r0   r0   r1   Útest_fancy_indexing%  sš    
&&**..*.2&&**...2..,ÿ,ÿ0ÿ6þ"þ"þ&þ"HÿHÿ."þHÿHÿ."þ**z&_TestFancyIndexing.test_fancy_indexingc                 C   sÚ   t j d¡ d}d}d}tt j ||¡ƒ}t  ||dk¡}t jj| d ||d�}t jj| d ||d�}|  |¡}|||f }t|ƒr�| 	¡ }t
||||f ƒ || }	|| }
tt|j|	|fƒ tt|j||
fƒ d S )NrR   rU  r.  r  r  r    rL  )r=   rp   rS   r&   r{  rù  rV   r¤   r    rs   r   r¯   rš  r›  )ry   ZNUM_SAMPLESr­  r¯  r  ÚIr  r»  ÚSIJÚI_badÚJ_badr0   r0   r1   Útest_fancy_indexing_randomized�  s"    
z1_TestFancyIndexing.test_fancy_indexing_randomizedc              	   C   s˜  d\}}t t|| ƒ ||¡ƒ}|  |¡}tj|d td�}tj|d td�}tj|d td�}tj|d td�}tjt	d|d › d|› �d��  ||d d …f }	W d   ƒ n1 s¶0    Y  tjt	d|d › d|› �d��  ||d d …f }	W d   ƒ n1 �s0    Y  t
 ||td ƒf||td ƒf¡D ]b\}
}t|
tƒ�rTt|tƒ�rT�q0tjt	dd�� ||
|f }	W d   ƒ n1 �s†0    Y  �q0d S )	Nr¦  r    rõ   rT   z(boolean row index has incorrect length: z instead of rÒ  z&boolean \w+ index has incorrect length)r&   r   rC  r¤   r=   r   r±   r´   r   rš  rÍ  rÎ  r¾  r<   )ry   r­  r¯  rD   rC   Zrow_longZ	row_shortZcol_longZ	col_shortr¹   rI  rJ  r0   r0   r1   Útest_missized_masking©  s8    
þ.þ0þþz(_TestFancyIndexing.test_missized_maskingc           	      C   s¦  t j d¡ t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 )NrR   rU  rñ   rG   r   rT   rL  rõ   r¦  r1  )TFTTF)
FTTFTFFFFF)r.  r½  TrŸ  )rÑ   r   r    )r=   rp   rS   r&   r   rC  r¤   r   rV   r±   r   rs   r   r¯   rš  r›  r°   )	ry   rD   rC   rï  r  r@  ZZ1ZZ2ZZ3r0   r0   r1   Útest_fancy_indexing_booleanÌ  s,    
&z._TestFancyIndexing.test_fancy_indexing_booleanc           	      C   s   t j d¡ ttdƒ dd¡ƒ}|  |¡}t jt jjdddd�t	d	�}t
|ƒ}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
|ƒ}tt|j|ƒ tt|j|ƒ tttf|j|dfƒ d S )NrR   rU  rñ   rG   r   rT   r¦  rL  rõ   r1  )rñ   r½  )r.  rG   r    )r=   rp   rS   r&   r   rC  r¤   r   rV   r±   r   r   rs   r¯   rš  r›  r°   )	ry   rD   rC   r@  ZXspÚZrA  ZZspZYspr0   r0   r1   Ú"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 )Nr³  r  r   r    )r¤   r   r=   Úravelrw  r   rs   )ry   rz   Zdesired_colsr0   r0   r1   Ú#test_fancy_indexing_regression_3087  s     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$  rT   )r¤   r   r¯   r°   r¢  r=   rx   r0   r0   r1   Ú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 sf0    Y  tt|ƒtddgddggƒƒ d S )Nr    r   rT   r¡   zChanging the sparsity structure)r¤   r   r   rÆ   r!   r   rs   )ry   rz   rÌ   r0   r0   r1   Útest_fancy_indexing_2d_assign  s    ÿBz0_TestFancyIndexing.test_fancy_indexing_2d_assignc                 C   s
  t 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 )NrU  rñ   rG   r   r    rT   ©r¡   r.  ©FFFFFrõ   ©r   r    rT   r¡   r  ©	r&   r   rC  r¤   r=   r   r   rs   r�  ©ry   rD   rC   r  r  r0   r0   r1   Ú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  r0   r0   r0   r1   ré    s   
j# 	ré  c                 c   sJ   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)rÞ  r  rÓ  r¼   Úsort_indicesr   )r@  rÓ  r0   r0   r1   Úcheck_remains_sorted&  s    
ÿr  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )Ú_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 )Nrñ   rë  rT   rì  )r¤   r=   r   r¯   rš  r°   rD  r¢  r  r0   r0   r1   Útest_bad_index_assign6  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 ]\}}|||ƒ qNt d¡t d¡fdfD ]\}}|||ƒ qzd S )Nr¦  c              	      s¤   ˆ  ˆˆ f¡}tt ˆˆ f¡ƒ}tƒ �\}| td¡ d|| |f< t|ƒ� d|| |f< W d   ƒ n1 sj0    Y  W d   ƒ n1 sˆ0    Y  t| 	¡ |ƒ d S ©NrM  r    )
r¤   r&   r=   r   r   rÆ   r!   r  r   rs   )rI  rJ  rC   rD   rÌ   r§  r0   r1   Ú_test_set_slice>  s    þ
HzI_TestFancyIndexingAssign.test_fancy_indexing_set.<locals>._test_set_slicer  rG   r  r¡   rñ   rÒ   rT   )r3  râ  )r¾  r=   r   ©ry   r  rI  rJ  r0   r§  r1   Útest_fancy_indexing_set;  s    þ z0_TestFancyIndexingAssign.test_fancy_indexing_setc                    s(   ‡ fdd„}t D ]}|t |¡ƒ qd S )Nc                    sØ   ˆ j d| d�}tƒ �°}| 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   ƒ n1 sÊ0    Y  d S )
Nrð   rõ   rM  r    r   rT   r¦  r  r~  )r¤   r   rÆ   r!   r/  r   rw  r¤  r�   r0   r1   r²   S  s    þzD_TestFancyIndexingAssign.test_fancy_assignment_dtypes.<locals>.checkrœ  r¶   r0   r�   r1   Útest_fancy_assignment_dtypesR  s    z5_TestFancyIndexingAssign.test_fancy_assignment_dtypesc              	   C   s   |   d¡}|   tddƒ¡}g d¢}d}t|ƒ}tƒ ��T}| td¡ t|ƒ�R ||df j|d|f< ||df j|d|f< ||df j|d|f< W d   ƒ n1 s¤0    Y  t| 	¡ |j 	¡ ƒ |   d	¡}t|ƒ�$ d
dg|ddd…f< W d   ƒ n1 sþ0    Y  t| 	¡ g d¢g d¢gƒ |   d¡}t|ƒ�( d
gdgg|dd…df< W d   ƒ n1 �sd0    Y  t| 	¡ ddgdd
gddggƒ |   d¡}t
t d¡ƒ}t|ƒ�8 ||fD ]}g d¢|g d¢g d¢f< �q¸W d   ƒ n1 �sî0    Y  t| 	¡ |ƒ |   d¡}t|ƒ� g d¢|d< W d   ƒ n1 �s<0    Y  t| ¡ dƒ t
t d¡ƒ}g d¢|d< t| 	¡ |ƒ W d   ƒ n1 �s’0    Y  d S )NrE  r¡   r  rq  rM  r   r    rT   r©  rG   r=  r  )r   rG   r=  r}  rá   r-  r,  )r,  rq  r.  )r¤   r   r   r   rÆ   r!   r  rå   r   rs   r&   r=   r   r   rw  )ry   rC   rD   Zi0Úi1Úi2rÌ   r5  r0   r0   r1   Útest_sequence_assignmentd  sH    

þ
4

2

8 

<

,z1_TestFancyIndexingAssign.test_sequence_assignmentc                 C   sþ   t 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 )NrU  rñ   rG   r   r    rT   rü  rý  é*   rõ   rþ  rÿ  r   r0   r0   r1   Útest_fancy_assign_empty”  s$    
z0_TestFancyIndexingAssign.test_fancy_assign_emptyN)r…   r†   r‡   r  r
  r  r  r  r0   r0   r0   r1   r  5  s
   0r  c                   @   s   e Zd Zdd„ ZdS )Ú_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 ]È\}}t j d	¡ t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    rT   r¡   ©r¡   r  rT   r,  r  ©rñ   r.  r¡   ©rT   r¡   r    rR   rñ   r/  )r=   r   rp   rS   r&   r{  r¤   r    rs   r   r¯   rš  r›  r¾  )	ry   Zsetsrï  r  r  r»  rð  rñ  rò  r0   r0   r1   Útest_fancy_indexing_ndarray­  s,    "$$"ÿû

z._TestFancyMultidim.test_fancy_indexing_ndarrayN)r…   r†   r‡   r  r0   r0   r0   r1   r  ¬  s   r  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú_TestFancyMultidimAssignc           	      C   s’  t j d¡ t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 sŒ0    Y  ||||f< t| 	¡ |ƒ |d }|d }g d¢}t|ƒ� ||||f< W d   ƒ n1 sò0    Y  ||||f< t| 	¡ |ƒ t|ƒ� d|||f< W d   ƒ n1 �sB0    Y  d|||f< t| 	¡ |ƒ t
t|j||f|ƒ t
t|j||f|ƒ d S )
NrR   rñ   r/  rT   r¡   r,  r  r  r  )r=   rp   rS   r&   r{  r¤   r   r  r   rs   r¯   rš  r¢  ©	ry   r  r»  r@  rï  r  rñ  rò  r5  r0   r0   r1   Útest_fancy_assign_ndarrayÐ  s.    

*
*
,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 ]\}}|||ƒ qrd S )Nr¦  c              	      s¤   ˆ  ˆˆ f¡}t|ƒ�N tƒ �(}| td¡ d|| |f< W d   ƒ n1 sL0    Y  W d   ƒ n1 sj0    Y  tt ˆˆ f¡ƒ}d|| |f< t| 	¡ |ƒ d S r  )
r¤   r  r   rÆ   r!   r&   r=   r   r   rs   )rI  rJ  rC   rÌ   rD   r§  r0   r1   r  ô  s    þHzR_TestFancyMultidimAssign.test_fancy_indexing_multidim_set.<locals>._test_set_slicer    rT   r¡   r   r  r,  ©r   rT   r  )r   r  r¡   )r  r    rT   )r=   r   r	  r0   r§  r1   Ú test_fancy_indexing_multidim_setñ  s    þz9_TestFancyMultidimAssign.test_fancy_indexing_multidim_setc           	      C   s  t j d¡ t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 )NrR   rñ   r/  rT   r¡   r,  r  r  r  c                 S   s   g | ]}d d„ |D ƒ‘qS )c                 S   s   g | ]}|d  ‘qS ©rñ   r0   ©re  Úiir0   r0   r1   ró    rh  úN_TestFancyMultidimAssign.test_fancy_assign_list.<locals>.<listcomp>.<listcomp>r0   )re  rI  r0   r0   r1   ró    rh  zC_TestFancyMultidimAssign.test_fancy_assign_list.<locals>.<listcomp>c                 S   s   g | ]}d d„ |D ƒ‘qS )c                 S   s   g | ]}|d  ‘qS ©r/  r0   ©re  Zjjr0   r0   r1   ró    rh  r  r0   )re  rJ  r0   r0   r1   ró    rh  )r=   rp   rS   r&   r{  r¤   r   rs   r¯   rš  r¢  r  r0   r0   r1   Útest_fancy_assign_list  s(    
z/_TestFancyMultidimAssign.test_fancy_assign_listc           	      C   s¦   t j d¡ t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 )
NrR   rñ   r/  )r    rT   r¡   r¡   r  rT   )rñ   r.  r¡   rT   r¡   r    c                 S   s   g | ]}|d  ‘qS r  r0   r  r0   r0   r1   ró  +  rh  zD_TestFancyMultidimAssign.test_fancy_assign_slice.<locals>.<listcomp>c                 S   s   g | ]}|d  ‘qS r  r0   r   r0   r0   r1   ró  ,  rh  )r    rT   r¡   r  rñ   r.  r/  )r=   rp   rS   r&   r{  r¤   r   r¯   rš  r¢  r¾  )	ry   r  r»  rï  r  rñ  rò  ZC1ZC2r0   r0   r1   Útest_fancy_assign_slice"  s    
z0_TestFancyMultidimAssign.test_fancy_assign_sliceN)r…   r†   r‡   r  r  r!  r"  r0   r0   r0   r1   r  Ï  s   !r  c                   @   s(   e Zd ZdZdd„ Z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ƒ| j_t| jd  d¡d| j ƒ t| jjd  d¡d| jj ƒ t| jjd  d¡d| jj ƒ |  | j¡| _|  | j¡| _	d 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   r  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   é   rJ   )
r   Ú_TestArithmetic__AÚ_TestArithmetic__Br  r   rb   r  r¤   Ú_TestArithmetic__AspÚ_TestArithmetic__Bspr�   r0   r0   r1   Z__arith_init8  s4    ýýýýýý  z_TestArithmetic.__arith_initc           	   
   C   sŠ  |   ¡  t| j| j  ¡ | j| j ƒ tD �]X}tj	dd�� | j 
|¡}W d   ƒ n1 s^0    Y  |  |¡}tD �]
}t |tj¡sÆtj	dd�� | jj 
|¡}W d   ƒ qÒ1 sº0    Y  n| j 
|¡}|  |¡}|| }|| }t|j|jƒ t| ¡ |ƒ t|| |ƒ t|| |ƒ t d¡||fv �r:qv|| }|| }t|j|jƒ t| ¡ |ƒ t|| |ƒ t|| |ƒ qvq*d S )NrÓ   rÔ   r±   )Ú_TestArithmetic__arith_initr   r+  r,  rs   r)  r*  r#   r=   rØ   rb   r¤   rZ   rL  r  r   r4   ©	ry   r5   rC   rk  r6   rD   rú  ÚD1ZS1r0   r0   r1   Útest_add_subO  s8    ÿ
*

.
z_TestArithmetic.test_add_subc           	   
   C   s$  |   ¡  t| j| jj  ¡ | j| jj ƒ tD ]ð}t	j
dd�� | j |¡}W d   ƒ n1 s`0    Y  |  |¡}tD ]¤}t	 |t	j¡r˜| j |¡}n:t	j
dd�� | jj |¡}W d   ƒ n1 sÈ0    Y  |  |¡}||j }||j }t| ¡ |dt|ƒ ¡  d� t|j|jƒ qxq.d S )NrÓ   rÔ   g›+¡†›„=)Zatol)r-  r   r+  r,  rå   rs   r)  r*  r#   r=   rØ   rb   r¤   rZ   rL  r  r   r  rI   r   r4   r.  r0   r0   r1   Útest_muz  s(    ÿ*
,



ÿz_TestArithmetic.test_muN)r…   r†   r‡   r„  r-  r0  r1  r0   r0   r0   r1   r#  4  s   +r#  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S )Ú_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õ   rñ   r  r   é   rÑ   iíÿÿÿiòÿÿÿr    rG   r¡   r  rT   r$  ©r   rG   ©rG   r   )r=   rò   r¬   rJ   rU   rô   r   rC  r¤   r   r\   rI   r4   r   r«  r¯   r°   )ry   r4   r  r@  rö  r0   r0   r1   Útest_minmax–  sB    



 
z_TestMinMax.test_minmaxc                 C   s‚  t  d¡ dd¡}d|dd d …f< d|d d …df< d|d< d|d	< |  |¡}g d
¢}|D ]D}t|j|d� ¡ |j|dd�ƒ t|j|d� ¡ |j|dd�ƒ qXt  dd¡ dd¡}|  |¡}|D ]D}t|j|d� ¡ |j|dd�ƒ t|j|d� ¡ |j|dd�ƒ qÀt  d¡}|  |¡}|D ]F}t|j|d� ¡ |j|dd�ƒ t|j|d� ¡ |j|dd�ƒ �qddg}ddg}t  d¡}|  |¡}|D ]&}t	t
|j|d� t	t
|j|d� �qŽ|D ]>}tt  d¡|j|d� ¡ ƒ tt  d¡|j|d� ¡ ƒ �qºt  d¡}|  |¡}|D ]&}t	t
|j|d� t	t
|j|d� �q|D ]>}tt  d¡|j|d� ¡ ƒ tt  d¡|j|d� ¡ ƒ �q>d S )NrU  rñ   rG   r   r    r1  rá   rÑ   r~  ©rÒ   rÑ   r   r    ru  Trš  é3   )rG   rñ   rÒ   r4  r�  r5  r  )r=   r   rC  r¤   r   rI   rs   r\   r   r¯   r°   )ry   r  r@  rD  rv  Z	axes_evenZaxes_oddr0   r0   r1   Útest_minmax_axisÅ  sd    
ÿÿ
ÿÿ

ÿÿ

 

z_TestMinMax.test_minmax_axisc           	      C   s4  t 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s�J ‚| 	¡ }t |¡s¦J ‚|t 	|¡ks¸J ‚g d¢}|D ]j}|j|d�}t
|tƒsâJ ‚t| ¡ tj||d�ƒ |j	|d�}t
|tƒ�sJ ‚t| ¡ tj	||d�ƒ qÄd S )NrU  rñ   rG   rõ   r   r    r1  rá   rÑ   r~  r.  )r    r  r7  ru  )r'   r=   r   rC  r«  r½   r¤   Znanmaxrx  Znanminr<   r   r   rs   )	ry   r  r@  ZX_nan_maximumZX_nan_minimumrD  rv  ZX_nan_maximaZX_nan_minimar0   r0   r1   Útest_nanminmax  s4    


ÿÿz_TestMinMax.test_nanminmaxc                 C   sv   t g d¢g d¢g d¢gƒ}|  |¡}dD ]H}t||ƒ}tt|dd� tt|dd� tt|dd� tt|d	d	d
� q(d S )Nrq  rr  rs  )r\   rI   r¡   ru  r�  r‚  r    rƒ  )r   r¤   rg   r¯   r°   rD  )ry   r£   r¥   Úfnameri   r0   r0   r1   Útest_minmax_invalid_params$  s    þ

z&_TestMinMax.test_minmax_invalid_paramsc                 C   sl   ddl m} tg d¢g d¢g d¢gƒ}|  |¡}t||jƒrhtt |¡t |¡ƒ tt 	|¡t 	|¡ƒ d S )Nr   ©Ú_datarq  rr  rs  )
Úscipy.sparser>  r   r¤   r<   Ú_minmax_mixinr   r=   r\   rI   )ry   r>  r£   r¥   r0   r0   r1   Útest_numpy_minmax1  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®q’t| 	¡ t 	|¡ƒ t| 
¡ t 
|¡ƒ t|j	dd�ttj	|dd�ƒƒ t|j
dd�ttj
|dd�ƒƒ t|j	dd�ttj	|dd� dd¡ƒƒ t|j
dd�ttj
|dd� dd¡ƒƒ q’t d¡}t d¡}dD ]0}	|  |¡}tt|j	|	d� tt|j
|	d� �q€dD ]0}	|  |¡}tt|j	|	d� tt|j
|	d� �q¶d S )Nr   r=  )rÑ   rñ   rT   r¡   )r   r   rÑ   rÒ   )rÑ   rÒ   r  r  r   )r    rT   r   r   r  r¡   r/  rñ   )rñ   rñ   r¡   )r  r1  rG   )r¡   r  r1  ru  r    rÑ   r&  rU  rX   )Nr    )r?  r>  r=   r   r
   r¤   r<   r@  r   ZargmaxZargminr&   rC  r(  r¯   r°   )
ry   r>  r/  ZD2ZD3ZD4ZD5r  rz   rv  r0   r0   r1   Útest_argmaxC  sP    û
ÿÿÿÿ



z_TestMinMax.test_argmaxN)	r…   r†   r‡   r6  r9  r:  r<  rA  rB  r0   r0   r0   r1   r2  •  s   /Ar2  c                   @   s   e Zd Zdd„ ZdS )Ú_TestGetNnzAxisc                 C   s2  t ddgddgddggƒ}| t¡}|  |¡}tjtjf}t|jd d�|j	d d�ƒ t| ¡ | 	¡ ƒ t|jdd�|j	dd�ƒ t
|j	dd�j|ƒ t|jdd�|j	dd�ƒ t
|j	dd�j|ƒ t|jd	d�|j	d	d�ƒ t
|j	d	d�j|ƒ t|jd
d�|j	d
d�ƒ t
|j	d
d�j|ƒ tt|j	dd� d S )Nr   rT   r¡   rñ   rt  r1  ru  r    rÒ   rÑ   )r   rb   r±   r¤   r=   rJ   rU   r   rw  Úgetnnzr2   r4   r¯   r°   )ry   r£   Zbool_datr¥   Zaccepted_return_dtypesr0   r0   r1   Útest_getnnz_axiss  s$    þ

z _TestGetNnzAxis.test_getnnz_axisN)r…   r†   r‡   rE  r0   r0   r0   r1   rC  r  s   rC  Tc                 C   s\   |r| S dd„ }t | jƒ}| j ¡ D ]\}}| d¡r$||ƒ||< q$t| jd | j|ƒS d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                     s<   zˆ | i |¤ŽW S  t ttttfy6   t d¡‚Y n0 d S )NrÄ  )r  rD  r°   rš  ÚAttributeErrorr´   rµ   )r@   rj   ©Úfcr0   r1   Úwrapper—  s    ÿ
z6_possibly_unimplemented.<locals>.wrap.<locals>.wrapper)Ú	functoolsÚwraps)rH  rI  r0   rG  r1   Úwrap–  s    z%_possibly_unimplemented.<locals>.wrapÚtest_ÚNotImplementedN)Údictr:   r`  Ú
startswithr/  r…   Ú	__bases__)r­   ÚrequirerL  Znew_dictrn   ri   r0   r0   r1   Ú_possibly_unimplementedŽ  s    


þrS  c	                 C   sÆ   t tt| ƒttttt|ƒtt|ƒtt|ƒtt	|ƒtt
|o:|ƒtt|oF|ƒtt|ƒtt|ƒf}	i }
|	D ]T}|jD ]H}| d¡s~qn|
 |¡}|dur®td|j› d|› d|j› �ƒ‚||
|< qnqdt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.
    rM  NzTest class z overloads test z defined in ZTestBase)rŸ   rS  r•  r°  rˆ  r#  r²  rÖ  ré  r  r  r  r2  rC  r:   rP  Úgetr°   r…   r/  )ÚgetsetÚslicingÚslicing_assignÚfancy_indexingÚfancy_assignZfancy_multidim_indexingZfancy_multidim_assignÚminmaxÚnnz_axisÚbasesÚnamesr­   rn   Zold_clsr0   r0   r1   Úsparse_test_classª  sD    ÿÿÿñ


ÿÿ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d„ Zdd „ Zd!d"„ Zd#d$„ Zd%S )&rÊ   c                 O   sD   t ƒ �*}| td¡ t|i |¤ŽW  d   ƒ S 1 s60    Y  d S )Nz<Changing the sparsity structure of a csr_matrix is expensive)r   rÆ   r!   r   ©r­   Úargsr7   rÌ   r0   r0   r1   r¤   ×  s
    ÿzTestCSR.spcreatorc                 C   s€   t g d¢g d¢g d¢gdƒ}t|ƒ}t|jg d¢ƒ t|jg d¢ƒ t|jg d¢ƒ t| ¡ dƒ t|j	d	ƒ t| 
¡ |ƒ d S )
N)r   r  r   r  r—  r¢   )r  r¡   rT   r`  r  r¡   rÐ  )r   r   r   rÕ  r   rÓ  rÔ  r   rD  rÛ  rs   ©ry   rE   r*  r0   r0   r1   Útest_constructor1ß  s    þþzTestCSR.test_constructor1c                 C   sX   t ddƒ}d|d< t|ƒ}t|jdgƒ t|jdgƒ t|jg d¢ƒ t| ¡ |ƒ d S )N©r.  r.  r¢   rñ   rA  r  )r   r   r   r   r    r    r    )r   r   r   rÕ  r   rÓ  rÔ  rs   ra  r0   r0   r1   Útest_constructor2ë  s    
zTestCSR.test_constructor2c                 C   sf   t ddgddgddggdƒ}t|ƒ}t|jg d¢ƒ t|jg d¢ƒ t|jg d¢ƒ t| ¡ |ƒ d S )	Nr    r   rT   r¡   r¢   r,  r  r  )r   r   r   rÕ  r   rÓ  rÔ  rs   ra  r0   r0   r1   Útest_constructor3ô  s    þþzTestCSR.test_constructor3c                 C   sÐ   t g d¢ƒ}t g d¢ƒ}t g d¢ƒ}t||fƒ}t||fdƒ}ttdƒ dd¡| ¡ ƒ t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|| ¡ ƒ tg d¢g d¢g d¢ffƒ}|j	dksÌJ ‚d S )N©rT   r¡   r    r¡   r   r    r¡   r   rT   r    rT   ©r   r    r   r   r    r    rT   rT   rT   rT   r    ©g      @g      $@r¤  g      "@r¦  r¿  g      &@r§  g       @g      @r´  rE  r7  r  r¡   ì           r    r   rõ   ©r    r    r    r    ©r   rT   rT   r   ©r   r    r    r   rT   )
r   r   r   r   r   rC  rs   r=   Úuint64râ   )ry   r×  rØ  rÕ  rf  rÐ  r6  r0   r0   r1   Útest_constructor4þ  s    "zTestCSR.test_constructor4c                 C   sB   t g d¢ƒ}t g d¢ƒ}t g d¢ƒ}t|||fƒ}t|jdƒ d S ©N©r   r    r¡   r¡   ©r   rñ   r    rT   r   rü  )r   r   r   r‹   ©ry   rÔ  rÓ  rÕ  rÐ  r0   r0   r1   Útest_constructor5  s
    zTestCSR.test_constructor5c                 C   sJ   g d¢}g d¢}g d¢}t |||fƒ}t|jdƒ tt |jtj¡ƒ d S ro  )r   r   r‹   r   r=   rZ   r4   Úsignedintegerrr  r0   r0   r1   Útest_constructor6  s    zTestCSR.test_constructor6c                 C   sœ   t dƒd }tg d¢tjd�}tg d¢tjd�}t|||fdd�}tg d¢g d	¢g d
¢gdƒ}t|jjt tj¡ƒ t|j	jt tj¡ƒ t
| ¡ |ƒ d S )Nr.  r    )r    rT   r    r   r   rT   rõ   ©r   rT   r  r.  rá   ©r‹   rq  r–  )rñ   r   r.  r¢   )r   r   r=   rU   r   r   rÔ  r4   rJ   rÓ  r   rs   )ry   rÕ  rØ  Úptrr@   rE   r0   r0   r1   Útest_constructor_smallcol#  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�}t|||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   rT   rõ   rv  r¡   )r   r=   rH   rJ   rI   r   rU   r   r   rÔ  r4   rÓ  r   r‹   )ry   rÕ  ZlargerØ  rx  r@   r0   r0   r1   Útest_constructor_largecol3  s    "z!TestCSR.test_constructor_largecolc                 C   sh   t dƒ}tg d¢ƒ}tg d¢ƒ}t|||fdd�}| ¡ }| ¡  t|jg d¢ƒ t| ¡ | ¡ ƒ d S )Nrñ   ©r/  rT   r    rñ   r  ©r   r¡   rñ   ©rT   rG   rw  ©r    rT   r/  r  rñ   )r   r   r   r¼   r  r   rÓ  rs   ©ry   rÕ  rÓ  rÔ  r)  r*  r0   r0   r1   Útest_sort_indices@  s    zTestCSR.test_sort_indicesc                 C   sx   t g d¢ƒ}t g d¢ƒ}t g d¢ƒ}t|||fdd�}| ¡ }| ¡  t|jdƒ t|jg d¢ƒ t| ¡ | ¡ ƒ d S )N©r    r   r   r   rT   r   r¡   r   ©r    rT   r¡   r  rñ   r.  r/  r0  ©r   r¡   r0  r}  rw  r¡   r,  )r   r   r¼   Úeliminate_zerosr   râ   rÕ  rs   r  r0   r0   r1   Útest_eliminate_zerosJ  s    zTestCSR.test_eliminate_zerosc                 C   sŠ   t t d¡ dd¡d ƒ}dD ]f}ttt |ƒdƒ t||ƒƒ }t|j|jƒ t|j	|j	ƒ t|j
|j
ƒ t| ¡ tt|ƒ| ¡ ƒƒ qd S )Nr=  r  rñ   rf  ©rh  ri  rj  rk  rl  rm  rn  ro  rp  re  rq  rr  rs  rt  ru  rv  rw  rx  T)r   r=   r   rC  r   rÞ  rg   r‹   r   rÓ  rÔ  rs   ©ry   r@  rû   rg  r0   r0   r1   Útest_ufuncsU  s    zTestCSR.test_ufuncsc                 C   s†   t dƒ}tg d¢ƒ}tg d¢ƒ}t|||fdd�}t dƒ}tg d¢ƒ}tg d¢ƒ}t|||fdd�}t||  ¡ | ¡ | ¡  ƒ d S )	Nrñ   r{  r|  r}  rw  r.  ©r0  r    rñ   r/  rT   r  ©r   rT   r.  )r   r   r   r   rs   r  r0   r0   r1   Útest_unsorted_arithmetica  s    z TestCSR.test_unsorted_arithmeticc                 C   s~   t  dgdgdgg¡}t  g d¢¡}t j d¡ tt j dd¡ƒ}|  |¡}|||f }t|ƒrh| ¡ }t	||||f ƒ d S ©Nr    rT   r¡   r  rR   rñ   r/  ©
r=   r   rp   rS   r&   r{  r¤   r    rs   r   ©ry   rï  r  r  r»  rð  r0   r0   r1   Útest_fancy_indexing_broadcastl  s    
z%TestCSR.test_fancy_indexing_broadcastc                 C   sì   t  ddg¡}t  ddg¡}t  ddg¡}t  ddg¡}t|||fƒ ¡ }td|jƒ t|jtƒsfJ ‚t|||fƒ ¡ }td|jƒ | ¡  td|jƒ t	|j
|ƒ t|||fƒ ¡ }d|_td|jƒ t	|j
|ƒ | ¡  t	|j
|ƒ dS )z@Ensure has_sorted_indices memoizes sorted state for sort_indicesr   r    rT   TFN)r=   r   r   r¼   r   r  r<   r±   r  r   rÓ  )ry   Zsorted_indsZunsorted_indsrÕ  rÔ  r­  r0   r0   r1   Útest_has_sorted_indicesz  s$    zTestCSR.test_has_sorted_indicesc                 C   s   t 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¡}t |||fƒ ¡ }td|jƒ t|jtƒsŒJ ‚| ¡  td|jƒ tdt	|j
ƒƒ t |||fƒ ¡ }d|_td|jƒ tdt	|j
ƒƒ | ¡  tdt	|j
ƒƒ dS )z=Ensure has_canonical_format memoizes state for sum_duplicatesrT   r   r    TFN)r   r=   r   r   Úhas_canonical_formatr¼   r<   r±   Úsum_duplicatesrŽ   rÓ  )ry   r­  rÓ  rÕ  rÔ  r0   r0   r1   Ú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¡}t|||fdd�}t|||fdd�}t jdt jd�}t||fdd�}t||fdd�}tdƒ}	t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 )NrT   rõ   r   ©r    éÿÿÿrw  ©r    ì        r\  )r=   r   rJ   r   r   rÔ  r4   rU   ©ry   rÔ  rÓ  Úvalsr@   rE   rf  rù   r¢   rú   rû   r5   r0   r0   r1   Útest_scalar_idx_dtype³  s$    
zTestCSR.test_scalar_idx_dtypec                 C   sF   t g d¢gƒ}t g d¢gƒ}|| jdks.J ‚| |¡jdksBJ ‚d S )Nr  ©r    r    r   rT   r    )r   râ   rù  ©ry   r@   rE   r0   r0   r1   Útest_binop_explicit_zerosË  s    z!TestCSR.test_binop_explicit_zerosN)r…   r†   r‡   r…  r¤   r=   r¡  Úint_r¬   rô   r¨   rb  rd  re  rn  rs  ru  ry  rz  r€  r…  rˆ  r‹  r�  r�  r“  rš  r�  r0   r0   r0   r1   rÊ   Ö  s(   
	
	
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S )rÉ   c                 O   sD   t ƒ �*}| td¡ t|i |¤ŽW  d   ƒ S 1 s60    Y  d S )Nz<Changing the sparsity structure of a csc_matrix is expensive)r   rÆ   r!   r   r_  r0   r0   r1   r¤   Ø  s
    ÿzTestCSC.spcreatorc                 C   s€   t g d¢g d¢g d¢gdƒ}t|ƒ}t|jg d¢ƒ t|jg d¢ƒ t|jg d¢ƒ t| ¡ dƒ t|j	|j	ƒ t|j
d	ƒ d S )
N©r    r   r   r   r]  ©r   rT   r   r¡   r¢   )r    rT   r    r¡   )r   rT   r    rT   rþ  r  rÑ  )r   r   r   rÕ  r   rÓ  rÔ  r   rD  r‹   rÛ  ra  r0   r0   r1   rb  à  s    zTestCSC.test_constructor1c                 C   sJ   t ddƒ}d|d< t|ƒ}t|jdgƒ t|jdgƒ t|jg d¢ƒ d S )Nrc  r¢   rñ   )rT   r  rT   )r   r   r   r   r   r    r    )r   r   r   rÕ  r   rÓ  rÔ  ra  r0   r0   r1   rd  ê  s    
zTestCSC.test_constructor2c                 C   sX   t ddgddgddggdƒ}t|ƒ}t|jddgƒ t|jddgƒ t|jg d¢ƒ d S )Nr    r   rT   r¢   rq  )r   r   r   rÕ  r   rÓ  rÔ  ra  r0   r0   r1   re  ò  s
    zTestCSC.test_constructor3c                 C   s†   t g d¢ƒ}t g d¢ƒ}t g d¢ƒ}t||fƒ}t||fdƒ}ttdƒ dd¡| ¡ ƒ tg d¢g d	¢g d
¢ffƒ}|jdks‚J ‚d S )Nrf  rg  rh  rE  r7  r  r¡   rj  rk  rl  rT   )r   r   r   r   r   rC  rs   râ   )ry   r×  rØ  rÕ  rf  rÑ  r0   r0   r1   rn  ù  s    zTestCSC.test_constructor4c                 C   sB   t g d¢ƒ}t g d¢ƒ}t g d¢ƒ}t|||fƒ}t|jdƒ d S ©Nrp  rq  r   )r.  r¡   )r   r   r   r‹   ©ry   rÔ  rÓ  rÕ  rÑ  r0   r0   r1   rs    s
    zTestCSC.test_constructor5c                 C   sJ   g d¢}g d¢}g d¢}t |||fƒ}t|jdƒ tt |jtj¡ƒ d S r¡  )r   r   r‹   r   r=   rZ   r4   rt  r¢  r0   r0   r1   ru    s    zTestCSC.test_constructor6c                 C   sx   t g d¢ƒ}t g d¢ƒ}t g d¢ƒ}t|||fdd�}| ¡ }| ¡  t|jdƒ t|jg d¢ƒ t| ¡ | ¡ ƒ d S )Nr�  r‚  rƒ  ©rG   rT   rw  r¡   r,  )r   r   r¼   r„  r   râ   rÕ  rs   r  r0   r0   r1   r…    s    zTestCSC.test_eliminate_zerosc                 C   sd   t dƒ}tg d¢ƒ}g d¢}t|||fdd�}| ¡ }| ¡  t|jg d¢ƒ t| ¡ | ¡ ƒ d S )Nrñ   r{  r|  r£  rw  r~  )r   r   r   r¼   r  r   rÓ  rs   )ry   rÕ  r×  rx  r)  r*  r0   r0   r1   r€  #  s    zTestCSC.test_sort_indicesc                 C   sŠ   t t d¡ dd¡d ƒ}dD ]f}ttt|ƒdƒ t||ƒƒ }t|j|jƒ t	|j
|j
ƒ t	|j|jƒ t	| ¡ tt|ƒ| ¡ ƒƒ qd S )Né   r/  r¡   g      5@r†  T)r   r=   r   rC  r   rÞ  r   rg   r‹   r   rÓ  rÔ  rs   r‡  r0   r0   r1   rˆ  -  s    zTestCSC.test_ufuncsc                 C   s†   t dƒ}tg d¢ƒ}tg d¢ƒ}t|||fdd�}t dƒ}tg d¢ƒ}tg d¢ƒ}t|||fdd�}t||  ¡ | ¡ | ¡  ƒ d S )	Nrñ   r{  r|  r£  rw  r.  r‰  rŠ  )r   r   r   r   rs   r  r0   r0   r1   r‹  9  s    z TestCSC.test_unsorted_arithmeticc                 C   s~   t  dgdgdgg¡}t  g d¢¡}t j d¡ tt j dd¡ƒ}|  |¡}|||f }t|ƒrh| ¡ }t	||||f ƒ d S rŒ  r�  rŽ  r0   r0   r1   r�  D  s    
z%TestCSC.test_fancy_indexing_broadcastc                 C   s  t jdt jd�}t jdt jd�}t  d¡}t|||fdd�}t|||fdd�}t jdt jd�}t||fdd�}t||fdd�}tdƒ}	t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 )
NrT   rõ   r   )r•  r    rw  )r—  r    r\  r”  r–  )	r=   r   rJ   r   r   r   rÔ  r4   rU   r˜  r0   r0   r1   rš  R  s$    
zTestCSC.test_scalar_idx_dtypeN)r…   r†   r‡   r…  r¤   r=   r¡  rž  r¬   rô   r¨   rb  rd  re  rn  rs  ru  r…  r€  rˆ  r‹  r�  rš  r0   r0   r0   r1   rÉ   ×  s   

	
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   sB   t dƒ}d|d< d|d< ||j }||j }t| ¡ | ¡ ƒ d S )N©rG   rG   rG   r™  r=  ©rñ   r.  )r   rå   r  r   rs   )ry   rC   r  r  r0   r0   r1   Ú	test_multr  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\  rG   r   r>  rJ  )r¤   r   r   rs   r  r0   r0   r1   Útest_add_nonzeroz  s    
zTestDOK.test_add_nonzeroc                 C   sR   |   d¡}d|d< d|d< t|d  ¡ | ¡ d ƒ t|d  ¡ | ¡ d ƒ d S ©Nr}  r¨  r�  r=  r\  rJ  r1  ©r¤   r   rs   r  r0   r0   r1   Útest_dok_divide_scalar†  s
    
zTestDOK.test_dok_divide_scalarc                 C   s  d\}}t ||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Ù  rT   r[  r¡   r“  r  rV  rñ   rE  r.  r.  )	r   r   rs   r   rö   r
   r   r‹   r÷   )ry   rü   rH  r@   rÑ  rE   rÐ  r0   r0   r1   Útest_convertŽ  s"    ""
"zTestDOK.test_convertc                 C   s´   t ttƒ tg d¢g d¢g d¢gdƒ}t|ƒ}t|j|jƒ t| ¡ |ƒ t|ƒ}t| ¡ | ¡ ƒ g d¢g d¢g}t|tj	d�}t|jtj	ƒ | ¡ }t|jtj	ƒ t
||ƒ d S )NrŸ  r]  r   r¢   rq  r  rõ   )r¯   rD  r   r   r   r4   rs   r   r=   rò   r   )ry   rE   rC   rù   rÕ  r¢   Údar0   r0   r1   Ú	test_ctor­  s    
zTestDOK.test_ctorc                 C   sT   t dƒ}d|d< td| ¡ vdƒ t 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œ  r0   r0   r1   Útest_ticket1160Â  s    zTestDOK.test_ticket1160N)r…   r†   r‡   r   r¤   r=   rž  r¬   rô   r¨   r§  r©  r¬  r­  r¯  r±  r0   r0   r0   r1   r³   n  s   r³   )rZ  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< tdtjd�}d|d< d|d< t ¡ dkr`t||j ||j  ¡ ƒ t|| 	¡ j || 	¡ j  ¡ ƒ d S )Nr¥  rG   r™  y              4@r¦  rõ   Úppc64le)
r   r=   rô   r   ÚplatformÚmachiner   rå   rs   r   r  r0   r0   r1   Útest_dot×  s    zTestLIL.test_dotc                 C   s@   t dƒ}d|d< |d }t|d dƒ |d }t|d dƒ d S )Nrá   rT   r$  r  r   )r   r   )ry   r5   r0   r0   r1   Útest_scalar_mulæ  s    zTestLIL.test_scalar_mulc                 C   sR   |   d¡}d|d< d|d< t|d  ¡ | ¡ d ƒ t|d  ¡ | ¡ d ƒ d S rª  r«  r  r0   r0   r1   Útest_truediv_scalarð  s
    
zTestLIL.test_truediv_scalarc                 C   sæ   t g d¢g d¢gƒ}t g d¢g d¢gƒ}||| f||| fd|d fdœ}| ¡ D ]8\}\}}| ¡ }t|d| ƒ|ƒ t| ¡ | ¡ ƒ qTt dt d¡d	�}tg d
¢ƒ}|dd d …f  |7  < t|dd d …f  ¡  	¡ |ƒ d S )N©r   rT   r¡   r»  r  r¡   )ÚaddÚsubÚmulz__i%s__r€  r¬   rõ   )çš™™™™™¹?r½  r½  r   )
r   r`  r¼   rg   r   rs   r=   r4   r   Zsqueeze)ry   rC   rD   rÕ  Úopr“   ræ   r1  r0   r0   r1   Útest_inplace_opsø  s    


þzTestLIL.test_inplace_opsc                 C   sL   g d¢g d¢g}t t|ƒƒ}t|ƒD ]"\}}t| ¡ t|| dd�ƒ q$d S )Nr,  r-  rT   )Zndmin)r   r   rÌ  r   rs   )ry   Zrow_datarD   rR  r×  r0   r0   r1   Útest_lil_iteration  s    zTestLIL.test_lil_iterationc                 C   sV   t dƒ}d|d< d|d< d|d< d|d	< d
|d< | ¡ }t |ƒ}t| ¡ | ¡ ƒ d S )Nr¥  rG   r™  r=  r¦  r>  )r0  r¡   r#  )r¡   r0  rU  )r0  r1  )r   r÷   r   rs   )ry   rD   r5  r  r0   r0   r1   Útest_lil_from_csr  s    zTestLIL.test_lil_from_csrc                 C   sV   t tdƒ dd¡ƒ}t|ƒ}t|tg d¢ƒdd…f  ¡ |tg d¢ƒdd…f ƒ d S )NrÃ  rñ   r,  rT   r¡   )r&   r   rC  r   r   r   rs   )ry   r­  rC   r0   r0   r1   Útest_fancy_indexing_lil  s
    ÿzTestLIL.test_fancy_indexing_lilc                 C   s¦   t dƒ}d|d< d|d< d|d< d|d	< t dƒ}d|d< d|d
< d|d< d|d	< d|d< t| |¡ ¡ | |¡ ¡ ƒ t| |¡ ¡ g d¢g d¢g d¢g d¢gƒ d S )NrE  r    r$  rT   r  r¡   r~  r  r“  r�  r}  r³  r  ©r   r   r1  )r   r(  r   )r   r   rù  rs   )ry   Úlrü   r0   r0   r1   Útest_point_wise_multiply&  s*    ÿýÿz TestLIL.test_point_wise_multiplyc                 C   s*   t t d¡ƒ}|d9 }d|dd d …f< d S )Nrá   r§  r   )r   r=   r   rÔ  r0   r0   r1   Útest_lil_multiply_removal=  s    z!TestLIL.test_lil_multiply_removalN)r…   r†   r‡   r   r¤   r=   rž  r¬   rô   r¨   r¶  r·  r¸  r¿  rÀ  rÁ  rÂ  rÅ  rÆ  r0   r0   r0   r1   r²  Ó  s   
r²  )rZ  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¢ƒ}t|||ffdƒ}ttdƒ dd¡| ¡ ƒ t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 )Nrf  rg  rh  rE  r7  r  r¡   ri  r    r   rõ   )r   r   r   r   rC  rs   r=   rm  )ry   r×  rØ  rÕ  rÖ  r6  r0   r0   r1   rb  M  s    "zTestCOO.test_constructor1c                 C   sb   t g d¢ƒ}t g d¢ƒ}t g d¢ƒ}t|||ffdƒ}t g d¢g d¢g d¢gƒ}t|| ¡ ƒ d S )N)
r   r    rT   rT   rT   rT   r   r   rT   rT   )
r   rT   r   rT   r    r    r    r   r   rT   )
rT   r1  r  rñ   r/  r   rÑ   rT   r    r  rá   )r  rÑ   r   rÃ  )r  r/  r   )r   r   r   rs   )ry   r×  rØ  rÕ  rÖ  rz   r0   r0   r1   rd  [  s    zTestCOO.test_constructor2c                 C   sN   t dƒ}t|jdƒ t|jg ƒ t|jg ƒ t|jg ƒ t| ¡ tdƒƒ d S )NrE  )r   r   r‹   r×  rØ  rÕ  rs   r   ©ry   rÖ  r0   r0   r1   re  f  s    zTestCOO.test_constructor3c                 C   sä   t g d¢g d¢g d¢gƒ}t|ƒ}t| ¡ |ƒ t g d¢ƒ}t|ƒ}t| ¡ | dd¡ƒ tjtdd��* tg d¢g d	¢g d
¢fƒ W d   ƒ n1 s˜0    Y  tjtdd��  tg d¢dd� W d   ƒ n1 sÖ0    Y  d S )N©r   r    r   r   )r/  r   r¡   r   )r   r  r   r   r    rÑ   zobject cannot be interpretedrÒ  )r   r½  é   é!   r  r;  zinconsistent shapesrZ  rw  )	r   r   r   rs   rC  r´   r   rD  r°   )ry   rz   rÖ  r0   r0   r1   rn  p  s    þ8zTestCOO.test_constructor4c                 C   s8   dg}t |dgdgffd d�}|jt |¡jks4J ‚d S )Nr    r   rõ   )r   r4   r=   r   )ry   rÕ  rÖ  r0   r0   r1   Ú"test_constructor_data_ij_dtypeNone…  s    z*TestCOO.test_constructor_data_ij_dtypeNoneFzCOO does not have a __getitem__©ÚrunÚreasonc                 C   s   d S r3   r0   r�   r0   r0   r1   rW  Š  s    zTestCOO.test_iteratorc                 C   s(   ddgg}t |ƒ ¡ }t| ¡ |ƒ d S rX   )r   Ztodiar   rs   )ry   r   rÙ  r0   r0   r1   Útest_todia_all_zerosŽ  s    
zTestCOO.test_todia_all_zerosc                 C   sº   t dƒ}| ¡  t ddgddgddgffƒ}| ¡  t| ¡ ddgddggƒ t 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 )NrE  r    rT   r   r¡   )r   r’  r   rs   r×  rØ  rÕ  rÈ  r0   r0   r1   Útest_sum_duplicates“  s    zTestCOO.test_sum_duplicatesc                 C   s:   t g d¢g d¢g d¢ffƒ}| ¡ }t| ¡ | ¡ ƒ d S )Nrj  rk  rl  )r   rY  r   rs   )ry   rÖ  r9   r0   r0   r1   Útest_todok_duplicates   s    zTestCOO.test_todok_duplicatesc                 C   sT   t g d¢g d¢g d¢ffƒ}| ¡ }t|jd |jƒ | ¡ }t|jd |jƒ d S )Nrj  rk  rl  rT   )r   r÷   r   râ   rö   )ry   rÖ  rÐ  rÑ  r0   r0   r1   Útest_tocompressed_duplicates¥  s
    z$TestCOO.test_tocompressed_duplicatesc                 C   sp   t g d¢ƒ}t g d¢ƒ}t g d¢ƒ}t|||ffdd�}| ¡ }| ¡  t|jdk ¡ ƒ t| ¡ | ¡ ƒ d S )Nr�  )r   r   r   r    r    r    r    r    r‚  r}  rw  r   )	r   r   r¼   r„  r   rÕ  Úallr   rs   )ry   rÕ  r×  rØ  r)  r*  r0   r0   r1   r…  ¬  s    zTestCOO.test_eliminate_zerosc                 C   s‚   g d¢g d¢g d¢g}d}t |ƒ}| |¡}t|j|ju ƒ |j|dd�}t|j|ju ƒ |j|dd�}tt |j|j¡ ƒ d S )Nr:  r;  r<  r?  FrB  T)r   rC  r   rÕ  r=   rB   )ry   r]   Z	new_shaper5   r6   r0   r0   r1   Útest_reshape_copy¶  s    
zTestCOO.test_reshape_copyc                 C   sl   t dgdgdgffdƒ}t 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Ö  r5  r8  r   r6  )r   r   rC  râ   )ry   Zmat1Zmat2r0   r0   r1   Útest_large_dimensions_reshapeÄ  s    z%TestCOO.test_large_dimensions_reshapeN)r…   r†   r‡   r   r¤   r=   rž  r¬   rô   r¨   rb  rd  re  rn  rÌ  r´   r†  ÚxfailrW  rÐ  rÑ  rÒ  rÓ  r…  rÕ  rØ  r0   r0   r0   r1   rÇ  G  s    


rÇ  )rU  rV  rW  rX  rY  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S )ÚTestDIAc                 C   sf   t g d¢g d¢g d¢g d¢gƒ}t  g d¢g¡jddd�}t  g d	¢¡}tt||fd
d� ¡ |ƒ d S )N)r    r   r¡   r   )r    rT   r   r  )r   rT   r¡   r   )r   r   r¡   r  r   r¡   r   ru  ©r   rÑ   rT   rZ  rw  )r   r=   Úrepeatr   r   rs   )ry   r  rÕ  rÚ  r0   r0   r1   rb  Ù  s    ýzTestDIA.test_constructor1FzDIA does not have a __getitem__rÍ  c                 C   s   d S r3   r0   r�   r0   r0   r1   rW  â  s    zTestDIA.test_iteratorr¡   c                 C   s|   t t d¡ƒ}t|jjtjƒ |jddd� t|jjtjƒ t t d¡ƒ}t|jjtjƒ |jddd� t|jjtjƒ d S )Nr¡   )r¡   rT   r!  r  )	r   r=   r   r   rÚ  r4   rJ   rQ  rU   ©ry   rü   r0   r0   r1   Útest_setdiag_dtypeæ  s    zTestDIA.test_setdiag_dtypezDIA stores extra zeros©rÏ  c                 C   s   d S r3   r0   r�   r0   r0   r1   rE  ò  s    zTestDIA.test_getnnz_axisc                 C   sH   t g d¢gdgfdd�}| ¡ }t| ¡  ¡ |ƒ t| ¡  ¡ |ƒ d S )Nr›  rÑ   r.  rw  )r   rs   r   rö   r÷   )ry   rü   ræ   r0   r0   r1   Útest_convert_gh14555ö  s    zTestDIA.test_convert_gh14555c                 C   sT   t ddgddggƒ ¡ }t |j|jf|j¡}t t |¡dk¡}|j	|ksPJ ‚d S )Nr    rT   r¡   r  r   )
r   rø   r=   Zravel_multi_indexr×  rØ  r‹   rÔ  Údiffr‘  )ry   rü   Z	flat_indsZinds_are_sortedr0   r0   r1   Útest_tocoo_gh10050ý  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sZJ ‚| 	¡ }|j
jt jkstJ ‚| ¡ }|j
jt jksŽJ ‚d S )	Nr   r¡   r   ru  rÛ  rõ   rZ  rw  )r=   r   rÜ  rJ   rf   Z	dia_arrayrø   rØ  r4   r÷   rÓ  rö   )ry   rÕ  rÚ  rÙ  rÖ  rÐ  rÑ  r0   r0   r1   Útest_tocoo_tocsr_tocsc_gh19245  s    z&TestDIA.test_tocoo_tocsr_tocsc_gh19245N)r…   r†   r‡   r   r¤   r=   rž  r¬   rô   r¨   rb  r´   r†  rÙ  rW  rr   rÞ  rµ   rE  rà  râ  rã  r0   r0   r0   r1   rÚ  Ó  s   	


rÚ  )rU  rV  rW  rX  rY  rZ  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 )(rÈ   c                 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ƒ}t|||fdd�}t| ¡ |ƒ t|||fƒ}t| ¡ |ƒ d S ©N)r   rT   rT   r  )r   rT   rT   r¡   )r  rT   r¡   rq  r;  r   r  )r.  r   rG   r    )r   r  r0  )r7  r   r=  rT   )r   rñ   rG   )r%  r   rÃ  r¡   r  r;  r:  ©r.  r7  rw  )r   r   r   r   r   rs   )ry   rÔ  rÓ  rÕ  rC   rk  r0   r0   r1   rb    s(    ÿ
ÿ
ÿ
ÿ
(zTestBSR.test_constructor1c                 C   sn  dD ]}t |ƒ}tt|ƒ ¡ |ƒ qt dƒ}tt|dd� ¡ |ƒ tt|dd� ¡ |ƒ tg d¢g d¢g d¢gg d	¢g d
¢gƒ}tt|ƒ ¡ |ƒ tt|dd� ¡ |ƒ tt|dd� ¡ |ƒ tt|dd� ¡ |ƒ tt|dd� ¡ |ƒ tt|dd� ¡ |ƒ tt|dd� ¡ |ƒ tt|dd� ¡ |ƒ tg d¢g d¢g d¢gg d	¢g d
¢gƒ}tt|dd� ¡ |ƒ d S )N)r  rW  r³  )rG   r  )r¡   r/  rÙ  )r  r.  r~  r=  r©  r  r;  r:  rq  r;  rå  rw  r  r?  )rT   r7  )r¡   r7  rÉ  )r   r   r   rs   r   )ry   r‹   rC   r0   r0   r1   rd  3  s"    ((zTestBSR.test_constructor2c                 C   sF   g d¢g d¢g d¢ff}t ddgddggƒ}tt|dd	� ¡ |ƒ d S )
Nr,  ra  r  r    r   rT   r¡   r~  r=  )r   r   r   rs   )ry   ÚargrC   r0   r0   r1   re  K  s    zTestBSR.test_constructor3c                 C   sZ   d}t j||dft jd�}t jd|gt jd�}t j|t jd�}t|||f|dfdd� d S )Nr0  r    rõ   r   F)r>  r¼   )r=   r   r   r   rJ   r   r   )ry   rH  rÕ  rÔ  rÓ  r0   r0   r1   rn  Q  s
    zTestBSR.test_constructor4c                 C   sä   d}t  |¡}t  |||f¡}t  d|g¡}t  |¡}ttƒ� t|||fƒ W d   ƒ n1 sb0    Y  ttƒ�" t|||fdd� W d   ƒ n1 sœ0    Y  ttƒ�" t|||fdd� W d   ƒ n1 sÖ0    Y  d S )Nr0  r   rå  r=  r  )r=   r   r   r   r¯   r°   r   )ry   rH  Z	data_1dimrÕ  rÔ  rÓ  r0   r0   r1   rs  Z  s    


,
0
zTestBSR.test_constructor5c                 C   sl   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�}t|||fdd�}|jt  |¡jkshJ ‚d S )Nr    r   rT   rõ   rÙ  r=  )r=   r   rJ   r   r4   )ry   r;   rÔ  rÓ  rE   r0   r0   r1   Útest_default_dtypen  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ƒ}t|||fdd�}| ¡ }| ¡  ¡ }t| ¡ |ƒ t| ¡ | ¡ ƒ d S rä  )r   r   r   r   r÷   rø   r   rs   )ry   rÔ  rÓ  rÕ  rC   ZAbsrZAcsrZAcsr_via_coor0   r0   r1   Útest_bsr_tocsrv  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¢ƒ}t|||fdd�}| ¡ }| ¡  t|jd	ƒ t| 	¡ | 	¡ ƒ d S )
Nr�  r    rÑ   rT   r‚  rƒ  )r  r=  rw  r7  )
r   rå   rC  r   r   r¼   r„  r   râ   rs   r  r0   r0   r1   r…  �  s    zTestBSR.test_eliminate_zerosc                 C   sÒ   t j d¡ t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   )r7  r7  r©  r=  gÍÌÌÌÌÌì?éB   )r½  rT   r¡   r¦  r¹  )r=   rp   rS   r   rÕ  r„  r   râ   r   r‹   rs   r   rÝ  r0   r0   r1   Útest_eliminate_zeros_all_zero™  s    z%TestBSR.test_eliminate_zeros_all_zeroc                 C   sH   t tdƒ dd¡dd�}t|jd ƒ dd¡}t|| | ¡ | ƒ d S )Néx   r0  r%  ©r  rñ   r=  r    rÑ   ©r   r   rC  r‹   r   rs   rç  r0   r0   r1   Útest_bsr_matvec°  s    zTestBSR.test_bsr_matvecc                 C   sL   t tdƒ dd¡dd�}t|jd d ƒ dd¡}t|| | ¡ | ƒ d S )	Nrë  r0  r%  rì  r=  r    r.  rÑ   rí  rç  r0   r0   r1   Útest_bsr_matvecsµ  s    zTestBSR.test_bsr_matvecsFzBSR does not have a __getitem__rÍ  c                 C   s   d S r3   r0   r�   r0   r0   r1   rW  º  s    zTestBSR.test_iteratorzBSR does not have a __setitem__c                 C   s   d S r3   r0   r�   r0   r0   r1   r_  ¾  s    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 )Nrz  r{  r|  rž  r=  r}  r    r   rT   r¡   r~  rA  rŸ  r;  r©  r  rº  r0   r0   r1   Útest_resize_blockedÂ  s2    
þþ
ÿ
þ
þzTestBSR.test_resize_blockedc                 C   s   d S r3   r0   r�   r0   r0   r1   rY  Ù  s    z"TestBSR.test_setdiag_comprehensivezexceeds memory limitrß  c              	   C   s@  t jdt jd�}t jdt jd�}t  d¡}t|||fdd�}t|||fdd�}tdƒ}tdƒ}t|jjt jƒ t|jjt jƒ t|jjt jƒ t|jjt jƒ z\t  d¡}t  d	¡}	t|||fdd�}
t|	||fdd�}t|
jjt jƒ t|jjt jƒ W n  tt	f�y   d}
d}Y n0 |||||
|fD ]}||  �q,d S )
NrT   rõ   r   ra  r”  rw  r–  )r   r    r•  )r   r    r—  )
r=   r   rJ   r   r   rÔ  r4   rU   ÚMemoryErrorr°   )ry   rÔ  rÓ  r™  r@   rE   rù   r¢   Zvals2Zvals3rú   rû   r5   r0   r0   r1   rš  Ý  s.    



zTestBSR.test_scalar_idx_dtypeN)r…   r†   r‡   r   r¤   r=   rž  r¬   rô   r¨   rb  rd  re  rn  rs  rç  rè  r…  rê  rî  rï  r´   r†  rÙ  rW  r_  rð  rY  ÚskipifÚIS_COLABrš  r0   r0   r0   r1   rÈ     s,   	


rÈ   )rU  rV  rW  rX  rY  r[  c                 O   s2  |  dd¡}t | jtj¡s,t | jtj¡rN|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rôt	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 dS )
z-Duplicates entries to produce the same matrixrÔ  Nr   rT   ru  r    c                 s   s   | ]}|d  V  qdS rÿ  r0   )re  Úpr0   r0   r1   Ú	<genexpr>  rh  z&_same_sum_duplicate.<locals>.<genexpr>c                 s   s   | ]}|  d ¡V  qdS )rT   N)rÜ  )re  rÓ  r0   r0   r1   rõ    rh  )
Úpopr=   rZ   r4   r¡  Zunsignedintegerri  rÜ  rY   rc  )rÕ  Zindsr7   rÔ  Z	zeros_posÚposZpos1Úpos2r0   r0   r1   Ú_same_sum_duplicate  s*    ÿ


rù  c                       s`   e Zd Z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 )Ú_NonCanonicalMixinFc                    s  t ƒ j}||fi |¤Ž}| ¡ dk ¡ }|d jdk}|r˜|d jd }tƒ �:}	|	 td¡ |  ||d | |d | ¡}W d  ƒ n1 sŽ0    Y  |  	||¡}
d|vr¶|j
|d< ||
fi |¤Ž}|jtjtjfv rÞd}nd}t| ¡ | ¡ |d	� |�rt|jdk ¡ ƒ |S )
zcReplace D with a non-canonical equivalent: containing
        duplicate elements and explicit zerosr   rT   rM  r    Nr‹   gñhãˆµøä>gH¯¼šò×z>)Úrtol)Úsuperr¤   rs   ri  rY   r   rÆ   r!   Ú_insert_explicit_zeroÚ_arg1_for_noncanonicalr‹   r4   r=   rò   ró   r   r   rÕ  Úany)ry   r  Úsorted_indicesr7   Z	constructr­  Zzero_posZ	has_zerosr"  rÌ   Zarg1ZNCrû  ©rS  r0   r1   r¤   '  s.    þ<
z_NonCanonicalMixin.spcreatorz"bool(matrix) counts explicit zerosrß  c                 C   s   d S r3   r0   r�   r0   r0   r1   r·   O  s    z_NonCanonicalMixin.test_boolz!getnnz-axis counts explicit zerosc                 C   s   d S r3   r0   r�   r0   r0   r1   rE  S  s    z#_NonCanonicalMixin.test_getnnz_axisznnz counts explicit zerosc                 C   s   d S r3   r0   r�   r0   r0   r1   rä   W  s    z_NonCanonicalMixin.test_empty)F)r…   r†   r‡   r¤   r´   r†  rµ   r·   rE  rä   Ú__classcell__r0   r0   r  r1   rú  &  s   (

rú  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 ]L\}}|||… ddd…  ¡ |||…< |||… ddd…  ¡ |||…< q0|||fS )ú5Return non-canonical constructor arg1 equivalent to M)rÔ  r    NrÑ   )rù  rÕ  rÓ  rÔ  rV  r¼   )ry   r­  r   rÕ  rÓ  rÔ  ÚstartÚstopr0   r0   r1   rþ  ]  s    
ÿ"$z3_NonCanonicalCompressedMixin._arg1_for_noncanonicalc                 C   s   d|||f< |S rX   r0   ©ry   r­  rI  rJ  r0   r0   r1   rý  g  s    z2_NonCanonicalCompressedMixin._insert_explicit_zeroN)F)r…   r†   r‡   rþ  rý  r0   r0   r0   r1   r  \  s   

r  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 ]0}t| |ƒD ]}t|||f |||f ƒ qXqHdD ]}tttf|j|ƒ q~d S )Nr³  r–  r—  r  rõ   )r   r˜  )	r   r¤   r‹   r¸   r   r¯   rš  rD  r›  )	r4   r   r  rC   r­  r¯  rI  rJ  rf  r�   r0   r1   r²   n  s    ýý
z3_NonCanonicalCSMixin.test_getelement.<locals>.check)FTrœ  )ry   r²   r4   r   r0   r�   r1   r�  m  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 sp0    Y  t| ¡ |ƒ | ¡  ¡ |d d …df< tƒ �.}| td¡ |j	|d d …df< W d   ƒ n1 sÚ0    Y  t| ¡ |ƒ d S )Nr¡   r,  r    rM  rT   )
r=   r   r¤   rs   r   rÆ   r!   r   rø  rå   )ry   r  rC   rD   rÌ   r0   r0   r1   Útest_setitem_sparse‚  s&    

þ.þ0z(_NonCanonicalCSMixin.test_setitem_sparseFz(inverse broken with non-canonical matrixrÍ  c                 C   s   d S r3   r0   r�   r0   r0   r1   r±  ™  s    z_NonCanonicalCSMixin.test_invz&solve broken with non-canonical matrixc                 C   s   d S r3   r0   r�   r0   r0   r1   r±  �  s    z_NonCanonicalCSMixin.test_solveN)
r…   r†   r‡   r�  r	  r´   r†  rÙ  r±  r±  r0   r0   r0   r1   r  l  s   
r  c                   @   s   e Zd ZdS )ÚTestCSRNonCanonicalN©r…   r†   r‡   r0   r0   r0   r1   r
  ¢  s   r
  c                   @   s   e Zd ZdS )ÚTestCSCNonCanonicalNr  r0   r0   r0   r1   r  ¦  s   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÷   rZ  r>  )ry   r­  rI  rJ  r5   r0   r0   r1   rý  «  s    z)TestBSRNonCanonical._insert_explicit_zeroFz&diagonal broken with non-canonical BSRrÍ  c                 C   s   d S r3   r0   r�   r0   r0   r1   r+  °  s    z!TestBSRNonCanonical.test_diagonalz"expm broken with non-canonical BSRc                 C   s   d S r3   r0   r�   r0   r0   r1   r°  ´  s    zTestBSRNonCanonical.test_expmN)	r…   r†   r‡   rý  r´   r†  rÙ  r+  r°  r0   r0   r0   r1   r  ª  s
   
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 )r  )rù  rÕ  r×  rØ  )ry   r­  r   rÕ  r×  rØ  r0   r0   r1   rþ  º  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 rX   )r=   Zr_rÕ  r4   r/  r×  rØ  r  r0   r0   r1   rý  ¿  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¡   rT   r    r!  r   )	r¤   r=   r   r’  rQ  r   rÔ  rá  rØ  rÝ  r0   r0   r1   Útest_setdiag_noncanonicalÅ  s
    z-TestCOONonCanonical.test_setdiag_noncanonical)N)r…   r†   r‡   rþ  rý  r  r0   r0   r0   r1   r  ¹  s   
r  c            
   	   c   s
  t ttttttg} dddddddddœ}| D ]Ø}tt|ƒƒD ]Æ}t	||ƒ}| 
d¡r<t	|d	d
ƒs<g }| |¡}t|ƒrŠ|tjj|d�g7 }t tj¡t d¡krÌt	|dg ƒ}|D ]}|jdv r°| |¡ q°n$dD ]}	t||	ƒrÐ|t	||	ƒg7 }qÐtj|||d�V  q<q,d S )Nz%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°  r±  r±  rš  rØ  ry  rz  rã  rM  r‡  Frß  z3.6.0Z
pytestmark)rò  rµ   rÙ  Zxslow)Úmarks)rÈ   rÇ  rÉ   rÊ   rÚ  r³   r²  ÚsortedÚdirrg   rP  rT  r±   r´   r†  rµ   r   ÚparseÚ__version__ÚVersionrn   r>   rÞ  Úparam)
ZTEST_CLASSESZ
SKIP_TESTSr­   Úmethod_nameÚmethodr  r-   Úmarkersr†  Zmnamer0   r0   r1   Úcases_64bitÍ  s>    
þø


ÿ


r  c                   @   sÂ   e Zd ZeeeeegZdd„ Z	dd„ Z
dd„ Zdd„ Zd	d
„ Zej deƒ ¡dd„ ƒZej deƒ ¡dd„ ƒZej deƒ ¡dd„ ƒZej deƒ ¡dd„ ƒZej deƒ ¡dd„ ƒZdd„ ZdS )Ú	Test64Bitc                 C   s   |t j ||¡ƒS r3   )r=   rp   r{  )ry   Úmat_clsrü   rH  r0   r0   r1   Ú_create_some_matrixú  s    zTest64Bit._create_some_matrixc                 C   s~   t  |¡}t|tttfƒr2|jj|ko0|jj|kS t|tƒrT|j	j|koR|j
j|kS t|tƒrj|jj|kS td|›d�ƒ‚d S )Nzmatrix z has no integer indices)r=   r4   r<   r   r   r   rÓ  rÔ  r   r×  rØ  r   rÚ  r°   )ry   rü   r4   r0   r0   r1   Ú_compare_index_dtypeý  s    


zTest64Bit._compare_index_dtypec                    s.   t dd�‡ fdd„ƒ}ˆ jD ]}||ƒ qd S )NrG   r_   c                    sL   | t j dd¡ƒ}tˆ  |t j¡ƒ | t j dd¡ƒ}tˆ  |t j¡ƒ d S )NrG   r    r½  )r=   rp   r{  r   r  rJ   rU   )r  rü   r�   r0   r1   r²     s    z4Test64Bit.test_decorator_maxval_limit.<locals>.check©rr   ÚMAT_CLASSES©ry   r²   r  r0   r�   r1   Útest_decorator_maxval_limit  s    
z%Test64Bit.test_decorator_maxval_limitc                    s.   t dd�‡ fdd„ƒ}ˆ jD ]}||ƒ qd S )NT©rp   c                    s`   d}d}t dƒD ]B}ˆ  | dd¡}|p2ˆ  |tj¡}|pDˆ  |tj¡}|r|r q\qtdƒ‚d S )NFrá  r1  z#both 32 and 64 bit indices not seen)r¸   r  r  r=   rJ   rU   ra   )r  Zseen_32Zseen_64r"  rü   r�   r0   r1   r²     s    z5Test64Bit.test_decorator_maxval_random.<locals>.checkr  r!  r0   r�   r1   Útest_decorator_maxval_random  s    
z&Test64Bit.test_decorator_maxval_randomc                 K   s$   t f i |¤Ždd„ ƒ}|||ƒ d S )Nc              	   S   sT   | ƒ }t |dƒr| ¡  z"t||ƒƒ  W t |dƒrP| ¡  nt |dƒrN| ¡  0 d S )NÚsetup_methodÚteardown_method)rÞ  r%  rg   r&  )r­   r  Úinstancer0   r0   r1   r²   ,  s    


ÿ
z*Test64Bit._check_resiliency.<locals>.check)rr   )ry   r­   r  rj   r²   r0   r0   r1   Ú_check_resiliency(  s    

zTest64Bit._check_resiliencyzcls,method_namec                 C   s   | j ||dd� d S )NrG   r_   ©r(  ©ry   r­   r  r0   r0   r1   Útest_resiliency_limit_109  s    z"Test64Bit.test_resiliency_limit_10c                 C   s   | j ||dd� d S )NTr#  r)  r*  r0   r0   r1   Útest_resiliency_random=  s    z Test64Bit.test_resiliency_randomc                 C   s   | j ||tjd� d S ©NrP   )r(  r=   rJ   r*  r0   r0   r1   Útest_resiliency_all_32D  s    z Test64Bit.test_resiliency_all_32c                 C   s   | j ||tjd� d S r-  )r(  r=   rU   r*  r0   r0   r1   Útest_resiliency_all_64H  s    z Test64Bit.test_resiliency_all_64c                 C   s   | j ||dd� d S )NT)rq   r)  r*  r0   r0   r1   Ú
test_no_64L  s    zTest64Bit.test_no_64c                 C   s:   t tjdd�dd„ ƒ}t tjd�dd„ ƒ}|ƒ  |ƒ  d S )Nr    )rQ   rc   c                  S   s†   t ddgddgddggƒ} tt| jdd� tt| jdd� tg d	¢g d
¢gƒ} tt| jdd� tg d	¢g d¢gƒ} tt| jdd� d S ©Nr    rT   r¡   r  rñ   r.  ru  r   r,  )r¡   r  r.  r™  )r   r¯   ra   rD  rw  r   r   rt   r0   r0   r1   Úcheck_limitedW  s    z3Test64Bit.test_downcast_intp.<locals>.check_limitedrP   c                  S   sv   t ddgddgddggƒ} | jdd� | jdd� tg d	¢g d
¢gƒ} | jdd� tg d	¢g d¢gƒ} | jdd� d S r1  )r   rD  rw  r   r   rt   r0   r0   r1   Úcheck_unlimitede  s    z5Test64Bit.test_downcast_intp.<locals>.check_unlimited)rr   r=   rU   )ry   r2  r3  r0   r0   r1   Útest_downcast_intpP  s    ÿ


zTest64Bit.test_downcast_intpN)r…   r†   r‡   r   r   r   r   r   r   r  r  r"  r$  r(  r´   r†  Zparametrizer  r+  r,  r.  r/  r0  r4  r0   r0   r0   r1   r  ÷  s"   




r  )N)NFNNF)T)	TTTTTTTTT)rr„  Ú
contextlibrJ  r%  r´  rÍ  ÚsysZ
scipy._libr   Únumpyr=   r   r   r   r   r   r   r	   r
   r   r   r   r   r   rp   Znumpy.testingr   r   r   r   r   r   r   r´   r   r¯   Zscipy.linalgre   r?  rf   r   r   r   r   r   r   r   r   r    r!   r"   Zscipy.sparse._sputilsr#   r$   r%   r&   r'   Zscipy.sparse.linalgr(   r)   r*   Zscipy._lib.decoratorr+   Zscipy._lib._utilr,   rl   ró  r2   r8   Ú	frozensetr‚  rF   rÇ   rÆ   rr   rs   ru   rˆ   r�   rŸ   rˆ  r•  r°  r²  rÖ  ré  Úcontextmanagerr  r  r  r  r#  r2  rC  rS  r^  rÊ   r®   rÉ   r³   r²  rÇ  rÚ  rÈ   rù  rú  r  r  r
  r  r  r  r  r  r0   r0   r0   r1   Ú<module>   sä   <$4



  ÿ
Q$               %gr _ $  
w#ea ^
    ý
,    bqþ 
þ?ý j!66*