a
    h'                    @   s(  d Z ddlZddlZddlZddlZddlZddlZddlmZ ddl	Z
ddl	mZmZmZmZmZmZmZmZmZmZmZmZmZ ddlZddlmZmZmZmZmZmZm Z  ddl!m"Z# ddl$Z%ddl&m'Z' ddl&m(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2 ddl3m4Z4m5Z5m6Z6m7Z7m8Z8 dd	l9m:Z:m;Z;m<Z< dd
l=m>Z> ddl?m@Z@ ddl!Z!dejAv ZBdgddZCdd ZDeEdgZFdd ZGe  ZHeHIe@ dhddZJdd ZKG dd dZLG dd dZMG dd dZNG dd  d ZOG d!d" d"ZPG d#d$ d$ZQG d%d& d&ZRG d'd( d(ZSG d)d* d*ZTG d+d, d,ZUejVd-d. ZWG d/d0 d0ZXG d1d2 d2ZYG d3d4 d4ZZG d5d6 d6Z[G d7d8 d8Z\G d9d: d:Z]did<d=Z^djd>d?Z_G d@dA dAe_ Z`e`a  G dBdC dCe_ Zbeba  G dDdE dEe_dddFZceca  G dGdH dHe_ddIZdeda  G dJdK dKe_ddddddLZeeea  G dMdN dNe_ddddddddOZfefa  G dPdQ dQe_dddddddRZgega  dSdT ZhG dUdV dVZiG dWdX dXeiZjG dYdZ dZejZkG d[d\ d\eke`ZlG d]d^ d^ekebZmG d_d` d`ejegZnG dadb dbeieeZodcdd ZpG dedf dfZqdS )kz Test functions for sparse matrices. Each class in the "Matrix class
based tests" section become subclasses of the classes in the "Generic
tests" section. This is done by the functions in the "Tailored base
class for generic tests" section.

    N)_pep440)arangezerosarraydotasarrayvstackndarray	transposediagkroninf	conjugateint8)assert_equalassert_array_equalassert_array_almost_equalassert_almost_equalassert_assert_allclosesuppress_warnings)raises)
csc_matrix
csr_matrix
dok_matrix
coo_matrix
lil_matrix
dia_matrix
bsr_matrixeyeissparseSparseEfficiencyWarningsparray)supported_dtypesisscalarlikeget_index_dtypeasmatrixmatrix)spluexpminv)	decorator)ComplexWarningzgoogle.colabc                 C   s.   |d ur|n| d|}t | |v |d d S )Nz not found in )msg)r   )memberZ
collectionr-   message r0   X/var/www/html/assistant/venv/lib/python3.9/site-packages/scipy/sparse/tests/test_base.py	assert_in2   s    r2   c                 K   s&   t | j|jk t| |fi | d S N)r   dtyper   )xykwargsr0   r0   r1   assert_array_equal_dtype7   s    r8   dokc                 C   s<   dd }|| D ]&}||D ]}t ||r  dS qqdS )Nc                 S   s4   g }| j  D ] }t|tjtjfr|| q|S r3   )__dict__values
isinstancenpr	   Zgenericappend)r5   arraysar0   r0   r1   _underlying_arraysA   s
    z3sparse_may_share_memory.<locals>._underlying_arraysTF)r=   may_share_memory)ABrA   r@   br0   r0   r1   sparse_may_share_memory>   s    
rF   Fc                    s   du rt dn
t |r.dddnHdurFdfdd	n0|rht jjdd	 d fd
d	ndfdd	durfddtfdd}|S )z
    Monkeypatch the maxval threshold at which scipy.sparse switches to
    64-bit index arrays, or make it (pseudo-)random.

    N
   r0   Fc                 S   sD   t | ||}tt|jttjj t|tjkp<|tjk |S r3   )r%   r   r=   iinfomaxint32r   Zintc)r?   maxvalcheck_contentstpr0   r0   r1   new_get_index_dtypee   s    z4with_64bit_maxval_limit.<locals>.new_get_index_dtypec                    s    S r3   r0   r?   rK   rL   fixed_dtyper0   r1   rN   k   s      )seedc                    s   t jt jf d S )N   )r=   rJ   int64randintrO   )counterr0   r1   rN   p   s    c                    s   t j}|d ur| krt j}| D ]f}t |}|jt jkr |r|jdkrLq n4t |jt jr| }|	 }|  kr| krq t j}q |S Nr   )
r=   rJ   rU   r   r4   size
issubdtypeintegerrI   min)r?   rK   rL   r4   arrminvalmaxval_limitr0   r1   rN   s   s"    

c                    s    |    krtd| tjS )Nzdowncast limited)rI   AssertionErrorastyper=   Zintp)r]   )downcast_maxvalr0   r1   new_downcast_intp_index   s    z8with_64bit_maxval_limit.<locals>.new_downcast_intp_indexc                    s$  g }t jjt jjt jjt jjt jjt jjt jjt jj	t jj
t jjg
}z|D ]T}||dt|dd f t|d  d urJ||dt|dd f t|d qJ| |i |W |D ]\}}}|d urt||| qS ]\}}}|d urt||| qn*|D ]"\}}}|d u rt|||  q0 d S )Nr%   Zdowncast_intp_index)scipysparseZ_bsrZ_cooZ_cscZ_csrZ_diaZ_dokZ_lilZ_sputilsZ_compressedZ
_constructr>   getattrsetattr)funcr@   kwbackupmodulesmodnameZoldfunc)rc   rd   rN   r0   r1   deco   s8    



z%with_64bit_maxval_limit.<locals>.deco)r0   NF)r0   NF)r0   NF)r0   NF)r=   rU   randomZRandomStater+   )r`   rp   rQ   rc   assert_32bitro   r0   )rW   rc   rQ   r`   rd   rN   r1   with_64bit_maxval_limitV   s     
rr   c                 C   s    t | tjst| r| S |  S r3   )r<   r=   r	   r$   toarrayr@   r0   r0   r1   rs      s    rs   c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )BinopTesterc                 C   s   dS Nmatrix on the rightr0   selfmatr0   r0   r1   __add__   s    zBinopTester.__add__c                 C   s   dS rv   r0   rx   r0   r0   r1   __mul__   s    zBinopTester.__mul__c                 C   s   dS rv   r0   rx   r0   r0   r1   __sub__   s    zBinopTester.__sub__c                 C   s   dS Nmatrix on the leftr0   rx   r0   r0   r1   __radd__   s    zBinopTester.__radd__c                 C   s   dS r~   r0   rx   r0   r0   r1   __rmul__   s    zBinopTester.__rmul__c                 C   s   dS r~   r0   rx   r0   r0   r1   __rsub__   s    zBinopTester.__rsub__c                 C   s   dS rv   r0   rx   r0   r0   r1   
__matmul__   s    zBinopTester.__matmul__c                 C   s   dS r~   r0   rx   r0   r0   r1   __rmatmul__   s    zBinopTester.__rmatmul__N)__name__
__module____qualname__r{   r|   r}   r   r   r   r   r   r0   r0   r0   r1   ru      s   ru   c                   @   sd   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )BinopTester_with_shapec                 C   s
   || _ d S r3   _shape)ry   shaper0   r0   r1   __init__   s    zBinopTester_with_shape.__init__c                 C   s   | j S r3   r   ry   r0   r0   r1   r      s    zBinopTester_with_shape.shapec                 C   s
   t | jS r3   )lenr   r   r0   r0   r1   ndim   s    zBinopTester_with_shape.ndimc                 C   s   dS rv   r0   rx   r0   r0   r1   r{      s    zBinopTester_with_shape.__add__c                 C   s   dS rv   r0   rx   r0   r0   r1   r|      s    zBinopTester_with_shape.__mul__c                 C   s   dS rv   r0   rx   r0   r0   r1   r}      s    zBinopTester_with_shape.__sub__c                 C   s   dS r~   r0   rx   r0   r0   r1   r      s    zBinopTester_with_shape.__radd__c                 C   s   dS r~   r0   rx   r0   r0   r1   r      s    zBinopTester_with_shape.__rmul__c                 C   s   dS r~   r0   rx   r0   r0   r1   r      s    zBinopTester_with_shape.__rsub__c                 C   s   dS rv   r0   rx   r0   r0   r1   r      s    z!BinopTester_with_shape.__matmul__c                 C   s   dS r~   r0   rx   r0   r0   r1   r      s    z"BinopTester_with_shape.__rmatmul__N)r   r   r   r   r   r   r{   r|   r}   r   r   r   r   r   r0   r0   r0   r1   r      s   r   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )ComparisonTesterc                 C   s   dS )Neqr0   ry   otherr0   r0   r1   __eq__   s    zComparisonTester.__eq__c                 C   s   dS )Nner0   r   r0   r0   r1   __ne__   s    zComparisonTester.__ne__c                 C   s   dS )Nltr0   r   r0   r0   r1   __lt__   s    zComparisonTester.__lt__c                 C   s   dS )Nler0   r   r0   r0   r1   __le__   s    zComparisonTester.__le__c                 C   s   dS )Ngtr0   r   r0   r0   r1   __gt__   s    zComparisonTester.__gt__c                 C   s   dS )Nger0   r   r0   r0   r1   __ge__   s    zComparisonTester.__ge__N)	r   r   r   r   r   r   r   r   r   r0   r0   r0   r1   r      s   r   c                   @   s   e Zd ZdZeZedd Zdd Zdd Z	dd	 Z
d
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zej j!d2d3 Z"d4d5 Z#d6d7 Z$d8d9 Z%d:d; Z&d<d= Z'd>d? Z(d@dA Z)dBdC Z*dDdE Z+dFdG Z,dHdI Z-dJdK Z.dLdM Z/dNdO Z0dPdQ Z1dRdS Z2dTdU Z3e4dVdW Z5e4dXdY Z6e4dZd[ Z7e4d\d] Z8d^d_ Z9d`da Z:e4dbdc Z;e4ddde Z<dfdg Z=dhdi Z>djdk Z?dldm Z@dndo ZAdpdq ZBdrds ZCdtdu ZDdvdw ZEdxdy ZFdzd{ ZGd|d} ZHd~d ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd Zbdd ZcdS )_TestCommonz6test common functionality shared by all sparse formatsc                 C   s   t g dg dg dgd| _| | j| _tt| j| _i | _	i | _
| jD ].}| j|| j	|< | | j|| j
|< qPt| j| j	tj  t| j | j
tj   d S )N)   r   r   rT   )   r   r   r   )r   rT   r   r   d)r   dat	spcreatordatspsetr#   unionmath_dtypeschecked_dtypes
dat_dtypesdatsp_dtypesrb   r   r=   float64rs   )clsr4   r0   r0   r1   
init_class  s    

z_TestCommon.init_classc                    s8    fdd}t  tr td  jD ]}|| q&d S )Nc                    s@    j |  }ttt| t dgg t dgg  d S )Nr   r   )r   assert_raises
ValueErrorboolr   r   )r4   r   r   r0   r1   check#  s    
z$_TestCommon.test_bool.<locals>.checkz%Cannot create a rank <= 2 DOK matrix.)r<   TestDOKpytestskipr   ry   r   r4   r0   r   r1   	test_bool"  s
    


z_TestCommon.test_boolc                 C   sH   t ddgg}| |}tdD ]}|| }|| }q t||  d S )NTFrG   )r   r   ranger   rs   )ry   r   r   _r0   r0   r1   test_bool_rollover/  s    

z_TestCommon.test_bool_rolloverc                    sV   t  }|t |t fdd}t tttfs>t	d  j
D ]}|| qDd S )Nc           	         s    j |  } j|  }| }d|d d df<  |}t|}t|}t|}t|}t||k||k	  t||k||k	  t||k||k	  t||k||k	  t||k||k	  t||k||k t|dk|dk	  t|dk|dk	  t|t
jk|t
jk	  d S Nr   r   )r   r   copyr   r   r   r   r   r8   rs   r=   nan)	r4   r   r   dat2datsp2datbsrdatcsrdatcscdatlilr   r0   r1   r   >  s(    



z"_TestCommon.test_eq.<locals>.check8Bool comparisons only implemented for BSR, CSC, and CSR.r   filterr!   sup_complexr<   TestBSRTestCSCTestCSRr   r   r   ry   supr   r4   r0   r   r1   test_eq:  s    


z_TestCommon.test_eqc                    sV   t  }|t |t fdd}t tttfs>t	d  j
D ]}|| qDd S )Nc           	         sL   j |  } j|  }| }d|d d df<  |}t|}t|}t|}t|}t||k||k	  t||k||k	  t||k||k	  t||k||k	  t||k||k	  t||k||k t|dk|dk	  t|dk|dk	  td|kd|k	  td|kd|k	  t|t
jk|t
jk	  d S r   )r   r   r   r   r   r   r   r   r8   rs   r=   r   )	r4   r   r   r   r   r   r   r   r   r   r0   r1   r   c  s,    



z"_TestCommon.test_ne.<locals>.checkr   r   r   r0   r   r1   test_ne_  s    


z_TestCommon.test_nec                    sV   t  }|t |t fdd}t tttfs>t	d  j
D ]}|| qDd S )Nc                    sP   j |  } j|  }| }d|d d df<  |}|t}d|d d df<  |}t|}t|}t|}	t	|}
t
||k ||k   t
||k ||k   t
||k ||k   t
||k ||k   t
||k |	|k   t
||k |
|k   t
||k ||k   t
||k ||k   t
||k ||	k   t
||k ||
k   t
||k ||k  t
||k ||k  dD ]<}t|}t
||k  ||k  t
||k  ||k  q~tjdd* t
|tjk  |tjk  W d    n1 s0    Y   j |  } j|  }| }d|d d df<  |}t
||k ||k  d S Nr         ?      ?)rT   r   r   ignoreinvalidr   r   r   r   rb   complexr   r   r   r   r8   rs   r=   rU   errstater   r4   r   r   r   r   Z
datcomplexZdatspcomplexr   r   r   r   valr   r0   r1   r     sP    






$


z"_TestCommon.test_lt.<locals>.checkr   r   r   r0   r   r1   test_lt  s    
4

z_TestCommon.test_ltc                    sV   t  }|t |t fdd}t tttfs>t	d  j
D ]}|| qDd S )Nc                    sP   j |  } j|  }| }d|d d df<  |}|t}d|d d df<  |}t|}t|}t|}	t	|}
t
||k||k  t
||k||k  t
||k||k  t
||k||k  t
||k|	|k  t
||k|
|k  t
||k||k  t
||k||k  t
||k||	k  t
||k||
k  t
||k||k t
||k||k dD ]<}t|}t
||k ||k t
||k ||k q~tjdd* t
|tjk |tjk W d    n1 s0    Y   j |  } j|  }| }d|d d df<  |}t
||k||k d S r   r   r   r   r0   r1   r     sP    






$


z"_TestCommon.test_gt.<locals>.checkr   r   r   r0   r   r1   test_gt  s    
3

z_TestCommon.test_gtc                    sV   t  }|t |t fdd}t tttfs>t	d  j
D ]}|| qDd S )Nc                    s   j |  } j|  }| }d|d d df<  |}|t}d|d d df<  |}t|}t|}t|}	t	|}
t
||k||k  t
||k||k  t
||k ||k t
||k ||k t
|	|k ||k t
|
|k ||k t
||k ||k t
||k ||k t
||	k ||k t
||
k ||k t
||k||k t
||k||k dD ]<}t|}t
||k ||k t
||k ||k q~ j |  } j|  }| }d|d d df<  |}t
||k||k d S Nr   r   )rT   r   r   r   r   r   r   r   rb   r   r   r   r   r   r8   rs   r=   rU   r   r   r0   r1   r     sH    









z"_TestCommon.test_le.<locals>.checkr   r   r   r0   r   r1   test_le  s    
/

z_TestCommon.test_lec                    sV   t  }|t |t fdd}t tttfs>t	d  j
D ]}|| qDd S )Nc                    s   j |  } j|  }| }d|d d df<  |}|t}d|d d df<  |}t|}t|}t|}	t	|}
t
||k||k  t
||k||k  t
||k ||k t
||k ||k t
|	|k ||k t
|
|k ||k t
||k ||k t
||k ||k t
||	k ||k t
||
k ||k t
||k||k t
||k||k dD ]<}t|}t
||k ||k t
||k ||k q~ j |  } j|  }| }d|d d df<  |}t
||k||k d S r   r   r   r   r0   r1   r   A  sH    









z"_TestCommon.test_ge.<locals>.checkr   r   r   r0   r   r1   test_ge=  s    
/

z_TestCommon.test_gec                 C   sB   t | d td t | djd t | d d d S )Nr   r   r   )r   r   rs   r   nnzcount_nonzeror   r0   r0   r1   
test_emptyw  s    z_TestCommon.test_emptyc                 C   s6   t | j }t| j | t| jj | d S r3   )r=   r   r   rs   r   T)ry   expectedr0   r0   r1   test_count_nonzero}  s    z_TestCommon.test_count_nonzeroc                 C   s.   t t| jd t t| jd t t| jd d S )Nr   r   r   r   r   r   )r   r   r   r   r0   r0   r1   test_invalid_shapes  s    z_TestCommon.test_invalid_shapesc                 C   s   t | j d S r3   )reprr   r   r0   r0   r1   	test_repr  s    z_TestCommon.test_reprc                 C   s   t | j d S r3   )strr   r   r0   r0   r1   test_str  s    z_TestCommon.test_strc           
      C   s   d}t dt dt dt dt dfD ]}| j||d}|| }d| }||  }||  }||  }||||||fD ]:}	t|	 | |   t|	j| t|	 j| qq0d S )	N   r   rJ   float32r   	complex64
