U
    »mœd`Å ã                   @   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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/m0Z0m1Z1m2Z2 ddl3m4Z4m5Z5m6Z6m7Z7m8Z8 dd	l9m:Z:m;Z;m<Z< dd
l=m>Z> ddl"Z"dej?kZ@dddd„ZAdd„ ZBeCdgƒZDdd„ ZEe!ƒ ZFeF Ge¡ dedd„ZHdd„ ZIG dd„ dƒZJG dd„ 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)ƒZRejSd*d+„ ƒZTG d,d-„ d-ƒZUG d.d/„ d/ƒZVG d0d1„ d1ƒZWG d2d3„ d3ƒZXG d4d5„ d5ƒZYG d6d7„ d7ƒZZdfd9d:„Z[dgd;d<„Z\G d=d>„ d>e\ƒ ƒZ]e] ^¡  G d?d@„ d@e\ƒ ƒZ_e_ ^¡  G dAdB„ dBe\dddC�ƒZ`e` ^¡  G dDdE„ dEe\ddF�ƒZaea ^¡  G dGdH„ dHe\ddddddI�ƒZbeb ^¡  G dJdK„ dKe\ddddddddL�ƒZcec ^¡  G dMdN„ dNe\dddddddO�ƒZded ^¡  dPdQ„ ZeG dRdS„ dSƒZfG dTdU„ dUefƒZgG dVdW„ dWegƒZhG dXdY„ dYehe]ƒZiG dZd[„ d[ehe_ƒZjG d\d]„ d]egedƒZkG d^d_„ d_efebƒZld`da„ ZmG dbdc„ dcƒZndS )hzò 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ÚComplexWarning)Ú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Ú
isspmatrixÚSparseEfficiencyWarning)Úsupported_dtypesÚisscalarlikeÚget_index_dtypeÚasmatrixÚmatrix)ÚspluÚexpmÚinv)Ú	decoratorzgoogle.colabc                 C   s(   t | |k|d k	r|n
d| |f d� d S )Nz%r not found in %r)Úmsg)r   )ÚmemberZ
collectionr,   © r.   úU/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scipy/sparse/tests/test_base.pyÚ	assert_in1   s    r0   c                 K   s"   t | j|jkƒ t| |f|Ž d S ©N)r   Údtyper   )ÚxÚyÚkwargsr.   r.   r/   Úassert_array_equal_dtype5   s    r6   Ú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 r1   )Ú__dict__ÚvaluesÚ
isinstanceÚnpr	   ZgenericÚappend)r3   ÚarraysÚar.   r.   r/   Ú_underlying_arrays?   s
    z3sparse_may_share_memory.<locals>._underlying_arraysTF)r;   Úmay_share_memory)ÚAÚBr?   r>   Úbr.   r.   r/   Úsparse_may_share_memory<   s    
rD   Fc                    s¢   ˆdkrt  d¡‰n
t  ˆ¡‰|r.ddd„‰nHˆdk	rFd‡fdd„	‰n0|rht jjdd	�‰ d‡ fd
d„	‰nd‡fdd„	‰ˆdk	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é
   r.   Fc                 S   sD   t | ||ƒ}tt |¡jt tj¡jƒ t|tjkp<|tjkƒ |S r1   )r%   r   r;   ÚiinfoÚmaxÚint32r   Zintc)r=   ÚmaxvalÚcheck_contentsÚtpr.   r.   r/   Únew_get_index_dtypec   s    z4with_64bit_maxval_limit.<locals>.new_get_index_dtypec                    s   ˆ S r1   r.   ©r=   rI   rJ   ©Úfixed_dtyper.   r/   rL   i   s    éÒ  )Úseedc                    s   t jt jfˆ  d¡ S )Né   )r;   rH   Úint64ÚrandintrM   )Úcounterr.   r/   rL   n   s    c                    sŒ   t j}|d k	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;   rH   rS   r   r2   ÚsizeÚ
issubdtypeÚintegerrG   Úmin)r=   rI   rJ   r2   ÚarrÚminval©Úmaxval_limitr.   r/   rL   q   s"    

c                    s    |   ¡ ˆ krtdƒ‚|  tj¡S )Nzdowncast limited)rG   ÚAssertionErrorÚastyper;   Zintp)r[   )Údowncast_maxvalr.   r/   Ú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
}zh|D ]T}| |dt|dd ƒf¡ t|dˆƒ ˆ d k	rJ| |dt|dd ƒf¡ t|dˆƒ qJ| ||ŽW ¢S |D ]\}}}|d k	r²t|||ƒ q²X d S )Nr%   Zdowncast_intp_index)ÚscipyÚsparseZ_bsrZ_cooZ_cscZ_csrZ_diaZ_dokZ_lilZ_sputilsZ_compressedZ
_constructÚsetattrr<   Úgetattr)Úfuncr>   ÚkwÚbackupÚmodulesÚmodÚnameZoldfunc)ra   rb   rL   r.   r/   ÚdecoŒ   s2        ý
ÿ
ÿz%with_64bit_maxval_limit.<locals>.deco)r.   NF)r.   NF)r.   NF)r.   NF)r;   rS   ÚrandomZRandomStater+   )r^   rn   rO   ra   Úassert_32bitrm   r.   )rU   ra   rO   r^   rb   rL   r/   Úwith_64bit_maxval_limitT   s     
rp   c                 C   s    t | tjƒst| ƒr| S |  ¡ S r1   )r:   r;   r	   r$   Útoarray©r>   r.   r.   r/   rq   ¥   s    rq   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 rightr.   ©ÚselfÚmatr.   r.   r/   Ú__add__®   s    zBinopTester.__add__c                 C   s   dS rt   r.   rv   r.   r.   r/   Ú__mul__±   s    zBinopTester.__mul__c                 C   s   dS rt   r.   rv   r.   r.   r/   Ú__sub__´   s    zBinopTester.__sub__c                 C   s   dS ©Númatrix on the leftr.   rv   r.   r.   r/   Ú__radd__·   s    zBinopTester.__radd__c                 C   s   dS r|   r.   rv   r.   r.   r/   Ú__rmul__º   s    zBinopTester.__rmul__c                 C   s   dS r|   r.   rv   r.   r.   r/   Ú__rsub__½   s    zBinopTester.__rsub__c                 C   s   dS rt   r.   rv   r.   r.   r/   Ú
__matmul__À   s    zBinopTester.__matmul__c                 C   s   dS r|   r.   rv   r.   r.   r/   Ú__rmatmul__Ã   s    zBinopTester.__rmatmul__N)Ú__name__Ú
__module__Ú__qualname__ry   rz   r{   r~   r   r€   r�   r‚   r.   r.   r.   r/   rs   «   s   rs   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 r1   ©Ú_shape)rw   Úshaper.   r.   r/   Ú__init__É   s    zBinopTester_with_shape.__init__c                 C   s   | j S r1   r‡   ©rw   r.   r.   r/   r‰   Ì   s    zBinopTester_with_shape.shapec                 C   s
   t | jƒS r1   )Úlenrˆ   r‹   r.   r.   r/   ÚndimÏ   s    zBinopTester_with_shape.ndimc                 C   s   dS rt   r.   rv   r.   r.   r/   ry   Ò   s    zBinopTester_with_shape.__add__c                 C   s   dS rt   r.   rv   r.   r.   r/   rz   Õ   s    zBinopTester_with_shape.__mul__c                 C   s   dS rt   r.   rv   r.   r.   r/   r{   Ø   s    zBinopTester_with_shape.__sub__c                 C   s   dS r|   r.   rv   r.   r.   r/   r~   Û   s    zBinopTester_with_shape.__radd__c                 C   s   dS r|   r.   rv   r.   r.   r/   r   Þ   s    zBinopTester_with_shape.__rmul__c                 C   s   dS r|   r.   rv   r.   r.   r/   r€   á   s    zBinopTester_with_shape.__rsub__c                 C   s   dS rt   r.   rv   r.   r.   r/   r�   ä   s    z!BinopTester_with_shape.__matmul__c                 C   s   dS r|   r.   rv   r.   r.   r/   r‚   ç   s    z"BinopTester_with_shape.__rmatmul__N)rƒ   r„   r…   rŠ   r‰   r�   ry   rz   r{   r~   r   r€   r�   r‚   r.   r.   r.   r/   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;ddde„ 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¬S )­Ú_TestCommonz6test common functionality shared by all sparse formatsc                 C   sÀ   t ddddgddddgddddggdƒ| _|  | j¡| _ttƒ | j¡| _i | _	i | _
| jD ].}| j |¡| j	|< |  | j |¡¡| j
|< q\t| j| j	tj ƒ t| j ¡ | j
tj  ¡ ƒ d S ©Né   r   rR   é   Úd)r   ÚdatÚspmatrixÚdatspÚsetr#   ÚunionÚmath_dtypesÚchecked_dtypesÚ
dat_dtypesÚdatsp_dtypesr`   r   r;   Úfloat64rq   )Úclsr2   r.   r.   r/   Ú
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¡ƒ tˆ  dg¡ ƒ d S ©Nr�   r   )r›   Úassert_raisesÚ
ValueErrorÚboolr   r”   )r2   r•   r‹   r.   r/   Úcheck  s    
z$_TestCommon.test_bool.<locals>.checkz%Cannot create a rank <= 2 DOK matrix.)r:   ÚTestDOKÚpytestÚskipr™   ©rw   r£   r2   r.   r‹   r/   Ú	test_bool  s
    


z_TestCommon.test_boolc                 C   sH   t ddggƒ}|  |¡}tdƒD ]}|| }|| }q t|| ¡ ƒ d S )NTFrE   )r   r”   Úranger   rq   )rw   r“   r•   Ú_r.   r.   r/   Ú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   r6   rq   r;   Únan)	r2   r“   r•   Údat2Údatsp2ÚdatbsrÚdatcsrÚdatcscÚdatlilr‹   r.   r/   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™   ©rw   Úsupr£   r2   r.   r‹   r/   Ú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   r6   rq   r;   r®   )	r2   r“   r•   r¯   r°   r±   r³   r²   r´   r‹   r.   r/   r£   N  s,    



ÿz"_TestCommon.test_ne.<locals>.checkrµ   r¶   r¼   r.   r‹   r/   Útest_neJ  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              	      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~tjdd��  t
|tjk  ¡ |tjk ƒ W 5 Q R X ˆ j |  }ˆ j|  }| ¡ }d|d d …df< ˆ  |¡}t
||k ||k ƒ d S ©Nr   ù      ð?      ð?)rR   r�   r   éÿÿÿÿéþÿÿÿÚignore©Úinvalid©rš   r›   r­   r”   r`   Úcomplexr   r   r   r   r6   rq   r;   rS   Úerrstater®   ©r2   r“   r•   r¯   r°   Z
datcomplexZdatspcomplexr±   r³   r²   r´   Úvalr‹   r.   r/   r£   u  sP    





ÿ
ÿ


z"_TestCommon.test_lt.<locals>.checkrµ   r¶   r¼   r.   r‹   r/   Útest_ltq  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              	      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~tjdd��  t
|tjk ¡ |tjkƒ W 5 Q R X ˆ j |  }ˆ j|  }| ¡ }d|d d …df< ˆ  |¡}t
||k||kƒ d S rÀ   rÇ   rÊ   r‹   r.   r/   r£   ´  sP    





ÿ
ÿ


z"_TestCommon.test_gt.<locals>.checkrµ   r¶   r¼   r.   r‹   r/   Ú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Á   )rR   r�   rÂ   rÃ   ©rš   r›   r­   r”   r`   rÈ   r   r   r   r   r6   rq   r;   rS   rÊ   r‹   r.   r/   r£   ò  sH    





ÿ



z"_TestCommon.test_le.<locals>.checkrµ   r¶   r¼   r.   r‹   r/   Ú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‹   r.   r/   r£   ,  sH    





ÿ



z"_TestCommon.test_ge.<locals>.checkrµ   r¶   r¼   r.   r‹   r/   Ú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”   rq   r   ÚnnzÚcount_nonzeror‹   r.   r.   r/   Ú
test_emptyb  s    z_TestCommon.test_emptyc                 C   s6   t  | j ¡ ¡}t| j ¡ |ƒ t| jj ¡ |ƒ d S r1   )r;   rÔ   r•   rq   r   ÚT)rw   Úexpectedr.   r.   r/   Útest_count_nonzeroh  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‹   r.   r.   r/   Útest_invalid_shapesm  s    z_TestCommon.test_invalid_shapesc                 C   s   t | jƒ d S r1   )Úreprr•   r‹   r.   r.   r/   Ú	test_reprr  s    z_TestCommon.test_reprc                 C   s   t | jƒ d S r1   )Ústrr•   r‹   r.   r.   r/   Útest_stru  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 ]2}	t|	j|j|j ƒ t|	j|ƒ t|	jj|ƒ q†q0d S )	N©é   râ   rH   Úfloat32rœ   Ú	complex64Ú
complex128©r2   rR   )r;   r2   r”   ÚtocscÚtocsrÚtocoor   rA   )
rw   r‰   Zmytyper>   rC   Úcr’   ÚeÚfÚmr.   r.   r/   Útest_empty_arithmeticx  s      þz!_TestCommon.test_empty_arithmeticc                 C   sJ   t dddgdddgdddgdddggdƒ}tt|ƒt|  |¡ƒ ¡ ƒ d S )NrÂ   r   é   éûÿÿÿr�   éüÿÿÿr’   )r   r   Úabsr”   rq   ©rw   rA   r.   r.   r/   Ú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;   ZaroundÚroundr”   rq   )rw   ÚdecimalrA   r.   r.   r/   Ú
test_roundŽ  s
    ÿz_TestCommon.test_roundc                 C   s\   t dddgdddgddd	ggd
ƒ}tt |d¡|  |¡ d¡ ¡ ƒ tt|  |¡j|ƒ d S )Nrñ   éýÿÿÿrÃ   rÂ   r   r�   rR   r‘   é   r’   )r   r   r;   Úpowerr”   rq   r    ÚNotImplementedErrorró   r.   r.   r/   Útest_elementwise_power”  s    ""z"_TestCommon.test_elementwise_powerc                 C   sp   t dddgdddgdddgdddggdƒ}t| |  |¡  ¡ ƒ t dd	d	gd	d	dggƒ}tt|  |¡jƒ d S )
NrÂ   r   rï   rð   r�   rñ   r’   TF)r   r   r”   rq   r    rü   Ú__neg__ró   r.   r.   r/   Útest_neg›  s    *z_TestCommon.test_negc                 C   s.   t ddggƒ}|  |¡}t|j ¡ |jƒ d S ©Nù      ð?      @y       @      À)r   r”   r   Úrealrq   ©rw   ÚDrA   r.   r.   r/   Ú	test_real£  s    
z_TestCommon.test_realc                 C   s.   t ddggƒ}|  |¡}t|j ¡ |jƒ d S r   )r   r”   r   Úimagrq   r  r.   r.   r/   Ú	test_imag¨  s    
z_TestCommon.test_imagc                 C   s0  g }|  dddgg¡ |  dgdgdgg¡ |  ddgddgddgg¡ |  dddgdddgdddg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 ddddggƒ¡ |D ]ˆ}t|ƒj\}}|  |¡}t| d |d ƒD ] }t|j|d�t||d�ƒ �qht|jdd�t|dd�ƒ t|jdd�t|dd�ƒ �q8t|  d	¡ ¡ t	 
d
¡ƒ t|  d¡ ¡ t	 d¡ƒ t|  d¡ ¡ t	 d¡ƒ t|  d¡ d¡t	 d¡ƒ d S )Nr�   r   rR   r‘   rú   ©ÚkrE   i�ÿÿÿ)é(   i?  r
  ©r   r   )é   r   ©r   râ   )r<   r   r   r‰   r”   r©   r   Údiagonalr   r;   r   Úempty)rw   Zmatsrí   ÚrowsÚcolsZ
sparse_matr	  r.   r.   r/   Útest_diagonal­  s.    "   
z_TestCommon.test_diagonalc                 C   s¨   t  dddgdddgddd	gg¡}|  |¡}td
dƒD ]}t|j|d�|j|d�ƒ q6t  dddgdddgg¡}|  |¡}tddƒD ]}t|j|d�|j|d�ƒ q„d S )Nr�   rR   r‘   rú   râ   é   é   é   é	   rÃ   )ÚoffsetrÂ   )r;   r   r”   r©   r   Útrace)rw   rA   rB   r	  r.   r.   r/   Ú
test_traceÎ  s    "

z_TestCommon.test_tracec                 C   s¢  |   dddgdddgdddgdddgg¡}dD ]4}dD ]*}t|j||d� ¡ | ¡ j||d�ƒ q6q.|   dd	ddgddddgdd
ddgg¡}| d¡}dd	ddddgdddd
ddgg}t|j|ƒ | d¡}t|j|ƒ | d¡}t|j|ƒ tt|jdƒ | dd¡}t|j|ƒ tt|jdddd� | d¡}t||kƒ |jddd�}t||k	ƒ t|j	dƒ d|_	t|j|ƒ tt|j|j
fƒ tt|jd|j
dfƒ d S )Nr�   r   r  r‘   râ   )ÚCÚF))é   r�   )r�   r  ©ÚorderrE   é   é   r
  ©rR   r  ©rR   rÂ   )rÂ   r  rÛ   rR   r  )Z
not_an_arg©r‘   rú   T©r­   )r”   r   Úreshaperq   rA   r    r¡   Ú	TypeErrorr   r‰   rW   )rw   r3   r  Úsr4   Zdesiredr.   r.   r/   Útest_reshapeÛ  s6    *ÿ(
 


z_TestCommon.test_reshapec                    sä   ‡ fdd„‰ ‡ ‡fdd„}t j d¡ dddd	d
g}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ÈqjqHq@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   rZ   r‰   r�   rŒ   r   rÖ   )r>   Úvr	  ÚnÚiÚj)Údense_setdiagr.   r/   r-  	  s    

z=_TestCommon.test_setdiag_comprehensive.<locals>.dense_setdiagc              
      s
  dt t | |¡ƒddfD ]ì}|dk r8tj tddƒ¡}ntjjdd|d�}ˆ | ||ƒ tƒ �}| t	d¡ | 
||¡ W 5 Q R X t | |¡}t |¡jdkr´t||d	ˆ|f d
� n8tt |ƒt |ƒƒ}t|d |… |d |… d	ˆ|f d
� t|j| d	ˆ|f d
� qd S )NrÂ   rR   r   r   r�   r  ©rW   ú?Changing the sparsity structure of a cs[cr]_matrix is expensivez%s %d©Úerr_msg)rŒ   r;   r   rn   Úchoicer©   rT   r   r·   r"   Úsetdiagr   r�   r   rZ   rA   )r>   rC   r	  Úrr)  r½   r’   r*  ©r-  r,   r.   r/   Úcheck_setdiag  s    &z=_TestCommon.test_setdiag_comprehensive.<locals>.check_setdiagrP   r  ©râ   r   ©r�   râ   ©râ   r�   rá   r�   ræ   râ   r.  )r;   rn   rQ   r   rœ   r   rÝ   r   r”   r2  rZ   rŒ   )rw   r6  Zshapesr2   rí   r*  Úksr	  r>   rC   Zk2r.   r5  r/   Útest_setdiag_comprehensive  s    z&_TestCommon.test_setdiag_comprehensivec              
   C   s€  |   t d¡¡}|   d¡}dddg}tƒ ��J}| td¡ tt|j|dd� | |¡ t	| 
¡ |ƒ |j|dd� t	|jt dddgdddgdddgg¡ƒ |j|d	d� t	|jt dddgdddgdddgg¡ƒ |jd
dd� t	|jd dƒ |jd
d	d� t	|jd dƒ |jdgdd� t	|jd ddddgƒ |jddgdd� t	|jd d… ddddgddddggƒ W 5 Q R X d S )Nr‘   ©rú   rú   rR   r�   r/  rú   r  r   rÃ   )r  ©r   rR   r  ©rR   r   )r”   r;   r    r   r·   r"   r    r¡   r3  r   r  rA   r   )rw   rí   Úm2r9   r½   r.   r.   r/   Útest_setdiag?  s<    


ÿ
þþ
ÿz_TestCommon.test_setdiagc                 C   sl   t dddgdddgdddggƒ}|  |¡}tdd„ t| ¡ ƒD ƒƒ}tdd„ t| ¡ ƒD ƒƒ}t||ƒ d S )Nr�   r   c                 S   s   g | ]}t |ƒ‘qS r.   ©Útuple©Ú.0Úijr.   r.   r/   Ú
<listcomp>b  s     z,_TestCommon.test_nonzero.<locals>.<listcomp>c                 S   s   g | ]}t |ƒ‘qS r.   rA  rC  r.   r.   r/   rF  c  s     )r   r”   r–   r
   Únonzeror   ©rw   rA   ÚAspZA_nzZAsp_nzr.   r.   r/   Útest_nonzero^  s
     
z_TestCommon.test_nonzeroc                 C   sp   t dddgdddgdddggƒ}|  |¡}tdd„ tt |¡ƒD ƒƒ}tdd„ tt |¡ƒD ƒƒ}t||ƒ d S )Nr�   r   c                 S   s   g | ]}t |ƒ‘qS r.   rA  rC  r.   r.   r/   rF  l  s     z2_TestCommon.test_numpy_nonzero.<locals>.<listcomp>c                 S   s   g | ]}t |ƒ‘qS r.   rA  rC  r.   r.   r/   rF  m  s     )r   r”   r–   r
   r;   rG  r   rH  r.   r.   r/   Útest_numpy_nonzerog  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getrowrq   r“   r‹   r.   r.   r/   Útest_getrowq  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 rL  )r   r•   Zgetcolrq   r“   r‹   r.   r.   r/   Útest_getcolu  s    &z_TestCommon.test_getcolc           	         sª   t j d¡ tdddgdddgdd	d
ggƒ}t j dd¡}t  g g¡}t  d¡}tjdddd�j}|||||g‰ ‡ ‡fdd„}ˆj	D ] }t
tˆ ƒƒD ]}|||ƒ q”q„d S )NrP   r   r�   rR   r‘   rñ   râ   éúÿÿÿr  r  )r
  r
  g{®Gáz„?)Zdensityc              	      s’  t ˆ | | d�}ˆj|| d�}tjdd���\ t| ¡ | ¡ ƒ t| ¡ j| ¡ jƒ tt 	|jd d�¡ƒ t|jd d�|jd d�ƒ t|jd d�j|jd d�jƒ t|jdd�|jdd�ƒ t|jdd�j|jdd�jƒ t|jdd�|jdd�ƒ t|jdd�j|jdd�jƒ t|jdd�|jdd�ƒ t|jdd�j|jdd�jƒ t|jdd�|jdd�ƒ t|jdd�j|jdd�jƒ W 5 Q R X d S )	Nræ   rÄ   )Zover©Úaxisr   r�   rÃ   rÂ   )
r'   r”   r;   rÉ   r   Úsumr   r2   r   Úisscalar)r2   r,  r“   r•   ©Úmatricesrw   r.   r/   r£   „  s(    
ÿÿz#_TestCommon.test_sum.<locals>.check)r;   rn   rQ   r'   Úrandr   r   rd   rA   r™   r©   rŒ   )	rw   Údat_1Údat_2Zdat_3Zdat_4Zdat_5r£   r2   r,  r.   rT  r/   Útest_sumy  s    
þ

z_TestCommon.test_sumc                 C   sz   t  d¡}tdddgdddgdd	d
ggƒ}|  |¡}tt|jdd� tt|jdd� tt|jdd� tt|jd|d� d S ©N©r�   r‘   r   r�   rR   r‘   rñ   râ   rO  r  r  rP  ©r   r�   ç      ø?©rQ  Úout)r;   r   r   r”   r    r¡   rR  r&  ©rw   r_  r“   r•   r.   r.   r/   Útest_sum_invalid_paramsœ  s    

þ
z#_TestCommon.test_sum_invalid_paramsc                    sP   t dddgdddgddd	ggƒ‰ |  ˆ ¡‰‡ ‡fd
d„}| jD ]}||ƒ q>d S )Nr   r�   rR   r‘   rñ   râ   rO  r  r  c                    s4   ˆ j | d�}ˆj | d�}t||ƒ t|j|jƒ d S ©Nræ   ©Úmeanr   r   r2   ©r2   Údat_meanÚ
datsp_mean©r“   r•   r.   r/   r£   ®  s    
z)_TestCommon.test_sum_dtype.<locals>.check©r   r”   r™   r§   r.   rh  r/   Útest_sum_dtype¨  s    
þ

z_TestCommon.test_sum_dtypec                 C   sª   t dddgdddgddd	g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 ©Nr   r�   rR   r‘   rñ   râ   rO  r  r  T)r_  Úkeepdims©r_  ©r‘   r�   )rQ  r_  rl  r^  )r   r”   r'   rR  r   r;   r   r&   ©rw   r“   r•   Zdat_outZ	datsp_outr.   r.   r/   Útest_sum_out¸  s    
þ


z_TestCommon.test_sum_outc                 C   sZ   t dddgdddgddd	ggƒ}|  |¡}t |¡}t |¡}t||ƒ t|j|jƒ d S ©
Nr   r�   rR   r‘   rñ   râ   rO  r  r  )r   r”   r;   rR  r   r   r2   ©rw   r“   r•   rf  rg  r.   r.   r/   Útest_numpy_sumÌ  s    
þ



z_TestCommon.test_numpy_sumc                    s$   ‡ fdd„}ˆ j D ]}||ƒ qd S )Nc                    s–  t dddgdddgddd	g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 )Nr   r�   rR   r‘   rú   râ   r  r  r  ræ   rP  T©rQ  rl  rÃ   rÂ   )	r   r”   r   rd  r   r2   r   r;   rS  ©r2   r“   r•   r‹   r.   r/   r£   Ú  sF    
þþ 
ÿ 
ÿ 
ÿ 
ÿ 
ÿz$_TestCommon.test_mean.<locals>.check)r™   r§   r.   r‹   r/   Ú	test_meanÙ  s    
z_TestCommon.test_meanc                 C   s~   t t d¡ƒ}tdddgdddgdd	d
ggƒ}|  |¡}tt|jdd� tt|jdd� tt|jdd� tt|jd|d� d S rZ  )	r&   r;   r   r   r”   r    r¡   rd  r&  r`  r.   r.   r/   Útest_mean_invalid_paramsû  s    
þ
z$_TestCommon.test_mean_invalid_paramsc                    sP   t dddgdddgddd	ggƒ‰ |  ˆ ¡‰‡ ‡fd
d„}| jD ]}||ƒ q>d S )Nr   r�   rR   r‘   rñ   râ   rO  r  r  c                    s4   ˆ j | d�}ˆj | d�}t||ƒ t|j|jƒ d S rb  rc  re  rh  r.   r/   r£     s    
z*_TestCommon.test_mean_dtype.<locals>.checkri  r§   r.   rh  r/   Útest_mean_dtype  s    
þ

z_TestCommon.test_mean_dtypec                 C   sª   t dddgdddgddd	g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 rk  )r   r”   r'   rd  r   r;   r   ro  r.   r.   r/   Útest_mean_out  s    
þ


z_TestCommon.test_mean_outc                 C   sZ   t dddgdddgddd	ggƒ}|  |¡}t |¡}t |¡}t||ƒ t|j|jƒ d S rq  )r   r”   r;   rd  r   r   r2   rr  r.   r.   r/   Útest_numpy_mean+  s    
þ



z_TestCommon.test_numpy_meanc           
   	   C   sð   t dddgdddgdddggtƒ}| j|dtd	�}tj |¡}t d
ddgdddgdddggƒ}| j|dtd	�}tj |¡}tƒ �B}| td¡ | td¡ | td¡ t|ƒ 	¡ }t|ƒ 	¡ }	W 5 Q R X t
|| tdƒƒ t
|	| tdƒƒ d S )Nr�   r   rR   r‘   rñ   râ   r  rÒ   ©r‰   r2   ç      @g        ç      ð?ç       @ú&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”   rc   Úlinalgr)   r   r·   r"   rq   r   r   )
rw   ÚMÚsMZMexpÚNZsNZNexpr½   ZsMexpZsNexpr.   r.   r/   Ú	test_expm8  s(    " ÿÿÿz_TestCommon.test_expmc                    s$   ‡ fdd„}t fD ]}||ƒ qd S )Nc              	      sš   t dddgdddgdddgg| ƒ}tƒ �B}| td¡ | td	¡ | td
¡ ˆ j|d| d�}t|ƒ}W 5 Q R X t| |¡ ¡ t	 
d¡ƒ ttt|ƒ d S )Nr�   r   rR   r‘   rñ   râ   r  r�  r€  r  rÒ   r{  )r   r   r·   r"   r”   r*   r   r   rq   r;   r    r    r&  )r2   r„  r½   r…  ZsMinvr‹   r.   r/   r£   O  s    "ÿÿÿz#_TestCommon.test_inv.<locals>.check)r‚  r§   r.   r‹   r/   Útest_invN  s    
z_TestCommon.test_invc                 C   s’   t dddgdddgdddgdddggƒ}t|  |¡ ¡ |ƒ t dddgdddgdddggƒ}t|  |¡ ¡ |ƒ t| j|d	d
� ¡ | d	¡ƒ d S ©Nr�   r   rR   r‘   rú   râ   r  ç      @Úint16ræ   )r   r   r”   rq   r`   ró   r.   r.   r/   Útest_from_array_  s    (
þz_TestCommon.test_from_arrayc                 C   s’   t dddgdddgdddgdddggƒ}t|  |¡ ¡ |ƒ t dddgdddgdddggƒ}t|  |¡ ¡ |ƒ t| j|d	d
� ¡ | d	¡ƒ d S r‰  )r'   r   r”   Útodenser`   ró   r.   r.   r/   Útest_from_matrixj  s    (
þ ÿz_TestCommon.test_from_matrixc                 C   s’   dddgdddgdddgdddgg}t |  |¡ ¡ |ƒ dddgdddgdddgg}t |  |¡ ¡ t|ƒƒ t | j|d	d
� ¡ t|ƒ d	¡ƒ d S r‰  )r   r”   rq   r   r`   ró   r.   r.   r/   Útest_from_listw  s    $þ ÿz_TestCommon.test_from_listc                 C   sü   t dddgdddgdddgdddggƒ}t|ƒ}t|  |¡ ¡ |ƒ |  |¡}t|  |¡ ¡ |ƒ t dddgdddgdddggƒ}t|ƒ}t|  |¡ ¡ |ƒ t| j|d	d
� ¡ | d	¡ƒ |  |¡}t|  |¡ ¡ |ƒ t| j|d	d
� ¡ | d	¡ƒ d S r‰  )r   r   r   r”   rq   r`   ©rw   r  ÚSr.   r.   r/   Útest_from_sparse„  s    (

þ
z_TestCommon.test_from_sparsec           
      C   sÎ  | j  ¡ }t|tjƒst‚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|j|kƒ ttj| j j| j jd�ƒ}| j j|d�}t| j|ƒ t| j|ƒ t||kƒ tdddggƒ}|| j }|| j  ¡  }t||ƒ tdddd	ggƒj}| j| }| j  ¡ | }t||ƒ | j| jtd�}| j t¡}	t| ¡ |	ƒ d S )
Nr  r  r  ræ   rm  r}  r~  r|  ç      @)r•   r�  r:   r;   r'   r_   r   r“   r   ÚflagsÚc_contiguousÚf_contiguousr   r‰   r2   Úbaser&   r   rÖ   r”   r¢   r`   )
rw   Úchkr_  r>   Údense_dot_denser£   rC   Úcheck2ÚspboolZmatboolr.   r.   r/   Útest_todenseš  sB    




z_TestCommon.test_todensec                 C   sv  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ddd	gƒ}t||ƒ}t|| j ¡ ƒ}t||ƒ tddd	d
gƒ}t||ƒ}t| j ¡ |ƒ}t||ƒ | j| jtd�}	| t¡}
t|	 ¡ |
ƒ d S )Nr  r  r  ræ   rm  r}  .r~  r|  r“  )r   r“   r•   rq   r   r   r”  r•  r–  r;   r   r‰   r2   r   r   r”   r¢   r`   )rw   r“   r˜  r_  r>   r™  r£   rC   rš  r›  Zarrboolr.   r.   r/   Útest_toarrayÃ  s:    











z_TestCommon.test_toarrayc                    s  t dddgdddgdddggƒ}|  |¡}tD ]è}| |¡}dD ]<}|j||d�‰ tˆ j|jƒ tˆ  ¡ |ƒ tˆ j|jƒ q@tˆ j|dd�ˆ kƒ ˆ j|dd�‰tˆˆ k	ƒ ‡ ‡fdd	„}ˆ jd
krÚdD ]}||ƒ qÊq.ˆ jdkrødD ]}||ƒ qèq.ˆ jdkr.dD ]}||ƒ �qq.d S )Ny       @      @r   y      @      @)TFr$  FTc                    sj   t ˆ | ƒ}t ˆ| ƒ}t||ƒ t||k	ƒ d|j }|| }||  ||< t|| || kƒ |||< d S )N)r   )rf   r   r   r�   )Ú	attributer>   rC   r+  Zb_i©ZS_castedZS_copiedr.   r/   Ú(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#   r`   r   r2   rq   Úformatr   )rw   r  r‘  r3   ZD_castedr­   r   rž  r.   rŸ  r/   Útest_astypeè  s2    
þ