complex128r4   rT   )r=   r4   r   tocsctocsrtocoor   rs   )
ry   r   Zmytyper@   rE   cr   efmr0   r0   r1   test_empty_arithmetic  s    z!_TestCommon.test_empty_arithmeticc                 C   sB   t g dg dg dg dgd}tt|t| |  d S )Nr   r      r   r   r   r   r   r   r   r   )r   r   absr   rs   ry   rC   r0   r0   r1   test_abs  s    "z_TestCommon.test_absc                 C   sD   d}t ddgddggd}ttj||dt| ||d  d S )	Nr   ggQ?g     @1@gQr   )Zdecimals)ndigits)r   r   r=   aroundroundr   rs   )ry   decimalrC   r0   r0   r1   
test_round  s
    z_TestCommon.test_roundc                 C   sV   t g dg dg dgd}tt|d| |d  tt| |j| d S )N)r  r   )r   r   r   rT   r      r   rT   )r   r   r=   powerr   rs   r   NotImplementedErrorr  r0   r0   r1   test_elementwise_power  s    "z"_TestCommon.test_elementwise_powerc                 C   sd   t g dg dg dg dgd}t| | |   t g dg dg}tt| |j d S )Nr   r   r  r  r   )TFF)FFT)r   r   r   rs   r   r  __neg__r  r0   r0   r1   test_neg  s    "z_TestCommon.test_negc                 C   s.   t ddgg}| |}t|j |j d S N      ?      @y       @      )r   r   r   realrs   ry   DrC   r0   r0   r1   	test_real  s    
z_TestCommon.test_realc                 C   s.   t ddgg}| |}t|j |j d S r  )r   r   r   imagrs   r  r0   r0   r1   	test_imag  s    
z_TestCommon.test_imagc                 C   s$  g }| g dg | dgdgdgg | ddgddgddgg | g dg dg dg | ddgddgg | t|d ddgg | t|d dgdgg | t|d ddgdd	gg | t|d ddgdd	gg | t|d ddgdd	gg | t|d g d
g |D ]}t|j\}}| |}t| d |d D ] }t|j|dt||d q\t|jddt|dd t|jddt|dd q,t| d t	
d t| d t	d t| d t	d t| ddt	d d S )Nr   r   rT   r   r   rT   r   r   r   r   )r   r   rT   r   r   r   r  r   rT   r   r  krG   i)(   i?  r#  r   r   )   r   r   r   )r>   r   r   r   r   r   r   diagonalr   r=   r   empty)ry   Zmatsr   rowscolsZ
sparse_matr"  r0   r0   r1   test_diagonal  s.       
z_TestCommon.test_diagonalc                 C   s   t g dg dg dg}| |}tddD ]}t|j|d|j|d q0t g dg dg}| |}tddD ]}t|j|d|j|d qzd S )Nr   rT   r   r  r      )      	   r   r   )offsetr   )r=   r   r   r   r   trace)ry   rC   rD   r"  r0   r0   r1   
test_trace  s    

z_TestCommon.test_tracec                 C   s  |  g dg dg dg dg}dD ]4}dD ]*}t|j||d | j||d q.q&|  g dg d	g d
g}|d}g dg dg}t| | |d}t| | |d}t| | tt|jd |dd}t| | tt|jdddd |d}t||u  |jddd}t||u t|jd d|_t| | tt|j|j	f tt|jd|j	df d S )N)r   r   r/  r  r  )r   r   r   )CF))   r   )r   r7  orderr   rG   r   r   r   r   r   r   r         r#  rT   r.  )r   rG   r   r   r   r   )r   r   r   r=  r>  r#  rT   r   )r   r.  r   rT   r.  r   )Z
not_an_argr   r  Tr   )
r   r   reshapers   r   r   	TypeErrorr   r   rY   )ry   r5   r9  sr6   Zdesiredr0   r0   r1   test_reshape  s6    "



z_TestCommon.test_reshapec                    s    fdd  fdd}t jd g d}t jt jfD ]}|D ]\}}t | d |d }|D ]p}t||||ft j||f|d}| j||f|d}	|||	| t jj	|t
t|d	d
D ]}
|||	|
 qqdqBq:d S )Nc                    s   t |}|dkrzt| jd | jd | }|jdkrPt|t|}|d | }t d|}t ||| }|| ||f< n|dk r | j||  d S r   )r=   r   r\   r   r   r   r   r   )r@   vr"  nij)dense_setdiagr0   r1   rK    s    

z=_TestCommon.test_setdiag_comprehensive.<locals>.dense_setdiagc           	   	      s&  dt t| |ddfD ]}|dk r:tjtdd}ntjjdd|d} | || t ,}d}|t	| |
|| W d    n1 s0    Y  t| |}t|jdkrt||d	|f d
 n8tt |t |}t|d | |d | d	|f d
 t| | d	|f d
 qd S )Nr   rT   r>  r   r   r=  rY   ?Changing the sparsity structure of a cs[cr]_matrix is expensivez%s %derr_msg)r   r=   r   rp   choicer   rV   r   r   r!   setdiagr   r   r   r\   rs   )	r@   rE   r"  rrG  r   r/   r   rH  rK  r-   r0   r1   check_setdiag+  s    *&z=_TestCommon.test_setdiag_comprehensive.<locals>.check_setdiagrR   )r&  r   r   r   r   r   r   r   r   r   r   rL  )r=   rp   rS   r   r   r   r   r   r   rP  r\   r   )ry   rT  Zshapesr4   r   rH  ksr"  r@   rE   Zk2r0   rS  r1   test_setdiag_comprehensive  s    z&_TestCommon.test_setdiag_comprehensivec              	   C   s  |  td}|  d}g d}t H}|td tt|j|dd || t	|
 | |j|dd t	| tg dg d	g d
g |j|dd t	| tg dg d	g dg |jddd t	| d d |jddd t	| d d |jdgdd t	| d g d |jddgdd t	| d d g dg dg W d    n1 sz0    Y  d S )Nr   r  r  )r   rT   r   rM  r  r!  r   )r   r   r   )r   rT   rT   r  r   )r   r   r   )r1  rT   r   rT   r1  rT   r   r   r   r   r   r   )r   r   r   r   )r   r=   r   r   r   r!   r   r   rQ  r   r'  rs   r   )ry   r   m2r;   r   r0   r0   r1   test_setdiagV  s>    


z_TestCommon.test_setdiagc                 C   s^   t g dg dg dg}| |}dd t| D }dd t| D }t|| d S )Nr   r   r   r   r   r   r  c                 S   s   h | ]}t |qS r0   tuple.0ijr0   r0   r1   	<setcomp>{      z+_TestCommon.test_nonzero.<locals>.<setcomp>c                 S   s   h | ]}t |qS r0   rb  rd  r0   r0   r1   rg  |  rh  )r   r   r
   nonzeror   ry   rC   AspZA_nzZAsp_nzr0   r0   r1   test_nonzerow  s
    
z_TestCommon.test_nonzeroc                 C   sb   t g dg dg dg}| |}dd tt|D }dd tt|D }t|| d S )Nr`  ra  r  c                 S   s   h | ]}t |qS r0   rb  rd  r0   r0   r1   rg    rh  z1_TestCommon.test_numpy_nonzero.<locals>.<setcomp>c                 S   s   h | ]}t |qS r0   rb  rd  r0   r0   r1   rg    rh  )r   r   r
   r=   ri  r   rj  r0   r0   r1   test_numpy_nonzero  s
    
z_TestCommon.test_numpy_nonzeroc                 C   sP   t | jd | jdgd d f  t | jd | jdgd d f  d S Nr   r   )r   r   Zgetrowrs   r   r   r0   r0   r1   test_getrow  s    &z_TestCommon.test_getrowc                 C   sP   t | jd | jd d dgf  t | jd | jd d dgf  d S rn  )r   r   Zgetcolrs   r   r   r0   r0   r1   test_getcol  s    &z_TestCommon.test_getcolc           	         s   t jd tg dg dg dg}t jdd}t g g}t d}tjdddd }|||||g  fd	d
}j	D ] }t
t D ]}||| qqd S )NrR   r   r   rT   r   r  r   r/  r1  r   )r#  r#  g{Gz?)Zdensityc                    s  t  | | d}j|| d}tjddf t| |  t| j| j tt	|jd d t|jd d|jd d t|jd dj|jd dj t|jdd|jdd t|jddj|jddj t|jdd|jdd t|jddj|jddj t|jdd|jdd t|jddj|jddj t|jdd|jdd t|jddj|jddj W d    n1 s0    Y  d S )	Nr   r   )Zoveraxisr   r   r   r   )
r'   r   r=   r   r   sumr   r4   r   isscalar)r4   rJ  r   r   matricesry   r0   r1   r     s(    
z#_TestCommon.test_sum.<locals>.check)r=   rp   rS   r'   randr   r   rf   rs   r   r   r   )	ry   dat_1dat_2Zdat_3Zdat_4Zdat_5r   r4   rJ  r0   ry  r1   test_sum  s    

z_TestCommon.test_sumc                 C   st   t d}tg dg dg dg}| |}tt|jdd tt|jdd tt|jdd tt|jd	|d
 d S Nr   r   rq  rr  rs  r   ru  r   r         ?r   rv  out)r=   r   r   r   r   r   rw  rD  ry   r  r   r   r0   r0   r1   test_sum_invalid_params  s    

z#_TestCommon.test_sum_invalid_paramsc                    sJ   t g dg dg dg |   fdd}| jD ]}|| q8d S )Nrq  rr  rs  c                    s4    j | d}j | d}t|| t|j|j d S Nr   meanr   r   r4   r4   dat_mean
datsp_meanr   r   r0   r1   r     s    
z)_TestCommon.test_sum_dtype.<locals>.checkr   r   r   r   r0   r  r1   test_sum_dtype  s    

z_TestCommon.test_sum_dtypec                 C   s   t g dg dg dg}| |}t dgg}tdgg}|j|dd |j|d t|| td}ttd}|jd	|dd
 |jd	|d t|| d S Nrq  rr  rs  r   T)r  keepdimsr  r   r   r   )rv  r  r  r  )r   r   r'   rw  r   r=   r   r&   ry   r   r   Zdat_outZ	datsp_outr0   r0   r1   test_sum_out  s    


z_TestCommon.test_sum_outc                 C   sT   t g dg dg dg}| |}t|}t|}t|| t|j|j d S Nrq  rr  rs  )r   r   r=   rw  r   r   r4   ry   r   r   r  r  r0   r0   r1   test_numpy_sum  s    



z_TestCommon.test_numpy_sumc                    s$    fdd} j D ]}|| qd S )Nc                    s  t g dg dg dg| d} j|| d}t| |  t| j| j tt|jd d t|jd dd|jd d t|jd dj|jd dj t|jddd|jdd t|jddj|jddj t|jd	dd|jd	d t|jd	dj|jd	dj t|jd
dd|jd
d t|jd
dj|jd
dj t|jddd|jdd t|jddj|jddj d S )Nrq  r   r  r   )r.  r/  r1  r   ru  Trv  r  r   r   r   r   )	r   r   r   r  r   r4   r   r=   rx  r4   r   r   r   r0   r1   r     s<    z$_TestCommon.test_mean.<locals>.check)r   r   r0   r   r1   	test_mean  s    
z_TestCommon.test_meanc                 C   sx   t td}tg dg dg dg}| |}tt|jdd tt|jdd tt|jdd tt|jd	|d
 d S r  )	r&   r=   r   r   r   r   r   r  rD  r  r0   r0   r1   test_mean_invalid_params  s    
z$_TestCommon.test_mean_invalid_paramsc                    sJ   t g dg dg dg |   fdd}| jD ]}|| q8d S )Nrq  rr  rs  c                    s4    j | d}j | d}t|| t|j|j d S r  r  r  r  r0   r1   r   &  s    
z*_TestCommon.test_mean_dtype.<locals>.checkr  r   r0   r  r1   test_mean_dtype   s    

z_TestCommon.test_mean_dtypec                 C   s   t g dg dg dg}| |}t dgg}tdgg}|j|dd |j|d t|| td}ttd}|jd	|dd
 |jd	|d t|| d S r  )r   r   r'   r  r   r=   r   r  r0   r0   r1   test_mean_out0  s    


z_TestCommon.test_mean_outc                 C   sT   t g dg dg dg}| |}t|}t|}t|| t|j|j d S r  )r   r   r=   r  r   r   r4   r  r0   r0   r1   test_numpy_meanD  s    



z_TestCommon.test_numpy_meanc           
      C   s   t g dg dg dgt}| j|dtd}tj|}t g dg dg dg}| j|dtd}tj|}t L}|td	 |td
 |td t|	 }t|	 }	W d    n1 s0    Y  t
|| td t
|	| td d S )Nr  r   r   r   r  r   r.  r   r   r4   )      @              ?)r         @r  )r  r  r  &splu converted its input to CSC formatCspsolve is more efficient when sparse b is in the CSC matrix format.spsolve requires A be CSC or CSR matrix format)r   floatr   re   linalgr)   r   r   r!   rs   r   r   )
ry   MsMZMexpNZsNZNexpr   ZsMexpZsNexpr0   r0   r1   	test_expmQ  s.    *z_TestCommon.test_expmc                    s$    fdd}t fD ]}|| qd S )Nc                    s   t g dg dg dg| }t L}|td |td |td  j|d| d}t|}W d    n1 st0    Y  t|| t	
d	 ttt| d S )
Nr  r  r  r  r  r  r   r  r   )r   r   r   r!   r   r*   r   r   rs   r=   r   r   rD  )r4   r  r   r  ZsMinvr   r0   r1   r   n  s    &z#_TestCommon.test_inv.<locals>.check)r  r   r0   r   r1   test_invm  s    
z_TestCommon.test_invc                 C   s   t g dg dg dg dg}t| | | t g dg dg dg}t| | | t| j|dd |d d S 	Nr   r   r   r  )r   r   r   r  )r  r   r   )r         @r   int16r   )r   r   r   rs   rb   r  r0   r0   r1   test_from_array  s     z_TestCommon.test_from_arrayc                 C   s   t g dg dg dg dg}t| | | t g dg dg dg}t| | | t| j|dd |d d S r  )r'   r   r   todenserb   r  r0   r0   r1   test_from_matrix  s     z_TestCommon.test_from_matrixc                 C   s   g dg dg dg dg}t | | | g dg dg dg}t | | t| t | j|dd t|d d S r  )r   r   rs   r   rb   r  r0   r0   r1   test_from_list  s    z_TestCommon.test_from_listc                 C   s   t g dg dg dg dg}t|}t| | | | |}t| | | t g dg dg dg}t|}t| | | t| j|dd |d | |}t| | | t| j|dd |d d S r  )r   r   r   r   rs   rb   ry   r  Sr0   r0   r1   test_from_sparse  s&     

z_TestCommon.test_from_sparsec           
      C   s  | j  }t|tjsJ t|| j t|jj	|jj
k | j jdd}t|| j t|jj	 t|jj
  | j jdd}t|| j t|jj	  t|jj
 tj| j j| j jd}| j j|d}t| j| t| j| t||sJ ttj| j j| j jd}| j j|d}t| j| t| j| t||s@J tg dg}|| j }|| j   }t|| tg dgj}| j| }| j  | }t|| | j| jtd}| jt}	t| |	 d S )Nr5  r8  r6  r   r  r  r  r  r  r  r        @)r   r  r<   r=   r'   r   r   r   flagsc_contiguousf_contiguousr   r   r4   rB   r&   r   r   r   r   rb   )
ry   chkr  r@   dense_dot_denser   rE   check2spboolZmatboolr0   r0   r1   test_todense  sB    




z_TestCommon.test_todensec                 C   sp  t | j}| j }t|| t|jj|jjk | jjdd}t|| t|jj t|jj  | jjdd}t|| t|jj  t|jj t	j
| jj| jjd}| jj|d t|| d|d< | jj|d t|| tg d}t||}t|| j }t|| tg d	}t||}t| j |}t|| | j| jtd}	|t}
t|	 |
 d S )
Nr5  r8  r6  r   r  r  .r  r  )r   r   r   rs   r   r   r  r  r  r=   r   r   r4   r   r   r   r   rb   )ry   r   r  r  r@   r  r   rE   r  r  Zarrboolr0   r0   r1   test_toarray  s:    











z_TestCommon.test_toarrayc                    s  t g dg dg dg}| |}tD ]}||}dD ]<}|j||d t j|j t  | t j|j q:t j|dd u   j|ddt u  fdd	} jd
v rdD ]}|| qq( jdkrdD ]}|| qq( jdkr(dD ]}|| q q(d S )Ny       @      @r   r   r   y      @      @r   r  )TFrB  FTc                    sj   t  | }t | }t|| t||u d|j }|| }||  ||< t|| || k |||< d S )N)r   )rg   r   r   r   )	attributer@   rE   rI  Zb_iS_castedZS_copiedr0   r1   (check_equal_but_not_same_array_attribute  s    



zI_TestCommon.test_astype.<locals>.check_equal_but_not_same_array_attributecsrcscbsr)indicesindptrdatacoo)rowcolr  dia)offsetsr  )	r   r   r#   rb   r   r4   rs   formatr   )ry   r  r  r5   D_castedr   r  r  r0   r  r1   test_astype
  s2    




z_TestCommon.test_astypec                 C   s   t g dg dg dg}| |}t|dr8d|jj_|jdv rVd|jj_d|jj_t	D ]&}|
|}|
|}t|j|j qZd S )Nr  r  r  r  Fr  )r   r   hasattrr  r  Z	writeabler  r  r  r#   rb   r   r4   )ry   r  r  r5   r  r  r0   r0   r1   test_astype_immutable3  s    







z!_TestCommon.test_astype_immutablec                 C   s   |  tddddd}t|jtd t| jtd t| j|j t|d jtd t|d	 jtd	 | }| }t	||u  d S )
Nr.  rJ   r   rT   r   r   r  r   r   )
r   r   rC  r   r4   r=   Zasfptyper  rb   r   )ry   rC   rD   r5  r0   r0   r1   test_asfptypeD  s    z_TestCommon.test_asfptypec                    s$    fdd} j D ]}|| qd S )Nc                    sD    j |  } j|  }t|d |d   t|d |d   d S NrT   L1@r   r   r   rs   r  r   r0   r1   r   R  s    

z*_TestCommon.test_mul_scalar.<locals>.checkr   r   r0   r   r1   test_mul_scalarQ  s    
z_TestCommon.test_mul_scalarc                    s$    fdd} j D ]}|| qd S )Nc                    sD    j |  } j|  }td| d|   td| d|   d S r  r  r  r   r0   r1   r   ]  s    

z+_TestCommon.test_rmul_scalar.<locals>.checkr  r   r0   r   r1   test_rmul_scalar\  s    
z_TestCommon.test_rmul_scalarc                 C   s@   | j tj }tt d |  W d    n1 s20    Y  d S r3   )r   r=   r   r   rD  )ry   r   r0   r0   r1   test_rmul_scalar_type_errorh  s    
z'_TestCommon.test_rmul_scalar_type_errorc                    s$    fdd} j D ]}|| qd S )Nc                    s    j |  } j|  }| }d|d< |}|| }t|| |  ||  }t| | |   ||d  }t|| |d   d S )Nr  r[  r   )r   r   r   r   rs   r   r4   r   r   r@   rE   r   r   r0   r1   r   n  s    

z#_TestCommon.test_add.<locals>.checkr  r   r0   r   r1   test_addm  s    
z_TestCommon.test_addc                    s$    fdd} j D ]}|| qd S )Nc                    sF    j |  } j|  }| }d|d< |}|| }t|||   d S )Nr  r[  )r   r   r   r   rs   r  r   r0   r1   r     s    

z$_TestCommon.test_radd.<locals>.checkr  r   r0   r   r1   	test_radd  s    

z_TestCommon.test_raddc                    s4    fdd} j D ]}|tdkr&q|| qd S )Nc                    s    j |  } j|  }t||  td t|d  |  tg dg dg dgd}t||  ||   t||  | |  t||d  ||d   d S )NrA  r   r   r   r   r  r   r   r   r   r   r0  r   r  r   )r   r   r   rs   r=   r   r   r   r4   r   r   rC   r   r0   r1   r     s    

z#_TestCommon.test_sub.<locals>.checkr   r   r=   r4   r   r0   r   r1   test_sub  s
    
z_TestCommon.test_subc                    s4    fdd} j D ]}|tdkr&q|| qd S )Nc                    s   j |  } j|  }t|| g dg dg dg t|| g dg dg dg td|  |   tg dg dg dgd}t|| ||   t|| | |  t| | | |  t||  ||   t|d | |d |  d S )Nr;  r   r  r  r  r   )r   r   r   rs   r   r'   r  r   r0   r1   r     s    

  "z$_TestCommon.test_rsub.<locals>.checkr   r  r   r0   r   r1   	test_rsub  s
    
z_TestCommon.test_rsubc                    s$    fdd} j D ]}|| qd S )Nc                    sp   j |   j|  td    tfddtddD }t fddtddD }t| | d S )Nr   c                    s   g | ]}|  qS r0   r0   re  r"  )r   r0   r1   
<listcomp>  rh  z8_TestCommon.test_add0.<locals>.check.<locals>.<listcomp>r   r   c                    s   g | ]}|  qS r0   r0   r  )r   r0   r1   r    rh  )r   r   r   rs   rw  r   r   )r4   ZsumSZsumDr   r  r1   r     s    

z$_TestCommon.test_add0.<locals>.checkr  r   r0   r   r1   	test_add0  s    
z_TestCommon.test_add0c           	      C   s  t g dg dg}t g dg dg}| |}| |}t|| ||  t|| ||  t g dg dg}t g dg dg}| |}| |}t|| ||  t|| ||  t|| ||  t|| ||  d S )	N)r  r   r1  )rT   r  r   )r   r/  r   )r   r  r   y      ?       y              @y              y      @      y            @r   y      @       @y      @      y             ?y              y             @r1  )r   r   r   multiplyrs   )	ry   rC   rD   rk  Bspr5  r  ZCspDspr0   r0   r1   test_elementwise_multiply  s    



z%_TestCommon.test_elementwise_multiplyc                 C   s>  t dg}t dgg}t g d}t g dg}t dgdgdgg}t g dg d	g d
g}g d}td}|j}	t dgg}
t ddgddggg}| |}| |}| |}| |}| |}| |d }| |	}| |	d d dd f }| |
}|||||||||	|
|g}|||||||||g	}|D ]h}|D ]\}z| |  }W n( ty   tt|j| Y q@Y n0 ||}t	| | q@q8|D ]}|D ]}z| | }W n@ t
y   Y qY n( ty   tt|j| Y qY n0 ||}t|r(t	| | n
t	|| qqd S )Nr  r   r   r   )r/  r1  r  r   rT   r   )r0  r.  r   )r  r   rT   )r.  r.  r.  r,  rA  r   r   N)r   r=   onesr   r   rs   r   r   r  r   rD  r    )ry   rC   rD   r5  r  Er6  GHJKLr  r  ZEspZFspZHspZHsppZJspZJsppZKsprz  Z
spmatricesrI  rJ  Z
dense_multZsp_multr0   r0   r1   #test_elementwise_multiply_broadcast  sX    












z/_TestCommon.test_elementwise_multiply_broadcastc                 C   s  dt jt jdgdt jdt jgt jdt jt jgg}tt| j| j | | tg dg dg dgd}dt jt jdgdt jtt jgt jdt jd	gg}tt| j| | tg d
g dg}tg dg dg}| |}| |}t	t|| ||  tg dg dg}tg dg dg}| |}| |}t j
dd& tt|| ||  W d    n1 sr0    Y  td	dgdd	gg}tdd	gdd	gg}| |}| |}t j
ddd, tt t|| ||  W d    n1 s0    Y  d S )Nr   r  r  r  r         ?r  g      ?r   r  r  r  r  r,  )r  rT   r   rq  )r   r   r   r   )divide)r	  r   )r=   r   r   rs   r   r   r'   r   r   r   r   )ry   r   denomrC   rD   rk  r  r0   r0   r1   test_elementwise_divide  s8    "



6

z#_TestCommon.test_elementwise_dividec                 C   s   t g dg dg dg dg}| |}dD ]6}|| }tj||}t| | t|j|j q.dD ]}t	t
|j| qj| |d dd d f }t	t|jd d S )	Nr   r   rT   r   )r   r   r  r   )r   r   r   r   )r   r.  r/  r0  r   r   rT   r   )r   g@r  r   r   )r   r   r=   r  Zmatrix_powerr   rs   r   r4   r   r   __pow__rD  )ry   rC   rD   exponentZret_spZret_npr0   r0   r1   test_pow@  s     
z_TestCommon.test_powc                 C   sn   |  tg dg dg dg dg}tg d| tg d|  tg dg}t|| ||   d S )Nr   r   r   r   r   r   rT   r   r  rT   r   r   r   )r   r'   r   r   rs   r   )ry   r  r  r0   r0   r1   test_rmatvecR  s    & z_TestCommon.test_rmatvecc                 C   s   |  dgdgdgg}tt|td  t|td  dgdgdgg t|tdg tg d t|tdgg tdgdgdgg t|td tdgdgdgg t|td td d S )Nr   rT   r   r,  r   r   r   r   r   r   )r   r   r    r   r   rs   r=   r   r  r0   r0   r1   test_small_multiplicationX  s    "&$z%_TestCommon.test_small_multiplicationc                 C   s   |  dgdgdgg}t|tr`t|td | t|tdgg | t|td | n\t|tdg tg d t|tdgg tdgdgdgg t|td td d S )Nr   rT   r   r  r,  r  r  )r   r<   r"   r   r=   r   r   r   r  r0   r0   r1   .test_start_vs_at_sign_for_sparray_and_spmatrixd  s    
&z:_TestCommon.test_start_vs_at_sign_for_sparray_and_spmatrixc                 C   s   |  dgdgdgg}t }t|| d t|| d t|| d t|| d t|| d t|| d t|| d t|| d d S )Nr   rT   r   r   rw   )r   ru   r   ry   rC   rD   r0   r0   r1   test_binop_custom_typeq  s    z"_TestCommon.test_binop_custom_typec                 C   s   |  dgdgdgg}td}t|| d t|| d t|| d t|| d t|| d t|| d t|| d t|| d d S )Nr   rT   r   r  r   rw   )r   r   r   r  r0   r0   r1   !test_binop_custom_type_with_shape  s    z-_TestCommon.test_binop_custom_type_with_shapec                 C   sd   G dd d}d}|  dgdgdgg}||}|| }|| }t| |  t|j|j d S )Nc                   @   s   e Zd Zdd Zdd ZdS )z0_TestCommon.test_mul_custom_type.<locals>.Customc                 S   s
   || _ d S r3   scalar)ry   r  r0   r0   r1   r     s    z9_TestCommon.test_mul_custom_type.<locals>.Custom.__init__c                 S   s
   || j  S r3   r  r   r0   r0   r1   r     s    z9_TestCommon.test_mul_custom_type.<locals>.Custom.__rmul__N)r   r   r   r   r   r0   r0   r0   r1   Custom  s   r   rT   r   r   )r   r8   rs   r   r  )ry   r   r  rC   r   ZA_scalarZA_cr0   r0   r1   test_mul_custom_type  s    z _TestCommon.test_mul_custom_typec                 C   st   |  dgdgdgg}t }t||kd t||kd t||kd t||kd t||k d t||kd	 d S )
Nr   rT   r   r   r   r   r   r   r   )r   r   r   r  r0   r0   r1   test_comparisons_custom_type  s    z(_TestCommon.test_comparisons_custom_typec                 C   sR   |  tg dg dg dg dg}d}||}|| }t| |  d S )Nr  r  r  r  rG   )r   r   r   r   rs   )ry   r  r  actualr   r0   r0   r1   test_dot_scalar  s
    &
z_TestCommon.test_dot_scalarc                 C   sJ  |  tg dg dg dg dg}|  tddgddgddggd}tg d	gj}tj}t|||| |  t||| ||   t|| |||   t||| ||   t|ts*t||| ||   t|| |||   t||| ||   t	t
||d t	t
|d| d S )
Nr  r  r  r  r   r   rT   r   r,  )r   r   r   operatormatmulr   rs   r<   r"   r   r   )ry   r  rD   r  r&  r0   r0   r1   test_matmul  s    &"z_TestCommon.test_matmulc                 C   s  |  tg dg dg dg dg}tg dgj}t|| | |  t|tg d jd t|tdgdgd	gg jd
 t|tdgdgd	gg jd
 tt	|tg d t
 tt	|tg dj tj tddgtg dtdgdggtg dtdgdggg}|D ]}tt|j| qt|tg d t| g d t|dgdgd	gg tt| g dj d S )Nr  r  r  r  r,  )r  r   rT   r   )r  r   r   )r   r'   r   r   r   rs   r   r   r   r<   r	   r=   r   r   r|   r   r&   )ry   r  r  Zbad_vecsr5   r0   r0   r1   test_matvec  s    &  "$z_TestCommon.test_matvecc                 C   s  t g dg dg dg dg}tg dg dg dg dg}t ddgddgddggd}| |}| |}t||  ||  t|| ||  t|| ||  t|| ||  | }|}|| }t||  | t|| | t|| | t|| | | }t||  | t|| | t|| | t|| | | }t||  | t|| | t|| | t|| | d	}	d
}
t	d t
|	df}t|	D ]8}tdD ](}t }||
k r||
 |||f< qƐq| |}||j }t| | |j   t| | | j  | ddgddgg}| ddgddgddgg}tt|j| t|trtt|j| d S )Nr  r  r  r  r   r   rT   r   r>  g333333?r   r  r   r.  )r'   r   r   r   rs   r   r   r   rp   rS   r   r   r   r   r   r   r<   r"   r|   )ry   r@   Za2rE   aspbspcspr   Zwantr  fracrC   rI  rJ  rR  rD   r0   r0   r1   test_matmat_sparse  sX      





z_TestCommon.test_matmat_sparsec                 C   s   t g dg dg dg dg}| |}tddgddgd	d
ggt ddgddgd	d
ggg}|D ]:}|| }tt|t| t|jd t|t|| qbd S )Nr  r  r  r  r   rT   r   r  r   r.  r  rT   )	r'   r   r   r   r<   typer   r   r   )ry   r@   r)  bsrE   resultr0   r0   r1   test_matmat_dense  s     
4z_TestCommon.test_matmat_densec                 C   s
  t g dg dg dgddgddgg}| }| |}dD ]}||}t|j| t| | | |d	 |}t|j| t| |d	  t|d
 |}t|j| t| | q@dD ]:}||}t|| | |d	 |}t||d	  qd S )Nr  r   r   r  )r   r   r   r   rT   r   r   )r  r  r  r  r  r9   lil              @Z_matrix)r   dense)	rf   r   rs   r   asformatr   r  r   eval)ry   rC   r  r  r@   rE   r   r0   r0   r1   test_sparse_format_conversions*  s$    *



z*_TestCommon.test_sparse_format_conversionsc           	      C   s   t g dg dg dg}t g dg dg}t||}| |}dD ]>}t|d| }dD ]&}d	D ]}t|||fd
 | qdq\qFd S )Nr  r;  r   r   r  r   rq  r   r   r   )r  to)r   rT   r   r.  )r   rT   r   r  r.  r7  	blocksize)r   r   r   rg   r   rs   )	ry   r5   r6   rC   rk  r  fnXYr0   r0   r1   
test_tobsrC  s    

z_TestCommon.test_tobsrc                    s   j }tg g}||g  fdd}d}tt| ttd t|j td t	t
|jdd jD ] }tt D ]}||| qqzd S )Nc                    sr   t  | | d}|}| }| }t| | t|  | t|jdd | t|j|j d S )Nr   r  axes)r   r   r
   r   rs   r   r4   )r4   rJ  r   r   r@   rE   ry  r0   r1   r   T  s    
z)_TestCommon.test_transpose.<locals>.checkrA  r  r   r   rC  )r   r=   r   r   r   r
   rs   r   r   r   r   r   r   r   )ry   r|  r}  r   r(  r4   rJ  r0   ry  r1   test_transposeO  s    

z_TestCommon.test_transposec                    s$    fdd} j D ]}|| qd S )Nc                    sD    j |  } j|  }|| }t|||  || }t|||  d S r3   )r   r   r   r4   r   r   Zsum1Zsum2r   r0   r1   r   l  s    

z)_TestCommon.test_add_dense.<locals>.checkr  r   r0   r   r1   test_add_densek  s    

z_TestCommon.test_add_densec                    s4    fdd} j D ]}|tdkr&q|| qd S )Nc                    s    j |  } j|  }|jtkrL|| }t|||  || }t|||  n<|| | | }t|||  || | | }t|||  d S r3   )r   r   r4   r   r   rG  r   r0   r1   r   {  s    


z)_TestCommon.test_sub_dense.<locals>.checkr   r  r   r0   r   r1   test_sub_densey  s
    
z_TestCommon.test_sub_densec                    s   t g dg dg dg t g dg dg dgt g dg dg dg fd	d
}jD ]<}t jt jt jfD ]&}dD ]}|t |t || qqqld S )N)r   r   r   )r   r  r   r  )r   r   rT   )r   r   r.  r  )r   y      @       @r   )r                 ?y             c           
         s6  t | t jr | }n | }|dkrD|d}nH|dkrX|d}n4|dkrl|}n |dkr|}nt t 0}|t	d |
|}||}W d    n1 s0    Y  t 
t|t|}tt|| t|j|j t t|t|}	tt||	 t|j|	j d S )Nr  r   scalar2r   r6  rf   zHTaking maximum .minimum. with > 0 .< 0. number results to a dense matrix)r=   rZ   complexfloatingr   rb   r/  r   r   r   r!   maximumminimumrs   r   r   r4   )
r4   dtype2btyperC   rD   r   Zmax_sZmin_sZmax_dZmin_dZA_denseZA_dense_cpxZB_densery   r0   r1   r     s0    
(z/_TestCommon.test_maximum_minimum.<locals>.check)r  rK  r6  rf   )r=   r   r   r   r   r   r4   )ry   r   r4   rO  rP  r0   rQ  r1   test_maximum_minimum  s     
z _TestCommon.test_maximum_minimumc                 C   s
  | j }t| j|j t|j|ddj|j t|j|ddj|j t|  |  t|j|dd |  t|j|dd |  t|d|j }t| |u  t|dd|u  t|ddj|j t|dd |  tt| |  d S )NTrB  Fr<  )	r   r   r   r  	__class__rs   rg   r   rF   )ry   rC   Ztoselfr0   r0   r1   	test_copy  s    z_TestCommon.test_copyc                 C   sF   t tddd}| |}t||D ]\}}t| | q*d S )N2   r   rG   )r'   r=   r   rC  r   zipr   rs   )ry   rD   rC   r5   r6   r0   r0   r1   test_iterator  s    
z_TestCommon.test_iteratorc                 C   s  t g }|d}|d}|d}|d}|d}tddg}| |}| |}	| |}
| |}| |}| |}t|| t|| t|	| t|| t||	 t|| t|
| t|| t|
| t|| t||
 t|| t||
 t|| t|| t|| tt	|j| tt	|j| t|
| t
|| t|	
|	 t
|| t|
| t
|| t|
| t
|| t|	
| t
|| t|
| t
|| t|
d t
|d t|	
d t
|d t|
d t
|d tt	|j
| tt	|j
| t|| || t|	|	 || t|| || tt	|j| tt	|	j| d S )Nr$  r  r&  r  rU  r   r.  )r   rC  r=   r   r   r   r   rs   r   r   r  r{   )ry   rz   r@   rE   r   r   r   r   r)  r*  r+  ZdspZespZfspr0   r0   r1    test_size_zero_matrix_arithmetic  sN    










z,_TestCommon.test_size_zero_matrix_arithmeticc                 C   s   t g }|d}|d}|d}|||fD ]z}| |}t|  | t|  | t|  | t|  | t|	  | t|
  | q0d S )Nr$  r&  rU  )r   rC  r   r   r   rs   r   r   Ztoliltodoktobsr)ry   rz   r@   rE   r   r   Zspmr0   r0   r1   test_size_zero_conversions  s    