z_TestCommon.test_astypec                 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	||kƒ d S )
Nr  rH   ræ   rR   r‘   rœ   r‹  rã   rå   )
r”   r   r%  r   r2   r;   Zasfptyper¬  r`   r   )rw   rA   rB   r  r.   r.   r/   Útest_asfptype  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 ©NrR   çÍÌÌÌÌL1@©rš   r›   r   rq   ru  r‹   r.   r/   r£     s    

z*_TestCommon.test_mul_scalar.<locals>.check©r˜   r§   r.   r‹   r/   Útest_mul_scalar  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±  ru  r‹   r.   r/   r£   *  s    

z+_TestCommon.test_rmul_scalar.<locals>.checkr²  r§   r.   r‹   r/   Útest_rmul_scalar)  s    
z_TestCommon.test_rmul_scalarc              	   C   s,   | j tj }ttƒ� d |  W 5 Q R X d S r1   )r›   r;   rœ   r    r&  )rw   r•   r.   r.   r/   Útest_rmul_scalar_type_error5  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   rq   rè   ©r2   r“   r•   r>   rC   rê   r‹   r.   r/   r£   ;  s    

ÿz#_TestCommon.test_add.<locals>.checkr²  r§   r.   r‹   r/   Útest_add:  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   rq   r¶  r‹   r.   r/   r£   Q  s    

z$_TestCommon.test_radd.<locals>.checkr²  r§   r.   r‹   r/   Ú	test_raddP  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 ddddgddddgddddggd¡¡}t||  ¡ || ¡  ƒ t||  ¡ | ¡ | ƒ t||d  ||d  ƒ d S )	Nr#  r   r�   rú   rÂ   r  rð   r’   )rš   r›   r   rq   r;   r   r”   r   ©r2   r“   r•   rA   r‹   r.   r/   r£   _  s    

(ÿz#_TestCommon.test_sub.<locals>.checkr¢   ©r˜   r;   r2   r§   r.   r‹   r/   Ú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|| ddddgddddgddddggƒ t|| ddddgddddgddddggƒ td|  ¡ | ƒ ˆ  tddddgddddgddddggdƒ¡}t|| || ¡  ƒ t|| | ¡ | ƒ t| ¡ | | ¡ | ƒ t|| ¡  || ¡  ƒ t|d | |d | ƒ d S )Nr   r�   rú   rÂ   r  rð   r’   )rš   r›   r   rq   r”   r'   r¹  r‹   r.   r/   r£   w  s    

,,.z$_TestCommon.test_rsub.<locals>.checkr¢   rº  r§   r.   r‹   r/   Ú	test_rsubv  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 r.   r.   ©rD  r	  )r•   r.   r/   rF  —  s     z8_TestCommon.test_add0.<locals>.check.<locals>.<listcomp>r�   r‘   c                    s   g | ]}|ˆ  ‘qS r.   r.   r½  )r“   r.   r/   rF  ˜  s     )rš   r›   r   rq   rR  r©   r   )r2   ZsumSZsumDr‹   rh  r/   r£   �  s    

z$_TestCommon.test_add0.<locals>.checkr²  r§   r.   r‹   r/   Ú	test_add0�  s    
z_TestCommon.test_add0c           	      C   s  t dddgdddggƒ}t dddgdddggƒ}|  |¡}|  |¡}t| |¡ ¡ || ƒ t| |¡ ¡ || ƒ t d	d
dgdddggƒ}t dddgdddggƒ}|  |¡}|  |¡}t| |¡ ¡ || ƒ t| |¡ ¡ || ƒ t| |¡ ¡ || ƒ t| |¡ ¡ || ƒ d S )Nrú   r   r  rR   rù   râ   r  rñ   ù      ð?       Àù              @ù      ð¿        ù      @      Àù      À      @ù      @       @ù      @      Àù       À      ð?ù              ð¿ù      À       @)r   r”   r   Úmultiplyrq   )	rw   rA   rB   rI  ÚBspr  r  ZCspÚDspr.   r.   r/   Útest_elementwise_multiplyž  s    



z%_TestCommon.test_elementwise_multiplyc                 C   sP  t dgƒ}t dggƒ}t dddgƒ}t dddggƒ}t dgd	gdggƒ}t d
ddgddd	gdddggƒ}dd	dg}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 ]j}|D ]^}z| ¡ | ¡  }W n* tk
�rŽ   tt|j|ƒ Y �qLY nX | |¡}t	| ¡ |ƒ �qL�qD|D ]–}|D ]Š}z| ¡ | }W nD t
k
�rì   Y �q¼Y n* tk
�r   tt|j|ƒ Y �q¼Y nX | |¡}t|ƒ�r:t	| ¡ |ƒ n
t	||ƒ �q¼�q´d S )Nrú   i÷ÿÿÿr�   rÂ   r   r  r  r‘   rR   r  r  rñ   r#  ©r   N)r   r;   ÚonesrÖ   r”   rq   r¡   r    rÉ  r   r&  r!   )rw   rA   rB   r  r  ÚEr  ÚGÚHÚJÚKÚLrÊ  rË  ZEspZFspZHspZHsppZJspZJsppZKsprU  Z
spmatricesr+  r,  Z
dense_multZsp_multr.   r.   r/   Ú#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ddddgddddgddddg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dddgdddggƒ}tdddgdddggƒ}|  |¡}|  |¡}t	t|| ƒ|| ƒ tdddgd	ddggƒ}tdddgdddggƒ}|  |¡}|  |¡}t j
dd�� tt|| ƒ|| ƒ W 5 Q R X 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 5 Q R X d S )Nr�   r   rú   rÂ   r  rð   r’   ç      à?rù   g      Ð?r¿  rÀ  rÁ  rÂ  rÃ  râ   rÄ  rÅ  rÆ  rÇ  rÈ  r  rR   r‘   rÃ   rÄ   )Údivide)r×  rÆ   )r;   r®   r   rq   r•   r”   r'   r   r   r   rÉ   )rw   r×   ÚdenomrA   rB   rI  rÊ  r.   r.   r/   Útest_elementwise_divideê  s8    þ.þ



 

z#_TestCommon.test_elementwise_dividec                 C   sº   t ddddgddddgddddgdddd	ggƒ}|  |¡}d
D ]6}|| }tj ||¡}t| ¡ |ƒ t|j|jƒ q>dD ]}t	t
|j|ƒ qz|  |d d…d d …f ¡}t	t
|jdƒ d S )Nr�   r   rR   r‘   rú   râ   r  r  r  )r   r�   rR   r‘   )rÂ   gš™™™™™@r  )r   r”   r;   rƒ  Zmatrix_powerr   rq   r   r2   r    Ú	ExceptionÚ__pow__)rw   rA   rB   ÚexponentZret_spZret_npr.   r.   r/   Útest_pow  s    0
z_TestCommon.test_powc              	   C   s‚   |   tdddgdddgdddgdddggƒ¡}tddddg| tddddg| ¡ ƒƒ tddddggƒ}t|| || ¡  ƒ d S )Nr‘   r   r�   rR   r|  rú   )r”   r'   r   r   rq   r   )rw   r„  r¨  r.   r.   r/   Útest_rmatvec  s    .(z_TestCommon.test_rmatvecc                 C   s®   |   dgdgdgg¡}tt|tdƒ ƒƒ t|tdƒ  ¡ dgdgdggƒ t|tdgƒ tdddgƒƒ t|tdggƒ tdgdgdggƒƒ t|t d¡ t d¡ƒ d S )Nr�   rR   r‘   ©r�   r   ©r‘   r   )r”   r   r!   r   r   rq   r;   rÎ  ró   r.   r.   r/   Útest_small_multiplication%  s    "&z%_TestCommon.test_small_multiplicationc                 C   s�   |   dgdgdgg¡}tƒ }t|| dƒ t|| dƒ t|| dƒ t|| dƒ t|| dƒ t|| dƒ ttdƒdƒ ttdƒdƒ d S )Nr�   rR   r‘   r}   ru   úA @ BúB @ A)r”   rs   r   Úeval©rw   rA   rB   r.   r.   r/   Útest_binop_custom_type/  s    z"_TestCommon.test_binop_custom_typec                 C   s’   |   dgdgdgg¡}tdƒ}t|| dƒ t|| dƒ t|| dƒ t|| dƒ t|| dƒ t|| dƒ ttdƒdƒ ttdƒdƒ d S )	Nr�   rR   r‘   rn  r}   ru   râ  rã  )r”   r†   r   rä  rå  r.   r.   r/   Ú!test_binop_custom_type_with_shape@  s    z-_TestCommon.test_binop_custom_type_with_shapec              	   C   sZ   |   tdddgdddgdddgdddggƒ¡}d}| |¡}|| }t| ¡ | ¡ ƒ d S )Nr‘   r   r�   rR   r|  rE   )r”   r   r   r   rq   )rw   r„  ÚscalarÚactualr×   r.   r.   r/   Útest_dot_scalarM  s
    .
z_TestCommon.test_dot_scalarc              	   C   sú   |   tdddgdddgdddgdddggƒ¡}|   tddgddgddggdƒ¡}tdddggƒj}tt ||¡| ¡ | ƒ tt ||¡ ¡ ||  ¡ ƒ tt | ¡ |¡||  ¡ ƒ tt || ¡ ¡||  ¡ ƒ tttj|dƒ tttjd|ƒ d S )Nr‘   r   r�   rR   r|  r’   )	r”   r   rÖ   r   ÚoperatorÚmatmulrq   r    r¡   )rw   r„  rB   r©  r.   r.   r/   Útest_matmulU  s"    ."
ÿ
ÿ
ÿ
ÿz_TestCommon.test_matmulc              	   C   s¢  |   tdddgdddgdddgdddggƒ¡}tdddggƒj}t|| | ¡ | ƒ t|tdddgƒ 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dddgƒ t
ƒƒ tt	|tdddgƒj tjƒƒ tddgƒtddddgƒtdgdggƒtdddgƒtdgdggƒg}|D ]}tt|j|ƒ �q4t|tdddgƒ t|jdddgƒƒ t|dgdgdgg tt|jdddgƒƒjƒ d S )	Nr‘   r   r�   rR   r|  )rú   )rú   r�   rú   )r”   r'   r   rÖ   r   rq   r   r‰   r   r:   r	   r;   r    r¡   rz   r   rA   r&   )rw   r„  r©  Zbad_vecsr3   r.   r.   r/   Útest_matvecj  s     .   & ÿ&z_TestCommon.test_matvecc                 C   s”  t dddgdddgdddgdddggƒ}tdddgdddgdddgdddg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|ƒ d S )Nr‘   r   r�   rR   r|  r’   r   g333333Ó?rú   râ   r  )r'   r   r”   r   rq   rç   rè   ré   rn   rQ   r   r©   rÖ   r    r¡   rz   )rw   r>   Za2rC   ÚaspÚbspÚcsprê   ZwantrÔ  ÚfracrA   r+  r,  r4  rB   r.   r.   r/   Útest_matmat_sparse‡  sT    ((





z_TestCommon.test_matmat_sparsec                 C   sª   t dddgdddgdddgdddg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||ƒƒ qjd S )
Nr‘   r   r�   rR   r|  rú   râ   r  ©rú   rR   )	r'   r”   r   r   r:   Útyper   r‰   r   )rw   r>   rï  ÚbsrC   Úresultr.   r.   r/   Útest_matmat_dense½  s    (
4z_TestCommon.test_matmat_densec                 C   s  t  dddgdddgdddggddgddgg¡}| ¡ }|  |¡}dD ]„}| |¡}t|j|ƒ t| ¡ |ƒ |  |d ¡ |¡}t|j|ƒ t| ¡ |d ƒ t|d	 ƒ|ƒ}t|j|ƒ t| ¡ |ƒ qFd
D ]:}| |¡}t||ƒ |  |d ¡ |¡}t||d ƒ qÐd S )Nr�   r   rR   r‘   rú   râ   )r£  r§  r¢  r¡  rª  r7   Úlilù              @Z_matrix)r   Údense)	rd   r   rq   r”   Úasformatr   r¬  r   rä  )rw   rA   r  r¬  r>   rC   rê   r.   r.   r/   Útest_sparse_format_conversionsÊ  s$    0



z*_TestCommon.test_sparse_format_conversionsc           	      C   sš   t ddddgddddgddddggƒ}t dddgdddggƒ}t||ƒ}|  |¡}dD ]>}t|d| ƒ}d	D ]&}d
D ]}t|||fd� ¡ |ƒ qtqlqVd S )Nr�   r   rR   rú   râ   r‘   )r£  Úto)r�   rR   r‘   r  )r�   rR   r‘   rú   r  r  ©Ú	blocksize)r   r   r”   rf   r   rq   )	rw   r3   r4   rA   rI  r¬  ÚfnÚXÚYr.   r.   r/   Ú
test_tobsrã  s    &

z_TestCommon.test_tobsrc                    s    ˆj }t g g¡}||g‰ ‡ ‡fdd„}ˆ d¡}tt |¡ ¡ t tdƒ¡ƒ t|j ¡ tdƒƒ t	t
|jdd� ˆjD ] }ttˆ ƒƒD ]}|||ƒ qŠqzd S )Nc                    s\   t ˆ | | d�}ˆ |¡}| ¡ }| ¡ }t| ¡ |ƒ t| ¡  ¡ |ƒ t|j|jƒ d S rb  )r   r”   r
   r   rq   r   r2   )r2   r,  r“   r•   r>   rC   rT  r.   r/   r£   ô  s    
z)_TestCommon.test_transpose.<locals>.checkr#  ©rú   r‘   r   )Úaxes)r“   r;   r   r”   r   r
   rq   r   rÖ   r    r¡   r™   r©   rŒ   )rw   rW  rX  r£   r  r2   r,  r.   rT  r/   Útest_transposeï  s    
ÿ
z_TestCommon.test_transposec                    s$   ‡ fdd„}ˆ j D ]}||ƒ qd S )Nc                    sD   ˆ j |  }ˆ j|  }|| }t||| ƒ || }t||| ƒ d S r1   )rš   r›   r   ©r2   r“   r•   Zsum1Zsum2r‹   r.   r/   r£     s    

z)_TestCommon.test_add_dense.<locals>.checkr²  r§   r.   r‹   r/   Útest_add_dense
  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 r1   )rš   r›   r2   r¢   r   r  r‹   r.   r/   r£     s    


z)_TestCommon.test_sub_dense.<locals>.checkr¢   rº  r§   r.   r‹   r/   Útest_sub_dense  s
    
z_TestCommon.test_sub_densec                    sÀ   t  dddgdddgdddgg¡‰ t  dddgdddgdddgg¡‰t  dddgdd	dgdd
dgg¡‰‡ ‡‡‡fdd„}ˆjD ]<}t jt jt jfD ]&}dD ]}|t  |¡t  |¡|ƒ qšq’q~d S )Nr�   r   r‘   rú   râ   rR   r  rÂ   y      @       @ù              ð?y       €      ð¿c           
   	      s"  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ƒ �&}| t	d¡ | 
|¡}| |¡}W 5 Q R X t  
t|ƒt|ƒ¡}tt|ƒ|ƒ t|j|jƒ t  t|ƒt|ƒ¡}	tt|ƒ|	ƒ t|j|	jƒ d S )Nrè  r�   Úscalar2rÂ   rû  rd   zHTaking maximum .minimum. with > 0 .< 0. number results to a dense matrix)r;   rX   Úcomplexfloatingr”   r`   rõ  r¡   r   r·   r"   ÚmaximumÚminimumrq   r   r   r2   )
r2   Údtype2ÚbtyperA   rB   r½   Zmax_sZmin_sZmax_dZmin_d©ZA_denseZA_dense_cpxZB_denserw   r.   r/   r£   9  s0    ÿ
z/_TestCommon.test_maximum_minimum.<locals>.check)rè  r  rû  rd   )r;   r   r˜   r   Úfloat_Úcomplex_r2   )rw   r£   r2   r  r  r.   r  r/   Útest_maximum_minimum3  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|ƒ |kƒ t|dd�|kƒ t|dd�j|jƒ t|dd� ¡ | ¡ ƒ tt| ¡ |ƒ ƒ d S )NTr$  Frþ  )	r•   r   r­   r¬  Ú	__class__rq   rf   r   rD   )rw   rA   Ztoselfr.   r.   r/   Ú	test_copy]  s    z_TestCommon.test_copyc                 C   sF   t t d¡ dd¡ƒ}|  |¡}t||ƒD ]\}}t| ¡ |ƒ q*d S )Né2   râ   rE   )r'   r;   r   r%  r”   Úzipr   rq   )rw   rB   rA   r3   r4   r.   r.   r/   Útest_iteratoru  s    
z_TestCommon.test_iteratorc                 C   sÞ  t g ƒ}| d¡}| d¡}| d¡}| d¡}| d¡}t ddg¡}|  |¡}|  |¡}	|  |¡}
|  |¡}|  |¡}|  |¡}t| |¡jt ||¡ƒ t|	 |¡jt ||¡ƒ t| |	¡jt ||¡ƒ t|
 |¡jt ||¡ƒ t|
 |¡jt ||¡ƒ t| |
¡jt ||¡ƒ t| |
¡jt ||¡ƒ t| |¡jt ||¡ƒ tt	|j|ƒ tt	|j|ƒ t| 
|¡jt 
||¡ƒ t|	 
|	¡jt 
||¡ƒ t| 
|¡jt 
||¡ƒ t| 
|¡jt 
||¡ƒ t|	 
|¡jt 
||¡ƒ t| 
|¡jt 
||¡ƒ t| 
d¡jt 
|d¡ƒ t|	 
d¡jt 
|d¡ƒ t| 
d¡jt 
|d¡ƒ tt	|j
|ƒ tt	|j
|ƒ t| |¡j| |¡ƒ t|	 |	¡j| |¡ƒ t| |¡j| |¡ƒ tt	|j|ƒ tt	|	j|ƒ d S )Nr  r\  r  rß  r7  râ   r  )r   r%  r;   rÎ  r”   r   r   rA   r    r¡   rÉ  ry   )rw   rx   r>   rC   rê   r’   rë   rì   rï  rð  rñ  ZdspZespZfspr.   r.   r/   Ú test_size_zero_matrix_arithmetic|  sN    










z,_TestCommon.test_size_zero_matrix_arithmeticc                 C   s¤   t g ƒ}| d¡}| d¡}| d¡}|||fD ]n}|  |¡}t| ¡ j|ƒ t| ¡ j|ƒ t| ¡ j|ƒ t| ¡ j|ƒ t| 	¡ j|ƒ t| 
¡ j|ƒ q0d S )Nr  r  r7  )r   r%  r”   r   ré   rA   rè   rç   ZtolilÚtodokÚtobsr)rw   rx   r>   rC   rê   rí   Zspmr.   r.   r/   Ú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 ]8\}}t|tjƒrŠt||j| ƒ qdt||j| kƒ qdqd S )N)Úprotocol)r•   r­   r©   ÚHIGHEST_PROTOCOLÚloadsÚdumpsr   r‰   r   rq   r¬  r8   Úitemsr:   r;   r	   r   )r•   r  ZsploadedÚkeyrË   ©Úpicklerw   r.   r/   r£   Ê  s    
z&_TestCommon.test_pickle.<locals>.check)r&  r   r·   r"   )rw   r½   r£   r.   r%  r/   Ú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k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   rf   r;   r   r%  rq   r   )rl   Zufuncr  ZX0ÚX2r‹   r.   r/   r£   Ú  s    


z5_TestCommon.test_unary_ufunc_overrides.<locals>.check)ÚsinÚtanÚarcsinÚarctanÚsinhÚtanhÚarcsinhÚarctanhÚrintr(  Úexpm1Úlog1pÚdeg2radÚrad2degÚfloorÚceilÚtruncÚsqrtrò   r.   )rw   r£   rl   r.   r‹   r/   Útest_unary_ufunc_overridesÙ  s    z&_TestCommon.test_unary_ufunc_overridesc                 C   sP  t  ddddgddddgddddgg¡}|  |¡}t| d¡d kƒ t|jddgddgddggƒ | d¡ t|jddgddggƒ | d¡ t|jddgddgddggƒ | d¡ t|jdddgdddgdddggƒ | d¡ t|jdddgdddgdddggƒ | dd¡ t|jddgddgddggƒ d	D ]}tt|j|ƒ �q6d S )
Nr�   r   r‘   rú   rR   ©r‘   rR   ©rR   rR   rÒ   )r�   )rÂ   rR   r"  ©r�   rR   r‘   ©	r;   r   r”   r   Úresizer   rA   r    r¡   )rw   r  r‘  Z	bad_shaper.   r.   r/   Útest_resizeî  sH    

þ
þ
ÿ
þ
þ
þþz_TestCommon.test_resizec                 C   sB  | j }|j}|j|dd�}t| ¡ | ¡ ƒ |tkrBtt||ƒƒ |j||jdd�}t| ¡ | ¡ ƒ |tk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 )NFr$  )r2   r­   T)r¡  r¢  r§  rª  r7   rù  )r•   r¬  r  r6   rq   ÚNON_ARRAY_BACKED_FORMATSr   rD   r2   r;   rã   r   rü  )rw   rA   Zself_formatr  Zother_formatrB   r.   r.   r/   Útest_constructor1_base  s0    
z"_TestCommon.test_constructor1_baseN)`rƒ   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  r  r(  r¥   ÚmarkÚslowr;  r@  rJ  rK  rM  rN  rY  ra  rj  rp  rs  rv  rw  rx  ry  rz  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<  rB  rD  r.   r.   r.   r/   rŽ   ò   s¼   
%'?>::!,
7	
#"




)%
(7#
6*:$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tj||ƒ | ¡ }| ¡ }| 	|j
¡}||j
9 }t||ƒ tttj||ƒ d S )Nr#  )r;   rÎ  r”   r­   r   r    r¡   rë  Úimulr   rÖ   r&  Ú	ifloordiv)rw   r>   rC   r3   r4   r.   r.   r/   Útest_inplace_dense5  s&    





z)_TestInplaceArithmetic.test_inplace_densec                    s$   ‡ fdd„}ˆ j D ]}||ƒ qd S )Nc                    sœ   ˆ j |  }ˆ j|  }tjtdƒ| dd�rV| ¡ }|d9 }| ¡ }|d9 }t|| ¡ ƒ tjtdƒ| dd�r˜| ¡ }|d9 }| ¡ }|d9 }t|| ¡ ƒ d S ©NrR   Z	same_kind)Zcastingr°  ©rš   r›   r;   Úcan_castrõ  r­   r   rq   ©r2   r“   r•   r>   rC   r‹   r.   r/   r£   Q  s    

z6_TestInplaceArithmetic.test_imul_scalar.<locals>.checkr²  r§   r.   r‹   r/   Útest_imul_scalarP  s    
z'_TestInplaceArithmetic.test_imul_scalarc                    s2   ‡ fdd„}ˆ j D ]}t |tj¡s||ƒ qd S )Nc                    sœ   ˆ j |  }ˆ j|  }tjtdƒ| dd�rV| ¡ }|d }| ¡ }|d }t|| ¡ ƒ tjtdƒ| dd�r˜| ¡ }|d }| ¡ }|d }t|| ¡ ƒ d S rM  rN  rP  r‹   r.   r/   r£   h  s    

z6_TestInplaceArithmetic.test_idiv_scalar.<locals>.check)r˜   r;   rO  Úint_r§   r.   r‹   r/   Útest_idiv_scalarg  s    
z'_TestInplaceArithmetic.test_idiv_scalarc                 C   sž   |   t d¡¡}|   t d¡¡}|   t d¡¡}||7 }|| }t|j|jƒ ||9 }|| }t|j|jƒ ||8 }|| }t|j|jƒ tttj||ƒ d S )Nrâ   )	r”   r;   r    r   rA   r    r&  rë  rK  )rw   r>   rC   Úbpr.   r.   r/   Útest_inplace_success€  s    z+_TestInplaceArithmetic.test_inplace_successN)rƒ   r„   r…   rL  rQ  rS  rU  r.   r.   r.   r/   rI  4  s   rI  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 dddgdddgdddgdddgg| d�}ˆ  |¡}|j\}}t| |ƒD ]0}t| |ƒD ]}t|||f |||f ƒ q\qLtt|d ƒ| ƒ dD ]}tttf|j	|ƒ q”d S )	Nr�   r   rú   r‘   rR   ræ   ©r�   r�   ©©r   r‘   rÙ   )rú   r   r  )rú   rÂ   r?  )
r   r”   r‰   r©   r   rõ  r    Ú
IndexErrorr&  Ú__getitem__)r2   r  rA   r„  r†  r+  r,  rE  r‹   r.   r/   r£   ˜  s    
ýý

z*_TestGetSet.test_getelement.<locals>.check©r#   r;   r2   r§   r.   r‹   r/   Útest_getelement—  s    z_TestGetSet.test_getelementc                    s(   ‡ fdd„}t D ]}|t |¡ƒ qd S )Nc              	      sH  ˆ j d| d�}tƒ �t}| td¡ |  d¡|d< |  d¡|d< |  d¡|d	< |  d
¡|d< |  d¡|d< |  d¡|d< |  d¡|d	< W 5 Q R X | tjkrÄt| ¡ ddddgddddgddddggƒ dD ]}t	t
|j|dƒ qÈdddgtdddgƒfD ]}t	t|jd|ƒ qöt | tj¡�sD| tjk�rDdD ]}t	t|jd|ƒ �q,d S )Nr#  ræ   r/  r   r  r“  ©r�   rR   r‘   r\  r~  r>  r  ©r   rÂ   r  ©rÂ   rÃ   râ   rú   rR   ))r   rú   )rÂ   rú   rà  r#  rÚ   g     À^@r�   )rú  )r”   r   r·   r"   rõ  r;   Úbool_r   rq   r    rZ  Ú__setitem__r   r¡   rX   r  r&  )r2   rA   r½   rE  r)  r‹   r.   r/   r£   ®  s:    ÿ



ýþ	ÿz*_TestGetSet.test_setelement.<locals>.checkr\  r§   r.   r‹   r/   Útest_setelement­  s    "z_TestGetSet.test_setelementc                    s*   ‡ fdd„}ˆ j D ]}|t |¡ƒ qd S )Nc              	      sF   ˆ j d| d�}tƒ �}| td¡ d|d< W 5 Q R X t|d dƒ d S )N)r‘   rE   ræ   r/  r�   )r   rñ   )r”   r   r·   r"   r   ©r2   rA   r½   r‹   r.   r/   r£   Ö  s    ÿz9_TestGetSet.test_negative_index_assignment.<locals>.checkrº  r§   r.   r‹   r/   Útest_negative_index_assignmentÓ  s    
z*_TestGetSet.test_negative_index_assignmentc                    s^   d\‰‰ ‡ ‡‡fdd„}dddt dƒdfdt dƒft dƒt dƒffD ]\}}|||d	ƒ qDd S )
N©râ   rE   c              	      sr   d| ||f }ˆ  ˆˆ f¡}tƒ �}| td¡ d|| |f< W 5 Q R X t| ¡ ||d� t|| |f d|d� d S )Nz%r ; %r ; %rr/  r�   r0  )r”   r   r·   r"   r   rR  )r+  r,  Znitemsr,   rA   r½   ©rí   r*  rw   r.   r/   Ú	_test_setä  s    ÿz3_TestGetSet.test_scalar_assign_2.<locals>._test_set©rR   r‘   ©rÂ   r  r`  rÂ   rÃ   r�   )r   ©rw   rh  r+  r,  r.   rg  r/   Útest_scalar_assign_2á  s    ÿz _TestGetSet.test_scalar_assign_2c              	   C   sj   |   d¡}t d¡}tƒ �8}| td¡ ||fD ]}d|d< d|d< d|d< q0W 5 Q R X t| ¡ |ƒ d S )Nrá   r/  r�   r\  rú   rà  r  ©r”   r;   r   r   r·   r"   r   rq   ©rw   rA   rB   r½   r  r.   r.   r/   Útest_index_scalar_assignó  s    

ÿz$_TestGetSet.test_index_scalar_assignN)rƒ   r„   r…   r]  rc  re  rl  ro  r.   r.   r.   r/   rV  –  s
   &rV  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 5 Q R X t|| |ƒ d S )Nr  r   ræ   r�   r  r  )r;   rn   rQ   r   rÈ   rV  r©   rŒ   r   r”   r   r·   r"   r(   Zsolver   )rw   r*  rA   r3   r4   r4  r+  r½   r.   r.   r/   Ú