z&_TestCommon.test_size_zero_conversionsc                    s4   dd l  t }|t | fdd}|  d S )Nr   c                     s   j  } t jD ]}  j| |d}t| j|j t| 	 |	  t| j
|j
 | j D ]h\}}t|tjrt||j|  qdt|tr|rt|d tjrt||j|  qdt||j| k qdqd S )N)protocolr   )r   r   r   HIGHEST_PROTOCOLloadsdumpsr   r   r   rs   r  r:   itemsr<   r=   r	   rc  r   )r   r\  Zsploadedkeyr   picklery   r0   r1   r   ,  s    
z&_TestCommon.test_pickle.<locals>.check)rc  r   r   r!   )ry   r   r   r0   rb  r1   test_pickle'  s    
z_TestCommon.test_picklec                    s"    fdd}dD ]}|| qd S )Nc                    sv   | dkrt d  jttfv r*t d tt| } tdddd }||	 }||}t
|	 | d S )Nsignz2sign conflicts with comparison op support on Numpyz%Unary ops not implemented for dok/lilr=  r  r         4@)r   r   r   r   r   rg   r=   r   rC  rs   r   )rn   Zufuncr@  ZX0X2r   r0   r1   r   D  s    


z5_TestCommon.test_unary_ufunc_overrides.<locals>.check)sintanarcsinarctansinhtanharcsinharctanhrintre  expm1log1pdeg2radrad2degfloorceiltruncsqrtr  r0   )ry   r   rn   r0   r   r1   test_unary_ufunc_overridesC  s    z&_TestCommon.test_unary_ufunc_overridesc                 C   sD  t g dg dg dg}| |}t|dd u  t| ddgddgddgg |d	 t| ddgddgg |d t| ddgddgddgg |d
 t| g dg dg dg |d
 t| g dg dg dg |dd t| ddgddgddgg dD ]}tt|j| q*d S )Nr   r   r   r  rT   r   r   r   r   r   r   r   r   rT   r   r   rT   r   rT   rT   r   r  )rT   r   r   r  )r   )r   rT   r@  r,  	r=   r   r   r   resizer   rs   r   r   )ry   r  r  Z	bad_shaper0   r0   r1   test_resizeX  sH    





z_TestCommon.test_resizec                 C   sB  | j }|j}|j|dd}t| |  |tvrBtt|| |j||jdd}t| |  |tvr|tt|| |j|t	j
dd}t| |  |j|dd}t| |  tt||  dD ]h}||krq||}|j|dd}t| |  |j|dd}t| |  tt||  qd S )NFrB  )r4   r   T)r  r  r  r  r9   r4  )r   r  rS  r8   rs   NON_ARRAY_BACKED_FORMATSr   rF   r4   r=   r   r   r7  )ry   rC   Zself_formatr5  Zother_formatrD   r0   r0   r1   test_constructor1_base|  s0    
z"_TestCommon.test_constructor1_baseN)dr   r   r   __doc__r#   r   classmethodr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r+  r4  rF  r   markslowrY  r_  rl  rm  ro  rp  r~  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r"  r$  r'  r(  r-  r2  r9  rB  rF  rH  rI  rR  rT  rW  rX  r[  rd  ry  r  r  r0   r0   r0   r1   r     s   
%'?>::!,
9!	
#"




)%
(
7#
8+:$r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
_TestInplaceArithmeticc                 C   s   t d}| |}| }| }||7 }||7 }t|| | }| }||8 }||8 }t|| | }| }t|trttt	j
||j || }||9 }n&ttt	j
|| ||j}||j9 }t|| ttt	j|| d S )NrA  )r=   r   r   r   r   r<   r"   r   r   r%  imulr   r   rD  	ifloordiv)ry   r@   rE   r5   r6   r0   r0   r1   test_inplace_dense  s.    







z)_TestInplaceArithmetic.test_inplace_densec                    s$    fdd} j D ]}|| qd S )Nc                    s    j |  } j|  }tjt| ddrR| }|d9 }| }|d9 }t||  tjt| ddr| }|d9 }| }|d9 }t||  d S NZ	same_kind)ZcastingrT   r  	r   r   r=   can_castintr   r   rs   r  r4   r   r   r@   rE   r   r0   r1   r     s    

z6_TestInplaceArithmetic.test_imul_scalar.<locals>.checkr  r   r0   r   r1   test_imul_scalar  s    
z'_TestInplaceArithmetic.test_imul_scalarc                    s6    fdd} j D ]}t|tts|| qd S )Nc                    s    j |  } j|  }tjt| ddrR| }|d }| }|d }t||  tjt| ddr| }|d }| }|d }t||  d S r  r  r  r   r0   r1   r     s    

z6_TestInplaceArithmetic.test_idiv_scalar.<locals>.check)r   r=   r  r4   r  r   r0   r   r1   test_idiv_scalar  s    
z'_TestInplaceArithmetic.test_idiv_scalarc                 C   s   |  td}|  td}|  td}||7 }|| }t| |  ||9 }|| }t| |  ||8 }|| }t| |  tttj|| d S )Nr   )	r   r=   r   r   rs   r   rD  r%  r  )ry   r@   rE   bpr0   r0   r1   test_inplace_success  s    z+_TestInplaceArithmetic.test_inplace_successN)r   r   r   r  r  r  r  r0   r0   r0   r1   r    s    r  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )_TestGetSetc                    s(    fdd}t D ]}|t| qd S )Nc                    s   t g dg dg dg dg| d} |}|j\}}t| |D ]0}t| |D ]}t|||f |||f  qTqDtt|d |  dD ]}tttf|j	| qd S )Nr  r  r   r   r   rT   r   r  r   r  r   r   r   )r  r   rE  )r  r   r,  )
r   r   r   r   r   r/  r   
IndexErrorrD  __getitem__)r4   r  rC   r  r  rI  rJ  rf  r   r0   r1   r   	  s    

z*_TestGetSet.test_getelement.<locals>.checkr#   r=   r4   r   r0   r   r1   test_getelement	  s    z_TestGetSet.test_getelementc                    s(    fdd}t D ]}|t| qd S )Nc                    sL   j d| d}t ~}|td | d|d< | d|d< | d|d	< | d
|d< | d|d< | d|d< | d|d	< W d    n1 s0    Y  | tjkrt| g dg dg dg dD ]}t	t
|j|d qg dtg dfD ]}t	t|jd| qt| tjsH| tjkrHdD ]}t	t|jd| q0d S )NrA  r   rM  r   r$  r  r   rT   r   r  r  r\  r0  r   r   r/  r   r   r   )r   r   r   r0  )r   r   r  r   )rT   r   r/  r   ))r   r  )r   r  r  rA  r   g     ^@r,  )r5  )r   r   r   r!   r/  r=   bool_r   rs   r   r  __setitem__r   r   rZ   rL  rD  )r4   rC   r   rf  rG  r   r0   r1   r   	  s<    ,
	z*_TestGetSet.test_setelement.<locals>.checkr  r   r0   r   r1   test_setelement	  s    $z_TestGetSet.test_setelementc                    s*    fdd} j D ]}|t| qd S )Nc                    sZ    j d| d}t $}|td d|d< W d    n1 s>0    Y  t|d d d S )N)r   rG   r   rM  r   )r   r  )r   r   r   r!   r   r4   rC   r   r   r0   r1   r   G	  s    &z9_TestGetSet.test_negative_index_assignment.<locals>.checkr  r   r0   r   r1   test_negative_index_assignmentD	  s    

z*_TestGetSet.test_negative_index_assignmentc                    s^   d\  fdd}dddt ddfdt dft dt dffD ]\}}|||d	 qDd S )
Nr   rG   c                    s   | d|d|}  f}t (}|td d|| |f< W d    n1 sV0    Y  t| ||d t|| |f d|d d S )Nz ; rM  r   rN  )r   r   r   r!   r   rw  )rI  rJ  Znitemsr-   rC   r   r   rH  ry   r0   r1   	_test_setW	  s    *z3_TestGetSet.test_scalar_assign_2.<locals>._test_setrT   r   r   r0  r  r   r   r   )r   ry   r  rI  rJ  r0   r  r1   test_scalar_assign_2T	  s    z _TestGetSet.test_scalar_assign_2c                 C   s~   |  d}td}t B}|td ||fD ]}d|d< d|d< d|d< q0W d    n1 sb0    Y  t| | d S )Nr   rM  r   r  r  r  r1  r   r=   r   r   r   r!   r   rs   ry   rC   rD   r   r5  r0   r0   r1   test_index_scalar_assignh	  s    

(z$_TestGetSet.test_index_scalar_assignN)r   r   r   r  r  r  r  r  r0   r0   r0   r1   r  	  s
   (r  c                   @   s   e Zd Zdd ZdS )
_TestSolvec                 C   s  d}t jd t||ftd}t j|}t j|d dt j|d   }t j|}tt|D ]}|| |||f< qhtt|D ]0}|| |||d f< t|| ||d |f< q| 	|}t
 *}|td t||}W d    n1 s0    Y  t|| | d S )Nr=  r   r   r   rJ  r  )r=   rp   rS   r   r   r{  r   r   r   r   r   r   r!   r(   Zsolver   )ry   rH  rC   r5   r6   rR  rI  r   r0   r0   r1   
test_solvex	  s$    $
,z_TestSolve.test_solveN)r   r   r   r  r0   r0   r0   r1   r  w	  s   r  c                   @   s\   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd ZdS )_TestSlicingc                 C   s   t | jdtjddddf jtj t | jdtjddddf jtj t | jdtjddddf jtj t | jdtjddddf jtj d S )Nr   rG   r   r   r   r   )r   r   r=   r  r4   rJ   r   r   r   r0   r0   r1   test_dtype_preservation	  s    &&&z$_TestSlicing.test_dtype_preservationc                 C   s   t jt jt jt jfD ]}| jd|d}t|d d dddf j| t|dddd d f j| t|ddddf j| t|ddddf j| qd S )Nr}  r   r   rT   r=   r  rJ   r   r   r   r   r4   ry   dtrC   r0   r0   r1   #test_dtype_preservation_empty_slice	  s    z0_TestSlicing.test_dtype_preservation_empty_slicec                 C   sb  t tddd}| |}t|dd d f |dd d f   t|dddf |dddf   tg dg dg dg d	g}| |}t|ddd
f |ddd
f   tg dg dg dg d	g}| |}t|ddd
f |ddd
f   t|ddd f |ddd f   tt|j	t
d df tt|j	dt
d
df d S )N      I@r   rG   r   rT   r   rT   r   r  r   r.  r  r  r   r  r   r   r      r.  r/  )r&   r   rC  r   r   rs   r'   r   r  r  slicery   rD   rC   r5  r  r  r6  r0   r0   r1   test_get_horiz_slice	  s    
&& 
& 
&&z!_TestSlicing.test_get_horiz_slicec                 C   s  t ddd}| |}t|dddgf |dddf   t|d d dgf |d d df   tg dg dg d	g d
g}| |}t|dddgf |dddf   t|d d dgf |d d df   tg dg dg d	g d
g}| |}t|d d dgf |d d df   t|dd dgf |dd df   tt|jt	d df tt|jdt	ddf d S )Nr  r   rG   rT   r   r   r  r  r  r  r   r`  r  r   r  r.  r/  )
r   rC  r   r   rs   r   r   r  r  r  r  r0   r0   r1   test_get_vert_slice	  s    
(( 
(( 
((z _TestSlicing.test_get_vert_slicec                 C   s.  t ddd}| |}t|ddddf  |ddddf  t|dd d df  |dd d df  t|d ddd f  |d ddd f  tg d	g d
g dg dg}| |}t|ddddf |ddddf   t|d d dd f |d d dd f   d S )Nr  r   rG   rT   r   r   r   r   r`  r  r  r  )r   rC  r   r   rs   r   )ry   rD   rC   r  r6  r0   r0   r1   test_get_slices	  s    
... 
.z_TestSlicing.test_get_slicesc                 C   st   t jdd}z"| |ddddddf }W n tyL   tdY n0 t| |ddddddf  d S )NrU  r      rT   r>  r   feature not implemented)	r=   rp   r{  r   r   r   r   r   rs   )ry   Zv0rG  r0   r0   r1    test_non_unit_stride_2d_indexing	  s    "z-_TestSlicing.test_non_unit_stride_2d_indexingc                 C   s  t tddd}| |}t|d |d  t|d |d  t|d |d  t|tddf |d  t|dtdf |d  t|tdtdf |d  t|d	d d f  |d	d d f  t|d	ddf  |d	ddf  t|td	ddf  |d	ddf  t|d d d	f  |d d d	f  t|d
ddf  |d
ddf  t|dddf  |dddf  t|d	dd
f  |d	dd
f  t|d	dtd
f  |d	dd
f  t|dd	dd	f  |dd	dd	f  t|dd d
d f  |dd d
d f  t|d dd df  |d dd df  t|d	dd df  |d	dd df  t|dd d f  |dd d f  t|dd d f  |dd d f  t|tdd d f  |dd d f  t|dd  |dd  t|dd  |dd  ttd	tdd }t||d d f  |d	dd d f  t|d d |f  |d d d	df  d S )NrU  r   rG   r  r  r  r   r   rT   r   r  r1  r   r  )	r&   r   rC  r   r   r   rs   r  r   )ry   rD   rC   rE  r0   r0   r1   test_slicing_2	  s8    
&&*&&&&*....&&**z_TestSlicing.test_slicing_2c                    s  t tddd|  tj}|d d |dd |dd  |dd d |dd |dd |d	dd
 |dd d |d dd
 dd|d d  |dd d
ddtd
tdg} fdd}t|D ]\}}|| q̇ fdd}t|D ]&\}}t|D ]\}}||| qqg }	t	j
dgd  D ],\}}}
|
dkrHq0|	t|||
 q0|	D ]$}||| ||d |d| qbd S )NrU  r   rG   rT   r   r   r%  r=  r0  r   r  r   r   r  r  c                    sZ    |  }|  }|j dkr,t||t|  n*|jdkrB|jdkrBnt| |t|  d S Nr0   r   )r   r   r   rY   r   rs   )r@   r5   r6   rC   rD   r0   r1   check_1
  s    
z,_TestSlicing.test_slicing_3.<locals>.check_1c                    s   t | tjrt| }n| }t |tjr0t|}n|} | |f }||f }|jdkrlt||t| |f n.|jdkr|jdkrnt|	 |t| |f d S r  )
r<   r=   r	   r  r   r   r   rY   r   rs   )r@   rE   ZaiZbir5   r6   r  r0   r1   check_2&
  s    


z,_TestSlicing.test_slicing_3.<locals>.check_2)
Nr   r   rT   r   r%  r   r   r   i)r&   r   rC  r   r=   s_r   r   	enumerate	itertoolsproductr>   r  )ry   r  slicesr  rJ  r@   r  rI  rE   Zextra_slicesr   r0   r  r1   test_slicing_3
  s6    
*$



z_TestSlicing.test_slicing_3c                 C   sN  t tddd}| |}t|d  |d j t|d  |d j t|d  |d j t|d  |d j t|dd df  |dd df j t|ddd f  |ddd f j t|dd ddf  |dd ddf j t|dddd f  |dddd f j t|d	 |d	  t|d
 |d
  d S )NrU  r   rG   .).)r   .).r   r   )r   r   .)r   .r   )r&   r   rC  r   r   rs   rC   r   )ry   rE   r@   r0   r0   r1   test_ellipsis_slicingO
  s    
((,,z"_TestSlicing.test_ellipsis_slicingc                 C   s   |  tddd}tjtdd |d  W d    n1 sB0    Y  tjtdd |d  W d    n1 sx0    Y  d S )Nr.  r   rT   z(an index can only have a single ellipsismatch)..).r   .)r   r   rC  r   r   r  ry   r@   r0   r0   r1   test_multiple_ellipsis_slicinga
  s    &z+_TestSlicing.test_multiple_ellipsis_slicingN)r   r   r   r  r  r  r  r  r  r  r  r  r  r0   r0   r0   r1   r  	  s   
-Br  c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )_TestSlicingAssignc                 C   s   |  d}td}t }|td ||fD ]Z}d|dddf< d|dddf< d|dddf< d|ddd f< d|dd ddd f< q0W d    n1 s0    Y  t| | d S )	Nr   rM  r   r   r  r   r1  r   r  r  r0   r0   r1   test_slice_scalar_assignm
  s    

6z+_TestSlicingAssign.test_slice_scalar_assignc                    sh   d\  fdd}dt dfdt d ddfdt dd	ftdt dd	ffD ]\}}||| qPd S )
Nr  c                    s   d| d|}  f}t (}|td d|| |f< W d    n1 sR0    Y  t f}d|| |f< t| ||d d S )Nzi=z; j=rM  r   rN  )r   r   r   r!   r=   r   r   rs   )rI  rJ  r-   rC   r   rD   r  r0   r1   r  
  s    *z9_TestSlicingAssign.test_slice_assign_2.<locals>._test_setrT   r   rG   r  r   r   )r  r   r  r0   r  r1   test_slice_assign_2}
  s    $z&_TestSlicingAssign.test_slice_assign_2c                 C   sL  |  d}t $}|td d|d< d|d< d|d< d	|d
< |d	 }|dd d f |dd d f< t|dd d f  |dd d f   |d	 }|d dd df |d d d d f< ttd|d  |  |d	 }|dd d f j|d ddf< t|dd d f  j|d ddf   W d    n1 s>0    Y  d S )NrE  rM  rT   r$  r/  r  r   rT   r   rG   r  r   r   r   )	r   r   r   r!   r   rs   r=   r   r   )ry   rD   r   rC   r0   r0   r1   test_self_self_assignment
  s&    

*$z,_TestSlicingAssign.test_self_self_assignmentc                 C   s   |  d}tg dg dg dg dg}ddgddgg}t }|td	 d
|d< d|d< d|d< || |d d d d f< t| | tt||d dd df< t| d dd df | W d    n1 s0    Y  d S )NrE  rG   r   r   )r   r   r.  )r      r   r  r   r   r  rM  r   r$  r   r  r/  r  rT   )r   r   r   r   r!   r   rs   r   )ry   rD   r   blockr   r0   r0   r1   test_slice_assignment
  s&    
z(_TestSlicingAssign.test_slice_assignmentc                 C   s   |  d}t R}|td d|d< d|d< d|d< d	|d
< ttd|d d< W d    n1 sh0    Y  tg dg dg dg dg}t|	 | d S )NrE  rM  r   r$  r   r  r/  r  rG   r  r  r  r  r  )
r   r   r   r!   r   r=   r   r   r   rs   )ry   rD   r   r   r0   r0   r1   "test_sparsity_modifying_assignment
  s    
4 z5_TestSlicingAssign.test_sparsity_modifying_assignmentc           
      C   s(  |  d}ttdt}tj}|d d |dd |dd  |dd d |ddd |dd d |d d	d d
d|d d  |dd	 dddtdtdg}t d}|t	d t
|D ],\}}|||< |||< t| |t| qt
|D ]l\}}t
|D ]Z\}}	d| d|d   |||	f< d| d|d   |||	f< t| |t||	f q qtddd|d
dddf< tddd|d
dddf< t| | tdd	dd d d f |dd	dd
f< tdd	dd d  |dd	dd
f< t| | W d    n1 s0    Y  tt|jdttd tt|jdtd tt|jd
td fttd tt|jtd dfttd tt|jtd df|  tt|jg dg dgg dfg d tt|jg dg dg dgg dg dgfg d tt|jtdd
fddgddgg d S )Nr  rT   r   r   r0  r   r  r   r   r   r  r  rM  rG     r$  d   r,  r3  r   )r  r   r   r   rT   r  )r   r   r   r  )r   r   r   r  r=   r  r   r   r   r!   r  r   rs   r   r   r   r   r   r  listr  r   )
ry   rC   rD   r  r  r   rJ  r@   rI  rE   r0   r0   r1   test_set_slice
  sb    
*$
($.

z!_TestSlicingAssign.test_set_slicec                 C   sH   |  td}|  d}||dd df< t| g dg dg d S )Nr  r  r   rT   r   r   r   r  )r   r=   r   r   rs   r  r0   r0   r1   test_assign_empty  s    
z$_TestSlicingAssign.test_assign_emptyc                 C   s^   |  td}td}||d d df< ||dd d f< t| g dg dg dg d S )Nr   r   r   r   ra  r  )r   r=   r   r   r   rs   ry   rC   r5   r0   r0   r1   test_assign_1d_slice  s
    
z'_TestSlicingAssign.test_assign_1d_sliceN)r   r   r   r  r  r  r  r  r  r  r  r0   r0   r0   r1   r  l
  s   0r  c                   @   sh   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd ZdS )_TestFancyIndexingzTests fancy indexing features.  The tests for any matrix formats
    that implement these features should derive from this class.
    c                 C   s   t jt jt jt jfD ]z}| jd|d}t|d d ddgf j| t|g dd d f j| t|d d g f j| t|g d d f j| qd S )Nr}  r   F)FFFr  r  r0   r0   r1   #test_dtype_preservation_empty_index  s    z6_TestFancyIndexing.test_dtype_preservation_empty_indexc                 C   s^   |  tddg}ttttf|jd ttttf|jd tttf|jg dg df d S )Nr   foorT   r  r,  r   )r   r=   r   r   r  r   rD  r  r  r0   r0   r1   test_bad_index  s    z!_TestFancyIndexing.test_bad_indexc                 C   sV  t tddd}| |}t|ddg  |ddg  t|dddgf  |dddgf  t|dddgf  |dddgf  t|tdddgf  |dddgf  t|dtddgf  |dddgf  t|tdtddgf  |dddgf  t|d d g d	f  |d d g d	f  t|dd
dgf  |dd
dgf  t|dd
ddgf  |dd
ddgf  t|dd
tddgf  |dd
ddgf  t|ddgdf  |ddgdf  t|ddgdf  |ddgdf  t|tddgdf  |ddgdf  t|ddgtdf  |ddgdf  t|tddgtdf  |ddgdf  t|ddgd d f  |ddgd d f  t|ddgddf  |ddgddf  t|tddgddf  |ddgddf  tt|ddgdd
gf |ddgdd
gf  tt|ddgddgf |ddgddgf  tt|tddgddgf |ddgddgf  tt|ddgtddgf |ddgddgf  tt|tddgtddgf |ddgddgf  t|dgdggdd
gf  |dgdggdd
gf  t|dgdgdggddgf  |dgdgdggddgf  t|tdgdgdggddgf  |dgdgdggddgf  t|dgdgdggtddgf  |dgdgdggddgf  t|tdgdgdggtddgf  |dgdgdggddgf  t|ddg  |ddg  t|ddg  |ddg  t|tddg  |ddg  t|ddgd d f d d dd
gf  |ddgd d f d d dd
gf  t|ddgd d f d d ddgf  |ddgd d f d d ddgf  t|tddgd d f d d tddgf  |ddgd d f d d ddgf  t|d d ddgf dd
gd d f  |d d ddgf dd
gd d f  t|d d ddgf ddgd d f  |d d ddgf ddgd d f  t|d d tddgf tddgd d f  |d d ddgf ddgd d f  ttdtd
d }t||d d f  |dd
d d f  t|d d |f  |d d dd
f  t	jdggt
d}t|||f  |||f  t|g gg gf  |g gg gf  d S )NrU  r   rG   r   r   r   rT   r  )rT   r0  r   r   r  r1  r  r0  r  r   r   )r&   r   rC  r   r   rs   r   r  r   r=   r  )ry   rD   rC   rE  rI  r0   r0   r1   test_fancy_indexing%  s    
&&**..*.2&&**...2..,,06""&"HH."HH."**z&_TestFancyIndexing.test_fancy_indexingc                 C   s   t jd d}d}d}tt j||}t ||dk}t jj| d ||d}t jj| d ||d}| |}|||f }t|r|	 }t
||||f  || }	|| }
tt|j|	|f tt|j||
f d S )NrR   rU  r.  r  r  r   rL  )r=   rp   rS   r&   r{  r  rV   r   r    rs   r   r   r  r  )ry   ZNUM_SAMPLESr  r  r  Ir  r  SIJI_badJ_badr0   r0   r1   test_fancy_indexing_randomized  s"    
z1_TestFancyIndexing.test_fancy_indexing_randomizedc              	   C   s  d\}}t t|| ||}| |}tj|d td}tj|d td}tj|d td}tj|d td}tjt	d|d  d| d  ||d d f }	W d    n1 s0    Y  tjt	d|d  d| d  ||d d f }	W d    n1 s0    Y  t
||td f||td fD ]b\}
}t|
trTt|trTq0tjt	dd ||
|f }	W d    n1 s0    Y  q0d S )	Nr  r   r   rT   z(boolean row index has incorrect length: z instead of r  z&boolean \w+ index has incorrect length)r&   r   rC  r   r=   r   r   r   r   r  r  r  r  r<   )ry   r  r  rD   rC   Zrow_longZ	row_shortZcol_longZ	col_shortr   rI  rJ  r0   r0   r1   test_missized_masking  s8    
.0z(_TestFancyIndexing.test_missized_maskingc           	      C   s  t jd ttddd}| |}t jt jjddddt	d}t jt jjddddt	d}t jt jjddd	dt	d}t
t|| ||  t
t|d d |f |d d |f  t
t|| ||  t
t||d
k ||d
k  t g d}t g d}t
t|||f |||f  t jdt	d}t jdt	d}d|d< t jdt	d}d|d< tt|j| tt|j| tt|j| tttf|j|df d S )NrR   rU  r   rG   r   rT   rL  r   r  r1  )TFTTF)
FTTFTFFFFF)r.  r  Tr  )r   r   r   )r=   rp   rS   r&   r   rC  r   r   rV   r   r   rs   r   r   r  r  r   )	ry   rD   rC   r  r  r@  ZZ1ZZ2ZZ3r0   r0   r1   test_fancy_indexing_boolean  s,    
&z._TestFancyIndexing.test_fancy_indexing_booleanc           	      C   s   t jd ttddd}| |}t jt jjddddt	d	}t
|}tt|| ||  tt||d
k ||d
k  t jt jjddddt	d	}t jt jjddddt	d	}t
|}t
|}tt|j| tt|j| tttf|j|df d S )NrR   rU  r   rG   r   rT   r  rL  r   r1  )r   r  )r.  rG   r   )r=   rp   rS   r&   r   rC  r   r   rV   r   r   r   rs   r   r  r  r   )	ry   rD   rC   r@  ZXspZrA  ZZspZYspr0   r0   r1   "test_fancy_indexing_sparse_boolean  s    
z5_TestFancyIndexing.test_fancy_indexing_sparse_booleanc                 C   sd   |  tg dg dg dg}t|ddk}t|d d |f  ddgddgddgg d S )Nr  r  r   r   )r   r   r=   ravelrw  r   rs   )ry   rz   Zdesired_colsr0   r0   r1   #test_fancy_indexing_regression_3087  s     z6_TestFancyIndexing.test_fancy_indexing_regression_3087c                 C   s8   |  tddgddgg}tt|jdtddg d S )Nr   r   r$  rT   )r   r   r   r   r  r=   rx   r0   r0   r1   test_fancy_indexing_seq_assign  s    z1_TestFancyIndexing.test_fancy_indexing_seq_assignc                 C   s   |  tddgddgg}t @}|td |ddgddgf |ddgddgf< W d    n1 sf0    Y  tt|tddgddgg d S )Nr   r   rT   r   zChanging the sparsity structure)r   r   r   r   r!   r   rs   )ry   rz   r   r0   r0   r1   test_fancy_indexing_2d_assign  s    Bz0_TestFancyIndexing.test_fancy_indexing_2d_assignc                 C   s
  t tddd}d|dd d f< d|d d df< d|d< | |}tg d}tt|| ||  tjg td	}tt|| ||  tt|||f |||f  tjg d
td	d d d f }tt|||f |||f  tt|||f |||f  d S )NrU  r   rG   r   r   rT   r   r.  FFFFFr   r   r   rT   r   r  	r&   r   rC  r   r=   r   r   rs   r  ry   rD   rC   r  r  r0   r0   r1   test_fancy_indexing_empty  s    
z,_TestFancyIndexing.test_fancy_indexing_emptyN)r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r0   r0   r0   r1   r    s   
j# 	r  c                 c   sJ   t | dr| jsdV  dS dV  | j }d| _|   t|| jd dS )zIChecks that sorted indices property is retained through an operation
    has_sorted_indicesNFz'Expected sorted indices, found unsorted)r  r  r  r   sort_indicesr   )r@  r  r0   r0   r1   check_remains_sorted&  s    
r  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )_TestFancyIndexingAssignc                 C   sD   |  tddg}ttttf|jdd ttttf|jdd d S )Nr   r  rT   r  )r   r=   r   r   r  r   rD  r  r  r0   r0   r1   test_bad_index_assign6  s    z._TestFancyIndexingAssign.test_bad_index_assignc                    s   d\  fdd}dt d ddftdt dd	ft d
dt dd	ffD ]\}}||| qNtdtdfdfD ]\}}||| qzd S )Nr  c              	      s     f}tt f}t \}|td d|| |f< t| d|| |f< W d    n1 sj0    Y  W d    n1 s0    Y  t|	 | d S NrM  r   )
r   r&   r=   r   r   r   r!   r  r   rs   )rI  rJ  rC   rD   r   r  r0   r1   _test_set_slice>  s    
HzI_TestFancyIndexingAssign.test_fancy_indexing_set.<locals>._test_set_slicer  rG   r  r   r   r   rT   )r3  r  )r  r=   r   ry   r  rI  rJ  r0   r  r1   test_fancy_indexing_set;  s     z0_TestFancyIndexingAssign.test_fancy_indexing_setc                    s(    fdd}t D ]}|t| qd S )Nc                    s    j d| d}t }|td | d|ddgddgf< t| | dd  | d|ddddf< t| | dd  | d|d	< t| | dd | d  W d    n1 s0    Y  d S )
Nr   r   rM  r   r   rT   r  r  r~  )r   r   r   r!   r/  r   rw  r  r   r0   r1   r   S  s    zD_TestFancyIndexingAssign.test_fancy_assignment_dtypes.<locals>.checkr  r   r0   r   r1   test_fancy_assignment_dtypesR  s    z5_TestFancyIndexingAssign.test_fancy_assignment_dtypesc              	   C   s  |  d}|  tdd}g d}d}t|}t T}|td t|R ||df j|d|f< ||df j|d|f< ||df j|d|f< W d    n1 s0    Y  t|	 |j	  |  d	}t|$ d
dg|dddf< W d    n1 s0    Y  t|	 g dg dg |  d}t|( d
gdgg|dddf< W d    n1 sd0    Y  t|	 ddgdd
gddgg |  d}t
td}t|8 ||fD ]}g d|g dg df< qW d    n1 s0    Y  t|	 | |  d}t| g d|d< W d    n1 s<0    Y  t| d t
td}g d|d< t|	 | W d    n1 s0    Y  d S )NrE  r   r  rq  rM  r   r   rT   r  rG   r=  r  )r   rG   r=  r}  r   r-  r,  )r,  rq  r.  )r   r   r   r   r   r!   r  r   r   rs   r&   r=   r   r   rw  )ry   rC   rD   Zi0i1i2r   r5  r0   r0   r1   test_sequence_assignmentd  sH    


4

2

8 

<

,z1_TestFancyIndexingAssign.test_sequence_assignmentc                 C   s   t tddd}d|dd d f< d|d d df< d|d< | |}tg d}d	||< tt|| tjg td
}d	||< tt|| d	|||f< tt|| tjg dtd
d d d f }d	|||f< tt|| d	|||f< tt|| d S )NrU  r   rG   r   r   rT   r  r  *   r   r  r  r   r0   r0   r1   test_fancy_assign_empty  s$    
z0_TestFancyIndexingAssign.test_fancy_assign_emptyN)r   r   r   r  r
  r  r  r  r0   r0   r0   r1   r  5  s
   0r  c                   @   s   e Zd Zdd ZdS )_TestFancyMultidimc           	   
   C   s  t dgdgdggt g dft dgdgdggt g dgft g dgt dgdgdggft g dt dgdgdggft g dg dgt g dg dgfg}|D ]\}}t jd	 tt jd
d}| |}|||f }t|r| }t	||||f  |d
 }|d }t
t|j||f t
t|j||f t
t|j||gtd f t
t|jtd ||gf qd S )Nr   rT   r   r   r  rT   r,  r  r   r.  r   rT   r   r   rR   r   r/  )r=   r   rp   rS   r&   r{  r   r    rs   r   r   r  r  r  )	ry   Zsetsr  r  r  r  r  r  r  r0   r0   r1   test_fancy_indexing_ndarray  s,    "$$"

z._TestFancyMultidim.test_fancy_indexing_ndarrayN)r   r   r   r  r0   r0   r0   r1   r    s   r  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
_TestFancyMultidimAssignc           	      C   s  t jd tt jdd}| |}t jdd}t g dg dg}t g dg d	g}t| ||||f< W d    n1 s0    Y  ||||f< t|	 | |d }|d }g d}t| ||||f< W d    n1 s0    Y  ||||f< t|	 | t| d|||f< W d    n1 sB0    Y  d|||f< t|	 | t
t|j||f| t
t|j||f| d S )
NrR   r   r/  rT   r   r,  r  r  r  )r=   rp   rS   r&   r{  r   r   r  r   rs   r   r  r  	ry   r  r  r@  r  r  r  r  r5  r0   r0   r1   test_fancy_assign_ndarray  s.    

*
*
,z2_TestFancyMultidimAssign.test_fancy_assign_ndarrayc                    s   d\  fdd}t ddgddggddgft ddgddgddggfg d	g d
gg dg dgffD ]\}}||| qrd S )Nr  c              	      s     f}t|N t (}|td d|| |f< W d    n1 sL0    Y  W d    n1 sj0    Y  tt f}d|| |f< t|	 | d S r  )
r   r  r   r   r!   r&   r=   r   r   rs   )rI  rJ  rC   r   rD   r  r0   r1   r    s    HzR_TestFancyMultidimAssign.test_fancy_indexing_multidim_set.<locals>._test_set_slicer   rT   r   r   r  r,  r   rT   r  )r   r  r   )r  r   rT   )r=   r   r	  r0   r  r1    test_fancy_indexing_multidim_set  s    z9_TestFancyMultidimAssign.test_fancy_indexing_multidim_setc           	      C   s  t jd tt jdd}| |}t jdd}g dg dg}g dg d	g}||||f< ||||f< t| | d
d |D }dd |D }g d}||||f< ||||f< t| | d|||f< d|||f< t| | tt	|j
||f| tt	|j
||f| d S )NrR   r   r/  rT   r   r,  r  r  r  c                 S   s   g | ]}d d |D qS )c                 S   s   g | ]}|d  qS r   r0   re  iir0   r0   r1   r    rh  N_TestFancyMultidimAssign.test_fancy_assign_list.<locals>.<listcomp>.<listcomp>r0   )re  rI  r0   r0   r1   r    rh  zC_TestFancyMultidimAssign.test_fancy_assign_list.<locals>.<listcomp>c                 S   s   g | ]}d d |D qS )c                 S   s   g | ]}|d  qS r/  r0   re  Zjjr0   r0   r1   r    rh  r  r0   )re  rJ  r0   r0   r1   r    rh  )r=   rp   rS   r&   r{  r   r   rs   r   r  r  r  r0   r0   r1   test_fancy_assign_list  s(    
z/_TestFancyMultidimAssign.test_fancy_assign_listc           	      C   s   t jd tt jdd}| |}g d}g d}dd |D }dd |D }g d	}t dd d d f }tt|j	|t
d f| tt|j	t
d |f| d S )
NrR   r   r/  )r   rT   r   r   r  rT   )r   r.  r   rT   r   r   c                 S   s   g | ]}|d  qS r  r0   r  r0   r0   r1   r  +  rh  zD_TestFancyMultidimAssign.test_fancy_assign_slice.<locals>.<listcomp>c                 S   s   g | ]}|d  qS r  r0   r   r0   r0   r1   r  ,  rh  )r   rT   r   r  r   r.  r/  )r=   rp   rS   r&   r{  r   r   r   r  r  r  )	ry   r  r  r  r  r  r  ZC1ZC2r0   r0   r1   test_fancy_assign_slice"  s    
z0_TestFancyMultidimAssign.test_fancy_assign_sliceN)r   r   r   r  r  r!  r"  r0   r0   r0   r1   r    s   !r  c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	_TestArithmeticz&
    Test real/complex arithmetic
    c                 C   s   t g dg dg dg dgd| _t g dg dg dg d	gd