test_solve	  s$    $
ÿz_TestSolve.test_solveN)rƒ   r„   r…   rq  r.   r.   r.   r/   rp   	  s   rp  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�   rE   ræ   r   r�   râ   )r   r”   r;   r‹  r2   rH   rã   rœ   r‹   r.   r.   r/   Ú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   rR   ©r;   r‹  rH   rã   rœ   r”   r   r2   ©rw   ÚdtrA   r.   r.   r/   Ú#test_dtype_preservation_empty_slice	  s    z0_TestSlicing.test_dtype_preservation_empty_slicec                 C   sp  t tdƒ dd¡ƒ}|  |¡}t|dd d …f |dd d …f  ¡ ƒ t|ddd…f |ddd…f  ¡ ƒ tdddgdddgdddgdddggƒ}|  |¡}t|ddd	…f |ddd	…f  ¡ ƒ tdddgdddgdddgdddggƒ}|  |¡}t|ddd	…f |ddd	…f  ¡ ƒ t|dd
d …f |dd
d …f jƒ tt	|j
td ƒdfƒ tt	|j
dtd	dƒfƒ d S )Nç      I@râ   rE   r�   rR   rú   r   r  r‘   rÃ   é   r  )r&   r   r%  r”   r   rq   r'   rA   r    rZ  r[  Úslice©rw   rB   rA   r  r  rÏ  r  r.   r.   r/   Ú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dddgdddgdddgdddggƒ}|  |¡}t|dd	…dgf |dd	…df  ¡ ƒ t|d d …dgf |d d …df  ¡ ƒ tdddgdddgdddgdddg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 )Nry  râ   rE   rR   r   r�   rú   r  r‘   rÃ   rz  r  )
r   r%  r”   r   rq   r   r    rZ  r[  r{  r|  r.   r.   r/   Útest_get_vert_slice<	  s    
(((
(((
((z _TestSlicing.test_get_vert_slicec                 C   s6  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dddgd	ddgdddgdddg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 )
Nry  râ   rE   rR   r   r‘   r�   rÂ   rú   )r   r%  r”   r   rq   r   )rw   rB   rA   rÏ  r  r.   r.   r/   Útest_get_slicesQ	  s    
...(
.z_TestSlicing.test_get_slicesc                 C   sv   t j dd¡}z"|  |¡ddd…ddd…f }W n tk
rN   t d¡‚Y nX t| ¡ |ddd…ddd…f ƒ d S )Nr  r   é   rR   r   r‘   úfeature not implemented)	r;   rn   rV  r”   r¡   r¥   r¦   r   rq   )rw   Zv0r)  r.   r.   r/   Ú 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 )Nr  râ   rE   ri  rj  r`  rÂ   rÃ   rR   r‘   rú   r  r�   rð   )	r&   r   r%  r”   r   r   rq   r{  r   )rw   rB   rA   r'  r.   r.   r/   Útest_slicing_2i	  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 )Nr  râ   rE   rR   r�   r‘   r  r  r  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 ©Nr.   r   )r‰   r   rÝ   rW   r   rq   )r>   r3   r4   ©rA   rB   r.   r/   Ú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	   Úintr‰   r   rÝ   rW   r   rq   )r>   rC   ZaiZbir3   r4   r…  r.   r/   Úcheck_2¯	  s    


z,_TestSlicing.test_slicing_3.<locals>.check_2)
Nr   r�   rR   râ   r  rÂ   rÃ   râ   iñÿÿÿ)r&   r   r%  r”   r;   Ús_r   r   Ú	enumerateÚ	itertoolsÚproductr<   r{  )rw   r‰  Úslicesr†  r,  r>   rˆ  r+  rC   Zextra_slicesrê   r.   r…  r/   Útest_slicing_3–	  sJ    
*
 
    
 
    ü
ÿ


z_TestSlicing.test_slicing_3c                 C   s>  t tdƒ dd¡ƒ}|  |¡}t|d j|d jƒ t|d j|d jƒ t|d j|d jƒ t|d j|d jƒ t|dd …df j|dd …df jƒ t|ddd …f j|ddd …f jƒ t|dd …ddf j|dd …ddf jƒ t|dddd …f j|dddd …f jƒ t|d	 |d	 ƒ t|d
 |d
 ƒ d S )Nr  râ   rE   .).)r�   .).r�   r�   )r�   r�   .)r�   .r�   )r&   r   r%  r”   r   rA   r   ©rw   rC   r>   r.   r.   r/   Útest_ellipsis_slicingØ	  s    
&&**z"_TestSlicing.test_ellipsis_slicingc                 C   sú   t tdƒ dd¡ƒ}|  |¡}t|d j|d d …d d …f jƒ t|d j|d d …d d …f jƒ t|d j|dd d …f jƒ t|dd …ddf j|dd …d d …f jƒ t|dddd …f j|d d …dd …f jƒ t|d	 j|d d …df jƒ d S )
Nr  râ   rE   )..)...)r�   ..r�   .)..r�   )r&   r   r%  r”   r   rA   r�  r.   r.   r/   Útest_multiple_ellipsis_slicingê	  s    
"",,z+_TestSlicing.test_multiple_ellipsis_slicingN)rƒ   r„   r…   rt  rx  r}  r~  r  r‚  rƒ  rŽ  r�  r‘  r.   r.   r.   r/   rr  	  s   
-Brr  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ƒ �v}| 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 5 Q R X t| ¡ |ƒ d S )	Nrá   r/  r�   r   rú   r‘   r  rÂ   rm  rn  r.   r.   r/   Útest_slice_scalar_assign÷	  s    

ÿ"z+_TestSlicingAssign.test_slice_scalar_assignc                    sh   d\‰‰ ‡ ‡‡fdd„}dt dƒfdt d ddƒfdt dd	ƒftdƒt dd	ƒffD ]\}}|||ƒ qPd S )
Nrf  c              	      st   d| |f }ˆ  ˆˆ f¡}tƒ �}| td¡ d|| |f< W 5 Q R X t ˆˆ f¡}d|| |f< t| ¡ ||d� d S )Nz
i=%r; j=%rr/  r�   r0  )r”   r   r·   r"   r;   r   r   rq   )r+  r,  r,   rA   r½   rB   rg  r.   r/   rh  
  s    ÿz9_TestSlicingAssign.test_slice_assign_2.<locals>._test_setrR   r‘   rE   rú   râ   rÃ   )r{  r   rk  r.   rg  r/   Útest_slice_assign_2
  s    $ÿz&_TestSlicingAssign.test_slice_assign_2c              	   C   s,  |   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 j|dd d …f jƒ |d	 }|d d…d d…f |d d …d d …f< tt d¡|d  |jƒ |d	 }|dd d …f j|d d…df< t|dd d …f jj|d d…df jƒ W 5 Q R X d S )Nr  r/  rR   r  r  r^  r‘   ©rR   r�   rE   rà  r   r�   rÂ   )	r”   r   r·   r"   r   rA   r;   r   rÖ   )rw   rB   r½   rA   r.   r.   r/   Útest_self_self_assignment
  s$    

ÿ&$z,_TestSlicingAssign.test_self_self_assignmentc              	   C   sÜ   |   d¡}tdddgdddgdddgdddg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 5 Q R X d S )Nr  rE   r   r  é   r�   rú   r/  râ   r  r‘   r^  r  r•  rR   )r”   r   r   r·   r"   r   rq   r   )rw   rB   r×   Úblockr½   r.   r.   r/   Útest_slice_assignment/
  s$    

ýÿz(_TestSlicingAssign.test_slice_assignmentc              	   C   s˜   |   d¡}tƒ �H}| td¡ d|d< d|d< d|d< d	|d
< tt d¡ƒ|d d…< W 5 Q R X tdddgdddgdddgd	ddggƒ}t| 	¡ |ƒ d S )Nr  r/  râ   r  r‘   r^  r  r•  rE   rà  r�   r   )
r”   r   r·   r"   r   r;   r    r   r   rq   )rw   rB   r½   r×   r.   r.   r/   Ú"test_sparsity_modifying_assignmentC
  s    
ÿ (z5_TestSlicingAssign.test_sparsity_modifying_assignmentc           
      C   s(  |   d¡}ttdtƒƒ}tj}|d d… |dd… |dd … |dd d… |ddd… |dd d… |d d	d… d
d|d d … |dd	… dddtdƒt d¡g}tƒ ��Z}| 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 5 Q R X 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dddgd
ddggdddgfddddgƒ tt|jdddgd
ddgdddggdddgd
ddggfdddgƒ tt|jtdƒd
fddgddggƒ d S )Nrf  rR   r�   r‘   r  rÂ   rú   rÃ   râ   r   rð   rù   r/  rE   éè  r  éd   )r”   r   r   r‚  r;   r‰  r   r   r·   r"   rŠ  r   rq   rÝ   r©   r   r    r¡   rb  Úlistr{  r­   )
rw   rA   rB   r‰  r�  r½   r,  r>   r+  rC   r.   r.   r/   Útest_set_sliceQ
  st    
*    
 
    ý
ÿ($
ÿ
ÿ 
ÿÿþÿz!_TestSlicingAssign.test_set_slicec                 C   sL   |   t d¡¡}|   d¡}||dd d…f< t| ¡ dddgdddggƒ d S )Nri  r^  r�   rR   r   )r”   r;   rÎ  r   rq   rå  r.   r.   r/   Útest_assign_empty_spmatrix
  s    
z-_TestSlicingAssign.test_assign_empty_spmatrixc                 C   sd   |   t d¡¡}t d¡}||d d …df< ||dd d …f< t| ¡ dddgdddgdddggƒ d S )NrÒ   r‘   r   r�   )r”   r;   rÎ  r   r   rq   ©rw   rA   r3   r.   r.   r/   Útest_assign_1d_slice…
  s
    
z'_TestSlicingAssign.test_assign_1d_sliceN)rƒ   r„   r…   r“  r”  r–  r™  rš  rž  rŸ  r¡  r.   r.   r.   r/   r’  ö	  s   .r’  c                   @   s`   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S )Ú_TestFancyIndexingz†Tests fancy indexing features.  The tests for any matrix formats
    that implement these features should derive from this class.
    c                 C   s–   t jt jt jt jfD ]|}| jd|d�}t|d d …ddgf j|ƒ t|dddgd d …f j|ƒ t|d d …g f j|ƒ t|g d d …f j|ƒ qd S )Nr=  ræ   Fru  rv  r.   r.   r/   Ú#test_dtype_preservation_empty_index’
  s    z6_TestFancyIndexing.test_dtype_preservation_empty_indexc                 C   sd   |   t ddg¡¡}ttttf|jdƒ ttttf|jdƒ tttf|jdddgddddgfƒ d S )Nrâ   Úfoo©rR   r¤  r�   rR   r‘   rú   )r”   r;   r   r    rZ  r¡   r&  r[  ró   r.   r.   r/   Útest_bad_indexœ
  s    ÿz!_TestFancyIndexing.test_bad_indexc                 C   s^  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 …dd	ddgf  ¡ |d d …dd	ddg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 )Nr  râ   rE   r�   r‘   rÂ   rR   rð   r  rú   r  rñ   rù   rÃ   ræ   )r&   r   r%  r”   r   rq   r   r{  r   r;   r‡  )rw   rB   rA   r'  r+  r.   r.   r/   Útest_fancy_indexing£
  s¨    
&&**.6*.2&&**...2.. ÿ ÿ ÿ6þ"þ"þ&þ"& "ÿ& "ÿ."þ& "ÿ& "ÿ."þ**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 )NrP   r  r  rú   rÖ  r�   r.  )r;   rn   rQ   r&   rV  rÉ  rT   r”   r!   rq   r   r    rZ  r[  )rw   ZNUM_SAMPLESr„  r†  r  ÚIrÒ  r‘  ÚSIJÚI_badÚJ_badr.   r.   r/   Útest_fancy_indexing_randomized  s"    
z1_TestFancyIndexing.test_fancy_indexing_randomizedc           	      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  dddddg¡}t  ddddddddddg
¡}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  g ¡ƒ tt|j|ƒ tt|j|ƒ tttf|j|dfƒ d S )NrP   r  râ   rE   r   rR   r.  ræ   rf  r  TF)r  rz  r_  )rÂ   r   r�   )r;   rn   rQ   r&   r   r%  r”   r   rT   r¢   r   rq   r   r    rZ  r[  r¡   )	rw   rB   rA   r¨  rÒ  r  ZZ1ZZ2ZZ3r.   r.   r/   Útest_fancy_indexing_boolean'  s8    
&    ÿ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 )NrP   r  râ   rE   r   rR   rf  r.  ræ   r  )râ   rz  )r  rE   r�   )r;   rn   rQ   r&   r   r%  r”   r   rT   r¢   r   r   rq   r    rZ  r[  r¡   )	rw   rB   rA   r  ZXspÚZr  ZZspZYspr.   r.   r/   Ú"test_fancy_indexing_sparse_booleanG  s    
z5_TestFancyIndexing.test_fancy_indexing_sparse_booleanc                 C   sh   |   tdddgdddgdddggƒ¡}t | d¡¡dk}t|d d …|f jddgddgddggƒ d S rŸ   )r”   r   r;   ÚravelrR  r   rA   )rw   rx   Zdesired_colsr.   r.   r/   Ú#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  rR   )r”   r   r    r¡   rb  r;   rv   r.   r.   r/   Útest_fancy_indexing_seq_assignc  s    z1_TestFancyIndexing.test_fancy_indexing_seq_assignc              	   C   s~   |   tddgddggƒ¡}tƒ �6}| td¡ |ddgddgf |ddgddgf< W 5 Q R X tt|ƒtddgddggƒƒ d S )Nr�   r   rR   r‘   zChanging the sparsity structure)r”   r   r   r·   r"   r   rq   )rw   rx   r½   r.   r.   r/   Útest_fancy_indexing_2d_assigng  s    ÿ.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 dddddg¡}tt|| ƒ|| ƒ tjg td	�}tt|| ƒ|| ƒ tt|||f ƒ|||f ƒ tjdddd
dgtd	�d d …d f }tt|||f ƒ|||f ƒ tt|||f ƒ|||f ƒ d S )Nr  râ   rE   r   r�   rR   ©r‘   r  Fræ   r‘   rú   ©	r&   r   r%  r”   r;   r   r   rq   r‡  ©rw   rB   rA   rÓ  rÒ  r.   r.   r/   Útest_fancy_indexing_emptyp  s    
$z,_TestFancyIndexing.test_fancy_indexing_emptyN)rƒ   r„   r…   rE  r£  r¦  r§  r¬  r­  r¯  r±  r²  r³  r·  r.   r.   r.   r/   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)Úhasattrr¸  r¤  r­   Úsort_indicesr   )r  r¤  r.   r.   r/   Ú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¤  rR   r¥  )r”   r;   r   r    rZ  r¡   r&  rb  ró   r.   r.   r/   Útest_bad_index_assign‘  s    z._TestFancyIndexingAssign.test_bad_index_assignc                    s’   d\‰‰ ‡ ‡‡fdd„}dt d ddƒft d¡t dd	ƒft d
dƒt dd	ƒffD ]\}}|||ƒ qNt d¡t d¡fdfD ]\}}|||ƒ qzd S )Nrf  c              
      s|   ˆ  ˆˆ f¡}tt ˆˆ f¡ƒ}tƒ �>}| td¡ d|| |f< t|ƒ� d|| |f< W 5 Q R X W 5 Q R X t| 	¡ |ƒ d S ©Nr/  r�   )
r”   r&   r;   r   r   r·   r"   r»  r   rq   )r+  r,  rA   rB   r½   rg  r.   r/   Ú_test_set_slice™  s    ÿ
 zI_TestFancyIndexingAssign.test_fancy_indexing_set.<locals>._test_set_slice)rR   r‘   rú   rE   rú   r‘   râ   rÃ   rR   ))r   r‘   rú   )r�   rR   rú   )r{  r;   r   ©rw   r¿  r+  r,  r.   rg  r/   Ú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 5 Q R X d S )
Nrá   ræ   r/  r�   r   rR   r}  rú   r>  )r”   r   r·   r"   rõ  r   rR  rd  r‹   r.   r/   r£   ¬  s    ÿzD_TestFancyIndexingAssign.test_fancy_assignment_dtypes.<locals>.checkr\  r§   r.   r‹   r/   Útest_fancy_assignment_dtypes«  s    z5_TestFancyIndexingAssign.test_fancy_assignment_dtypesc              
   C   s0  |   d¡}|   tddƒ¡}dddg}d}t|ƒ}tƒ ��î}| td¡ t|ƒ�H ||df j|d|f< ||df j|d|f< ||df j|d|f< W 5 Q R X t| 	¡ |j 	¡ ƒ |   d	¡}t|ƒ� d
dg|ddd…f< W 5 Q R X t| 	¡ dddgdd
dggƒ |   d¡}t|ƒ� d
gdgg|dd…df< W 5 Q R X t| 	¡ ddgdd
gddggƒ |   d¡}t
t d¡ƒ}t|ƒ�4 ||fD ]$}dddg|dddgdddgf< �q€W 5 Q R X t| 	¡ |ƒ |   d¡}t|ƒ� dddg|d< W 5 Q R X t| ¡ dƒ t
t d¡ƒ}dddg|d< t| 	¡ |ƒ W 5 Q R X d S )Nr  r‘   rú   r   r�   rR   ©r   r�   rR   r/  ri  rE   r  r=  rÒ   râ   r  )r?  rÃ  )r”   r    r   r   r·   r"   r»  rÖ   r   rq   r&   r;   r   r   rR  )rw   rA   rB   Zi0Úi1Úi2r½   r  r.   r.   r/   Útest_sequence_assignment»  sF    


ÿ
 



" 

,

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 dddddg¡}d	||< tt|ƒ|ƒ tjg td
�}d	||< tt|ƒ|ƒ d	|||f< tt|ƒ|ƒ tjdddddgtd
�d d …d f }d	|||f< tt|ƒ|ƒ d	|||f< tt|ƒ|ƒ d S )Nr  râ   rE   r   r�   rR   r´  Fé*   ræ   r‘   rú   rµ  r¶  r.   r.   r/   Útest_fancy_assign_emptyé  s$    
$z0_TestFancyIndexingAssign.test_fancy_assign_emptyN)rƒ   r„   r…   r½  rÁ  rÂ  rÆ  rÈ  r.   r.   r.   r/   r¼  �  s
   .r¼  c                   @   s   e Zd Zdd„ ZdS )Ú_TestFancyMultidimc           	      C   sœ  t  dgdgdgg¡t  dddg¡ft  dgdgdgg¡t  dddgg¡ft  dddgg¡t  dgdgdgg¡ft  dddg¡t  dgdgdgg¡ft  dddgdddgg¡t  dddgdddg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�   rR   r‘   rú   râ   r  rP   r  )r;   r   rn   rQ   r&   rV  r”   r!   rq   r   r    rZ  r[  r{  )	rw   Zsetsr¨  rÒ  r  r‘  r©  rª  r«  r.   r.   r/   Útest_fancy_indexing_ndarray  s,    $&&$ÿû

z._TestFancyMultidim.test_fancy_indexing_ndarrayN)rƒ   r„   r…   rÊ  r.   r.   r.   r/   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  dddgdddgg¡}t  dddgdddgg¡}t|ƒ� ||||f< W 5 Q R X ||||f< t| 	¡ |ƒ |d }|d }dddg}t|ƒ� ||||f< W 5 Q R X ||||f< t| 	¡ |ƒ t|ƒ� d|||f< W 5 Q R X d|||f< t| 	¡ |ƒ t
t|j||f|ƒ t
t|j||f|ƒ d S )	NrP   râ   r  rR   r‘   r�   rú   r  )r;   rn   rQ   r&   rV  r”   r   r»  r   rq   r    rZ  rb  ©	rw   r  r‘  r  r¨  rÒ  rª  r«  r  r.   r.   r/   Ú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dddgdddggdddgdddggffD ]\}}|||ƒ qzd S )	Nrf  c              
      s|   ˆ  ˆˆ f¡}t|ƒ�0 tƒ �}| td¡ d|| |f< W 5 Q R X W 5 Q R X tt ˆˆ f¡ƒ}d|| |f< t| 	¡ |ƒ d S r¾  )