| _t g dg dg dg dgd| j_t| jd dd| j  t| jjd dd| jj  t| jjd dd| jj  | | j| _| | j| _	d S )N)g      g      @r         @r   r   )g      	@g     g      ?r   r   r   )r   r         r  r   r   )r   r   g      @r   r   r   r   )g      ?r   r   r   r  g      @)g     ,@g      r   r   r%  r   )r   g      @r   r   r   r   )g     2@      r   r   r   r   r   )g      ?r   r   r   r.  g      )r$       @r   r   r   g      @)r   r'  r   r   r   r   )r&  r   r   r   r   r      rJ   )
r   _TestArithmetic__A_TestArithmetic__Br  r   rb   r  r   _TestArithmetic__Asp_TestArithmetic__Bspr   r0   r0   r1   Z__arith_init8  s4      z_TestArithmetic.__arith_initc           	   
   C   s  |    t| j| j  | j| j  tD ]X}tj	dd | j
|}W d    n1 s^0    Y  | |}tD ]
}t|tjstj	dd | jj
|}W d    q1 s0    Y  n| j
|}| |}|| }|| }t|j|j t| | t|| | t|| | td||fv r:qv|| }|| }t|j|j t| | t|| | t|| | qvq*d S )Nr   r   r   )_TestArithmetic__arith_initr   r+  r,  rs   r)  r*  r#   r=   r   rb   r   rZ   rL  r  r   r4   	ry   r5   rC   rk  r6   rD   r  D1ZS1r0   r0   r1   test_add_subO  s8    
*

.
z_TestArithmetic.test_add_subc           	   
   C   s$  |    t| j| jj  | j| jj  tD ]}t	j
dd | j|}W d    n1 s`0    Y  | |}tD ]}t	|t	jr| j|}n:t	j
dd | jj|}W d    n1 s0    Y  | |}||j }||j }t| |dt|  d t|j|j qxq.d S )Nr   r   g+=)Zatol)r-  r   r+  r,  r   rs   r)  r*  r#   r=   r   rb   r   rZ   rL  r  r   r  rI   r   r4   r.  r0   r0   r1   test_muz  s(    *
,



z_TestArithmetic.test_muN)r   r   r   r  r-  r0  r1  r0   r0   r0   r1   r#  4  s   +r#  c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )_TestMinMaxc                 C   s  t jt jt jt jt jfD ]}t jd|ddd}| |}t	|
 d t	| d t	|
 j| t	| j| |d9 }| |}t	|
 d t	| d |d7 }| |}t	|
 d	 t	| d q| t d
ddd}t	|
 d
 t	|
 j|j | }t	| d | t d}t	|
 d t	| d t	| j|j t jdtddd}d|ddd d f< | |}t	|
 d t	| d t dt dt dfD ](}| |}tt|j
 tt|j qd S )Nr=  r   r   r  r      r   iir   rG   r   r  rT   r$  r   rG   rG   r   )r=   r   r   rJ   rU   r   r   rC  r   r   r\   rI   r4   r   r  r   r   )ry   r4   r  r@  r  r0   r0   r1   test_minmax  sB    



 
z_TestMinMax.test_minmaxc                 C   s  t ddd}d|dd d f< d|d d df< d|d< d|d	< | |}g d
}|D ]D}t|j|d |j|dd t|j|d |j|dd qXt dddd}| |}|D ]D}t|j|d |j|dd t|j|d |j|dd qt d}| |}|D ]F}t|j|d |j|dd t|j|d |j|dd qddg}ddg}t d}| |}|D ]&}t	t
|j|d t	t
|j|d q|D ]>}tt d|j|d  tt d|j|d  qt d}| |}|D ]&}t	t
|j|d t	t
|j|d q|D ]>}tt d|j|d  tt d|j|d  q>d S )NrU  r   rG   r   r   r1  r   r   r~  r   r   r   r   ru  Tr  3   )rG   r   r   r4  r  r5  r  )r=   r   rC  r   r   rI   rs   r\   r   r   r   )ry   r  r@  rD  rv  Z	axes_evenZaxes_oddr0   r0   r1   test_minmax_axis  sd    





 

z_TestMinMax.test_minmax_axisc           	      C   s4  t tdddtd}d|dd d f< d|d d df< d|d< d	|d
< tj|d< tj|d< | |}| }t|s~J |t|ksJ |	 }t|sJ |t	|ksJ g d}|D ]j}|j|d}t
|tsJ t| tj||d |j	|d}t
|tsJ t| tj	||d qd S )NrU  r   rG   r   r   r   r1  r   r   r~  r.  )r   r  r7  ru  )r'   r=   r   rC  r  r   r   Znanmaxrx  Znanminr<   r   r   rs   )	ry   r  r@  ZX_nan_maximumZX_nan_minimumrD  rv  ZX_nan_maximaZX_nan_minimar0   r0   r1   test_nanminmax  s4    


z_TestMinMax.test_nanminmaxc                 C   sv   t g dg dg dg}| |}dD ]H}t||}tt|dd tt|dd tt|dd tt|d	d	d
 q(d S )Nrq  rr  rs  )r\   rI   r   ru  r  r  r   r  )r   r   rg   r   r   rD  )ry   r   r   fnameri   r0   r0   r1   test_minmax_invalid_params$  s    

z&_TestMinMax.test_minmax_invalid_paramsc                 C   sl   ddl m} tg dg dg dg}| |}t||jrhtt|t| tt	|t	| d S )Nr   _datarq  rr  rs  )
scipy.sparser>  r   r   r<   _minmax_mixinr   r=   r\   rI   )ry   r>  r   r   r0   r0   r1   test_numpy_minmax1  s    
z_TestMinMax.test_numpy_minmaxc           
      C   s  ddl m} tg dg dg dg dg dg}| }tdd	gd
dgg}tdd	gd
dgg}tg dg dg dg}|||||fD ]}| |}t||jsqt|	 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 qtd}td}dD ]0}	| |}tt|j	|	d tt|j
|	d qdD ]0}	| |}tt|j	|	d tt|j
|	d qd S )Nr   r=  )r   r   rT   r   )r   r   r   r   )r   r   r  r  r   )r   rT   r   r   r  r   r/  r   )r   r   r   )r  r1  rG   )r   r  r1  ru  r   r   r&  rU  rX   )Nr   )r?  r>  r=   r   r
   r   r<   r@  r   ZargmaxZargminr&   rC  r(  r   r   )
ry   r>  r/  ZD2ZD3ZD4ZD5r  rz   rv  r0   r0   r1   test_argmaxC  sP    




z_TestMinMax.test_argmaxN)	r   r   r   r6  r9  r:  r<  rA  rB  r0   r0   r0   r1   r2    s   /Ar2  c                   @   s   e Zd Zdd ZdS )_TestGetNnzAxisc                 C   s2  t ddgddgddgg}|t}| |}tjtjf}t|jd d|j	d d t| |	  t|jdd|j	dd t
|j	ddj| t|jdd|j	dd t
|j	ddj| t|jd	d|j	d	d t
|j	d	dj| t|jd
d|j	d
d t
|j	d
dj| tt|j	dd d S )Nr   rT   r   r   rt  r1  ru  r   r   r   )r   rb   r   r   r=   rJ   rU   r   rw  getnnzr2   r4   r   r   )ry   r   Zbool_datr   Zaccepted_return_dtypesr0   r0   r1   test_getnnz_axiss  s$    

z _TestGetNnzAxis.test_getnnz_axisN)r   r   r   rE  r0   r0   r0   r1   rC  r  s   rC  Tc                 C   s\   |r| S dd }t | j}| j D ]\}}|dr$||||< q$t| jd | j|S dS )z
    Construct a class that either runs tests as usual (require=True),
    or each method skips if it encounters a common error.
    c                    s   t   fdd}|S )Nc                     s<   z | i |W S  t ttttfy6   tdY n0 d S )Nr  )r  rD  r   r  AttributeErrorr   r   )r@   rj   fcr0   r1   wrapper  s    
z6_possibly_unimplemented.<locals>.wrap.<locals>.wrapper)	functoolswraps)rH  rI  r0   rG  r1   wrap  s    z%_possibly_unimplemented.<locals>.wraptest_NotImplementedN)dictr:   r`  
startswithr/  r   	__bases__)r   requirerL  Znew_dictrn   ri   r0   r0   r1   _possibly_unimplemented  s    


rS  c	                 C   s   t tt| ttttt|tt|tt|tt	|tt
|o:|tt|oF|tt|tt|f}	i }
|	D ]T}|jD ]H}|ds~qn|
|}|durtd|j d| d|j ||
|< qnqdtd|	i S )z
    Construct a base class, optionally converting some of the tests in
    the suite to check that the feature is not implemented.
    rM  NzTest class z overloads test z defined in ZTestBase)r   rS  r  r  r  r#  r  r  r  r  r  r  r2  rC  r:   rP  getr   r   r/  )getsetslicingslicing_assignfancy_indexingfancy_assignZfancy_multidim_indexingZfancy_multidim_assignminmaxnnz_axisbasesnamesr   rn   Zold_clsr0   r0   r1   sparse_test_class  sD    


r^  c                   @   s   e Zd Zedd Zejejejej	gZ
dd Zdd Zdd Zd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%S )&r   c                 O   sD   t  *}|td t|i |W  d    S 1 s60    Y  d S )Nz<Changing the sparsity structure of a csr_matrix is expensive)r   r   r!   r   r   argsr7   r   r0   r0   r1   r     s
    zTestCSR.spcreatorc                 C   s   t g dg dg dgd}t|}t|jg d t|jg d t|jg d t| d t|j	d	 t|
 | d S )
N)r   r  r   r  r  r   )r  r   rT   r`  r  r   r  )r   r   r   r  r   r  r  r   rD  r  rs   ry   rE   r*  r0   r0   r1   test_constructor1  s    zTestCSR.test_constructor1c                 C   sX   t dd}d|d< t|}t|jdg t|jdg t|jg d t| | d S )Nr.  r.  r   r   rA  r  )r   r   r   r   r   r   r   )r   r   r   r  r   r  r  rs   ra  r0   r0   r1   test_constructor2  s    
zTestCSR.test_constructor2c                 C   sf   t ddgddgddggd}t|}t|jg d t|jg d t|jg d t| | d S )	Nr   r   rT   r   r   r,  r  r  )r   r   r   r  r   r  r  rs   ra  r0   r0   r1   test_constructor3  s    zTestCSR.test_constructor3c                 C   s   t g d}t g d}t g d}t||f}t||fd}ttddd|  tdd	gd
d	gd
d	gfftjd}t dd
gd
d	ggtjd}t||  tg dg dg dff}|j	dksJ d S )NrT   r   r   r   r   r   r   r   rT   r   rT   r   r   r   r   r   r   rT   rT   rT   rT   r   g      @g      $@r  g      "@r  r  g      &@r  g       @g      @r  rE  r7  r  r              r   r   r   r   r   r   r   r   rT   rT   r   r   r   r   r   rT   )
r   r   r   r   r   rC  rs   r=   uint64r   )ry   r  r  r  rf  r  r6  r0   r0   r1   test_constructor4  s    "zTestCSR.test_constructor4c                 C   sB   t g d}t g d}t g d}t|||f}t|jd d S Nr   r   r   r   r   r   r   rT   r   r  )r   r   r   r   ry   r  r  r  r  r0   r0   r1   test_constructor5  s
    zTestCSR.test_constructor5c                 C   sJ   g d}g d}g d}t |||f}t|jd tt|jtj d S ro  )r   r   r   r   r=   rZ   r4   signedintegerrr  r0   r0   r1   test_constructor6  s    zTestCSR.test_constructor6c                 C   s   t dd }tg dtjd}tg dtjd}t|||fdd}tg dg d	g d
gd}t|jjttj t|j	jttj t
| | d S )Nr.  r   )r   rT   r   r   r   rT   r   r   rT   r  r.  r   r   rq  r  )r   r   r.  r   )r   r   r=   rU   r   r   r  r4   rJ   r  r   rs   )ry   r  r  ptrr@   rE   r0   r0   r1   test_constructor_smallcol#  s    z!TestCSR.test_constructor_smallcolc                 C   s   t dd }ttjjd }tddd||d |d gtjd}tg dtjd}t|||f}t|j	j
t
tj t|jj
t
tj t|jdt|d f d S )	Nr.  r   r  r   rT   r   rv  r   )r   r=   rH   rJ   rI   r   rU   r   r   r  r4   r  r   r   )ry   r  Zlarger  rx  r@   r0   r0   r1   test_constructor_largecol3  s    "z!TestCSR.test_constructor_largecolc                 C   sh   t d}tg d}tg d}t|||fdd}| }|  t|jg d t| |  d S )Nr   r/  rT   r   r   r  r   r   r   rT   rG   rw  r   rT   r/  r  r   )r   r   r   r   r  r   r  rs   ry   r  r  r  r)  r*  r0   r0   r1   test_sort_indices@  s    zTestCSR.test_sort_indicesc                 C   sx   t g d}t g d}t g d}t|||fdd}| }|  t|jd t|jg d t| |  d S )Nr   r   r   r   rT   r   r   r   r   rT   r   r  r   r.  r/  r0  r   r   r0  r}  rw  r   r,  )r   r   r   eliminate_zerosr   r   r  rs   r  r0   r0   r1   test_eliminate_zerosJ  s    zTestCSR.test_eliminate_zerosc                 C   s   t tdddd }dD ]f}ttt |d t|| }t|j|j t|j	|j	 t|j
|j
 t| tt||  qd S )Nr=  r  r   rf  rh  ri  rj  rk  rl  rm  rn  ro  rp  re  rq  rr  rs  rt  ru  rv  rw  rx  T)r   r=   r   rC  r   r  rg   r   r   r  r  rs   ry   r@  r   rg  r0   r0   r1   test_ufuncsU  s    zTestCSR.test_ufuncsc                 C   s   t d}tg d}tg d}t|||fdd}t d}tg d}tg d}t|||fdd}t||  | |   d S )	Nr   r{  r|  r}  rw  r.  r0  r   r   r/  rT   r  r   rT   r.  )r   r   r   r   rs   r  r0   r0   r1   test_unsorted_arithmetica  s    z TestCSR.test_unsorted_arithmeticc                 C   s~   t dgdgdgg}t g d}t jd tt jdd}| |}|||f }t|rh| }t	||||f  d S Nr   rT   r   r  rR   r   r/  
r=   r   rp   rS   r&   r{  r   r    rs   r   ry   r  r  r  r  r  r0   r0   r1   test_fancy_indexing_broadcastl  s    
z%TestCSR.test_fancy_indexing_broadcastc                 C   s   t ddg}t ddg}t ddg}t ddg}t|||f }td|j t|jtsfJ t|||f }td|j |  td|j t	|j
| t|||f }d|_td|j t	|j
| |  t	|j
| dS )z@Ensure has_sorted_indices memoizes sorted state for sort_indicesr   r   rT   TFN)r=   r   r   r   r   r  r<   r   r  r   r  )ry   Zsorted_indsZunsorted_indsr  r  r  r0   r0   r1   test_has_sorted_indicesz  s$    zTestCSR.test_has_sorted_indicesc                 C   s   t tdgtdgtddgf}td|j tddg}tddg}tddg}t |||f }td|j t|jtsJ |  td|j tdt	|j
 t |||f }d|_td|j tdt	|j
 |  tdt	|j
 dS )z=Ensure has_canonical_format memoizes state for sum_duplicatesrT   r   r   TFN)r   r=   r   r   has_canonical_formatr   r<   r   sum_duplicatesr   r  )ry   r  r  r  r  r0   r0   r1   test_has_canonical_format  s"    (z!TestCSR.test_has_canonical_formatc                 C   s  t jdt jd}t jdt jd}t d}t|||fdd}t|||fdd}t jdt jd}t||fdd}t||fdd}td}	td}
t|jjt j t|jjt j t|jjt j t|jjt j t|	jjt j t|
jjt j |||||	|
fD ]}||  qd S )NrT   r   r   r   rw  r           r\  )r=   r   rJ   r   r   r  r4   rU   ry   r  r  valsr@   rE   rf  r   r   r   r   r5   r0   r0   r1   test_scalar_idx_dtype  s$    
zTestCSR.test_scalar_idx_dtypec                 C   sF   t g dg}t g dg}|| jdks.J ||jdksBJ d S )Nr  r   r   r   rT   r   )r   r   r  ry   r@   rE   r0   r0   r1   test_binop_explicit_zeros  s    z!TestCSR.test_binop_explicit_zerosN)r   r   r   r  r   r=   r  int_r   r   r   rb  rd  re  rn  rs  ru  ry  rz  r  r  r  r  r  r  r  r  r  r0   r0   r0   r1   r     s(   
	
	
r   c                   @   s   e Zd Zedd Zejejejej	gZ
dd Zdd Zdd Zd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )r   c                 O   sD   t  *}|td t|i |W  d    S 1 s60    Y  d S )Nz<Changing the sparsity structure of a csc_matrix is expensive)r   r   r!   r   r_  r0   r0   r1   r     s
    zTestCSC.spcreatorc                 C   s   t g dg dg dgd}t|}t|jg d t|jg d t|jg d t| d t|j	|j	 t|j
d	 d S )
Nr   r   r   r   r]  r   rT   r   r   r   )r   rT   r   r   )r   rT   r   rT   r  r  r  )r   r   r   r  r   r  r  r   rD  r   r  ra  r0   r0   r1   rb    s    zTestCSC.test_constructor1c                 C   sJ   t dd}d|d< t|}t|jdg t|jdg t|jg d d S )Nrc  r   r   )rT   r  rT   )r   r   r   r   r   r   r   )r   r   r   r  r   r  r  ra  r0   r0   r1   rd    s    
zTestCSC.test_constructor2c                 C   sX   t ddgddgddggd}t|}t|jddg t|jddg t|jg d d S )Nr   r   rT   r   rq  )r   r   r   r  r   r  r  ra  r0   r0   r1   re    s
    zTestCSC.test_constructor3c                 C   s   t g d}t g d}t g d}t||f}t||fd}ttddd|  tg dg d	g d
ff}|jdksJ d S )Nrf  rg  rh  rE  r7  r  r   rj  rk  rl  rT   )r   r   r   r   r   rC  rs   r   )ry   r  r  r  rf  r  r0   r0   r1   rn    s    zTestCSC.test_constructor4c                 C   sB   t g d}t g d}t g d}t|||f}t|jd d S Nrp  rq  r   )r.  r   )r   r   r   r   ry   r  r  r  r  r0   r0   r1   rs    s
    zTestCSC.test_constructor5c                 C   sJ   g d}g d}g d}t |||f}t|jd tt|jtj d S r  )r   r   r   r   r=   rZ   r4   rt  r  r0   r0   r1   ru    s    zTestCSC.test_constructor6c                 C   sx   t g d}t g d}t g d}t|||fdd}| }|  t|jd t|jg d t| |  d S )Nr  r  r  rG   rT   rw  r   r,  )r   r   r   r  r   r   r  rs   r  r0   r0   r1   r    s    zTestCSC.test_eliminate_zerosc                 C   sd   t d}tg d}g d}t|||fdd}| }|  t|jg d t| |  d S )Nr   r{  r|  r  rw  r~  )r   r   r   r   r  r   r  rs   )ry   r  r  rx  r)  r*  r0   r0   r1   r  #  s    zTestCSC.test_sort_indicesc                 C   s   t tdddd }dD ]f}ttt|d t|| }t|j|j t	|j
|j
 t	|j|j t	| tt||  qd S )N   r/  r   g      5@r  T)r   r=   r   rC  r   r  r   rg   r   r   r  r  rs   r  r0   r0   r1   r  -  s    zTestCSC.test_ufuncsc                 C   s   t d}tg d}tg d}t|||fdd}t d}tg d}tg d}t|||fdd}t||  | |   d S )	Nr   r{  r|  r  rw  r.  r  r  )r   r   r   r   rs   r  r0   r0   r1   r  9  s    z TestCSC.test_unsorted_arithmeticc                 C   s~   t dgdgdgg}t g d}t jd tt jdd}| |}|||f }t|rh| }t	||||f  d S r  r  r  r0   r0   r1   r  D  s    
z%TestCSC.test_fancy_indexing_broadcastc                 C   s  t jdt jd}t jdt jd}t d}t|||fdd}t|||fdd}t jdt jd}t||fdd}t||fdd}td}	td	}
t|jjt j t|jjt j t|jjt j t|jjt j t|	jjt j t|
jjt j |||||	|
fD ]}||  qd S )
NrT   r   r   )r  r   rw  )r  r   r\  r  r  )	r=   r   rJ   r   r   r   r  r4   rU   r  r0   r0   r1   r  R  s$    
zTestCSC.test_scalar_idx_dtypeN)r   r   r   r  r   r=   r  r  r   r   r   rb  rd  re  rn  rs  ru  r  r  r  r  r  r  r0   r0   r0   r1   r     s   

	
r   c                   @   sP   e Zd ZeZejejejgZ	dd Z
dd Zdd Zdd Zd	d
 Zdd ZdS )r   c                 C   sB   t d}d|d< d|d< ||j }||j }t| |  d S )NrG   rG   rG   r  r=  r   r.  )r   r   r  r   rs   )ry   rC   r  r  r0   r0   r1   	test_multr  s    

zTestDOK.test_multc                 C   sl   |  d}d|d< d|d< |d }tddgddgddgg}t| | |d	 }|d	 }t| | d S )
Nr}  r  r=  r\  rG   r   r>  rJ  )r   r   r   rs   r  r0   r0   r1   test_add_nonzeroz  s    
zTestDOK.test_add_nonzeroc                 C   sR   |  d}d|d< d|d< t|d  | d  t|d  | d  d S Nr}  r  r  r=  r\  rJ  r1  r   r   rs   r  r0   r0   r1   test_dok_divide_scalar  s
    
zTestDOK.test_dok_divide_scalarc                 C   s  d\}}t ||f}d|d< d|d< d|d< d|d	< d
|d< d|d< t| d d |d f t| | }t| d d |d f t| || }}| }t|j||f t| |d d d f t| | }t| |d d d f t| d S )N)r.  r/  r   r  rT   r[  r   r  r  rV  r   rE  r.  r.  )	r   r   rs   r   r   r
   r   r   r   )ry   r   rH  r@   r  rE   r  r0   r0   r1   test_convert  s"    ""
"zTestDOK.test_convertc                 C   s   t tt tg dg dg dgd}t|}t|j|j t| | t|}t| |  g dg dg}t|tj	d}t|jtj	 | }t|jtj	 t
|| d S )Nr  r]  r  r   rq  r  r   )r   rD  r   r   r   r4   rs   r   r=   r   r   )ry   rE   rC   r   r  r   dar0   r0   r1   	test_ctor  s    
zTestDOK.test_ctorc                 C   sT   t d}d|d< td| vd t d}d|d d df< tt| dkd d S )Nr   r   r$  zUnexpected entry (0,0) in keyszUnexpected entries in keys)r   r   keysr   r  r0   r0   r1   test_ticket1160  s    zTestDOK.test_ticket1160N)r   r   r   r   r   r=   r  r   r   r   r  r  r  r  r  r  r0   r0   r0   r1   r   n  s   r   )rZ  r[  c                   @   sh   e Zd ZeZejejejgZ	dd Z
dd Zdd Zdd Zd	d
 Zdd Zdd Zdd Zdd ZdS )TestLILc                 C   s   t dtj}d|d< d|d< tdtjd}d|d< d|d< t dkr`t||j ||j   t||	 j ||	 j   d S )Nr  rG   r  y              4@r  r   ppc64le)
r   r=   r   r   platformmachiner   r   rs   r   r  r0   r0   r1   test_dot  s    zTestLIL.test_dotc                 C   s@   t d}d|d< |d }t|d d |d }t|d d d S )Nr   rT   r$  r  r   )r   r   )ry   r5   r0   r0   r1   test_scalar_mul  s    zTestLIL.test_scalar_mulc                 C   sR   |  d}d|d< d|d< t|d  | d  t|d  | d  d S r  r  r  r0   r0   r1   test_truediv_scalar  s
    
zTestLIL.test_truediv_scalarc                 C   s   t g dg dg}t g dg dg}||| f||| fd|d fd}| D ]8\}\}}| }t|d| | t| |  qTt dtdd	}tg d
}|dd d f  |7  < t|dd d f  	 | d S )Nr   rT   r   r  r  r   )addsubmulz__i%s__r  r   r   )皙?r  r  r   )
r   r`  r   rg   r   rs   r=   r4   r   Zsqueeze)ry   rC   rD   r  opr   r   r1  r0   r0   r1   test_inplace_ops  s    


zTestLIL.test_inplace_opsc                 C   sL   g dg dg}t t|}t|D ]"\}}t| t|| dd q$d S )Nr,  r-  rT   )Zndmin)r   r   r  r   rs   )ry   Zrow_datarD   rR  r  r0   r0   r1   test_lil_iteration  s    zTestLIL.test_lil_iterationc                 C   sV   t d}d|d< d|d< d|d< d|d	< d
|d< | }t |}t| |  d S )Nr  rG   r  r=  r  r>  )r0  r   r#  )r   r0  rU  )r0  r1  )r   r   r   rs   )ry   rD   r5  r  r0   r0   r1   test_lil_from_csr  s    zTestLIL.test_lil_from_csrc                 C   sV   t tddd}t|}t|tg dddf  |tg dddf  d S )Nr  r   r,  rT   r   )r&   r   rC  r   r   r   rs   )ry   r  rC   r0   r0   r1   test_fancy_indexing_lil  s
    zTestLIL.test_fancy_indexing_lilc                 C   s   t d}d|d< d|d< d|d< d|d	< t d}d|d< d|d
< d|d< d|d	< d|d< t|| ||  t|| g dg dg dg dg d S )NrE  r   r$  rT   r  r   r~  r  r  r  r}  r  r  r   r   r1  )r   r(  r   )r   r   r  rs   )ry   lr   r0   r0   r1   test_point_wise_multiply&  s*    z TestLIL.test_point_wise_multiplyc                 C   s*   t td}|d9 }d|dd d f< d S )Nr   r  r   )r   r=   r   r  r0   r0   r1   test_lil_multiply_removal=  s    z!TestLIL.test_lil_multiply_removalN)r   r   r   r   r   r=   r  r   r   r   r  r  r  r  r  r  r  r  r  r0   r0   r0   r1   r    s   
r  )rZ  c                   @   s   e Zd ZeZejejejgZ	dd Z
dd Zdd Zdd Zd	d
 Zejjddddd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )TestCOOc                 C   s   t g d}t g d}t g d}t|||ffd}ttddd|  tdd	gd
d	gd
d	gfftjd}t dd
gd
d	ggtjd}t||  d S )Nrf  rg  rh  rE  r7  r  r   ri  r   r   r   )r   r   r   r   rC  rs   r=   rm  )ry   r  r  r  r  r6  r0   r0   r1   rb  M  s    "zTestCOO.test_constructor1c                 C   sb   t g d}t g d}t g d}t|||ffd}t g dg dg dg}t||  d S )N)
r   r   rT   rT   rT   rT   r   r   rT   rT   )
r   rT   r   rT   r   r   r   r   r   rT   )
rT   r1  r  r   r/  r   r   rT   r   r  r   )r  r   r   r  )r  r/  r   )r   r   r   rs   )ry   r  r  r  r  rz   r0   r0   r1   rd  [  s    zTestCOO.test_constructor2c                 C   sN   t d}t|jd t|jg  t|jg  t|jg  t| td d S )NrE  )r   r   r   r  r  r  rs   r   ry   r  r0   r0   r1   re  f  s    zTestCOO.test_constructor3c                 C   s   t g dg dg dg}t|}t| | t g d}t|}t| |dd tjtdd* tg dg d	g d
f W d    n1 s0    Y  tjtdd  tg ddd W d    n1 s0    Y  d S )Nr   r   r   r   )r/  r   r   r   )r   r  r   r   r   r   zobject cannot be interpretedr  )r   r     !   r  r;  zinconsistent shapesrZ  rw  )	r   r   r   rs   rC  r   r   rD  r   )ry   rz   r  r0   r0   r1   rn  p  s    8zTestCOO.test_constructor4c                 C   s8   dg}t |dgdgffd d}|jt|jks4J d S )Nr   r   r   )r   r4   r=   r   )ry   r  r  r0   r0   r1   "test_constructor_data_ij_dtypeNone  s    z*TestCOO.test_constructor_data_ij_dtypeNoneFzCOO does not have a __getitem__runreasonc                 C   s   d S r3   r0   r   r0   r0   r1   rW    s    zTestCOO.test_iteratorc                 C   s(   ddgg}t | }t| | d S rX   )r   Ztodiar   rs   )ry   r   r  r0   r0   r1   test_todia_all_zeros  s    
zTestCOO.test_todia_all_zerosc                 C   s   t d}|  t ddgddgddgff}|  t| ddgddgg t ddgddgddgff}|  t| ddgddgg t|jdg t|jdg t|jdg d S )NrE  r   rT   r   r   )r   r  r   rs   r  r  r  r  r0   r0   r1   test_sum_duplicates  s    zTestCOO.test_sum_duplicatesc                 C   s:   t g dg dg dff}| }t| |  d S )Nrj  rk  rl  )r   rY  r   rs   )ry   r  r9   r0   r0   r1   test_todok_duplicates  s    zTestCOO.test_todok_duplicatesc                 C   sT   t g dg dg dff}| }t|jd |j | }t|jd |j d S )Nrj  rk  rl  rT   )r   r   r   r   r   )ry   r  r  r  r0   r0   r1   test_tocompressed_duplicates  s
    z$TestCOO.test_tocompressed_duplicatesc                 C   sp   t g d}t g d}t g d}t|||ffdd}| }|  t|jdk  t| |  d S )Nr  )r   r   r   r   r   r   r   r   r  r}  rw  r   )	r   r   r   r  r   r  allr   rs   )ry   r  r  r  r)  r*  r0   r0   r1   r    s    zTestCOO.test_eliminate_zerosc                 C   s   g dg dg dg}d}t |}||}t|j|ju  |j|dd}t|j|ju  |j|dd}tt|j|j  d S )Nr:  r;  r<  r?  FrB  T)r   rC  r   r  r=   rB   )ry   r]   Z	new_shaper5   r6   r0   r0   r1   test_reshape_copy  s    
zTestCOO.test_reshape_copyc                 C   sl   t dgdgdgffd}t dgdgdgffd}t|jddd|kjdk t|jdd	d|kjdk d S )
Nr   i- r  )-   )r  r  r5  r8  r   r6  )r   r   rC  r   )ry   Zmat1Zmat2r0   r0   r1   test_large_dimensions_reshape  s    z%TestCOO.test_large_dimensions_reshapeN)r   r   r   r   r   r=   r  r   r   r   rb  rd  re  rn  r  r   r  xfailrW  r  r  r  r  r  r  r  r0   r0   r0   r1   r  G  s    


r  )rU  rV  rW  rX  rY  c                   @   s~   e Zd ZeZejejejgZ	dd Z
ejjddddd Zedd	d
 Zejjdddd Zdd Zdd Zdd ZdS )TestDIAc                 C   sf   t g dg dg dg dg}t g dgjddd}t g d	}tt||fd
d | d S )N)r   r   r   r   )r   rT   r   r  )r   rT   r   r   )r   r   r   r  r   r   r   ru  r   r   rT   rZ  rw  )r   r=   repeatr   r   rs   )ry   r  r  r  r0   r0   r1   rb    s    zTestDIA.test_constructor1FzDIA does not have a __getitem__r  c                 C   s   d S r3   r0   r   r0   r0   r1   rW    s    zTestDIA.test_iteratorr   c                 C   s|   t td}t|jjtj |jddd t|jjtj t td}t|jjtj |jddd t|jjtj d S )Nr   )r   rT   r!  r  )	r   r=   r   r   r  r4   rJ   rQ  rU   ry   r   r0   r0   r1   test_setdiag_dtype  s    zTestDIA.test_setdiag_dtypezDIA stores extra zerosr  c                 C   s   d S r3   r0   r   r0   r0   r1   rE    s    zTestDIA.test_getnnz_axisc                 C   sH   t g dgdgfdd}| }t|  | t|  | d S )Nr  r   r.  rw  )r   rs   r   r   r   )ry   r   r   r0   r0   r1   test_convert_gh14555  s    zTestDIA.test_convert_gh14555c                 C   sT   t ddgddgg }t|j|jf|j}tt|dk}|j	|ksPJ d S )Nr   rT   r   r  r   )
r   r   r=   Zravel_multi_indexr  r  r   r  diffr  )ry   r   Z	flat_indsZinds_are_sortedr0   r0   r1   test_tocoo_gh10050  s    zTestDIA.test_tocoo_gh10050c                 C   s   t g dgjddd}t jg dt jd}tj||fdd}| }|jjt jksZJ |	 }|j
jt jkstJ | }|j
jt jksJ d S )	Nr   r   r   ru  r  r   rZ  rw  )r=   r   r  rJ   rf   Z	dia_arrayr   r  r4   r   r  r   )ry   r  r  r  r  r  r  r0   r0   r1   test_tocoo_tocsr_tocsc_gh19245  s    z&TestDIA.test_tocoo_tocsr_tocsc_gh19245N)r   r   r   r   r   r=   r  r   r   r   rb  r   r  r  rW  rr   r  r   rE  r  r  r  r0   r0   r0   r1   r    s   	


r  )rU  rV  rW  rX  rY  rZ  r[  c                   @   s   e Zd ZeZejejejgZ	dd Z
dd Zdd Zdd Zd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zejjddddd Zejjddddd Zdd  Zejjdddd!d" Zejjed#d$d%d& Zd'S )(r   c                 C   s   t g d}t g d}td}t g dg dg|d< t g dg dg|d	< t g d
g dg|d< t g dg dg|d< tg dg dg dgg dg dg}t|||fdd}t| | t|||f}t| | d S N)r   rT   rT   r  )r   rT   rT   r   )r  rT   r   rq  r;  r   r  )r.  r   rG   r   )r   r  r0  )r7  r   r=  rT   )r   r   rG   )r%  r   r  r   r  r;  r:  r.  r7  rw  )r   r   r   r   r   rs   )ry   r  r  r  rC   rk  r0   r0   r1   rb    s(    



(zTestBSR.test_constructor1c                 C   sn  dD ]}t |}tt| | qt d}tt|dd | tt|dd | tg dg dg dgg d	g d
g}tt| | tt|dd | tt|dd | tt|dd | tt|dd | tt|dd | tt|dd | tt|dd | tg dg dg dgg d	g d
g}tt|dd | d S )N)r  rW  r  )rG   r  )r   r/  r  )r  r.  r~  r=  r  r  r;  r:  rq  r;  r  rw  r  r?  )rT   r7  )r   r7  r  )r   r   r   rs   r   )ry   r   rC   r0   r0   r1   rd  3  s"    ((zTestBSR.test_constructor2c                 C   sF   g dg dg dff}t ddgddgg}tt|dd	 | d S )
Nr,  ra  r  r   r   rT   r   r~  r=  )r   r   r   rs   )ry   argrC   r0   r0   r1   re  K  s    zTestBSR.test_constructor3c                 C   sZ   d}t j||dft jd}t jd|gt jd}t j|t jd}t|||f|dfdd d S )Nr0  r   r   r   F)r>  r   )r=   r   r   r   rJ   r   r   )ry   rH  r  r  r  r0   r0   r1   rn  Q  s
    zTestBSR.test_constructor4c                 C   s   d}t |}t |||f}t d|g}t |}tt t|||f W d    n1 sb0    Y  tt" t|||fdd W d    n1 s0    Y  tt" t|||fdd W d    n1 s0    Y  d S )Nr0  r   r  r=  r  )r=   r   r   r   r   r   r   )ry   rH  Z	data_1dimr  r  r  r0   r0   r1   rs  Z  s    


,
0
zTestBSR.test_constructor5c                 C   sl   dgdggdgdggg}t jddgt jd}t jddgt jd}t|||fdd}|jt |jkshJ d S )Nr   r   rT   r   r  r=  )r=   r   rJ   r   r4   )ry   r;   r  r  rE   r0   r0   r1   test_default_dtypen  s
    zTestBSR.test_default_dtypec                 C   s   t g d}t g d}td}t g dg dg|d< t g dg dg|d	< t g d
g dg|d< t g dg dg|d< tg dg dg dgg dg dg}t|||fdd}| }|  }t| | t| |  d S r  )r   r   r   r   r   r   r   rs   )ry   r  r  r  rC   ZAbsrZAcsrZAcsr_via_coor0   r0   r1   test_bsr_tocsrv  s.    



zTestBSR.test_bsr_tocsrc                 C   s   t g dddgddggj}|ddd}tg d}tg d}t|||fdd}| }|  t|jd	 t|	 |	  d S )
Nr  r   r   rT   r  r  )r  r=  rw  r7  )
r   r   rC  r   r   r   r  r   r   rs   r  r0   r0   r1   r    s    zTestBSR.test_eliminate_zerosc                 C   s   t jd tt jddd}d|j|jdk< |  t|jd t|jj	d d|j|jdk< |  t|jd t|jj	d	 t|
 t d |  t|jd t|jj	d	 t|
 t d d S )
Nr   )r7  r7  r  r=  g?B   )r  rT   r   r  r  )r=   rp   rS   r   r  r  r   r   r   r   rs   r   r  r0   r0   r1   test_eliminate_zeros_all_zero  s    z%TestBSR.test_eliminate_zeros_all_zeroc                 C   sH   t tddddd}t|jd dd}t|| | |  d S )Nx   r0  r%  r  r   r=  r   r   r   r   rC  r   r   rs   r  r0   r0   r1   test_bsr_matvec  s    zTestBSR.test_bsr_matvecc                 C   sL   t tddddd}t|jd d dd}t|| | |  d S )	Nr  r0  r%  r  r=  r   r.  r   r  r  r0   r0   r1   test_bsr_matvecs  s    zTestBSR.test_bsr_matvecsFzBSR does not have a __getitem__r  c                 C   s   d S r3   r0   r   r0   r0   r1   rW    s    zTestBSR.test_iteratorzBSR does not have a __setitem__c                 C   s   d S r3   r0   r   r0   r0   r1   r_    s    zTestBSR.test_setdiagc                 C   s   t g dg dg dg}| j|dd}t|dd u  t| ddgd	dgd
dgg |d t| ddgd	dgg |d t| ddgd	dgddgg |d t| g dg dg dg tt|jd d S )Nrz  r{  r|  r  r=  r}  r   r   rT   r   r~  rA  r  r;  r  r  r  r0   r0   r1   test_resize_blocked  s2    



zTestBSR.test_resize_blockedc                 C   s   d S r3   r0   r   r0   r0   r1   rY    s    z"TestBSR.test_setdiag_comprehensivezexceeds memory limitr  c              	   C   s@  t jdt jd}t jdt jd}t d}t|||fdd}t|||fdd}td}td}t|jjt j t|jjt j t|jjt j t|jjt j z\t d}t d	}	t|||fdd}
t|	||fdd}t|
jjt j t|jjt j W n  tt	fy   d}
d}Y n0 |||||
|fD ]}||  q,d S )
NrT   r   r   ra  r  rw  r  )r   r   r  )r   r   r  )
r=   r   rJ   r   r   r  r4   rU   MemoryErrorr   )ry   r  r  r  r@   rE   r   r   Zvals2Zvals3r   r   r5   r0   r0   r1   r    s.    



zTestBSR.test_scalar_idx_dtypeN)r   r   r   r   r   r=   r  r   r   r   rb  rd  re  rn  rs  r  r  r  r  r  r  r   r  r  rW  r_  r  rY  skipifIS_COLABr  r0   r0   r0   r1   r     s,   	


r   )rU  rV  rW  rX  rY  r[  c                 O   s2  | dd}t| jtjs,t| jtjrN|du r>| f| S | f| |f S | dk }| jddd} | ddd  d8  < d| ddd< |d jdkrt	dd |D }d|d  f|dd  }d|d  d f|dd  }d| |< d| |< t	d	d |D }|du r| f| S | f| |d f S dS )
z-Duplicates entries to produce the same matrixr  Nr   rT   ru  r   c                 s   s   | ]}|d  V  qdS r  r0   )re  pr0   r0   r1   	<genexpr>  rh  z&_same_sum_duplicate.<locals>.<genexpr>c                 s   s   | ]}| d V  qdS )rT   N)r  )re  r  r0   r0   r1   r    rh  )
popr=   rZ   r4   r  Zunsignedintegerri  r  rY   rc  )r  Zindsr7   r  Z	zeros_posposZpos1pos2r0   r0   r1   _same_sum_duplicate  s*    


r  c                       s`   e Zd Zd fdd	Zejjdddd Zejjddd	d
 Zejjdddd Z	  Z