r”   r»  r   r·   r"   r&   r;   r   r   rq   )r+  r,  rA   r½   rB   rg  r.   r/   r¿  I  s    ÿ zR_TestFancyMultidimAssign.test_fancy_indexing_multidim_set.<locals>._test_set_slicer�   rR   r‘   r   rú   )r;   r   rÀ  r.   rg  r/   Ú test_fancy_indexing_multidim_setF  s    
&þz9_TestFancyMultidimAssign.test_fancy_indexing_multidim_setc           	      C   s"  t j d¡ tt j dd¡ƒ}|  |¡}t j dd¡}dddgdddgg}dddgdddgg}||||f< ||||f< t| ¡ |ƒ d	d
„ |D ƒ}dd
„ |D ƒ}dddg}||||f< ||||f< t| ¡ |ƒ d|||f< d|||f< t| ¡ |ƒ tt	|j
||f|ƒ tt	|j
||f|ƒ d S )NrP   râ   r  rR   r‘   r�   rú   r  c                 S   s   g | ]}d d„ |D ƒ‘qS )c                 S   s   g | ]}|d  ‘qS ©râ   r.   ©rD  Úiir.   r.   r/   rF  f  s     úN_TestFancyMultidimAssign.test_fancy_assign_list.<locals>.<listcomp>.<listcomp>r.   )rD  r+  r.   r.   r/   rF  f  s     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  r.   ©rD  Zjjr.   r.   r/   rF  g  s     rÒ  r.   )rD  r,  r.   r.   r/   rF  g  s     )r;   rn   rQ   r&   rV  r”   r   rq   r    rZ  rb  rÌ  r.   r.   r/   Útest_fancy_assign_listX  s(    

z/_TestFancyMultidimAssign.test_fancy_assign_listc           	      C   sÀ   t j d¡ tt j dd¡ƒ}|  |¡}ddddddg}ddddddg}d	d
„ |D ƒ}dd
„ |D ƒ}dddddddg}t  d¡d d …d f }tt|j	|t
d ƒf|ƒ tt|j	t
d ƒ|f|ƒ d S )NrP   râ   r  r�   rR   r‘   rú   r  c                 S   s   g | ]}|d  ‘qS rÏ  r.   rÐ  r.   r.   r/   rF  ~  s     zD_TestFancyMultidimAssign.test_fancy_assign_slice.<locals>.<listcomp>c                 S   s   g | ]}|d  ‘qS rÓ  r.   rÔ  r.   r.   r/   rF    s     )r;   rn   rQ   r&   rV  r”   r   r    rZ  rb  r{  )	rw   r  r‘  r¨  rÒ  rª  r«  ZC1ZC2r.   r.   r/   Útest_fancy_assign_sliceu  s    
z0_TestFancyMultidimAssign.test_fancy_assign_sliceN)rƒ   r„   r…   rÍ  rÎ  rÕ  rÖ  r.   r.   r.   r/   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   sJ  t ddddddgddddddgdddd	ddgddd
dddggdƒ| _t ddddddgddddddgddddddgddddddggdƒ| _t ddddddgddddddgddddddgddddddg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 )Ng      ø¿g      @r   g      @g      	@g     €Àg      ä?g      À¿r}  g     À @rœ   g      Ø?rð   g      @g     €,@g      Àg      @g     €2@g      °¿rå   g      ô?r  g      Àg     €@g      @é   rH   )
r   Ú_TestArithmetic__AÚ_TestArithmetic__Br  r   r`   r  r”   Ú_TestArithmetic__AspÚ_TestArithmetic__Bspr‹   r.   r.   r/   Z__arith_init‹  s4    ýýýýýý  z_TestArithmetic.__arith_initc           	      C   s`  |   ¡  t| j| j  ¡ | j| j ƒ tD �].}tj	dd�� | j 
|¡}W 5 Q R X |  |¡}tD ]ö}t |tj¡sœtj	dd�� | jj 
|¡}W 5 Q R X n| j 
|¡}|  |¡}|| }|| }t|j|jƒ t| ¡ |ƒ t|| |ƒ t|| |ƒ t d¡||fk�rqb|| }|| }t|j|jƒ t| ¡ |ƒ t|| |ƒ t|| |ƒ qbq*d S )NrÄ   rÅ   r¢   )Ú_TestArithmetic__arith_initr   rÛ  rÜ  rq   rÙ  rÚ  r#   r;   rÉ   r`   r”   rX   r  r  r   r2   ©	rw   r3   rA   rI  r4   rB   rÊ  ÚD1ZS1r.   r.   r/   Útest_add_sub¢  s:     
ÿ


z_TestArithmetic.test_add_subc           	      C   sü   |   ¡  t| j| jj  ¡ | j| jj ƒ tD ]È}t	j
dd�� | j |¡}W 5 Q R X |  |¡}tD ]�}t	 |t	j¡r„| j |¡}n&t	j
dd�� | jj |¡}W 5 Q R X |  |¡}||j }||j }t| ¡ |dt|ƒ ¡  d� t|j|jƒ qdq.d S )NrÄ   rÅ   g›+¡†›„=)Zatol)rÝ  r   rÛ  rÜ  rÖ   rq   rÙ  rÚ  r#   r;   rÉ   r`   r”   rX   r  r  r   rò   rG   r   r2   rÞ  r.   r.   r/   Útest_muÍ  s(    ÿ




ÿz_TestArithmetic.test_muN)rƒ   r„   r…   rE  rÝ  rà  rá  r.   r.   r.   r/   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 )Ú_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�   rE   r‘   rR   r  ©r   rE   ©rE   r   )r;   rã   rœ   rH   rS   rå   r   r%  r”   r   rZ   rG   r2   r   r‚  r    r¡   )rw   r2   r  r  r®  r.   r.   r/   Útest_minmaxé  sB    



 
z_TestMinMax.test_minmaxc                 C   sr  t  d¡ dd¡}d|dd d …f< d|d d …df< d|d< d|d	< |  |¡}d
dddg}|D ]@}t|j|d�j|j|dd�ƒ t|j|d�j|j|dd�ƒ q\t  dd¡ dd¡}|  |¡}|D ]@}t|j|d�j|j|dd�ƒ t|j|d�j|j|dd�ƒ qÀt  d¡}|  |¡}|D ]B}t|j|d�j|j|dd�ƒ t|j|d�j|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�jƒ tt  d¡|j|d�jƒ �q²t  d¡}|  |¡}|D ]&}t	t
|j|d� t	t
|j|d� �q|D ]:}tt  d¡|j|d�jƒ tt  d¡|j|d�jƒ �q2d S )Nr  râ   rE   r   r�   r  rÒ   rÂ   r>  rÃ   rP  Trt  é3   )rE   râ   rä  r\  rå  rß  )r;   r   r%  r”   r   rG   rA   rZ   r   r    r¡   )rw   r  r  r  rQ  Z	axes_evenZaxes_oddr.   r.   r/   Útest_minmax_axis  sp    
 ÿ ÿ
 ÿ ÿ

 ÿ ÿ



z_TestMinMax.test_minmax_axisc                 C   s|   t dddgdddgddd	g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 )Nr   r�   rR   r‘   rñ   râ   rO  r  r  )rZ   rG   rP  r\  r]  r^  )r   r”   rf   r    r¡   r&  )rw   r“   r•   Úfnamerg   r.   r.   r/   Útest_minmax_invalid_paramsY  s    
þ

z&_TestMinMax.test_minmax_invalid_paramsc                 C   sr   ddl m} tdddgdddgdd	d
ggƒ}|  |¡}t||jƒrntt |¡t |¡ƒ tt 	|¡t 	|¡ƒ d S )Nr   )Ú_datar�   rR   r‘   rñ   râ   rO  r  r  )
Úscipy.sparserë  r   r”   r:   Z_minmax_mixinr   r;   rZ   rG   )rw   rë  r“   r•   r.   r.   r/   Útest_numpy_minmaxf  s    
þ
z_TestMinMax.test_numpy_minmaxc              
   C   s–  t  ddddgddddgddddgd	ddd
gd	dddgg¡}| ¡ }||fD ]Ä}t|ƒ}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	¡ƒƒ qLt  	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â   rR   r‘   r   rÃ   rù   rñ   r�   rú   rP  r  r7  rV   )Nr�   )r;   r   r
   r   r   ZargmaxZargminr&   r%  r  r”   r    r¡   )rw   rß  ZD2r  rx   rQ  r.   r.   r/   Útest_argmaxx  sD    




ûÿÿÿÿ



z_TestMinMax.test_argmaxN)rƒ   r„   r…   ræ  rè  rê  rí  rî  r.   r.   r.   r/   râ  è  s
   /Arâ  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   rR   r‘   râ   rO  r  rP  r�   rÃ   rÂ   )r   r`   r¢   r”   r;   rH   rS   r   rR  Úgetnnzr0   r2   r    r¡   )rw   r“   Zbool_datr•   Zaccepted_return_dtypesr.   r.   r/   Útest_getnnz_axis¡  s$    þ

z _TestGetNnzAxis.test_getnnz_axisN)rƒ   r„   r…   rñ  r.   r.   r.   r/   rï     s   rï  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ˆ | |ŽW S  t ttttfk
r4   t d¡‚Y nX d S )Nr�  )rü   r&  r¡   rZ  ÚAttributeErrorr¥   r¦   )r>   rh   ©Úfcr.   r/   ÚwrapperÅ  s     ÿz6_possibly_unimplemented.<locals>.wrap.<locals>.wrapper)Ú	functoolsÚwraps)rô  rõ  r.   ró  r/   ÚwrapÄ  s    z%_possibly_unimplemented.<locals>.wrapÚtest_ÚNotImplementedN)Údictr8   r#  Ú
startswithrõ  rƒ   Ú	__bases__)r�   Úrequirerø  Znew_dictrl   rg   r.   r.   r/   Ú_possibly_unimplemented¼  s    


þrÿ  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 ]L}|jD ]@}| d¡s~qn|
 |¡}|dk	r¦td|j||jf ƒ‚||
|< 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.
    rù  Nz-Test class %s overloads test %s defined in %sZTestBase)rŽ   rÿ  rV  rp  rI  r×  rr  r’  r¢  r¼  rÉ  rË  râ  rï  r8   rü  Úgetr¡   rƒ   rõ  )ÚgetsetÚslicingÚslicing_assignÚfancy_indexingÚfancy_assignZfancy_multidim_indexingZfancy_multidim_assignÚminmaxÚnnz_axisÚbasesÚnamesr�   rl   Zold_clsr.   r.   r/   Ú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   s4   t ƒ �$}| td¡ t||ŽW  5 Q R £ S Q R X d S )Nz<Changing the sparsity structure of a csr_matrix is expensive)r   r·   r"   r   ©r�   Úargsr5   r½   r.   r.   r/   r”     s
    ÿzTestCSR.spmatrixc                 C   s�   t dddgdddgdddggdƒ}t|ƒ}t|jdddgƒ t|jdddgƒ t|jddddgƒ t| ¡ dƒ t| 	¡ dƒ t| 
¡ |ƒ d S )Nr   rú   r‘   rR   r’   r�   r¡  )r   r   r   r¦  r   r¤  r¥  r   rð  Ú	getformatrq   ©rw   rC   rð  r.   r.   r/   Útest_constructor1  s    
þþzTestCSR.test_constructor1c              	   C   sb   t ddƒ}d|d< t|ƒ}t|jdgƒ t|jdgƒ t|jdddddddgƒ t| ¡ |ƒ d S )N©r  r  r’   râ   r#  rú   r   r�   )r   r   r   r¦  r   r¤  r¥  rq   r  r.   r.   r/   Útest_constructor2  s    
zTestCSR.test_constructor2c                 C   sn   t ddgddgddggdƒ}t|ƒ}t|jdddgƒ t|jdddgƒ t|jddddgƒ t| ¡ |ƒ d S r�   )r   r   r   r¦  r   r¤  r¥  rq   r  r.   r.   r/   Útest_constructor3"  s    þþzTestCSR.test_constructor3c                 C   sÜ   t dddddddddddgƒ}t dddddddddddgƒ}t ddddd	d
dddddgƒ}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|| ¡ ƒ d S ©NrR   r‘   r�   r   ç      @ç      $@r|  ç      "@r}  r“  ç      &@r~  ç       @ç      @rŠ  r  r  rú   l           ræ   )	r   r   r   r   r   r%  rq   r;   Úuint64)rw   r¨  r©  r¦  rE  r¡  rû  r.   r.   r/   Útest_constructor4,  s        ÿ"zTestCSR.test_constructor4c                 C   sN   t ddddgƒ}t ddddgƒ}t ddddgƒ}t|||fƒ}t|jdƒ d S ©Nr   r�   r‘   râ   rR   rú   r´  )r   r   r   r‰   ©rw   r¥  r¤  r¦  r¡  r.   r.   r/   Útest_constructor5<  s
    zTestCSR.test_constructor5c                 C   sV   ddddg}ddddg}ddddg}t |||fƒ}t|jdƒ tt |jtj¡ƒ d S r  )r   r   r‰   r   r;   rX   r2   Úsignedintegerr  r.   r.   r/   Útest_constructor6D  s    zTestCSR.test_constructor6c                 C   s®   t dƒd }tddddddgtjd�}tddddgtjd�}t|||fdd�}tdddgdd	dgd
ddggdƒ}t|jjt tj¡ƒ t|j	jt tj¡ƒ t
| ¡ |ƒ d S )Nr  r�   rR   r   ræ   rú   rÒ   ©r‰   r‘   râ   r’   )r   r   r;   rS   r   r   r¥  r2   rH   r¤  r   rq   )rw   r¦  r©  Úptrr>   rC   r.   r.   r/   Útest_constructor_smallcolM  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ddddg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   rR   ræ   rú   r‘   )r   r;   rF   rH   rG   r   rS   r   r   r¥  r2   r¤  r   r‰   )rw   r¦  Zlarger©  r"  r>   r.   r.   r/   Útest_constructor_largecol]  s    "z!TestCSR.test_constructor_largecolc                 C   sv   t dƒ}tdddddgƒ}tdddgƒ}t|||fdd	�}| ¡ }| ¡  t|jdddddgƒ t| ¡ | ¡ ƒ d S )
Nrâ   r  rR   r�   rú   r   r‘   ©rR   rE   r!  )r   r   r   r­   rº  r   r¤  rq   ©rw   r¦  r¤  r¥  rï  rð  r.   r.   r/   Útest_sort_indicesj  s    zTestCSR.test_sort_indicesc              	   C   s”   t ddddddddgƒ}t dddddddd	gƒ}t ddd	gƒ}t|||fd
d�}| ¡ }| ¡  t|jdƒ t|jdddgƒ t| ¡ | ¡ ƒ d S ©Nr�   r   rR   r‘   rú   râ   r  r  r  r%  r!  )r   r   r­   Úeliminate_zerosr   rÓ   r¦  rq   r&  r.   r.   r/   Útest_eliminate_zerost  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â   r)  ©r+  r,  r-  r.  r/  r0  r1  r2  r3  r(  r4  r5  r6  r7  r8  r9  r:  r;  T)r   r;   r   r%  r   r¹  rf   r‰   r   r¤  r¥  rq   ©rw   r  rì   r*  r.   r.   r/   Útest_ufuncs  s    zTestCSR.test_ufuncsc                 C   s˜   t dƒ}tdddddgƒ}tdddgƒ}t|||fdd	�}t d
ƒ}tddddddgƒ}tddd
gƒ}t|||fdd	�}t||  ¡ | ¡ | ¡  ƒ d S )Nrâ   r  rR   r�   rú   r   r‘   r%  r!  r  r  )r   r   r   r   rq   r&  r.   r.   r/   Útest_unsorted_arithmetic‹  s    z TestCSR.test_unsorted_arithmeticc                 C   s€   t  dgdgdgg¡}t  dddg¡}t j d¡ tt j dd¡ƒ}|  |¡}|||f }t|ƒrj| ¡ }t	||||f ƒ d S ©Nr�   rR   r‘   rú   rP   râ   r  ©
r;   r   rn   rQ   r&   rV  r”   r!   rq   r   ©rw   r¨  rÒ  r  r‘  r©  r.   r.   r/   Útest_fancy_indexing_broadcast–  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ksht‚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�   rR   TFN)r;   r   r   r­   r   r¸  rõ  r¢   r_   rº  r   r¤  )rw   Zsorted_indsZunsorted_indsr¦  r¥  r„  r.   r.   r/   Útest_has_sorted_indices¤  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ksŽt‚| 	¡  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_duplicatesrR   r   r�   TFN)r   r;   r   r   Zhas_canonical_formatr­   rõ  r¢   r_   Úsum_duplicatesrŒ   r¤  )rw   r„  r¤  r¦  r¥  r.   r.   r/   Ú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 )NrR   ræ   r   ©r�   éÿÿÿr!  ©r�   ì        r>  )r;   r   rH   r   r   r¥  r2   rS   ©rw   r¥  r¤  Úvalsr>   rC   rE  rê   r’   rë   rì   r3   r.   r.   r/   Útest_scalar_idx_dtypeÝ  s$    
zTestCSR.test_scalar_idx_dtypec                 C   sF   t dddgƒ}t dddgƒ}|| jdks.t‚| |¡jdksBt‚d S )Nr   r�   rR   )r   rÓ   r_   rÉ  ©rw   r>   rC   r.   r.   r/   Útest_binop_explicit_zerosõ  s    z!TestCSR.test_binop_explicit_zerosN)rƒ   r„   r…   rF  r”   r;   ra  rR  r  r  r˜   r  r  r  r  r  r   r#  r$  r'  r*  r-  r.  r2  r3  r5  r<  r>  r.   r.   r.   r/   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   s4   t ƒ �$}| td¡ t||ŽW  5 Q R £ S Q R X d S )Nz<Changing the sparsity structure of a csc_matrix is expensive)r   r·   r"   r   r  r.   r.   r/   r”     s
    ÿzTestCSC.spmatrixc                 C   sœ   t ddddgddddgddddggdƒ}t|ƒ}t|jddddgƒ t|jddddgƒ t|jdddddgƒ t| ¡ dƒ t|j	|j	ƒ t| 
¡ dƒ d S )Nr�   r   rR   r‘   r’   rú   r¢  )r   r   r   r¦  r   r¤  r¥  r   rð  r‰   r  r  r.   r.   r/   r  
  s    (zTestCSC.test_constructor1c              	   C   sT   t ddƒ}d|d< t|ƒ}t|jdgƒ t|jdgƒ t|jdddddddgƒ d S )Nr  r’   râ   )rR   rú   rR   r   r�   )r   r   r   r¦  r   r¤  r¥  r  r.   r.   r/   r    s    
zTestCSC.test_constructor2c                 C   sZ   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dddgƒ d S )Nr�   r   rR   r’   )r   r   r   r¦  r   r¤  r¥  r  r.   r.   r/   r    s
    zTestCSC.test_constructor3c                 C   s’   t dddddddddddgƒ}t dddddddddddgƒ}t ddddd	d
dddddgƒ}t||fƒ}t||fdƒ}ttdƒ dd¡| ¡ ƒ d S )NrR   r‘   r�   r   r  r  r|  r  r}  r“  r  r~  r  r  rŠ  r  r  rú   )r   r   r   r   r   r%  rq   )rw   r¨  r©  r¦  rE  r¢  r.   r.   r/   r  #  s        ÿzTestCSC.test_constructor4c                 C   sN   t ddddgƒ}t ddddgƒ}t ddddgƒ}t|||fƒ}t|jdƒ d S ©Nr   r�   r‘   râ   rR   rú   )r  r‘   )r   r   r   r‰   ©rw   r¥  r¤  r¦  r¢  r.   r.   r/   r  .  s
    zTestCSC.test_constructor5c                 C   sV   ddddg}ddddg}ddddg}t |||fƒ}t|jdƒ tt |jtj¡ƒ d S r?  )r   r   r‰   r   r;   rX   r2   r  r@  r.   r.   r/   r   6  s    zTestCSC.test_constructor6c              	   C   s”   t ddddddddgƒ}t dddddddd	gƒ}t ddd	gƒ}t|||fd
d�}| ¡ }| ¡  t|jdƒ t|jdddgƒ t| ¡ | ¡ ƒ d S )Nr�   r   rR   r‘   rú   râ   r  r  r  ©rE   rR   r!  )r   r   r­   r)  r   rÓ   r¦  rq   r&  r.   r.   r/   r*  ?  s    zTestCSC.test_eliminate_zerosc                 C   sr   t dƒ}tdddddgƒ}dddg}t|||fdd	�}| ¡ }| ¡  t|jdddddgƒ t| ¡ | ¡ ƒ d S )
Nrâ   r  rR   r�   rú   r   r‘   rA  r!  )r   r   r   r­   rº  r   r¤  rq   )rw   r¦  r¨  r"  rï  rð  r.   r.   r/   r'  J  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   r%  r   r¹  r   rf   r‰   r   r¤  r¥  rq   r,  r.   r.   r/   r-  T  s    zTestCSC.test_ufuncsc                 C   s˜   t dƒ}tdddddgƒ}tdddgƒ}t|||fdd	�}t d
ƒ}tddddddgƒ}tddd
gƒ}t|||fdd	�}t||  ¡ | ¡ | ¡  ƒ d S )Nrâ   r  rR   r�   rú   r   r‘   rA  r!  r  r  )r   r   r   r   rq   r&  r.   r.   r/   r.  `  s    z TestCSC.test_unsorted_arithmeticc                 C   s€   t  dgdgdgg¡}t  dddg¡}t j d¡ tt j dd¡ƒ}|  |¡}|||f }t|ƒrj| ¡ }t	||||f ƒ d S r/  r0  r1  r.   r.   r/   r2  k  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 )
NrR   ræ   r   )r7  r�   r!  )r9  r�   r>  r6  r8  )	r;   r   rH   r   r   r   r¥  r2   rS   r:  r.   r.   r/   r<  y  s$    
zTestCSC.test_scalar_idx_dtypeN)rƒ   r„   r…   rF  r”   r;   ra  rR  r  r  r˜   r  r  r  r  r  r   r*  r'  r-  r.  r2  r<  r.   r.   r.   r/   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   s>   t dƒ}d|d< d|d< ||j }||j }t|j|jƒ d S )N©rE   rE   rE   rY  r  ©râ   r  )r   rÖ   rÑ  r   rA   )rw   rA   r  rÏ  r.   r.   r/   Ú	test_mult™  s    

zTestDOK.test_multc                 C   sl   |   d¡}d|d< d|d< |d }tddgddgddggƒ}t| ¡ |ƒ |d	 }|d	 }t| ¡ |ƒ d S )
Nr=  éöÿÿÿr\  r  r>  rE   r   r   r  )r”   r   r   rq   rå  r.   r.   r/   Útest_add_nonzero¡  s    
zTestDOK.test_add_nonzeroc                 C   sR   |   d¡}d|d< d|d< t|d  ¡ | ¡ d ƒ t|d  ¡ | ¡ d ƒ d S )Nr=  rF  r\  r  r>  r  r  )r”   r   rq   ró   r.   r.   r/   Ú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•  rR   r=  r‘   rn  rú   r8  râ   r  r  rô  )	r   r   rq   r   rç   r
   r   r‰   rè   )rw   rí   r*  r>   r¢  rC   r¡  r.   r.   r/   Útest_convertµ  s"    ""
"zTestDOK.test_convertc                 C   sÄ   t ttƒ tddddgddddgddddggdƒ}t|ƒ}t|j|jƒ t| ¡ |ƒ t|ƒ}t| ¡ | ¡ ƒ dddgdddgg}t|tj	d�}t|jtj	ƒ | ¡ }t|jtj	ƒ t
||ƒ d S )Nr�   r   rR   r‘   r’   ræ   )r    r&  r   r   r   r2   rq   r   r;   rã   r   )rw   rC   rA   rê   r¦  r’   Údar.   r.   r/   Ú	test_ctorÔ  s    
(zTestDOK.test_ctorc                 C   sT   t dƒ}d|d< td| ¡ k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=  r.   r.   r/   Útest_ticket1160é  s    zTestDOK.test_ticket1160N)rƒ   r„   r…   r   r”   r;   rR  r  r  r˜   rE  rG  rH  rI  rK  rM  r.   r.   r.   r/   r¤   •  s   r¤   )r  r  c                   @   s`   e Zd ZeZejejejgZ	dd„ Z
dd„ Zdd„ Zdd„ Zd	d
„ Z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 )NrC  rE   rY  y              4@rD  ræ   Úppc64le)r   r;   rå   r   ÚplatformÚmachiner   rÖ   rq   r   rÑ  rå  r.   r.   r/   Útest_dotþ  s    zTestLIL.test_dotc                 C   s@   t dƒ}d|d< |d }t|d dƒ |d }t|d dƒ d S )NrÒ   rR   r  rú   r   )r   r   )rw   r3   r.   r.   r/   Útest_scalar_mul  s    zTestLIL.test_scalar_mulc                 C   sð   t dddgdddggƒ}t dddgdddggƒ}||| f||| fd|d fdœ}| ¡ D ]8\}\}}| ¡ }t|d| ƒ|ƒ t| ¡ | ¡ ƒ q\t d	t d
¡d�}tdddgƒ}|dd d …f  |7  < t|dd d …f  ¡  	¡ |ƒ d S )Nr   rR   r‘   rú   r  r�   )ÚaddÚsubÚmulz__i%s__r[  rœ   ræ   gš™™™™™¹?)
r   r#  r­   rf   r   rq   r;   r2   r   Zsqueeze)rw   rA   rB   r¦  ÚopÚotherr×   r÷  r.   r.   r/   Útest_inplace_ops  s    


þzTestLIL.test_inplace_opsc                 C   sP   dddgdddgg}t t|ƒƒ}t|ƒD ]"\}}t| ¡ t|| dd�ƒ q(d S )Nr�   rR   r‘   rú   râ   r  )Zndmin)r   r   rŠ  r   rq   )rw   Zrow_datarB   r4  r¨  r.   r.   r/   Útest_lil_iteration+  s    zTestLIL.test_lil_iterationc                 C   sR   t dƒ}d|d< d|d< d|d< d|d	< d
|d< | ¡ }t |ƒ}t|j|jƒ d S )NrC  rE   rY  r  rD  r   )r  r‘   r
  )r‘   r  r  )r  r  )r   rè   r   rA   )rw   rB   r  r  r.   r.   r/   Útest_lil_from_csr1  s    zTestLIL.test_lil_from_csrc                 C   sZ   t tdƒ dd¡ƒ}t|ƒ}t|tdddgƒdd…f  ¡ |tdddgƒdd…f ƒ d S )Nr€  râ   r�   rR   r‘   )r&   r   r%  r   r   r   rq   )rw   r„  rA   r.   r.   r/   Ú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| |¡ ¡ dddgdddgdddgdddggƒ d S )Nr  r�   r  rR   rW  r‘   r>  rú   rn  r\  r=  r   r  rØ  )r   r   rÉ  rq   )rw   Úlrí   r.   r.   r/   Útest_point_wise_multiplyE  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Î  )rw   r>   r.   r.   r/   Útest_lil_multiply_removal\  s    z!TestLIL.test_lil_multiply_removalN)rƒ   r„   r…   r   r”   r;   rR  r  r  r˜   rR  rS  rY  rZ  r[  r\  r^  r_  r.   r.   r.   r/   rN  ú  s   
rN  )r  c                   @   s�   e Zd ZeZejejejgZ	dd„ Z
dd„ Zdd„ Zdd„ Zd	d
„ Zejjddd�dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestCOOc                 C   sÔ   t dddddddddddgƒ}t dddddddddddgƒ}t ddddd	d
dddddgƒ}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 r  )r   r   r   r   r%  rq   r;   r  )rw   r¨  r©  r¦  r§  rû  r.   r.   r/   r  l  s    "zTestCOO.test_constructor1c                 C   s˜   t ddddddddddg
ƒ}t ddddddddddg
ƒ}t dddddddddd	g
ƒ}t|||ffd
ƒ}t dddgdddgdddggƒ}t|| ¡ ƒ d S )Nr   r�   rR   r  rñ   râ   r  rÂ   rð   rÒ   rú   rù   )r   r   r   rq   )rw   r¨  r©  r¦  r§  rx   r.   r.   r/   r  z  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 )Nr  )r   r   r‰   r¨  r©  r¦  rq   r   ©rw   r§  r.   r.   r/   r  …  s    zTestCOO.test_constructor3c              	   C   sÜ   t ddddgddddgddddggƒ}t|ƒ}t| ¡ |ƒ t ddddgƒ}t|ƒ}t| ¡ | dd¡ƒ tjtdd��, tdd	d
dgddddgddddgfƒ W 5 Q R X tjtdd�� tdd	d
dgdd� W 5 Q R X d S )Nr   r�   r  r‘   rú   rÂ   zobject cannot be interpreted)Úmatchrz  é   é!   rR   zinconsistent shapesr<  r!  )	r   r   r   rq   r%  r¥   r   r&  r¡   )rw   rx   r§  r.   r.   r/   r  �  s    

þ0zTestCOO.test_constructor4c                 C   s8   dg}t |dgdgffd d�}|jt |¡jks4t‚d S )Nr�   r   ræ   )r   r2   r;   r   r_   )rw   r¦  r§  r.   r.   r/   Ú"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 r1   r.   r‹   r.   r.   r/   r  ©  s    zTestCOO.test_iteratorc                 C   s&   ddgg}t |ƒ ¡ }t|j|ƒ d S rV   )r   Ztodiar   rA   )rw   r   rª  r.   r.   r/   Ú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|jddgddggƒ t ddgddgddgffƒ}| ¡  t|jddgddggƒ t|jdgƒ t|jdgƒ t|jdgƒ d S )Nr  r�   rR   r   r‘   )r   r4  r   rA   r¨  r©  r¦  ra  r.   r.   r/   Útest_sum_duplicates²  s    zTestCOO.test_sum_duplicatesc                 C   sB   t ddddgddddgddddgffƒ}| ¡ }t|j|jƒ d S )Nr�   r   rR   )r   r  r   rA   )rw   r§  r7   r.   r.   r/   Útest_todok_duplicates¿  s    (zTestCOO.test_todok_duplicatesc              	   C   s�   t ddddddddgƒ}t ddddddddgƒ}t dddddddd	gƒ}t|||ffd
d�}| ¡ }| ¡  t|jdk ¡ ƒ t|j|jƒ d S r(  )	r   r   r­   r)  r   r¦  Úallr   rA   )rw   r¦  r¨  r©  rï  rð  r.   r.   r/   r*  Ä  s    zTestCOO.test_eliminate_zerosc                 C   sŽ   ddddgddddgddddgg}d}t |ƒ}| |¡}t|j|jkƒ |j|dd�}t|j|jkƒ |j|d	d�}tt |j|j¡ ƒ d S )
Nr   rE   r  r   r
  r!  Fr$  T)r   r%  r   r¦  r;   r@   )rw   r[   Z	new_shaper3   r4   r.   r.   r/   Ú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›  )éÁÆ- éé  )ro  rn  r  r  r   r  )r   r   r%  rÓ   )rw   Zmat1Zmat2r.   r.   r/   Útest_large_dimensions_reshapeÜ  s    z%TestCOO.test_large_dimensions_reshapeN)rƒ   r„   r…   r   r”   r;   rR  r  r  r˜   r  r  r  r  re  r¥   rG  Úxfailr  ri  rj  rk  r*  rm  rp  r.   r.   r.   r/   r`  f  s   