S )_NonCanonicalMixinFc                    s  t  j}||fi |}| dk }|d jdk}|r|d jd }t :}	|	td | ||d | |d | }W d   n1 s0    Y  | 	||}
d|vr|j
|d< ||
fi |}|jtjtjfv rd}nd}t| | |d	 |rt|jdk  |S )
zcReplace D with a non-canonical equivalent: containing
        duplicate elements and explicit zerosr   rT   rM  r   Nr   gh㈵>gHz>)rtol)superr   rs   ri  rY   r   r   r!   _insert_explicit_zero_arg1_for_noncanonicalr   r4   r=   r   r   r   r   r  any)ry   r  sorted_indicesr7   Z	constructr  Zzero_posZ	has_zerosr"  r   Zarg1ZNCr  rS  r0   r1   r   '  s.    <
z_NonCanonicalMixin.spcreatorz"bool(matrix) counts explicit zerosr  c                 C   s   d S r3   r0   r   r0   r0   r1   r   O  s    z_NonCanonicalMixin.test_boolz!getnnz-axis counts explicit zerosc                 C   s   d S r3   r0   r   r0   r0   r1   rE  S  s    z#_NonCanonicalMixin.test_getnnz_axisznnz counts explicit zerosc                 C   s   d S r3   r0   r   r0   r0   r1   r   W  s    z_NonCanonicalMixin.test_empty)F)r   r   r   r   r   r  r   r   rE  r   __classcell__r0   r0   r  r1   r  &  s   (

r  c                   @   s   e Zd ZdddZdd ZdS )_NonCanonicalCompressedMixinFc                 C   s   t |j|j|jd\}}}|s~t||dd D ]L\}}||| ddd  |||< ||| ddd  |||< q0|||fS )5Return non-canonical constructor arg1 equivalent to M)r  r   Nr   )r  r  r  r  rV  r   )ry   r  r   r  r  r  startstopr0   r0   r1   r  ]  s    
"$z3_NonCanonicalCompressedMixin._arg1_for_noncanonicalc                 C   s   d|||f< |S rX   r0   ry   r  rI  rJ  r0   r0   r1   r  g  s    z2_NonCanonicalCompressedMixin._insert_explicit_zeroN)F)r   r   r   r  r  r0   r0   r0   r1   r  \  s   

r  c                   @   sL   e Zd Zdd Zdd Zejjddddd	 Zejjdd
ddd Z	dS )_NonCanonicalCSMixinc                    s4    fdd}t D ]}dD ]}|t|| qqd S )Nc           	         s   t g dg dg dg dg| d} j||d}|j\}}t| |D ]0}t| |D ]}t|||f |||f  qXqHdD ]}tttf|j| q~d S )Nr  r  r  r  r   )r   r  )	r   r   r   r   r   r   r  rD  r  )	r4   r   r  rC   r  r  rI  rJ  rf  r   r0   r1   r   n  s    
z3_NonCanonicalCSMixin.test_getelement.<locals>.check)FTr  )ry   r   r4   r   r0   r   r1   r  m  s    z$_NonCanonicalCSMixin.test_getelementc                 C   s   t d}| |}| g dg}| |dd d f< t ,}|td ||dd d f< W d    n1 sp0    Y  t| | |  |d d df< t .}|td |j	|d d df< W d    n1 s0    Y  t| | d S )Nr   r,  r   rM  rT   )
r=   r   r   rs   r   r   r!   r   r  r   )ry   r  rC   rD   r   r0   r0   r1   test_setitem_sparse  s&    

.0z(_NonCanonicalCSMixin.test_setitem_sparseFz(inverse broken with non-canonical matrixr  c                 C   s   d S r3   r0   r   r0   r0   r1   r    s    z_NonCanonicalCSMixin.test_invz&solve broken with non-canonical matrixc                 C   s   d S r3   r0   r   r0   r0   r1   r    s    z_NonCanonicalCSMixin.test_solveN)
r   r   r   r  r	  r   r  r  r  r  r0   r0   r0   r1   r  l  s   
r  c                   @   s   e Zd ZdS )TestCSRNonCanonicalNr   r   r   r0   r0   r0   r1   r
    s   r
  c                   @   s   e Zd ZdS )TestCSCNonCanonicalNr  r0   r0   r0   r1   r    s   r  c                   @   sD   e Zd Zdd Zejjddddd Zejjdddd	d
 ZdS )TestBSRNonCanonicalc                 C   s"   |  }d|||f< |j|jdS )Nr   r=  )r   rZ  r>  )ry   r  rI  rJ  r5   r0   r0   r1   r    s    z)TestBSRNonCanonical._insert_explicit_zeroFz&diagonal broken with non-canonical BSRr  c                 C   s   d S r3   r0   r   r0   r0   r1   r+    s    z!TestBSRNonCanonical.test_diagonalz"expm broken with non-canonical BSRc                 C   s   d S r3   r0   r   r0   r0   r1   r    s    zTestBSRNonCanonical.test_expmN)	r   r   r   r  r   r  r  r+  r  r0   r0   r0   r1   r    s
   
r  c                   @   s&   e Zd ZdddZdd Zdd ZdS )	TestCOONonCanonicalNc                 C   s$   t |j|j|j\}}}|||ffS )r  )r  r  r  r  )ry   r  r   r  r  r  r0   r0   r1   r    s    z*TestCOONonCanonical._arg1_for_noncanonicalc                 C   sX   t j|jjd|jf |_t j|jj||jf |_t j|jj||jf |_|S rX   )r=   Zr_r  r4   r/  r  r  r  r0   r0   r1   r    s    z)TestCOONonCanonical._insert_explicit_zeroc                 C   sP   |  td}|  |jddgdd |  ttt|jdk d S )Nr   rT   r   r!  r   )	r   r=   r   r  rQ  r   r  r  r  r  r0   r0   r1   test_setdiag_noncanonical  s
    z-TestCOONonCanonical.test_setdiag_noncanonical)N)r   r   r   r  r  r  r0   r0   r0   r1   r    s   
r  c            
   	   c   s
  t ttttttg} ddddddddd}| D ]}tt|D ]}t	||}|
dr<t	|d	d
s<g }||}t|r|tjj|dg7 }ttjtdkrt	|dg }|D ]}|jdv r|| qn$dD ]}	t||	r|t	||	g7 }qtj|||dV  q<q,d S )Nz%expm for 64-bit indices not availablez)linsolve for 64-bit indices not availableztest implemented in base classz%test actually requires 64-bit to workztest verifies int32 indexesztest verifies int64 indexes)r  r  r  r  r  ry  rz  r  rM  r  Fr  z3.6.0Z
pytestmark)r  r   r  Zxslow)marks)r   r  r   r   r  r   r  sorteddirrg   rP  rT  r   r   r  r   r   parse__version__Versionrn   r>   r  param)
ZTEST_CLASSESZ
SKIP_TESTSr   method_namemethodr  r-   markersr  Zmnamer0   r0   r1   cases_64bit  s>    






r  c                   @   s   e Zd ZeeeeegZdd Z	dd Z
dd Zdd Zd	d
 Zejde dd Zejde dd Zejde dd Zejde dd Zejde dd Zdd ZdS )	Test64Bitc                 C   s   |t j||S r3   )r=   rp   r{  )ry   mat_clsr   rH  r0   r0   r1   _create_some_matrix  s    zTest64Bit._create_some_matrixc                 C   s~   t |}t|tttfr2|jj|ko0|jj|kS t|trT|j	j|koR|j
j|kS t|trj|jj|kS td|dd S )Nzmatrix z has no integer indices)r=   r4   r<   r   r   r   r  r  r   r  r  r   r  r   )ry   r   r4   r0   r0   r1   _compare_index_dtype  s    


zTest64Bit._compare_index_dtypec                    s.   t dd fdd} jD ]}|| qd S )NrG   r_   c                    sL   | t jdd}t |t j | t jdd}t |t j d S )NrG   r   r  )r=   rp   r{  r   r  rJ   rU   )r  r   r   r0   r1   r     s    z4Test64Bit.test_decorator_maxval_limit.<locals>.checkrr   MAT_CLASSESry   r   r  r0   r   r1   test_decorator_maxval_limit  s    
z%Test64Bit.test_decorator_maxval_limitc                    s.   t dd fdd} jD ]}|| qd S )NTrp   c                    s`   d}d}t dD ]B} | dd}|p2 |tj}|pD |tj}|r|r q\qtdd S )NFr  r1  z#both 32 and 64 bit indices not seen)r   r  r  r=   rJ   rU   ra   )r  Zseen_32Zseen_64r"  r   r   r0   r1   r     s    z5Test64Bit.test_decorator_maxval_random.<locals>.checkr  r!  r0   r   r1   test_decorator_maxval_random  s    
z&Test64Bit.test_decorator_maxval_randomc                 K   s$   t f i |dd }||| d S )Nc              	   S   sT   |  }t |dr|  z"t||  W t |drP|  nt |drN|  0 d S )Nsetup_methodteardown_method)r  r%  rg   r&  )r   r  instancer0   r0   r1   r   ,  s    



z*Test64Bit._check_resiliency.<locals>.check)rr   )ry   r   r  rj   r   r0   r0   r1   _check_resiliency(  s    

zTest64Bit._check_resiliencyzcls,method_namec                 C   s   | j ||dd d S )NrG   r_   r(  ry   r   r  r0   r0   r1   test_resiliency_limit_109  s    z"Test64Bit.test_resiliency_limit_10c                 C   s   | j ||dd d S )NTr#  r)  r*  r0   r0   r1   test_resiliency_random=  s    z Test64Bit.test_resiliency_randomc                 C   s   | j ||tjd d S NrP   )r(  r=   rJ   r*  r0   r0   r1   test_resiliency_all_32D  s    z Test64Bit.test_resiliency_all_32c                 C   s   | j ||tjd d S r-  )r(  r=   rU   r*  r0   r0   r1   test_resiliency_all_64H  s    z Test64Bit.test_resiliency_all_64c                 C   s   | j ||dd d S )NT)rq   r)  r*  r0   r0   r1   
test_no_64L  s    zTest64Bit.test_no_64c                 C   s:   t tjdddd }t tjddd }|  |  d S )Nr   )rQ   rc   c                  S   s   t ddgddgddgg} tt| jdd tt| jdd tg d	g d
g} tt| jdd tg d	g dg} tt| jdd d S Nr   rT   r   r  r   r.  ru  r   r,  )r   r  r.  r  )r   r   ra   rD  rw  r   r   rt   r0   r0   r1   check_limitedW  s    z3Test64Bit.test_downcast_intp.<locals>.check_limitedrP   c                  S   sv   t ddgddgddgg} | jdd | jdd tg d	g d
g} | jdd tg d	g dg} | jdd d S r1  )r   rD  rw  r   r   rt   r0   r0   r1   check_unlimitede  s    z5Test64Bit.test_downcast_intp.<locals>.check_unlimited)rr   r=   rU   )ry   r2  r3  r0   r0   r1   test_downcast_intpP  s    


zTest64Bit.test_downcast_intpN)r   r   r   r   r   r   r   r   r   r  r  r"  r$  r(  r   r  Zparametrizer  r+  r,  r.  r/  r0  r4  r0   r0   r0   r1   r    s"   




r  )N)NFNNF)T)	TTTTTTTTT)rr  
contextlibrJ  r%  r  r  sysZ
scipy._libr   numpyr=   r   r   r   r   r   r   r	   r
   r   r   r   r   r   rp   Znumpy.testingr   r   r   r   r   r   r   r   r   r   Zscipy.linalgre   r?  rf   r   r   r   r   r   r   r   r   r    r!   r"   Zscipy.sparse._sputilsr#   r$   r%   r&   r'   Zscipy.sparse.linalgr(   r)   r*   Zscipy._lib.decoratorr+   Zscipy._lib._utilr,   rl   r  r2   r8   	frozensetr  rF   r   r   rr   rs   ru   r   r   r   r  r  r  r  r  r  contextmanagerr  r  r  r  r#  r2  rC  rS  r^  r   r   r   r   r  r  r  r   r  r  r  r  r
  r  r  r  r  r  r0   r0   r0   r1   <module>   s   <$4



  
Q$               %gr _ $  
w#ea ^
    
,    bq 
? j!66*