r`  )r  r  r  r  r  c                   @   sn   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S )ÚTestDIAc                 C   s|   t ddddgddddgddddgddddggƒ}t  ddddgg¡jddd�}t  dddg¡}tt||fdd	� ¡ |ƒ d S )
Nr�   r   r‘   rR   rú   rP  rÂ   r<  r!  )r   r;   Úrepeatr   r   rq   )rw   r  r¦  r«  r.   r.   r/   r  ñ  s    


ýzTestDIA.test_constructor1FzDIA does not have a __getitem__rf  c                 C   s   d S r1   r.   r‹   r.   r.   r/   r  ú  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‘   rR   r  rú   )	r   r;   r    r   r«  r2   rH   r3  rS   ©rw   rí   r.   r.   r/   Útest_setdiag_dtypeþ  s    zTestDIA.test_setdiag_dtypezDIA stores extra zeros©rh  c                 C   s   d S r1   r.   r‹   r.   r.   r/   rñ  
  s    zTestDIA.test_getnnz_axisc                 C   sJ   t dddggdgfdd�}| ¡ }t| ¡  ¡ |ƒ t| ¡  ¡ |ƒ d S )Nr�   r   rÂ   rô  r!  )r   rq   r   rç   rè   )rw   rí   r×   r.   r.   r/   Útest_convert_gh14555  s    zTestDIA.test_convert_gh14555N)rƒ   r„   r…   r   r”   r;   rR  r  r  r˜   r  r¥   rG  rq  r  rp   ru  r¦   rñ  rw  r.   r.   r.   r/   rr  ë  s   	


rr  )r  r  r  r  r  r  r  c                   @   sà   e Zd ZeZejejejgZ	dd„ Z
dd„ Zdd„ Zdd„ Zd	d
„ Z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 ddddgƒ}t ddddgƒ}tdƒ}t dddgdddggƒ|d< t dddgddd	ggƒ|d< t ddd
gdddggƒ|d< t ddd	gdddggƒ|d< tddddgddddgddddggdddgdddggƒ}t|||fdd�}t| ¡ |ƒ t|||fƒ}t| ¡ |ƒ d S ©Nr   rR   rú   r‘   )rú   rR   r‘   r�   râ   r  rE   r  r  r  r  r€  ©r  r  r!  )r   r   r   r   r   rq   )rw   r¥  r¤  r¦  rA   rI  r.   r.   r/   r     s(    
ÿ

ÿ

ÿ

ÿ
8zTestBSR.test_constructor1c                 C   sŽ  dD ]}t |ƒ}tt|ƒ ¡ |ƒ qt dƒ}tt|dd� ¡ |ƒ tt|dd� ¡ |ƒ tddddgddddgddd	d
ggdddgddd
g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ddddgddddgddddggdddgddd
ggƒ}tt|dd� ¡ |ƒ d S )N)rW  r9  rs  )rE   rú   )r‘   r  r•  )rú   r  r>  rÿ  ri  r�   r   rR   rú   râ   r‘   ry  r!  rW  r!  )rR   r  )r‘   r  )r   r   r   rq   r   )rw   r‰   rA   r.   r.   r/   r  7  s"    88zTestBSR.test_constructor2c                 C   sL   dddgdddgdddgff}t ddgddggƒ}tt|dd� ¡ |ƒ d S )Nr�   rR   r‘   r   r>  rÿ  )r   r   r   rq   )rw   ÚargrA   r.   r.   r/   r  O  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 )Nr  r�   ræ   r   F)r   r­   )r;   rÎ  r   r   rH   r   r   )rw   r*  r¦  r¥  r¤  r.   r.   r/   r  U  s
    zTestBSR.test_constructor4c              	   C   s¨   d}t  |¡}t  |||f¡}t  d|g¡}t  |¡}ttƒ� t|||fƒ W 5 Q R X ttƒ� t|||fdd� W 5 Q R X ttƒ� t|||fdd� W 5 Q R X d S )Nr  r   )r�   r�   r�   rÿ  rW  )r;   rÎ  r   r   r    r¡   r   )rw   r*  Z	data_1dimr¦  r¥  r¤  r.   r.   r/   r  ^  s    




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sht‚d S )Nr�   r   rR   ræ   r•  rÿ  )r;   r   rH   r   r2   r_   )rw   r9   r¥  r¤  rC   r.   r.   r/   Útest_default_dtyper  s
    zTestBSR.test_default_dtypec                 C   s  t ddddgƒ}t ddddgƒ}tdƒ}t dddgdddggƒ|d< t dddgddd	ggƒ|d< t ddd
gdddggƒ|d< t ddd	gdddggƒ|d< tddddgddddgddddggdddgdddggƒ}t|||fdd�}| ¡ }| ¡  ¡ }t| ¡ |ƒ t| ¡ | ¡ ƒ d S rx  )r   r   r   r   rè   ré   r   rq   )rw   r¥  r¤  r¦  rA   ZAbsrZAcsrZAcsr_via_coor.   r.   r/   Útest_bsr_tocsrz  s.    
ÿ

ÿ

ÿ

ÿ
"ÿzTestBSR.test_bsr_tocsrc              	   C   s    t ddddddddgddgddggƒj}| ddd¡}tddddddd	d
gƒ}tddd
gƒ}t|||fdd�}| ¡ }| ¡  t|jdƒ t| 	¡ | 	¡ ƒ d S )Nr�   r   rR   r‘   rÂ   rú   râ   r  r  r  )rú   r  r!  r  )
r   rÖ   r%  r   r   r­   r)  r   rÓ   rq   r&  r.   r.   r/   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   )r  r  ri  rÿ  gÍÌÌÌÌÌì?éB   )rz  rR   r‘   r}  )r   rR   r‘   )r;   rn   rQ   r   r¦  r)  r   rÓ   r   r‰   rq   r   rt  r.   r.   r/   Ú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   r  r  ©rú   râ   rÿ  r�   rÂ   ©r   r   r%  r‰   r   rq   r   r.   r.   r/   Ú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  r  r  r€  rÿ  r�   r  rÂ   r�  r   r.   r.   r/   Útest_bsr_matvecs¹  s    zTestBSR.test_bsr_matvecsFzBSR does not have a __getitem__rf  c                 C   s   d S r1   r.   r‹   r.   r.   r/   r  ¾  s    zTestBSR.test_iteratorzBSR does not have a __setitem__c                 C   s   d S r1   r.   r‹   r.   r.   r/   r@  Â  s    zTestBSR.test_setdiagc                 C   sö   t  ddddgddddgddddgg¡}| j|dd�}t| d¡d kƒ t|jddgddgddggƒ | d	¡ t|jddgddggƒ | d¡ t|jddgddgddggƒ | d
¡ t|jddddgddddgddddggƒ tt|jdƒ d S )Nr�   r   r‘   rú   rR   r^  rÿ  r=  r>  r#  ri  r@  r�  r.   r.   r/   Útest_resize_blockedÆ  s2    

þþ
ÿ
þ


þzTestBSR.test_resize_blockedc                 C   s   d S r1   r.   r‹   r.   r.   r/   r;  Ý  s    z"TestBSR.test_setdiag_comprehensivezexceeds memory limitrv  c              	   C   sB  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k
�r   d}
d}Y nX |||||
|fD ]}||  �q.d S )
NrR   ræ   r   )r   r�   r�   r6  r!  r8  )r   r�   r7  )r   r�   r9  )
r;   r   rH   r   r   r¥  r2   rS   ÚMemoryErrorr¡   )rw   r¥  r¤  r;  r>   rC   rê   r’   Zvals2Zvals3rë   rì   r3   r.   r.   r/   r<  á  s.    



zTestBSR.test_scalar_idx_dtypeN)rƒ   r„   r…   r   r”   r;   rR  r  r  r˜   r  r  r  r  r  r{  r|  r*  r~  r‚  rƒ  r¥   rG  rq  r  r@  r„  r;  ÚskipifÚIS_COLABr<  r.   r.   r.   r/   r¹     s,   	


r¹   )r  r  r  r  r  r  c                 O   s2  |  dd¡}t | jtj¡s,t | jtj¡rN|dk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k�r| f| S | f| |d f S dS )
z-Duplicates entries to produce the same matrixr¥  Nr   rR   rP  r�   c                 s   s   | ]}|d  V  qdS rÍ  r.   )rD  Úpr.   r.   r/   Ú	<genexpr>  s     z&_same_sum_duplicate.<locals>.<genexpr>c                 s   s   | ]}|  d ¡V  qdS )rR   N)rs  )rD  r¤  r.   r.   r/   r‰  "  s     )
Úpopr;   rX   r2   ra  ZunsignedintegerrG  rs  rW   rB  )r¦  Zindsr5   r¥  Z	zeros_posÚposZpos1Úpos2r.   r.   r/   Ú_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|Ž}|jdk ¡ }|d jdk}|r~|d jd }tƒ �0}	|	 td¡ |  ||d | |d | ¡}W 5 Q R X |  	||¡}
d|krœ|j
|d< ||
f|Ž}|jtjtjfkrÀd}nd}t|j|j|d� |rìt|jdk ¡ ƒ |S )	zcReplace D with a non-canonical equivalent: containing
        duplicate elements and explicit zerosr   rR   r/  r�   r‰   gñhãˆµøä>gH¯¼šò×z>)Úrtol)Úsuperr”   rA   rG  rW   r   r·   r"   Ú_insert_explicit_zeroÚ_arg1_for_noncanonicalr‰   r2   r;   rã   rä   r   r   r¦  Úany)rw   r  Úsorted_indicesr5   Ú	constructr„  Zzero_posZ	has_zerosr	  r½   Zarg1ZNCr�  ©r  r.   r/   r”   +  s,    ÿ(
z_NonCanonicalMixin.spmatrixz"bool(matrix) counts explicit zerosrv  c                 C   s   d S r1   r.   r‹   r.   r.   r/   r¨   Q  s    z_NonCanonicalMixin.test_boolz!getnnz-axis counts explicit zerosc                 C   s   d S r1   r.   r‹   r.   r.   r/   rñ  U  s    z#_NonCanonicalMixin.test_getnnz_axisznnz counts explicit zerosc                 C   s   d S r1   r.   r‹   r.   r.   r/   rÕ   Y  s    z_NonCanonicalMixin.test_empty)F)rƒ   r„   r…   r”   r¥   rG  r¦   r¨   rñ  rÕ   Ú__classcell__r.   r.   r–  r/   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¥  r  r­   )rw   r„  r”  r¦  r¤  r¥  ÚstartÚstopr.   r.   r/   r’  _  s    
ÿ"$z3_NonCanonicalCompressedMixin._arg1_for_noncanonicalc                 C   s   d|||f< |S rV   r.   ©rw   r„  r+  r,  r.   r.   r/   r‘  i  s    z2_NonCanonicalCompressedMixin._insert_explicit_zeroN)F)rƒ   r„   r…   r’  r‘  r.   r.   r.   r/   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 dddgdddgdddgdddgg| d�}ˆ j||d�}|j\}}t| |ƒD ]0}t| |ƒD ]}t|||f |||f ƒ q`qPdD ]}tttf|j|ƒ q†d S )	Nr�   r   rú   r‘   rR   ræ   )r”  rX  )	r   r”   r‰   r©   r   r    rZ  r&  r[  )	r2   r”  r  rA   r„  r†  r+  r,  rE  r‹   r.   r/   r£   p  s    
ýý
z3_NonCanonicalCSMixin.test_getelement.<locals>.check)FTr\  )rw   r£   r2   r”  r.   r‹   r/   r]  o  s    z$_NonCanonicalCSMixin.test_getelementc              	   C   sÐ   t  d¡}|  |¡}|  dddgg¡}| ¡ |dd d …f< tƒ �"}| td¡ ||dd d …f< W 5 Q R X t| ¡ |ƒ | ¡  ¡ |d d …df< tƒ �$}| td¡ |j	|d d …df< W 5 Q R X t| ¡ |ƒ d S )Nr‘   r�   rR   r/  )
r;   r    r”   rq   r   r·   r"   r   r°  rÖ   )rw   r  rA   rB   r½   r.   r.   r/   Útest_setitem_sparse„  s"    

ÿÿz(_NonCanonicalCSMixin.test_setitem_sparseFz(inverse broken with non-canonical matrixrf  c                 C   s   d S r1   r.   r‹   r.   r.   r/   rˆ  —  s    z_NonCanonicalCSMixin.test_invz&solve broken with non-canonical matrixc                 C   s   d S r1   r.   r‹   r.   r.   r/   rq  ›  s    z_NonCanonicalCSMixin.test_solveN)
rƒ   r„   r…   r]  rž  r¥   rG  rq  rˆ  rq  r.   r.   r.   r/   r�  n  s   
r�  c                   @   s   e Zd ZdS )ÚTestCSRNonCanonicalN©rƒ   r„   r…   r.   r.   r.   r/   rŸ     s   rŸ  c                   @   s   e Zd ZdS )ÚTestCSCNonCanonicalNr   r.   r.   r.   r/   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è   r  r   )rw   r„  r+  r,  r3   r.   r.   r/   r‘  ©  s    z)TestBSRNonCanonical._insert_explicit_zeroFz&diagonal broken with non-canonical BSRrf  c                 C   s   d S r1   r.   r‹   r.   r.   r/   r  ®  s    z!TestBSRNonCanonical.test_diagonalz"expm broken with non-canonical BSRc                 C   s   d S r1   r.   r‹   r.   r.   r/   r‡  ²  s    zTestBSRNonCanonical.test_expmN)	rƒ   r„   r…   r‘  r¥   rG  rq  r  r‡  r.   r.   r.   r/   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©  )rw   r„  r”  r¦  r¨  r©  r.   r.   r/   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 rV   )r;   Zr_r¦  r2   rõ  r¨  r©  rœ  r.   r.   r/   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‘   rR   r�   r  r   )	r”   r;   r    r4  r3  r   rl  Údiffr©  rt  r.   r.   r/   Útest_setdiag_noncanonicalÃ  s
    z-TestCOONonCanonical.test_setdiag_noncanonical)N)rƒ   r„   r…   r’  r‘  r¥  r.   r.   r.   r/   r£  ·  s   
r£  c            
      c   s  t ttttttg} 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k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ˆ  rq  r<  rp  r#  r$  rù  rH  Frv  z3.6.0Z
pytestmark)r†  r¦   rq  Zxslow)Úmarks)r¹   r`  rº   r»   rr  r¤   rN  ÚsortedÚdirrf   rü  r   r¢   r¥   rG  r¦   r   ÚparseÚ__version__ÚVersionrl   r<   r¹  Úparam)
ZTEST_CLASSESZ
SKIP_TESTSr�   Úmethod_nameÚmethodr¦  r,   ÚmarkersrG  Zmnamer.   r.   r/   Ú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 r1   )r;   rn   rV  )rw   Úmat_clsrí   r*  r.   r.   r/   Ú_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|f ƒ‚d S )Nz matrix %r has no integer indices)r;   r2   r:   r   r   r   r¤  r¥  r   r¨  r©  r   r«  r¡   )rw   rí   r2   r.   r.   r/   Ú_compare_index_dtypeú  s    


zTest64Bit._compare_index_dtypec                    s.   t dd�‡ fdd„ƒ}ˆ jD ]}||ƒ qd S )NrE   r]   c                    sL   | t j dd¡ƒ}tˆ  |t j¡ƒ | t j dd¡ƒ}tˆ  |t j¡ƒ d S )NrE   r�   rz  )r;   rn   rV  r   r´  rH   rS   )r²  rí   r‹   r.   r/   r£     s    z4Test64Bit.test_decorator_maxval_limit.<locals>.check©rp   ÚMAT_CLASSES©rw   r£   r²  r.   r‹   r/   Útest_decorator_maxval_limit  s    
z%Test64Bit.test_decorator_maxval_limitc                    s.   t dd�‡ fdd„ƒ}ˆ jD ]}||ƒ qd S )NT©rn   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œ  r  z#both 32 and 64 bit indices not seen)r©   r³  r´  r;   rH   rS   r_   )r²  Zseen_32Zseen_64r	  rí   r‹   r.   r/   r£     s    z5Test64Bit.test_decorator_maxval_random.<locals>.checkrµ  r·  r.   r‹   r/   Útest_decorator_maxval_random  s    
z&Test64Bit.test_decorator_maxval_randomc                 K   s    t f |Ždd„ ƒ}|||ƒ d S )Nc              	   S   sB   | ƒ }t |dƒr| ¡  zt||ƒƒ  W 5 t |dƒr<| ¡  X d S )NÚsetup_methodÚteardown_method)r¹  r»  r¼  rf   )r�   r­  Úinstancer.   r.   r/   r£   )  s    

z*Test64Bit._check_resiliency.<locals>.check)rp   )rw   r�   r­  rh   r£   r.   r.   r/   Ú_check_resiliency%  s    

zTest64Bit._check_resiliencyzcls,method_namec                 C   s   | j ||dd� d S )NrE   r]   ©r¾  ©rw   r�   r­  r.   r.   r/   Útest_resiliency_limit_106  s    z"Test64Bit.test_resiliency_limit_10c                 C   s   | j ||dd� d S )NTr¹  r¿  rÀ  r.   r.   r/   Útest_resiliency_random:  s    z Test64Bit.test_resiliency_randomc                 C   s   | j ||tjd� d S ©NrN   )r¾  r;   rH   rÀ  r.   r.   r/   Útest_resiliency_all_32A  s    z Test64Bit.test_resiliency_all_32c                 C   s   | j ||tjd� d S rÃ  )r¾  r;   rS   rÀ  r.   r.   r/   Útest_resiliency_all_64E  s    z Test64Bit.test_resiliency_all_64c                 C   s   | j ||dd� d S )NT)ro   r¿  rÀ  r.   r.   r/   Ú
test_no_64I  s    zTest64Bit.test_no_64c                 C   s:   t tjdd�dd„ ƒ}t tjd�dd„ ƒ}|ƒ  |ƒ  d S )Nr�   )rO   ra   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dddgdddggƒ} tt| jdd� tdddgdddggƒ} tt| jdd� d S ©	Nr�   rR   r‘   rú   râ   r  rP  r   )r   r    r_   rð  rR  r   r   rr   r.   r.   r/   Úcheck_limitedT  s    z3Test64Bit.test_downcast_intp.<locals>.check_limitedrN   c                  S   s~   t ddgddgddggƒ} | jdd� | jdd� tdddgdddggƒ} | jdd� tdddgdddggƒ} | jdd� d S rÇ  )r   rð  rR  r   r   rr   r.   r.   r/   Úcheck_unlimitedb  s    z5Test64Bit.test_downcast_intp.<locals>.check_unlimited)rp   r;   rS   )rw   rÈ  rÉ  r.   r.   r/   Útest_downcast_intpM  s    ÿ


zTest64Bit.test_downcast_intpN)rƒ   r„   r…   r   r   r   r   r   r¶  r³  r´  r¸  rº  r¾  r¥   rG  Zparametrizer°  rÁ  rÂ  rÄ  rÅ  rÆ  rÊ  r.   r.   r.   r/   r±  ô  s"   




r±  )N)NFNNF)T)	TTTTTTTTT)orE  Ú
contextlibrö  rë  rP  r‹  ÚsysZ
scipy._libr   Únumpyr;   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   rn   Znumpy.testingr   r   r   r   r   r   r   r¥   r   r    Zscipy.linalgrc   rì  rd   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+   rj   r‡  r0   r6   Ú	frozensetrC  rD   r¸   r·   rp   rq   rs   r†   rŽ   rI  rV  rp  rr  r’  r¢  Úcontextmanagerr»  r¼  rÉ  rË  r×  râ  rï  rÿ  r
  r»   rž   rº   r¤   rN  r`  rr  r¹   r�  rŽ  r˜  r�  rŸ  r¡  r¢  r£  r°  r±  r.   r.   r.   r/   Ú<module>   sî   @$0



    ÿ
Q,              Pbj `  u
q#ca 9
          ý
, { bi  þ   þ+  ý j!42)