U
    /d`                    @   s  d Z ddlZddlZddlZddlZddlZddlZddlmZ ddl	Z
ddl	mZmZmZmZmZmZmZmZmZmZmZmZmZmZ ddlZddlmZmZmZmZmZm Z m!Z! ddl"m#Z$ ddl%Z&ddl'm(Z( ddl'm)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2 ddl3m4Z4m5Z5m6Z6m7Z7m8Z8 dd	l9m:Z:m;Z;m<Z< dd
l=m>Z> ddl"Z"dej?kZ@ddddZAdd ZBeCdgZDdd ZEe! ZFeFGe deddZHdd ZIG dd dZJG dd dZKG dd dZLG dd dZMG d d! d!ZNG d"d# d#ZOG d$d% d%ZPG d&d' d'ZQG d(d) d)ZRejSd*d+ ZTG d,d- d-ZUG d.d/ d/ZVG d0d1 d1ZWG d2d3 d3ZXG d4d5 d5ZYG d6d7 d7ZZdfd9d:Z[dgd;d<Z\G d=d> d>e\ Z]e]^  G d?d@ d@e\ Z_e_^  G dAdB dBe\dddCZ`e`^  G dDdE dEe\ddFZaea^  G dGdH dHe\ddddddIZbeb^  G dJdK dKe\ddddddddLZcec^  G dMdN dNe\dddddddOZded^  dPdQ ZeG dRdS dSZfG dTdU dUefZgG dVdW dWegZhG dXdY dYehe]ZiG dZd[ d[ehe_ZjG d\d] d]egedZkG d^d_ d_efebZld`da ZmG dbdc dcZndS )hz Test functions for sparse matrices. Each class in the "Matrix class
based tests" section become subclasses of the classes in the "Generic
tests" section. This is done by the functions in the "Tailored base
class for generic tests" section.

    N)_pep440)arangezerosarraydotasarrayvstackndarray	transposediagkroninf	conjugateint8ComplexWarning)assert_equalassert_array_equalassert_array_almost_equalassert_almost_equalassert_assert_allclosesuppress_warnings)raises)

csc_matrix
csr_matrix
dok_matrix
coo_matrix
lil_matrix
dia_matrix
bsr_matrixeye
isspmatrixSparseEfficiencyWarning)supported_dtypesisscalarlikeget_index_dtypeasmatrixmatrix)spluexpminv)	decoratorzgoogle.colabc                 C   s(   t | |k|d k	r|n
d| |f d d S )Nz%r not found in %r)msg)r   )memberZ
collectionr,    r.   @/tmp/pip-unpacked-wheel-9gxwnfpp/scipy/sparse/tests/test_base.py	assert_in1   s    r0   c                 K   s"   t | j|jk t| |f| d S N)r   dtyper   )xykwargsr.   r.   r/   assert_array_equal_dtype5   s    r6   dokc                 C   s<   dd }|| D ]&}||D ]}t ||r  dS qqdS )Nc                 S   s4   g }| j  D ] }t|tjtjfr|| q|S r1   )__dict__values
isinstancenpr	   Zgenericappend)r3   arraysar.   r.   r/   _underlying_arrays?   s
    z3sparse_may_share_memory.<locals>._underlying_arraysTF)r;   may_share_memory)ABr?   r>   br.   r.   r/   sparse_may_share_memory<   s    
rD   Fc                    s   dkrt dn
t |r.dddnHdk	rFdfdd	n0|rht jjdd	 d fd
d	ndfdd	dk	rfddtfdd}|S )z
    Monkeypatch the maxval threshold at which scipy.sparse switches to
    64-bit index arrays, or make it (pseudo-)random.

    N
   r.   Fc                 S   sD   t | ||}tt|jttjj t|tjkp<|tjk |S r1   )r%   r   r;   iinfomaxint32r   Zintc)r=   maxvalcheck_contentstpr.   r.   r/   new_get_index_dtypec   s    z4with_64bit_maxval_limit.<locals>.new_get_index_dtypec                    s    S r1   r.   r=   rI   rJ   fixed_dtyper.   r/   rL   i   s      )seedc                    s   t jt jf d S )N   )r;   rH   int64randintrM   )counterr.   r/   rL   n   s    c                    s   t j}|d k	r| krt j}| D ]f}t |}|jt jkr |r|jdkrLq n4t |jt jr| }|	 }|  kr| krq t j}q |S Nr   )
r;   rH   rS   r   r2   size
issubdtypeintegerrG   min)r=   rI   rJ   r2   arrminvalmaxval_limitr.   r/   rL   q   s"    

c                    s    |    krtd| tjS )Nzdowncast limited)rG   AssertionErrorastyper;   Zintp)r[   )downcast_maxvalr.   r/   new_downcast_intp_index   s    z8with_64bit_maxval_limit.<locals>.new_downcast_intp_indexc                    s   g }t jjt jjt jjt jjt jjt jjt jjt jj	t jj
t jjg
}zh|D ]T}||dt|dd f t|d  d k	rJ||dt|dd f t|d qJ| ||W S |D ]\}}}|d k	rt||| qX d S )Nr%   Zdowncast_intp_index)scipysparseZ_bsrZ_cooZ_cscZ_csrZ_diaZ_dokZ_lilZ_sputilsZ_compressedZ
_constructsetattrr<   getattr)funcr>   kwbackupmodulesmodnameZoldfunc)ra   rb   rL   r.   r/   deco   s2        

z%with_64bit_maxval_limit.<locals>.deco)r.   NF)r.   NF)r.   NF)r.   NF)r;   rS   randomZRandomStater+   )r^   rn   rO   ra   assert_32bitrm   r.   )rU   ra   rO   r^   rb   rL   r/   with_64bit_maxval_limitT   s     
rp   c                 C   s    t | tjst| r| S |  S r1   )r:   r;   r	   r$   toarrayr>   r.   r.   r/   rq      s    rq   c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )BinopTesterc                 C   s   dS Nmatrix on the rightr.   selfmatr.   r.   r/   __add__   s    zBinopTester.__add__c                 C   s   dS rt   r.   rv   r.   r.   r/   __mul__   s    zBinopTester.__mul__c                 C   s   dS rt   r.   rv   r.   r.   r/   __sub__   s    zBinopTester.__sub__c                 C   s   dS Nmatrix on the leftr.   rv   r.   r.   r/   __radd__   s    zBinopTester.__radd__c                 C   s   dS r|   r.   rv   r.   r.   r/   __rmul__   s    zBinopTester.__rmul__c                 C   s   dS r|   r.   rv   r.   r.   r/   __rsub__   s    zBinopTester.__rsub__c                 C   s   dS rt   r.   rv   r.   r.   r/   
__matmul__   s    zBinopTester.__matmul__c                 C   s   dS r|   r.   rv   r.   r.   r/   __rmatmul__   s    zBinopTester.__rmatmul__N)__name__
__module____qualname__ry   rz   r{   r~   r   r   r   r   r.   r.   r.   r/   rs      s   rs   c                   @   sd   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )BinopTester_with_shapec                 C   s
   || _ d S r1   _shape)rw   shaper.   r.   r/   __init__   s    zBinopTester_with_shape.__init__c                 C   s   | j S r1   r   rw   r.   r.   r/   r      s    zBinopTester_with_shape.shapec                 C   s
   t | jS r1   )lenr   r   r.   r.   r/   ndim   s    zBinopTester_with_shape.ndimc                 C   s   dS rt   r.   rv   r.   r.   r/   ry      s    zBinopTester_with_shape.__add__c                 C   s   dS rt   r.   rv   r.   r.   r/   rz      s    zBinopTester_with_shape.__mul__c                 C   s   dS rt   r.   rv   r.   r.   r/   r{      s    zBinopTester_with_shape.__sub__c                 C   s   dS r|   r.   rv   r.   r.   r/   r~      s    zBinopTester_with_shape.__radd__c                 C   s   dS r|   r.   rv   r.   r.   r/   r      s    zBinopTester_with_shape.__rmul__c                 C   s   dS r|   r.   rv   r.   r.   r/   r      s    zBinopTester_with_shape.__rsub__c                 C   s   dS rt   r.   rv   r.   r.   r/   r      s    z!BinopTester_with_shape.__matmul__c                 C   s   dS r|   r.   rv   r.   r.   r/   r      s    z"BinopTester_with_shape.__rmatmul__N)r   r   r   r   r   r   ry   rz   r{   r~   r   r   r   r   r.   r.   r.   r/   r      s   r   c                   @   s  e Zd ZdZeZedd Zdd Zdd Z	dd	 Z
d
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zej j!d2d3 Z"d4d5 Z#d6d7 Z$d8d9 Z%d:d; Z&d<d= Z'd>d? Z(d@dA Z)dBdC Z*dDdE Z+dFdG Z,dHdI Z-dJdK Z.dLdM Z/dNdO Z0dPdQ Z1dRdS Z2dTdU Z3e4dVdW Z5e4dXdY Z6e4dZd[ Z7e4d\d] Z8d^d_ Z9d`da Z:e4dbdc Z;ddde Z<dfdg Z=dhdi Z>djdk Z?dldm Z@dndo ZAdpdq ZBdrds ZCdtdu ZDdvdw ZEdxdy ZFdzd{ ZGd|d} ZHd~d 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_dS )_TestCommonz6test common functionality shared by all sparse formatsc                 C   s   t ddddgddddgddddggd| _| | j| _tt| j| _i | _	i | _
| jD ].}| j|| j	|< | | j|| j
|< q\t| j| j	tj  t| j | j
tj   d S N   r   rR      d)r   datspmatrixdatspsetr#   unionmath_dtypeschecked_dtypes
dat_dtypesdatsp_dtypesr`   r   r;   float64rq   )clsr2   r.   r.   r/   
init_class   s    *

z_TestCommon.init_classc                    s8    fdd}t  tr td  jD ]}|| q&d S )Nc                    s<    j |  }ttt| t dg t dg  d S Nr   r   )r   assert_raises
ValueErrorboolr   r   )r2   r   r   r.   r/   check  s    
z$_TestCommon.test_bool.<locals>.checkz%Cannot create a rank <= 2 DOK matrix.)r:   TestDOKpytestskipr   rw   r   r2   r.   r   r/   	test_bool  s
    


z_TestCommon.test_boolc                 C   sH   t ddgg}| |}tdD ]}|| }|| }q t||  d S )NTFrE   )r   r   ranger   rq   )rw   r   r   _r.   r.   r/   test_bool_rollover  s    

z_TestCommon.test_bool_rolloverc                    sV   t  }|t |t fdd}t tttfs>t	d  j
D ]}|| qDd S )Nc           	         s    j |  } j|  }| }d|d d df<  |}t|}t|}t|}t|}t||k||k	  t||k||k	  t||k||k	  t||k||k	  t||k||k	  t||k||k t|dk|dk	  t|dk|dk	  t|t
jk|t
jk	  d S Nr   r   )r   r   copyr   r   r   r   r   r6   rq   r;   nan)	r2   r   r   dat2datsp2datbsrdatcsrdatcscdatlilr   r.   r/   r   )  s(    



z"_TestCommon.test_eq.<locals>.check8Bool comparisons only implemented for BSR, CSC, and CSR.r   filterr"   sup_complexr:   TestBSRTestCSCTestCSRr   r   r   rw   supr   r2   r.   r   r/   test_eq%  s    


z_TestCommon.test_eqc                    sV   t  }|t |t fdd}t tttfs>t	d  j
D ]}|| qDd S )Nc           	         sL   j |  } j|  }| }d|d d df<  |}t|}t|}t|}t|}t||k||k	  t||k||k	  t||k||k	  t||k||k	  t||k||k	  t||k||k t|dk|dk	  t|dk|dk	  td|kd|k	  td|kd|k	  t|t
jk|t
jk	  d S r   )r   r   r   r   r   r   r   r   r6   rq   r;   r   )	r2   r   r   r   r   r   r   r   r   r   r.   r/   r   N  s,    



z"_TestCommon.test_ne.<locals>.checkr   r   r   r.   r   r/   test_neJ  s    


z_TestCommon.test_nec                    sV   t  }|t |t fdd}t tttfs>t	d  j
D ]}|| qDd S )Nc              	      s:   j |  } j|  }| }d|d d df<  |}|t}d|d d df<  |}t|}t|}t|}	t	|}
t
||k ||k   t
||k ||k   t
||k ||k   t
||k ||k   t
||k |	|k   t
||k |
|k   t
||k ||k   t
||k ||k   t
||k ||	k   t
||k ||
k   t
||k ||k  t
||k ||k  dD ]<}t|}t
||k  ||k  t
||k  ||k  q~tjdd  t
|tjk  |tjk  W 5 Q R X  j |  } j|  }| }d|d d df<  |}t
||k ||k  d S Nr         ?      ?)rR   r   r   ignoreinvalidr   r   r   r   r`   complexr   r   r   r   r6   rq   r;   rS   errstater   r2   r   r   r   r   Z
datcomplexZdatspcomplexr   r   r   r   valr   r.   r/   r   u  sP    









z"_TestCommon.test_lt.<locals>.checkr   r   r   r.   r   r/   test_ltq  s    
4

z_TestCommon.test_ltc                    sV   t  }|t |t fdd}t tttfs>t	d  j
D ]}|| qDd S )Nc              	      s:   j |  } j|  }| }d|d d df<  |}|t}d|d d df<  |}t|}t|}t|}	t	|}
t
||k||k  t
||k||k  t
||k||k  t
||k||k  t
||k|	|k  t
||k|
|k  t
||k||k  t
||k||k  t
||k||	k  t
||k||
k  t
||k||k t
||k||k dD ]<}t|}t
||k ||k t
||k ||k q~tjdd  t
|tjk |tjk W 5 Q R X  j |  } j|  }| }d|d d df<  |}t
||k||k d S r   r   r   r   r.   r/   r     sP    









z"_TestCommon.test_gt.<locals>.checkr   r   r   r.   r   r/   test_gt  s    
3

z_TestCommon.test_gtc                    sV   t  }|t |t fdd}t tttfs>t	d  j
D ]}|| qDd S )Nc                    s   j |  } j|  }| }d|d d df<  |}|t}d|d d df<  |}t|}t|}t|}	t	|}
t
||k||k  t
||k||k  t
||k ||k t
||k ||k t
|	|k ||k t
|
|k ||k t
||k ||k t
||k ||k t
||	k ||k t
||
k ||k t
||k||k t
||k||k dD ]<}t|}t
||k ||k t
||k ||k q~ j |  } j|  }| }d|d d df<  |}t
||k||k d S Nr   r   )rR   r   r   r   r   r   r   r   r`   r   r   r   r   r   r6   rq   r;   rS   r   r   r.   r/   r     sH    









z"_TestCommon.test_le.<locals>.checkr   r   r   r.   r   r/   test_le  s    
/

z_TestCommon.test_lec                    sV   t  }|t |t fdd}t tttfs>t	d  j
D ]}|| qDd S )Nc                    s   j |  } j|  }| }d|d d df<  |}|t}d|d d df<  |}t|}t|}t|}	t	|}
t
||k||k  t
||k||k  t
||k ||k t
||k ||k t
|	|k ||k t
|
|k ||k t
||k ||k t
||k ||k t
||	k ||k t
||
k ||k t
||k||k t
||k||k dD ]<}t|}t
||k ||k t
||k ||k q~ j |  } j|  }| }d|d d df<  |}t
||k||k d S r   r   r   r   r.   r/   r   ,  sH    









z"_TestCommon.test_ge.<locals>.checkr   r   r   r.   r   r/   test_ge(  s    
/

z_TestCommon.test_gec                 C   sB   t | d td t | djd t | d d d S )Nr   r   r   )r   r   rq   r   nnzcount_nonzeror   r.   r.   r/   
test_emptyb  s    z_TestCommon.test_emptyc                 C   s6   t | j }t| j | t| jj | d S r1   )r;   r   r   rq   r   T)rw   expectedr.   r.   r/   test_count_nonzeroh  s    z_TestCommon.test_count_nonzeroc                 C   s.   t t| jd t t| jd t t| jd d S )Nr   r   r   r   r   r   )r   r   r   r   r.   r.   r/   test_invalid_shapesm  s    z_TestCommon.test_invalid_shapesc                 C   s   t | j d S r1   )reprr   r   r.   r.   r/   	test_reprr  s    z_TestCommon.test_reprc                 C   s   t | j d S r1   )strr   r   r.   r.   r/   test_stru  s    z_TestCommon.test_strc           
      C   s   d}t dt dt dt dt dfD ]}| j||d}|| }d| }||  }||  }||  }||||||fD ]2}	t|	j|j|j  t|	j| t|	jj| qq0d S )	N   r   rH   float32r   	complex64
complex128r2   rR   )r;   r2   r   tocsctocsrtocoor   rA   )
rw   r   Zmytyper>   rC   cr   efmr.   r.   r/   test_empty_arithmeticx  s      z!_TestCommon.test_empty_arithmeticc                 C   sJ   t dddgdddgdddgdddggd}tt|t| |  d S )Nr   r      r   r   )r   r   absr   rq   rw   rA   r.   r.   r/   test_abs  s    *z_TestCommon.test_absc                 C   sD   d}t ddgddggd}ttj||dt| ||d  d S )	Nr   ggQ?g     @1@gQr   )Zdecimals)ndigits)r   r   r;   Zaroundroundr   rq   )rw   decimalrA   r.   r.   r/   
test_round  s
    z_TestCommon.test_roundc                 C   s\   t dddgdddgddd	ggd
}tt|d| |d  tt| |j| d S )Nr   r   r   r   r   rR   r      r   )r   r   r;   powerr   rq   r   NotImplementedErrorr   r.   r.   r/   test_elementwise_power  s    ""z"_TestCommon.test_elementwise_powerc                 C   sp   t dddgdddgdddgdddggd}t| | |   t dd	d	gd	d	dgg}tt| |j d S )
Nr   r   r   r   r   r   r   TF)r   r   r   rq   r   r   __neg__r   r.   r.   r/   test_neg  s    *z_TestCommon.test_negc                 C   s.   t ddgg}| |}t|j |j d S N      ?      @y       @      )r   r   r   realrq   rw   DrA   r.   r.   r/   	test_real  s    
z_TestCommon.test_realc                 C   s.   t ddgg}| |}t|j |j d S r   )r   r   r   imagrq   r  r.   r.   r/   	test_imag  s    
z_TestCommon.test_imagc                 C   s0  g }| dddgg | dgdgdgg | ddgddgddgg | dddgdddgdddgg | ddgddgg | t|d ddgg | t|d dgdgg | t|d ddgddgg | t|d ddgddgg | t|d ddgddgg | t|d ddddgg |D ]}t|j\}}| |}t| d |d D ] }t|j|dt||d qht|jddt|dd t|jddt|dd q8t| d	 t	
d
 t| d t	d t| d t	d t| ddt	d d S )Nr   r   rR   r   r   krE   i)(   i?  r
  r   r   )   r   r   r   )r<   r   r   r   r   r   r   diagonalr   r;   r   empty)rw   Zmatsr   ZrowscolsZ
sparse_matr	  r.   r.   r/   test_diagonal  s.    "   
z_TestCommon.test_diagonalc                 C   s   t dddgdddgddd	gg}| |}td
dD ]}t|j|d|j|d q6t dddgdddgg}| |}tddD ]}t|j|d|j|d qd S )Nr   rR   r   r   r            	   r   )offsetr   )r;   r   r   r   r   trace)rw   rA   rB   r	  r.   r.   r/   
test_trace  s    "

z_TestCommon.test_tracec                 C   s  |  dddgdddgdddgdddgg}dD ]4}dD ]*}t|j||d | j||d q6q.|  dd	ddgddddgdd
ddgg}|d}dd	ddddgdddd
ddgg}t|j| |d}t|j| |d}t|j| tt|jd |dd}t|j| tt|jdddd |d}t||k |jddd}t||k	 t|j	d d|_	t|j| tt|j|j
f tt|jd|j
df d S )Nr   r   r  r   r   )CF))   r   )r   r  orderrE         r
  rR   r  rR   r   )r   r  r   rR   r  )Z
not_an_argr   r   Tr   )r   r   reshaperq   rA   r   r   	TypeErrorr   r   rW   )rw   r3   r  sr4   Zdesiredr.   r.   r/   test_reshape  s6    *(
 


z_TestCommon.test_reshapec                    s    fdd  fdd}t jd dddd	d
g}t jt jfD ]}|D ]\}}t | d |d }|D ]p}t||||ft j||f|d}| j||f|d}	|||	| t jj	|t
t|ddD ]}
|||	|
 qqjqHq@d S )Nc                    s   t |}|dkrzt| jd | jd | }|jdkrPt|t|}|d | }t d|}t ||| }|| ||f< n|dk r | j||  d S r   )r;   r   rZ   r   r   r   r   r   )r>   vr	  nij)dense_setdiagr.   r/   r,  	  s    

z=_TestCommon.test_setdiag_comprehensive.<locals>.dense_setdiagc              
      s
  dt t| |ddfD ]}|dk r8tjtdd}ntjjdd|d} | || t }|t	d |
|| W 5 Q R X t| |}t|jdkrt||d	|f d
 n8tt |t |}t|d | |d | d	|f d
 t|j| d	|f d
 qd S )Nr   rR   r  r   r   r  rW   ?Changing the sparsity structure of a cs[cr]_matrix is expensivez%s %derr_msg)r   r;   r   rn   choicer   rT   r   r   r"   setdiagr   r   r   rZ   rA   )r>   rC   r	  rr(  r   r   r)  r,  r,   r.   r/   check_setdiag  s    &z=_TestCommon.test_setdiag_comprehensive.<locals>.check_setdiagrP   r  r   r   r   r   r   r   r   r   r   r   r-  )r;   rn   rQ   r   r   r   r   r   r   r1  rZ   r   )rw   r5  Zshapesr2   r   r)  ksr	  r>   rC   Zk2r.   r4  r/   test_setdiag_comprehensive  s    z&_TestCommon.test_setdiag_comprehensivec              
   C   s  |  td}|  d}dddg}t J}|td tt|j|dd || t	|
 | |j|dd t	|jtdddgdddgdddgg |j|d	d t	|jtdddgdddgdddgg |jd
dd t	|jd d |jd
d	d t	|jd d |jdgdd t	|jd ddddg |jddgdd t	|jd d ddddgddddgg W 5 Q R X d S )Nr   r   r   rR   r   r.  r   r  r   r   )r  r   rR   r  rR   r   )r   r;   r    r   r   r"   r   r   r2  r   r  rA   r   )rw   r   m2r9   r   r.   r.   r/   test_setdiag?  s<    




z_TestCommon.test_setdiagc                 C   sl   t dddgdddgdddgg}| |}tdd t| D }tdd t| D }t|| d S )Nr   r   c                 S   s   g | ]}t |qS r.   tuple.0ijr.   r.   r/   
<listcomp>b  s     z,_TestCommon.test_nonzero.<locals>.<listcomp>c                 S   s   g | ]}t |qS r.   r@  rB  r.   r.   r/   rE  c  s     )r   r   r   r
   nonzeror   rw   rA   AspZA_nzZAsp_nzr.   r.   r/   test_nonzero^  s
     
z_TestCommon.test_nonzeroc                 C   sp   t dddgdddgdddgg}| |}tdd tt|D }tdd tt|D }t|| d S )Nr   r   c                 S   s   g | ]}t |qS r.   r@  rB  r.   r.   r/   rE  l  s     z2_TestCommon.test_numpy_nonzero.<locals>.<listcomp>c                 S   s   g | ]}t |qS r.   r@  rB  r.   r.   r/   rE  m  s     )r   r   r   r
   r;   rF  r   rG  r.   r.   r/   test_numpy_nonzerog  s
     
z_TestCommon.test_numpy_nonzeroc                 C   sP   t | jd | jdgd d f  t | jd | jdgd d f  d S Nr   r   )r   r   Zgetrowrq   r   r   r.   r.   r/   test_getrowq  s    &z_TestCommon.test_getrowc                 C   sP   t | jd | jd d dgf  t | jd | jd d dgf  d S rK  )r   r   Zgetcolrq   r   r   r.   r.   r/   test_getcolu  s    &z_TestCommon.test_getcolc           	         s   t jd tdddgdddgdd	d
gg}t jdd}t g g}t d}tjddddj}|||||g  fdd}j	D ] }t
t D ]}||| qqd S )NrP   r   r   rR   r   r   r   r  r  )r
  r
  g{Gz?)Zdensityc              	      s  t  | | d}j|| d}tjdd\ t| |  t| j| j tt	|jd d t|jd d|jd d t|jd dj|jd dj t|jdd|jdd t|jddj|jddj t|jdd|jdd t|jddj|jddj t|jdd|jdd t|jddj|jddj t|jdd|jdd t|jddj|jddj W 5 Q R X d S )	Nr   r   )Zoveraxisr   r   r   r   )
r'   r   r;   r   r   sumr   r2   r   isscalar)r2   r+  r   r   matricesrw   r.   r/   r     s(    
z#_TestCommon.test_sum.<locals>.check)r;   rn   rQ   r'   randr   r   rd   rA   r   r   r   )	rw   dat_1dat_2Zdat_3Zdat_4Zdat_5r   r2   r+  r.   rS  r/   test_sumy  s    


z_TestCommon.test_sumc                 C   sz   t d}tdddgdddgdd	d
gg}| |}tt|jdd tt|jdd tt|jdd tt|jd|d d S Nr   r   r   r   rR   r   r   r   rN  r  r  rO  r   r         ?rP  out)r;   r   r   r   r   r   rQ  r%  rw   r^  r   r   r.   r.   r/   test_sum_invalid_params  s    


z#_TestCommon.test_sum_invalid_paramsc                    sP   t dddgdddgddd	gg |   fd
d}| jD ]}|| q>d S )Nr   r   rR   r   r   r   rN  r  r  c                    s4    j | d}j | d}t|| t|j|j d S Nr   meanr   r   r2   r2   dat_mean
datsp_meanr   r   r.   r/   r     s    
z)_TestCommon.test_sum_dtype.<locals>.checkr   r   r   r   r.   rg  r/   test_sum_dtype  s    


z_TestCommon.test_sum_dtypec                 C   s   t dddgdddgddd	gg}| |}t dgg}tdgg}|j|d
d |j|d t|| td}ttd}|jd|d
d |jd|d t|| d S Nr   r   rR   r   r   r   rN  r  r  T)r^  keepdimsr^  r   r   )rP  r^  rk  r]  )r   r   r'   rQ  r   r;   r   r&   rw   r   r   Zdat_outZ	datsp_outr.   r.   r/   test_sum_out  s    



z_TestCommon.test_sum_outc                 C   sZ   t dddgdddgddd	gg}| |}t|}t|}t|| t|j|j d S 
Nr   r   rR   r   r   r   rN  r  r  )r   r   r;   rQ  r   r   r2   rw   r   r   re  rf  r.   r.   r/   test_numpy_sum  s    




z_TestCommon.test_numpy_sumc                    s$    fdd} j D ]}|| qd S )Nc                    s  t dddgdddgddd	gg| d
} j|| d
}t| |  t| j| j tt|jd d t|jd dd|jd d t|jd dj|jd dj t|jddd|jdd t|jddj|jddj t|jddd|jdd t|jddj|jddj t|jddd|jdd t|jddj|jddj t|jddd|jdd t|jddj|jddj d S )Nr   r   rR   r   r   r   r  r  r  r   rO  TrP  rk  r   r   )	r   r   r   rc  r   r2   r   r;   rR  r2   r   r   r   r.   r/   r     sF    
 
 
 
 
 
z$_TestCommon.test_mean.<locals>.check)r   r   r.   r   r/   	test_mean  s    
z_TestCommon.test_meanc                 C   s~   t td}tdddgdddgdd	d
gg}| |}tt|jdd tt|jdd tt|jdd tt|jd|d d S rY  )	r&   r;   r   r   r   r   r   rc  r%  r_  r.   r.   r/   test_mean_invalid_params  s    

z$_TestCommon.test_mean_invalid_paramsc                    sP   t dddgdddgddd	gg |   fd
d}| jD ]}|| q>d S )Nr   r   rR   r   r   r   rN  r  r  c                    s4    j | d}j | d}t|| t|j|j d S ra  rb  rd  rg  r.   r/   r     s    
z*_TestCommon.test_mean_dtype.<locals>.checkrh  r   r.   rg  r/   test_mean_dtype  s    


z_TestCommon.test_mean_dtypec                 C   s   t dddgdddgddd	gg}| |}t dgg}tdgg}|j|d
d |j|d t|| td}ttd}|jd|d
d |jd|d t|| d S rj  )r   r   r'   rc  r   r;   r   rn  r.   r.   r/   test_mean_out  s    



z_TestCommon.test_mean_outc                 C   sZ   t dddgdddgddd	gg}| |}t|}t|}t|| t|j|j d S rp  )r   r   r;   rc  r   r   r2   rq  r.   r.   r/   test_numpy_mean+  s    




z_TestCommon.test_numpy_meanc           
   	   C   s   t dddgdddgdddggt}| j|dtd	}tj|}t d
ddgdddgdddgg}| j|dtd	}tj|}t B}|td |td |td t|	 }t|	 }	W 5 Q R X t
|| td t
|	| td d S )Nr   r   rR   r   r   r   r  r   r   r2         @g              ?       @&splu converted its input to CSC formatCspsolve is more efficient when sparse b is in the CSC matrix format.spsolve requires A be CSC or CSR matrix format)r   floatr   rc   linalgr)   r   r   r"   rq   r   r   )
rw   MsMZMexpNZsNZNexpr   ZsMexpZsNexpr.   r.   r/   	test_expm8  s(    " z_TestCommon.test_expmc                    s$    fdd}t fD ]}|| qd S )Nc              	      s   t dddgdddgdddgg| }t B}|td |td	 |td
  j|d| d}t|}W 5 Q R X t|| t	
d ttt| d S )Nr   r   rR   r   r   r   r  r  r  r~  r   rz  )r   r   r   r"   r   r*   r   r   rq   r;   r    r   r%  )r2   r  r   r  ZsMinvr   r.   r/   r   O  s    "z#_TestCommon.test_inv.<locals>.check)r  r   r.   r   r/   test_invN  s    
z_TestCommon.test_invc                 C   s   t dddgdddgdddgdddgg}t| | | t dddgdddgdddgg}t| | | t| j|d	d
 |d	 d S Nr   r   rR   r   r   r   r        @int16r   )r   r   r   rq   r`   r   r.   r.   r/   test_from_array_  s    (
z_TestCommon.test_from_arrayc                 C   s   t dddgdddgdddgdddgg}t| | | t dddgdddgdddgg}t| | | t| j|d	d
 |d	 d S r  )r'   r   r   todenser`   r   r.   r.   r/   test_from_matrixj  s    (
 z_TestCommon.test_from_matrixc                 C   s   dddgdddgdddgdddgg}t | | | dddgdddgdddgg}t | | t| t | j|d	d
 t|d	 d S r  )r   r   rq   r   r`   r   r.   r.   r/   test_from_listw  s    $ z_TestCommon.test_from_listc                 C   s   t dddgdddgdddgdddgg}t|}t| | | | |}t| | | t dddgdddgdddgg}t|}t| | | t| j|d	d
 |d	 | |}t| | | t| j|d	d
 |d	 d S r  )r   r   r   r   rq   r`   rw   r  Sr.   r.   r/   test_from_sparse  s    (


z_TestCommon.test_from_sparsec           
      C   s  | j  }t|tjstt|| j t|j	j
|j	jk | j jdd}t|| j t|j	j
 t|j	j  | j jdd}t|| j t|j	j
  t|j	j tj| j j| j jd}| j j|d}t| j| t| j| t|j|k ttj| j j| j jd}| j j|d}t| j| t| j| t||k tdddgg}|| j }|| j   }t|| tdddd	ggj}| j| }| j  | }t|| | j| jtd}| jt}	t| |	 d S )
Nr  r  r  r   rl  r|  r}  r{        @)r   r  r:   r;   r'   r_   r   r   r   flagsc_contiguousf_contiguousr   r   r2   baser&   r   r   r   r   r`   )
rw   chkr^  r>   dense_dot_denser   rC   check2spboolZmatboolr.   r.   r/   test_todense  sB    




z_TestCommon.test_todensec                 C   sv  t | j}| j }t|| t|jj|jjk | jjdd}t|| t|jj t|jj  | jjdd}t|| t|jj  t|jj t	j
| jj| jjd}| jj|d t|| d|d< | jj|d t|| tddd	g}t||}t|| j }t|| tddd	d
g}t||}t| j |}t|| | j| jtd}	|t}
t|	 |
 d S )Nr  r  r  r   rl  r|  .r}  r{  r  )r   r   r   rq   r   r   r  r  r  r;   r   r   r2   r   r   r   r   r`   )rw   r   r  r^  r>   r  r   rC   r  r  Zarrboolr.   r.   r/   test_toarray  s:    











z_TestCommon.test_toarrayc                    s  t dddgdddgdddgg}| |}tD ]}||}dD ]<}|j||d t j|j t  | t j|j q@t j|dd k  j|ddt k	  fdd	} jd
krdD ]}|| qq. jdkrdD ]}|| qq. jdkr.dD ]}|| qq.d S )Ny       @      @r   y      @      @)TFr#  FTc                    sj   t  | }t | }t|| t||k	 d|j }|| }||  ||< t|| || k |||< d S )N)r   )rf   r   r   r   )	attributer>   rC   r*  Zb_iZS_castedZS_copiedr.   r/   (check_equal_but_not_same_array_attribute  s    



zI_TestCommon.test_astype.<locals>.check_equal_but_not_same_array_attribute)csrcscbsr)indicesindptrdatacoo)rowcolr  dia)offsetsr  )	r   r   r#   r`   r   r2   rq   formatr   )rw   r  r  r3   ZD_castedr   r  r  r.   r  r/   test_astype  s2    





z_TestCommon.test_astypec                 C   s   |  tddddd}t|jtd t| jtd t| j|j t|d jtd t|d	 jtd	 | }| }t	||k d S )
Nr  rH   r   rR   r   r   r  r   r   )
r   r   r$  r   r2   r;   Zasfptyper  r`   r   )rw   rA   rB   r  r.   r.   r/   test_asfptype  s    z_TestCommon.test_asfptypec                    s$    fdd} j D ]}|| qd S )Nc                    sD    j |  } j|  }t|d |d   t|d |d   d S NrR   L1@r   r   r   rq   rt  r   r.   r/   r     s    

z*_TestCommon.test_mul_scalar.<locals>.checkr   r   r.   r   r/   test_mul_scalar  s    
z_TestCommon.test_mul_scalarc                    s$    fdd} j D ]}|| qd S )Nc                    sD    j |  } j|  }td| d|   td| d|   d S r  r  rt  r   r.   r/   r   *  s    

z+_TestCommon.test_rmul_scalar.<locals>.checkr  r   r.   r   r/   test_rmul_scalar)  s    
z_TestCommon.test_rmul_scalarc              	   C   s,   | j tj }tt d |  W 5 Q R X d S r1   )r   r;   r   r   r%  )rw   r   r.   r.   r/   test_rmul_scalar_type_error5  s    
z'_TestCommon.test_rmul_scalar_type_errorc                    s$    fdd} j D ]}|| qd S )Nc                    s    j |  } j|  }| }d|d< |}|| }t|| |  ||  }t| | |   ||d  }t|| |d   d S )Nr}  r<  r   )r   r   r   r   rq   r   r2   r   r   r>   rC   r   r   r.   r/   r   ;  s    

z#_TestCommon.test_add.<locals>.checkr  r   r.   r   r/   test_add:  s    
z_TestCommon.test_addc                    s$    fdd} j D ]}|| qd S )Nc                    sF    j |  } j|  }| }d|d< |}|| }t|||   d S )Nr}  r<  )r   r   r   r   rq   r  r   r.   r/   r   Q  s    

z$_TestCommon.test_radd.<locals>.checkr  r   r.   r   r/   	test_raddP  s    

z_TestCommon.test_raddc                    s4    fdd} j D ]}|tdkr&q|| qd S )Nc              
      s    j |  } j|  }t||  td t|d  |  tddddgddddgddddggd}t||  ||   t||  | |  t||d  ||d   d S )	Nr"  r   r   r   r   r  r   r   )r   r   r   rq   r;   r   r   r   r2   r   r   rA   r   r.   r/   r   _  s    

(z#_TestCommon.test_sub.<locals>.checkr   r   r;   r2   r   r.   r   r/   test_sub^  s
    
z_TestCommon.test_subc                    s4    fdd} j D ]}|tdkr&q|| qd S )Nc              	      s,   j |  } j|  }t|| ddddgddddgddddgg t|| ddddgddddgddddgg td|  |   tddddgddddgddddggd}t|| ||   t|| | |  t| | | |  t||  ||   t|d | |d |  d S )Nr   r   r   r   r  r   r   )r   r   r   rq   r   r'   r  r   r.   r/   r   w  s    

,,.z$_TestCommon.test_rsub.<locals>.checkr   r  r   r.   r   r/   	test_rsubv  s
    
z_TestCommon.test_rsubc                    s$    fdd} j D ]}|| qd S )Nc                    sp   j |   j|  td    tfddtddD }t fddtddD }t| | d S )Nr   c                    s   g | ]}|  qS r.   r.   rC  r	  )r   r.   r/   rE    s     z8_TestCommon.test_add0.<locals>.check.<locals>.<listcomp>r   r   c                    s   g | ]}|  qS r.   r.   r  )r   r.   r/   rE    s     )r   r   r   rq   rQ  r   r   )r2   ZsumSZsumDr   rg  r/   r     s    

z$_TestCommon.test_add0.<locals>.checkr  r   r.   r   r/   	test_add0  s    
z_TestCommon.test_add0c           	      C   s  t dddgdddgg}t dddgdddgg}| |}| |}t|| ||  t|| ||  t d	d
dgdddgg}t dddgdddgg}| |}| |}t|| ||  t|| ||  t|| ||  t|| ||  d S )Nr   r   r  rR   r   r   r  r         ?                     @                    @                  @      @       @      @                   ?                           @)r   r   r   multiplyrq   )	rw   rA   rB   rH  Bspr  r  ZCspDspr.   r.   r/   test_elementwise_multiply  s    



z%_TestCommon.test_elementwise_multiplyc                 C   sP  t dg}t dgg}t dddg}t dddgg}t dgd	gdgg}t d
ddgddd	gdddgg}dd	dg}td}|j}	t dgg}
t dd	gddggg}| |}| |}| |}| |}| |}| |d }| |	}| |	d d dd f }| |
}|||||||||	|
|g}|||||||||g	}|D ]j}|D ]^}z| |  }W n* tk
r   tt|j| Y qLY nX ||}t	| | qLqD|D ]}|D ]}z| | }W nD t
k
r   Y qY n* tk
r   tt|j| Y qY nX ||}t|r:t	| | n
t	|| qqd S )Nr   ir   r   r   r  r  r   rR   r  r  r   r"  r   N)r   r;   onesr   r   rq   r   r   r  r   r%  r!   )rw   rA   rB   r  r  Er  GHJKLr  r  ZEspZFspZHspZHsppZJspZJsppZKsprT  Z
spmatricesr*  r+  Z
dense_multZsp_multr.   r.   r/   #test_elementwise_multiply_broadcast  sX    
 












z/_TestCommon.test_elementwise_multiply_broadcastc              	   C   s  dt jt jdgdt jdt jgt jdt jt jgg}tt| j| j | | tddddgddddgddddggd}dt jt jdgd	t jtt jgt jd
t jdgg}tt| j| | tdddgdddgg}tdddgdddgg}| |}| |}t	t|| ||  tdddgd	ddgg}tdddgdddgg}| |}| |}t j
dd tt|| ||  W 5 Q R X tddgddgg}tddgddgg}| |}| |}t j
ddd" tt t|| ||  W 5 Q R X d S )Nr   r   r   r   r  r   r         ?r   g      ?r  r  r  r  r  r   r  r  r  r  r  r  rR   r   r   r   )divide)r  r   )r;   r   r   rq   r   r   r'   r   r   r   r   )rw   r   ZdenomrA   rB   rH  r  r.   r.   r/   test_elementwise_divide  s8    .



 

z#_TestCommon.test_elementwise_dividec                 C   s   t ddddgddddgddddgdddd	gg}| |}d
D ]6}|| }tj||}t| | t|j|j q>dD ]}t	t
|j| qz| |d dd d f }t	t
|jd d S )Nr   r   rR   r   r   r   r  r  r  )r   r   rR   r   )r   g@r  )r   r   r;   r  Zmatrix_powerr   rq   r   r2   r   	Exception__pow__)rw   rA   rB   exponentZret_spZret_npr.   r.   r/   test_pow  s    0
z_TestCommon.test_powc              	   C   s   |  tdddgdddgdddgdddgg}tddddg| tddddg|  tddddgg}t|| ||   d S )Nr   r   r   rR   r{  r   )r   r'   r   r   rq   r   )rw   r  r  r.   r.   r/   test_rmatvec  s    .(z_TestCommon.test_rmatvecc                 C   s   |  dgdgdgg}tt|td  t|td  dgdgdgg t|tdg tdddg t|tdgg tdgdgdgg t|td td d S )Nr   rR   r   r   r   r   r   )r   r   r!   r   r   rq   r;   r  r   r.   r.   r/   test_small_multiplication%  s    "&z%_TestCommon.test_small_multiplicationc                 C   s   |  dgdgdgg}t }t|| d t|| d t|| d t|| d t|| d t|| d ttdd ttdd d S )Nr   rR   r   r}   ru   A @ BB @ A)r   rs   r   evalrw   rA   rB   r.   r.   r/   test_binop_custom_type/  s    z"_TestCommon.test_binop_custom_typec                 C   s   |  dgdgdgg}td}t|| d t|| d t|| d t|| d t|| d t|| d ttdd ttdd d S )	Nr   rR   r   rm  r}   ru   r  r  )r   r   r   r  r  r.   r.   r/   !test_binop_custom_type_with_shape@  s    z-_TestCommon.test_binop_custom_type_with_shapec              	   C   sZ   |  tdddgdddgdddgdddgg}d}||}|| }t| |  d S )Nr   r   r   rR   r{  rE   )r   r   r   r   rq   )rw   r  scalaractualr   r.   r.   r/   test_dot_scalarM  s
    .
z_TestCommon.test_dot_scalarc              	   C   s   |  tdddgdddgdddgdddgg}|  tddgddgddggd}tdddggj}tt||| |  tt|| ||   tt| |||   tt|| ||   tttj|d tttjd| d S )Nr   r   r   rR   r{  r   )	r   r   r   r   operatormatmulrq   r   r   )rw   r  rB   r  r.   r.   r/   test_matmulU  s"    ."



z_TestCommon.test_matmulc              	   C   s  |  tdddgdddgdddgdddgg}tdddggj}t|| | |  t|tdddg jd t|tdgdgdgg jd t|tdgdgdgg jd tt	|tdddg t
 tt	|tdddgj tj tddgtddddgtdgdggtdddgtdgdggg}|D ]}tt|j| q4t|tdddg t|jdddg t|dgdgdgg tt|jdddgj d S )	Nr   r   r   rR   r{  )r   )r   r   r   )r   r'   r   r   r   rq   r   r   r   r:   r	   r;   r   r   rz   r   rA   r&   )rw   r  r  Zbad_vecsr3   r.   r.   r/   test_matvecj  s     .   & &z_TestCommon.test_matvecc                 C   s  t dddgdddgdddgdddgg}tdddgdddgdddgdddgg}t ddgddgddggd}| |}| |}t||  ||  t|| ||  t|| ||  t|| ||  | }|}|| }t||  | t|| | t|| | t|| | | }t||  | t|| | t|| | t|| | | }t||  | t|| | t|| | t|| | d}	d}
t	d t
|	df}t|	D ]8}tdD ](}t }||
k r||
 |||f< q֐q| |}||j }t| | |j   t| | | j  | ddgdd	gg}| ddgdd	gd
dgg}tt|j| d S )Nr   r   r   rR   r{  r   r  g333333?r   r   r  )r'   r   r   r   rq   r   r   r   rn   rQ   r   r   r   r   r   rz   )rw   r>   Za2rC   aspbspcspr   Zwantr  fracrA   r*  r+  r3  rB   r.   r.   r/   test_matmat_sparse  sT    ((





z_TestCommon.test_matmat_sparsec                 C   s   t dddgdddgdddgdddgg}| |}tddgddgddggt ddgddgddggg}|D ]:}|| }tt|t| t|jd	 t|t|| qjd S )
Nr   r   r   rR   r{  r   r   r  r   rR   )	r'   r   r   r   r:   typer   r   r   )rw   r>   r  bsrC   resultr.   r.   r/   test_matmat_dense  s    (
4z_TestCommon.test_matmat_densec                 C   s  t dddgdddgdddggddgddgg}| }| |}dD ]}||}t|j| t| | | |d |}t|j| t| |d  t|d	 |}t|j| t| | qFd
D ]:}||}t|| | |d |}t||d  qd S )Nr   r   rR   r   r   r   )r  r  r  r  r  r7   lil              @Z_matrix)r   dense)	rd   r   rq   r   asformatr   r  r   r  )rw   rA   r  r  r>   rC   r   r.   r.   r/   test_sparse_format_conversions  s$    0



z*_TestCommon.test_sparse_format_conversionsc           	      C   s   t ddddgddddgddddgg}t dddgdddgg}t||}| |}dD ]>}t|d| }d	D ]&}d
D ]}t|||fd | qtqlqVd S )Nr   r   rR   r   r   r   )r  to)r   rR   r   r  )r   rR   r   r   r  r  	blocksize)r   r   r   rf   r   rq   )	rw   r3   r4   rA   rH  r  fnXYr.   r.   r/   
test_tobsr  s    &

z_TestCommon.test_tobsrc                    s   j }tg g}||g  fdd}d}tt| ttd t|j td t	t
|jdd jD ] }tt D ]}||| qqzd S )Nc                    s\   t  | | d}|}| }| }t| | t|  | t|j|j d S ra  )r   r   r
   r   rq   r   r2   )r2   r+  r   r   r>   rC   rS  r.   r/   r     s    
z)_TestCommon.test_transpose.<locals>.checkr"  r   r   r   )axes)r   r;   r   r   r   r
   rq   r   r   r   r   r   r   r   )rw   rV  rW  r   r  r2   r+  r.   rS  r/   test_transpose  s    

z_TestCommon.test_transposec                    s$    fdd} j D ]}|| qd S )Nc                    sD    j |  } j|  }|| }t|||  || }t|||  d S r1   )r   r   r   r2   r   r   Zsum1Zsum2r   r.   r/   r     s    

z)_TestCommon.test_add_dense.<locals>.checkr  r   r.   r   r/   test_add_dense
  s    

z_TestCommon.test_add_densec                    s4    fdd} j D ]}|tdkr&q|| qd S )Nc                    s    j |  } j|  }|jtkrL|| }t|||  || }t|||  n<|| | | }t|||  || | | }t|||  d S r1   )r   r   r2   r   r   r  r   r.   r/   r     s    


z)_TestCommon.test_sub_dense.<locals>.checkr   r  r   r.   r   r/   test_sub_dense  s
    
z_TestCommon.test_sub_densec                    s   t dddgdddgdddgg t dddgdddgdddggt dddgdd	dgdd
dgg fdd}jD ]<}t jt jt jfD ]&}dD ]}|t |t || qqq~d S )Nr   r   r   r   r   rR   r  r   y      @       @              ?y             c           
   	      s"  t | t jr | }n | }|dkrD|d}nH|dkrX|d}n4|dkrl|}n |dkr|}nt t &}|t	d |
|}||}W 5 Q R X t 
t|t|}tt|| t|j|j t t|t|}	tt||	 t|j|	j d S )Nr  r   scalar2r   r  rd   zHTaking maximum .minimum. with > 0 .< 0. number results to a dense matrix)r;   rX   complexfloatingr   r`   r  r   r   r   r"   maximumZminimumrq   r   r   r2   )
r2   dtype2btyperA   rB   r   Zmax_sZmin_sZmax_dZmin_dZA_denseZA_dense_cpxZB_denserw   r.   r/   r   9  s0    
z/_TestCommon.test_maximum_minimum.<locals>.check)r  r
  r  rd   )r;   r   r   r   float_complex_r2   )rw   r   r2   r  r  r.   r  r/   test_maximum_minimum3  s    """
z _TestCommon.test_maximum_minimumc                 C   s
  | j }t| j|j t|j|ddj|j t|j|ddj|j t|  |  t|j|dd |  t|j|dd |  t|d|j }t| |k t|dd|k t|ddj|j t|dd |  tt| |  d S )NTr#  Fr  )	r   r   r   r  	__class__rq   rf   r   rD   )rw   rA   Ztoselfr.   r.   r/   	test_copy]  s    z_TestCommon.test_copyc                 C   sF   t tddd}| |}t||D ]\}}t| | q*d S )N2   r   rE   )r'   r;   r   r$  r   zipr   rq   )rw   rB   rA   r3   r4   r.   r.   r/   test_iteratoru  s    
z_TestCommon.test_iteratorc                 C   s  t g }|d}|d}|d}|d}|d}tddg}| |}| |}	| |}
| |}| |}| |}t||jt|| t|	|jt|| t||	jt|| t|
|jt|| t|
|jt|| t||
jt|| t||
jt|| t||jt|| tt	|j| tt	|j| t|
|jt
|| t|	
|	jt
|| t|
|jt
|| t|
|jt
|| t|	
|jt
|| t|
|jt
|| t|
djt
|d t|	
djt
|d t|
djt
|d tt	|j
| tt	|j
| t||j|| t|	|	j|| t||j|| tt	|j| tt	|	j| d S )Nr  r[  r  r  r6  r   r  )r   r$  r;   r  r   r   r   rA   r   r   r  ry   )rw   rx   r>   rC   r   r   r   r   r  r  r  ZdspZespZfspr.   r.   r/    test_size_zero_matrix_arithmetic|  sN    










z,_TestCommon.test_size_zero_matrix_arithmeticc                 C   s   t g }|d}|d}|d}|||fD ]n}| |}t| j| t| j| t| j| t| j| t|	 j| t|
 j| q0d S )Nr  r  r6  )r   r$  r   r   r   rA   r   r   Ztoliltodoktobsr)rw   rx   r>   rC   r   r   Zspmr.   r.   r/   test_size_zero_conversions  s    



z&_TestCommon.test_size_zero_conversionsc                    s4   dd l  t }|t | fdd}|  d S )Nr   c                     s   j  } t jD ]}  j| |d}t| j|j t| 	 |	  t| j
|j
 | j D ]8\}}t|tjrt||j|  qdt||j| k qdqd S )N)protocol)r   r   r   HIGHEST_PROTOCOLloadsdumpsr   r   r   rq   r  r8   itemsr:   r;   r	   r   )r   r  Zsploadedkeyr   picklerw   r.   r/   r     s    
z&_TestCommon.test_pickle.<locals>.check)r#  r   r   r"   )rw   r   r   r.   r"  r/   test_pickle  s    
z_TestCommon.test_picklec                    s"    fdd}dD ]}|| qd S )Nc                    sv   | dkrt d  jttfkr*t d tt| } tdddd }||	 }||}t
|	 | d S )Nsignz2sign conflicts with comparison op support on Numpyz%Unary ops not implemented for dok/lilr  r   r         4@)r   r   r   r   r   rf   r;   r   r$  rq   r   )rl   Zufuncr   ZX0X2r   r.   r/   r     s    


z5_TestCommon.test_unary_ufunc_overrides.<locals>.check)sintanarcsinarctansinhtanharcsinharctanhrintr%  expm1log1pdeg2radrad2degfloorceiltruncsqrtr   r.   )rw   r   rl   r.   r   r/   test_unary_ufunc_overrides  s    z&_TestCommon.test_unary_ufunc_overridesc                 C   sP  t ddddgddddgddddgg}| |}t|dd k t|jddgddgddgg |d t|jddgddgg |d t|jddgddgddgg |d t|jdddgdddgdddgg |d t|jdddgdddgdddgg |dd t|jddgddgddgg d	D ]}tt|j| q6d S )
Nr   r   r   r   rR   r   rR   rR   rR   r   )r   )r   rR   r!  r   rR   r   	r;   r   r   r   resizer   rA   r   r   )rw   r  r  Z	bad_shaper.   r.   r/   test_resize  sH    






z_TestCommon.test_resizec                 C   sB  | j }|j}|j|dd}t| |  |tkrBtt|| |j||jdd}t| |  |tkr|tt|| |j|t	j
dd}t| |  |j|dd}t| |  tt||  dD ]h}||krq||}|j|dd}t| |  |j|dd}t| |  tt||  qd S )NFr#  )r2   r   T)r  r  r  r  r7   r  )r   r  r  r6   rq   NON_ARRAY_BACKED_FORMATSr   rD   r2   r;   r   r   r  )rw   rA   Zself_formatr  Zother_formatrB   r.   r.   r/   test_constructor1_base  s0    
z"_TestCommon.test_constructor1_baseN)`r   r   r   __doc__r#   r   classmethodr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r'  r   markslowr:  r?  rI  rJ  rL  rM  rX  r`  ri  ro  rr  ru  rv  rw  rx  ry  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$  r9  r?  rA  r.   r.   r.   r/   r      s   
%'?>::!,
7	
#"




)%
(7#
6*:$r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
_TestInplaceArithmeticc                 C   s   t d}| |}| }| }||7 }||7 }t|| | }| }||8 }||8 }t|| tttj|| | }| }|	|j
}||j
9 }t|| tttj|| d S )Nr"  )r;   r  r   r   r   r   r   r  imulr   r   r%  	ifloordiv)rw   r>   rC   r3   r4   r.   r.   r/   test_inplace_dense5  s&    





z)_TestInplaceArithmetic.test_inplace_densec                    s$    fdd} j D ]}|| qd S )Nc                    s    j |  } j|  }tjtd| ddrV| }|d9 }| }|d9 }t||  tjtd| ddr| }|d9 }| }|d9 }t||  d S NrR   Z	same_kind)Zcastingr  r   r   r;   can_castr  r   r   rq   r2   r   r   r>   rC   r   r.   r/   r   Q  s    

z6_TestInplaceArithmetic.test_imul_scalar.<locals>.checkr  r   r.   r   r/   test_imul_scalarP  s    
z'_TestInplaceArithmetic.test_imul_scalarc                    s2    fdd} j D ]}t|tjs|| qd S )Nc                    s    j |  } j|  }tjtd| ddrV| }|d }| }|d }t||  tjtd| ddr| }|d }| }|d }t||  d S rJ  rK  rM  r   r.   r/   r   h  s    

z6_TestInplaceArithmetic.test_idiv_scalar.<locals>.check)r   r;   rL  int_r   r.   r   r/   test_idiv_scalarg  s    
z'_TestInplaceArithmetic.test_idiv_scalarc                 C   s   |  td}|  td}|  td}||7 }|| }t|j|j ||9 }|| }t|j|j ||8 }|| }t|j|j tttj|| d S )Nr   )	r   r;   r    r   rA   r   r%  r  rH  )rw   r>   rC   Zbpr.   r.   r/   test_inplace_success  s    z+_TestInplaceArithmetic.test_inplace_successN)r   r   r   rI  rN  rP  rQ  r.   r.   r.   r/   rF  4  s   rF  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )_TestGetSetc                    s(    fdd}t D ]}|t| qd S )Nc                    s   t dddgdddgdddgdddgg| d} |}|j\}}t| |D ]0}t| |D ]}t|||f |||f  q\qLtt|d |  dD ]}tttf|j	| qd S )	Nr   r   r   r   rR   r   r   r   r   r   r   )r   r   r  )r   r   r<  )
r   r   r   r   r   r  r   
IndexErrorr%  __getitem__)r2   r  rA   r  r  r*  r+  rD  r   r.   r/   r     s    


z*_TestGetSet.test_getelement.<locals>.checkr#   r;   r2   r   r.   r   r/   test_getelement  s    z_TestGetSet.test_getelementc                    s(    fdd}t D ]}|t| qd S )Nc              	      sH   j d| d}t t}|td | d|d< | d|d< | d|d	< | d
|d< | d|d< | d|d< | d|d	< W 5 Q R X | tjkrt| ddddgddddgddddgg dD ]}t	t
|j|d qdddgtdddgfD ]}t	t|jd| qt| tjsD| tjkrDdD ]}t	t|jd| q,d S )Nr"  r   r.  r   r  r  r   rR   r   r[  r}  r=  r  r   r   r  r   r   r   r   rR   ))r   r   )r   r   r  r"  r   g     ^@r   )r  )r   r   r   r"   r  r;   bool_r   rq   r   rV  __setitem__r   r   rX   r  r%  )r2   rA   r   rD  r(  r   r.   r/   r     s:    



	z*_TestGetSet.test_setelement.<locals>.checkrX  r   r.   r   r/   test_setelement  s    "z_TestGetSet.test_setelementc                    s*    fdd} j D ]}|t| qd S )Nc              	      sF    j d| d}t }|td d|d< W 5 Q R X t|d d d S )N)r   rE   r   r.  r   )r   r   )r   r   r   r"   r   r2   rA   r   r   r.   r/   r     s    z9_TestGetSet.test_negative_index_assignment.<locals>.checkr  r   r.   r   r/   test_negative_index_assignment  s    
z*_TestGetSet.test_negative_index_assignmentc                    s^   d\  fdd}dddt ddfdt dft dt dffD ]\}}|||d	 qDd S )
Nr   rE   c              	      sr   d| ||f }  f}t }|td d|| |f< W 5 Q R X t| ||d t|| |f d|d d S )Nz%r ; %r ; %rr.  r   r/  )r   r   r   r"   r   rQ  )r*  r+  Znitemsr,   rA   r   r   r)  rw   r.   r/   	_test_set  s    z3_TestGetSet.test_scalar_assign_2.<locals>._test_setrR   r   r   r  r\  r   r   r   )r   rw   rd  r*  r+  r.   rc  r/   test_scalar_assign_2  s    z _TestGetSet.test_scalar_assign_2c              	   C   sj   |  d}td}t 8}|td ||fD ]}d|d< d|d< d|d< q0W 5 Q R X t| | d S )Nr   r.  r   r[  r   r  r  r   r;   r   r   r   r"   r   rq   rw   rA   rB   r   r  r.   r.   r/   test_index_scalar_assign  s    

z$_TestGetSet.test_index_scalar_assignN)r   r   r   rY  r_  ra  rh  rk  r.   r.   r.   r/   rR    s
   &rR  c                   @   s   e Zd Zdd ZdS )
_TestSolvec              	   C   s  d}t jd t||ftd}t j|}t j|d dt j|d   }t j|}tt|D ]}|| |||f< qhtt|D ]0}|| |||d f< t|| ||d |f< q| 	|}t
  }|td t||}W 5 Q R X t|| | d S )Nr  r   r   r   r	  r~  )r;   rn   rQ   r   r   rU  r   r   r   r   r   r   r"   r(   Zsolver   )rw   r)  rA   r3   r4   r3  r*  r   r.   r.   r/   
test_solve	  s$    $
z_TestSolve.test_solveN)r   r   r   rm  r.   r.   r.   r/   rl   	  s   rl  c                   @   s\   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd ZdS )_TestSlicingc                 C   s   t | jdtjddddf jtj t | jdtjddddf jtj t | jdtjddddf jtj t | jdtjddddf jtj d S )Nr   rE   r   r   r   r   )r   r   r;   r  r2   rH   r   r   r   r.   r.   r/   test_dtype_preservation	  s    &&&z$_TestSlicing.test_dtype_preservationc                 C   s   t jt jt jt jfD ]}| jd|d}t|d d dddf j| t|dddd d f j| t|ddddf j| t|ddddf j| qd S )Nr:  r   r   rR   r;   r  rH   r   r   r   r   r2   rw   dtrA   r.   r.   r/   #test_dtype_preservation_empty_slice	  s    z0_TestSlicing.test_dtype_preservation_empty_slicec                 C   sp  t tddd}| |}t|dd d f |dd d f   t|dddf |dddf   tdddgdddgdddgdddgg}| |}t|ddd	f |ddd	f   tdddgdddgdddgdddgg}| |}t|ddd	f |ddd	f   t|dd
d f |dd
d f j tt	|j
td df tt	|j
dtd	df d S )N      I@r   rE   r   rR   r   r   r  r   r      r  )r&   r   r$  r   r   rq   r'   rA   r   rV  rW  slicerw   rB   rA   r  r  r  r  r.   r.   r/   test_get_horiz_slice(	  s    
&&(
&(
&$z!_TestSlicing.test_get_horiz_slicec                 C   s  t ddd}| |}t|dddgf |dddf   t|d d dgf |d d df   tdddgdddgdddgdddgg}| |}t|dd	dgf |dd	df   t|d d dgf |d d df   tdddgdddgdddgdddgg}| |}t|d d dgf |d d df   t|d
d dgf |d
d df   tt|jt	d df tt|jdt	d	df d S )Nru  r   rE   rR   r   r   r   r  r   r   rv  r  )
r   r$  r   r   rq   r   r   rV  rW  rw  rx  r.   r.   r/   test_get_vert_slice<	  s    
(((
(((
((z _TestSlicing.test_get_vert_slicec                 C   s6  t ddd}| |}t|ddddf  |ddddf  t|dd d df  |dd d df  t|d ddd f  |d ddd f  tdddgd	ddgdddgdddgg}| |}t|ddddf |ddddf   t|d d dd f |d d dd f   d S )
Nru  r   rE   rR   r   r   r   r   r   )r   r$  r   r   rq   r   )rw   rB   rA   r  r  r.   r.   r/   test_get_slicesQ	  s    
...(
.z_TestSlicing.test_get_slicesc                 C   sv   t jdd}z"| |ddddddf }W n tk
rN   tdY nX t| |ddddddf  d S )Nr  r      rR   r  r   feature not implemented)	r;   rn   rU  r   r   r   r   r   rq   )rw   Zv0r(  r.   r.   r/    test_non_unit_stride_2d_indexing^	  s    "z-_TestSlicing.test_non_unit_stride_2d_indexingc                 C   s  t tddd}| |}t|d |d  t|d |d  t|d |d  t|tddf |d  t|dtdf |d  t|tdtdf |d  t|d	d d f  |d	d d f  t|d	ddf  |d	ddf  t|td	ddf  |d	ddf  t|d d d	f  |d d d	f  t|d
ddf  |d
ddf  t|dddf  |dddf  t|d	dd
f  |d	dd
f  t|d	dtd
f  |d	dd
f  t|dd	dd	f  |dd	dd	f  t|dd d
d f  |dd d
d f  t|d dd df  |d dd df  t|d	dd df  |d	dd df  t|dd d f  |dd d f  t|dd d f  |dd d f  t|tdd d f  |dd d f  t|dd  |dd  t|dd  |dd  ttd	tdd }t||d d f  |d	dd d f  t|d d |f  |d d d	df  d S )Nr  r   rE   re  rf  r\  r   r   rR   r   r   r  r   r   )	r&   r   r$  r   r   r   rq   rw  r   )rw   rB   rA   r&  r.   r.   r/   test_slicing_2i	  s8    
&&*&&&&*....&&**z_TestSlicing.test_slicing_2c                    s  t tddd|  tj}|d d |dd |dd  |dd d |dd |dd |d	dd
 |dd d |d dd
 dd|d d  |dd d
ddtd
tdg} fdd}t|D ]\}}|| q̇ fdd}t|D ]&\}}t|D ]\}}||| qqg }	t	j
dgd  D ],\}}}
|
dkrHq0|	t|||
 q0|	D ]$}||| ||d |d| qbd S )Nr  r   rE   rR   r   r   r  r  r  r   r   r   r   r   r   c                    sZ    |  }|  }|j dkr,t||t|  n*|jdkrB|jdkrBnt| |t|  d S Nr.   r   )r   r   r   rW   r   rq   )r>   r3   r4   rA   rB   r.   r/   check_1	  s    
z,_TestSlicing.test_slicing_3.<locals>.check_1c                    s   t | tjrt| }n| }t |tjr0t|}n|} | |f }||f }|jdkrlt||t| |f n.|jdkr|jdkrnt|	 |t| |f d S r  )
r:   r;   r	   intr   r   r   rW   r   rq   )r>   rC   ZaiZbir3   r4   r  r.   r/   check_2	  s    


z,_TestSlicing.test_slicing_3.<locals>.check_2)
Nr   r   rR   r   r  r   r   r   i)r&   r   r$  r   r;   s_r   r   	enumerate	itertoolsproductr<   rw  )rw   r  slicesr  r+  r>   r  r*  rC   Zextra_slicesr   r.   r  r/   test_slicing_3	  sJ    
*
 
    
 
    



z_TestSlicing.test_slicing_3c                 C   s>  t tddd}| |}t|d j|d j t|d j|d j t|d j|d j t|d j|d j t|dd df j|dd df j t|ddd f j|ddd f j t|dd ddf j|dd ddf j t|dddd f j|dddd f j t|d	 |d	  t|d
 |d
  d S )Nr  r   rE   .).)r   .).r   r   )r   r   .)r   .r   )r&   r   r$  r   r   rA   r   rw   rC   r>   r.   r.   r/   test_ellipsis_slicing	  s    
&&**z"_TestSlicing.test_ellipsis_slicingc                 C   s   t tddd}| |}t|d j|d d d d f j t|d j|d d d d f j t|d j|dd d f j t|dd ddf j|dd d d f j t|dddd f j|d d dd f j t|d	 j|d d df j d S )
Nr  r   rE   )..)...)r   ..r   .)..r   )r&   r   r$  r   r   rA   r  r.   r.   r/   test_multiple_ellipsis_slicing	  s    
"",,z+_TestSlicing.test_multiple_ellipsis_slicingN)r   r   r   rp  rt  ry  rz  r{  r~  r  r  r  r  r.   r.   r.   r/   rn  	  s   
-Brn  c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )_TestSlicingAssignc              	   C   s   |  d}td}t v}|td ||fD ]Z}d|dddf< d|dddf< d|dddf< d|ddd f< d|dd ddd f< q0W 5 Q R X t| | d S )	Nr   r.  r   r   r   r   r  r   ri  rj  r.   r.   r/   test_slice_scalar_assign	  s    

"z+_TestSlicingAssign.test_slice_scalar_assignc                    sh   d\  fdd}dt dfdt d ddfdt dd	ftdt dd	ffD ]\}}||| qPd S )
Nrb  c              	      st   d| |f }  f}t }|td d|| |f< W 5 Q R X t f}d|| |f< t| ||d d S )Nz
i=%r; j=%rr.  r   r/  )r   r   r   r"   r;   r   r   rq   )r*  r+  r,   rA   r   rB   rc  r.   r/   rd  
  s    z9_TestSlicingAssign.test_slice_assign_2.<locals>._test_setrR   r   rE   r   r   r   )rw  r   rg  r.   rc  r/   test_slice_assign_2
  s    $z&_TestSlicingAssign.test_slice_assign_2c              	   C   s,  |  d}t }|td d|d< d|d< d|d< d	|d
< |d	 }|dd d f |dd d f< t|dd d f j|dd d f j |d	 }|d dd df |d d d d f< ttd|d  |j |d	 }|dd d f j|d ddf< t|dd d f jj|d ddf j W 5 Q R X d S )Nr  r.  rR   r  r  rZ  r   rR   r   rE   r  r   r   r   )	r   r   r   r"   r   rA   r;   r   r   )rw   rB   r   rA   r.   r.   r/   test_self_self_assignment
  s$    

&$z,_TestSlicingAssign.test_self_self_assignmentc              	   C   s   |  d}tdddgdddgdddgdddgg}ddgddgg}t }|td d	|d
< d|d< d|d< || |d d d d f< t| | tt||d dd df< t| d dd df | W 5 Q R X d S )Nr  rE   r   r     r   r   r.  r   r  r   rZ  r  r  rR   )r   r   r   r   r"   r   rq   r   )rw   rB   r   blockr   r.   r.   r/   test_slice_assignment/
  s$    

z(_TestSlicingAssign.test_slice_assignmentc              	   C   s   |  d}t H}|td d|d< d|d< d|d< d	|d
< ttd|d d< W 5 Q R X tdddgdddgdddgd	ddgg}t|	 | d S )Nr  r.  r   r  r   rZ  r  r  rE   r  r   r   )
r   r   r   r"   r   r;   r    r   r   rq   )rw   rB   r   r   r.   r.   r/   "test_sparsity_modifying_assignmentC
  s    
 (z5_TestSlicingAssign.test_sparsity_modifying_assignmentc           
      C   s(  |  d}ttdt}tj}|d d |dd |dd  |dd d |ddd |dd d |d d	d d
d|d d  |dd	 dddtdtdg}t Z}|t	d t
|D ],\}}|||< |||< t| |t| 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 5 Q R X tt|jdttd tt|jdtd tt|jd
td fttd tt|jtd dfttd tt|jtd df|  tt|jdddgd
ddggdddgfddddg tt|jdddgd
ddgdddggdddgd
ddggfdddg tt|jtdd
fddgddgg d S )Nrb  rR   r   r   r  r   r   r   r   r   r   r   r.  rE     r  d   )r   r   r   r  r;   r  r   r   r   r"   r  r   rq   r   r   r   r   r   r^  listrw  r   )
rw   rA   rB   r  r  r   r+  r>   r*  rC   r.   r.   r/   test_set_sliceQ
  st    
*    
 
    
($

 
z!_TestSlicingAssign.test_set_slicec                 C   sL   |  td}|  d}||dd df< t| dddgdddgg d S )Nre  rZ  r   rR   r   )r   r;   r  r   rq   r  r.   r.   r/   test_assign_empty_spmatrix
  s    
z-_TestSlicingAssign.test_assign_empty_spmatrixc                 C   sd   |  td}td}||d d df< ||dd d f< t| dddgdddgdddgg d S )Nr   r   r   r   )r   r;   r  r   r   rq   rw   rA   r3   r.   r.   r/   test_assign_1d_slice
  s
    
z'_TestSlicingAssign.test_assign_1d_sliceN)r   r   r   r  r  r  r  r  r  r  r  r.   r.   r.   r/   r  	  s   .r  c                   @   s`   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd ZdS )_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 ]|}| jd|d}t|d d ddgf j| t|dddgd d f j| t|d d g f j| t|g d d f j| qd S )Nr:  r   Frq  rr  r.   r.   r/   #test_dtype_preservation_empty_index
  s    z6_TestFancyIndexing.test_dtype_preservation_empty_indexc                 C   sd   |  tddg}ttttf|jd ttttf|jd tttf|jdddgddddgf d S )Nr   foorR   r  r   rR   r   r   )r   r;   r   r   rV  r   r%  rW  r   r.   r.   r/   test_bad_index
  s    z!_TestFancyIndexing.test_bad_indexc                 C   s^  t tddd}| |}t|ddg  |ddg  t|dddgf  |dddgf  t|dddgf  |dddgf  t|tdddgf  |dddgf  t|dtddgf  |dddgf  t|tdtddgf  |dddgf  t|d d dd	ddgf  |d d dd	ddgf  t|dd
dgf  |dd
dgf  t|dd
ddgf  |dd
ddgf  t|dd
tddgf  |dd
ddgf  t|ddgdf  |ddgdf  t|ddgdf  |ddgdf  t|tddgdf  |ddgdf  t|ddgtdf  |ddgdf  t|tddgtdf  |ddgdf  t|ddgd d f  |ddgd d f  t|ddgd	df  |ddgd	df  t|tddgd	df  |ddgd	df  tt|ddgdd
gf |ddgdd
gf  tt|ddgddgf |ddgddgf  tt|tddgddgf |ddgddgf  tt|ddgtddgf |ddgddgf  tt|tddgtddgf |ddgddgf  t|dgdggdd
gf  |dgdggdd
gf  t|dgdgdggddgf  |dgdgdggddgf  t|tdgdgdggddgf  |dgdgdggddgf  t|dgdgdggtddgf  |dgdgdggddgf  t|tdgdgdggtddgf  |dgdgdggddgf  t|ddg  |ddg  t|ddg  |ddg  t|tddg  |ddg  t|ddgd d f d d dd
gf  |ddgd d f d d dd
gf  t|ddgd d f d d ddgf  |ddgd d f d d ddgf  t|tddgd d f d d tddgf  |ddgd d f d d ddgf  t|d d ddgf dd
gd d f  |d d ddgf dd
gd d f  t|d d ddgf ddgd d f  |d d ddgf ddgd d f  t|d d tddgf tddgd d f  |d d ddgf ddgd d f  ttdtd
d }t||d d f  |dd
d d f  t|d d |f  |d d dd
f  t	jdggt
d}t|||f  |||f  t|g gg gf  |g gg gf  d S )Nr  r   rE   r   r   r   rR   r   r  r   r  r   r   r   r   )r&   r   r$  r   r   rq   r   rw  r   r;   r  )rw   rB   rA   r&  r*  r.   r.   r/   test_fancy_indexing
  s    
&&**.6*.2&&**...2..   6""&"& "& "."& "& "."**z&_TestFancyIndexing.test_fancy_indexingc                 C   s   t jd d}d}d}tt j||}t ||dk}t jj| d ||d}t jj| d ||d}| |}|||f }t|r|	 }t
||||f  || }	|| }
tt|j|	|f tt|j||
f d S )NrP   r  r  r   r  r   r-  )r;   rn   rQ   r&   rU  r  rT   r   r!   rq   r   r   rV  rW  )rw   ZNUM_SAMPLESr  r  r  Ir  r  SIJI_badJ_badr.   r.   r/   test_fancy_indexing_randomized  s"    
z1_TestFancyIndexing.test_fancy_indexing_randomizedc           	      C   s  t jd ttddd}| |}t jt jjddddt	d}t jt jjddddt	d}t jt jjddd	dt	d}t
t|| ||  t
t|d d |f |d d |f  t
t|| ||  t
t||d
k ||d
k  t dddddg}t ddddddddddg
}t
t|||f |||f  t jdt	d}t jdt	d}d|d< t jdt	d}d|d< t
|| t g  tt|j| tt|j| tttf|j|df d S )NrP   r  r   rE   r   rR   r-  r   rb  r  TF)r  rv  r[  )r   r   r   )r;   rn   rQ   r&   r   r$  r   r   rT   r   r   rq   r   r   rV  rW  r   )	rw   rB   rA   r  r  r   ZZ1ZZ2ZZ3r.   r.   r/   test_fancy_indexing_boolean'  s8    
&    z._TestFancyIndexing.test_fancy_indexing_booleanc           	      C   s   t jd ttddd}| |}t jt jjddddt	d	}t
|}tt|| ||  tt||d
k ||d
k  t jt jjddddt	d	}t jt jjddddt	d	}t
|}t
|}tt|j| tt|j| tttf|j|df d S )NrP   r  r   rE   r   rR   rb  r-  r   r  )r   rv  )r  rE   r   )r;   rn   rQ   r&   r   r$  r   r   rT   r   r   r   rq   r   rV  rW  r   )	rw   rB   rA   r   ZXspZr  ZZspZYspr.   r.   r/   "test_fancy_indexing_sparse_booleanG  s    
z5_TestFancyIndexing.test_fancy_indexing_sparse_booleanc                 C   sh   |  tdddgdddgdddgg}t|ddk}t|d d |f jddgddgddgg d S r   )r   r   r;   ravelrQ  r   rA   )rw   rx   Zdesired_colsr.   r.   r/   #test_fancy_indexing_regression_3087^  s    &z6_TestFancyIndexing.test_fancy_indexing_regression_3087c                 C   s8   |  tddgddgg}tt|jdtddg d S )Nr   r   r  rR   )r   r   r   r   r^  r;   rv   r.   r.   r/   test_fancy_indexing_seq_assignc  s    z1_TestFancyIndexing.test_fancy_indexing_seq_assignc              	   C   s~   |  tddgddgg}t 6}|td |ddgddgf |ddgddgf< W 5 Q R X tt|tddgddgg d S )Nr   r   rR   r   zChanging the sparsity structure)r   r   r   r   r"   r   rq   )rw   rx   r   r.   r.   r/   test_fancy_indexing_2d_assigng  s    .z0_TestFancyIndexing.test_fancy_indexing_2d_assignc                 C   s  t tddd}d|dd d f< d|d d df< d|d< | |}tdddddg}tt|| ||  tjg td	}tt|| ||  tt|||f |||f  tjdddd
dgtd	d d d f }tt|||f |||f  tt|||f |||f  d S )Nr  r   rE   r   r   rR   r   r  Fr   r   r   	r&   r   r$  r   r;   r   r   rq   r  rw   rB   rA   r  r  r.   r.   r/   test_fancy_indexing_emptyp  s    
$z,_TestFancyIndexing.test_fancy_indexing_emptyN)r   r   r   rB  r  r  r  r  r  r  r  r  r  r  r.   r.   r.   r/   r  
  s   
j 	r  c                 c   sJ   t | dr| jsdV  dS dV  | j }d| _|   t|| jd dS )zIChecks that sorted indices property is retained through an operation
    has_sorted_indicesNFz'Expected sorted indices, found unsorted)hasattrr  r  r   sort_indicesr   )r   r  r.   r.   r/   check_remains_sorted  s    
r  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )_TestFancyIndexingAssignc                 C   sD   |  tddg}ttttf|jdd ttttf|jdd d S )Nr   r  rR   r  )r   r;   r   r   rV  r   r%  r^  r   r.   r.   r/   test_bad_index_assign  s    z._TestFancyIndexingAssign.test_bad_index_assignc                    s   d\  fdd}dt d ddftdt dd	ft d
dt dd	ffD ]\}}||| qNtdtdfdfD ]\}}||| qzd S )Nrb  c              
      s|     f}tt f}t >}|td d|| |f< t| d|| |f< W 5 Q R X W 5 Q R X t|	 | d S Nr.  r   )
r   r&   r;   r   r   r   r"   r  r   rq   )r*  r+  rA   rB   r   rc  r.   r/   _test_set_slice  s    
 zI_TestFancyIndexingAssign.test_fancy_indexing_set.<locals>._test_set_slice)rR   r   r   rE   r   r   r   r   rR   ))r   r   r   )r   rR   r   )rw  r;   r   rw   r  r*  r+  r.   rc  r/   test_fancy_indexing_set  s     z0_TestFancyIndexingAssign.test_fancy_indexing_setc                    s(    fdd}t D ]}|t| qd S )Nc              	      s    j d| d}t }|td | d|ddgddgf< t| | dd  | d|ddddf< t| | dd  | d|d	< t| | dd | d  W 5 Q R X d S )
Nr   r   r.  r   r   rR   r|  r   r;  )r   r   r   r"   r  r   rQ  r`  r   r.   r/   r     s    zD_TestFancyIndexingAssign.test_fancy_assignment_dtypes.<locals>.checkrX  r   r.   r   r/   test_fancy_assignment_dtypes  s    z5_TestFancyIndexingAssign.test_fancy_assignment_dtypesc              
   C   s0  |  d}|  tdd}dddg}d}t|}t }|td t|H ||df j|d|f< ||df j|d|f< ||df j|d|f< W 5 Q R X t|	 |j	  |  d	}t| d
dg|dddf< W 5 Q R X t|	 dddgdd
dgg |  d}t| d
gdgg|dddf< W 5 Q R X t|	 ddgdd
gddgg |  d}t
td}t|4 ||fD ]$}dddg|dddgdddgf< qW 5 Q R X t|	 | |  d}t| dddg|d< W 5 Q R X t| d t
td}dddg|d< t|	 | W 5 Q R X d S )Nr  r   r   r   r   rR   r   r   rR   r.  re  rE   r  r:  r   r   r  )r<  r  )r   r    r   r   r   r"   r  r   r   rq   r&   r;   r   r   rQ  )rw   rA   rB   Zi0i1i2r   r  r.   r.   r/   test_sequence_assignment  sF    



 



" 

,

z1_TestFancyIndexingAssign.test_sequence_assignmentc                 C   s
  t tddd}d|dd d f< d|d d df< d|d< | |}tdddddg}d	||< tt|| tjg td
}d	||< tt|| d	|||f< tt|| tjdddddgtd
d d d f }d	|||f< tt|| d	|||f< tt|| d S )Nr  r   rE   r   r   rR   r  F*   r   r   r   r  r  r.   r.   r/   test_fancy_assign_empty  s$    
$z0_TestFancyIndexingAssign.test_fancy_assign_emptyN)r   r   r   r  r  r  r  r  r.   r.   r.   r/   r    s
   .r  c                   @   s   e Zd Zdd ZdS )_TestFancyMultidimc           	      C   s  t dgdgdggt dddgft dgdgdggt dddggft dddggt dgdgdggft dddgt dgdgdggft dddgdddggt dddgdddggfg}|D ]\}}t jd tt jdd}| |}|||f }t|r| }t	||||f  |d }|d }t
t|j||f t
t|j||f t
t|j||gtd f t
t|jtd ||gf qd S )	Nr   rR   r   r   r   r  rP   r  )r;   r   rn   rQ   r&   rU  r   r!   rq   r   r   rV  rW  rw  )	rw   Zsetsr  r  r  r  r  r  r  r.   r.   r/   test_fancy_indexing_ndarray  s,    $&&$

z._TestFancyMultidim.test_fancy_indexing_ndarrayN)r   r   r   r  r.   r.   r.   r/   r    s   r  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
_TestFancyMultidimAssignc           	   	   C   s^  t jd tt jdd}| |}t jdd}t dddgdddgg}t dddgdddgg}t| ||||f< W 5 Q R X ||||f< t|	 | |d }|d }dddg}t| ||||f< W 5 Q R X ||||f< t|	 | t| d|||f< W 5 Q R X d|||f< t|	 | t
t|j||f| t
t|j||f| d S )	NrP   r   r  rR   r   r   r   r  )r;   rn   rQ   r&   rU  r   r   r  r   rq   r   rV  r^  	rw   r  r  r   r  r  r  r  r  r.   r.   r/   test_fancy_assign_ndarray%  s.    




z2_TestFancyMultidimAssign.test_fancy_assign_ndarrayc                    s   d\  fdd}t ddgddggddgft ddgddgddggfdddgdddggdddgdddggffD ]\}}||| qzd S )	Nrb  c              
      s|     f}t|0 t }|td d|| |f< W 5 Q R X W 5 Q R X tt f}d|| |f< t|	 | d S r  )
r   r  r   r   r"   r&   r;   r   r   rq   )r*  r+  rA   r   rB   rc  r.   r/   r  I  s     zR_TestFancyMultidimAssign.test_fancy_indexing_multidim_set.<locals>._test_set_slicer   rR   r   r   r   )r;   r   r  r.   rc  r/    test_fancy_indexing_multidim_setF  s    
&z9_TestFancyMultidimAssign.test_fancy_indexing_multidim_setc           	      C   s"  t jd tt jdd}| |}t jdd}dddgdddgg}dddgdddgg}||||f< ||||f< t| | d	d
 |D }dd
 |D }dddg}||||f< ||||f< t| | d|||f< d|||f< t| | tt	|j
||f| tt	|j
||f| d S )NrP   r   r  rR   r   r   r   r  c                 S   s   g | ]}d d |D qS )c                 S   s   g | ]}|d  qS r   r.   rC  iir.   r.   r/   rE  f  s     N_TestFancyMultidimAssign.test_fancy_assign_list.<locals>.<listcomp>.<listcomp>r.   )rC  r*  r.   r.   r/   rE  f  s     zC_TestFancyMultidimAssign.test_fancy_assign_list.<locals>.<listcomp>c                 S   s   g | ]}d d |D qS )c                 S   s   g | ]}|d  qS r  r.   rC  Zjjr.   r.   r/   rE  g  s     r  r.   )rC  r+  r.   r.   r/   rE  g  s     )r;   rn   rQ   r&   rU  r   r   rq   r   rV  r^  r  r.   r.   r/   test_fancy_assign_listX  s(    

z/_TestFancyMultidimAssign.test_fancy_assign_listc           	      C   s   t jd tt jdd}| |}ddddddg}ddddddg}d	d
 |D }dd
 |D }dddddddg}t dd d d f }tt|j	|t
d f| tt|j	t
d |f| d S )NrP   r   r  r   rR   r   r   r  c                 S   s   g | ]}|d  qS r  r.   r  r.   r.   r/   rE  ~  s     zD_TestFancyMultidimAssign.test_fancy_assign_slice.<locals>.<listcomp>c                 S   s   g | ]}|d  qS r  r.   r  r.   r.   r/   rE    s     )r;   rn   rQ   r&   rU  r   r   r   rV  r^  rw  )	rw   r  r  r  r  r  r  ZC1ZC2r.   r.   r/   test_fancy_assign_sliceu  s    
z0_TestFancyMultidimAssign.test_fancy_assign_sliceN)r   r   r   r  r  r  r  r.   r.   r.   r/   r  $  s   !r  c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	_TestArithmeticz&
    Test real/complex arithmetic
    c              
   C   sJ  t ddddddgddddddgdddd	ddgddd
dddggd| _t ddddddgddddddgddddddgddddddggd| _t ddddddgddddddgddddddgddddddggd| j_t| jd dd| j  t| jjd dd| jj  t| jjd dd| jj  | | j| _| | j| _	d S )Ng      g      @r   g      @g      	@g     g      ?g      r|  g      @r   g      ?r   g      @g     ,@g      g      @g     2@g      r   g      ?r  g      g     @g      @   rH   )
r   _TestArithmetic__A_TestArithmetic__Br  r   r`   r  r   _TestArithmetic__Asp_TestArithmetic__Bspr   r.   r.   r/   Z__arith_init  s4      z_TestArithmetic.__arith_initc           	      C   s`  |    t| j| j  | j| j  tD ].}tj	dd | j
|}W 5 Q R X | |}tD ]}t|tjstj	dd | jj
|}W 5 Q R X n| j
|}| |}|| }|| }t|j|j t| | t|| | t|| | td||fkrqb|| }|| }t|j|j t| | t|| | t|| | qbq*d S )Nr   r   r   )_TestArithmetic__arith_initr   r  r  rq   r  r  r#   r;   r   r`   r   rX   r  r  r   r2   	rw   r3   rA   rH  r4   rB   r  D1ZS1r.   r.   r/   test_add_sub  s:     



z_TestArithmetic.test_add_subc           	      C   s   |    t| j| jj  | j| jj  tD ]}t	j
dd | j|}W 5 Q R X | |}tD ]}t	|t	jr| j|}n&t	j
dd | jj|}W 5 Q R X | |}||j }||j }t| |dt|  d t|j|j qdq.d S )Nr   r   g+=)Zatol)r  r   r  r  r   rq   r  r  r#   r;   r   r`   r   rX   r  r  r   r   rG   r   r2   r  r.   r.   r/   test_mu  s(    




z_TestArithmetic.test_muN)r   r   r   rB  r  r  r  r.   r.   r.   r/   r    s   +r  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )_TestMinMaxc                 C   s  t jt jt jt jt jfD ]}t jd|ddd}| |}t	|
 d t	| d t	|
 j| t	| j| |d9 }| |}t	|
 d t	| d |d7 }| |}t	|
 d	 t	| d q| t d
ddd}t	|
 d
 t	|
 j|j | }t	| d | t d
}t	|
 d t	| d t	| j|j t jdtddd}d|ddd d f< | |}t	|
 d t	| d t dt dt dfD ](}| |}tt|j
 tt|j qd S )Nr  r   r   r   r      r   iir   rE   r   rR   r  r   rE   rE   r   )r;   r   r   rH   rS   r   r   r$  r   r   rZ   rG   r2   r   r  r   r   )rw   r2   r  r   r  r.   r.   r/   test_minmax  sB    



 
z_TestMinMax.test_minmaxc                 C   sr  t ddd}d|dd d f< d|d d df< d|d< d|d	< | |}d
dddg}|D ]@}t|j|dj|j|dd t|j|dj|j|dd q\t dddd}| |}|D ]@}t|j|dj|j|dd t|j|dj|j|dd qt d}| |}|D ]B}t|j|dj|j|dd t|j|dj|j|dd qdd
g}ddg}t d}| |}|D ]&}t	t
|j|d t	t
|j|d q|D ]:}tt d|j|dj tt d|j|dj qt d}| |}|D ]&}t	t
|j|d t	t
|j|d q|D ]:}tt d|j|dj tt d|j|dj q2d S )Nr  r   rE   r   r   r  r   r   r;  r   rO  Trs  3   )rE   r   r  r[  r  r  )r;   r   r$  r   r   rG   rA   rZ   r   r   r   )rw   r  r   r  rP  Z	axes_evenZaxes_oddr.   r.   r/   test_minmax_axis  sp    
  
  

  



z_TestMinMax.test_minmax_axisc                 C   s|   t dddgdddgddd	gg}| |}d
D ]H}t||}tt|dd tt|dd tt|dd tt|ddd q.d S )Nr   r   rR   r   r   r   rN  r  r  )rZ   rG   rO  r[  r\  r]  )r   r   rf   r   r   r%  )rw   r   r   fnamerg   r.   r.   r/   test_minmax_invalid_paramsY  s    


z&_TestMinMax.test_minmax_invalid_paramsc                 C   sr   ddl m} tdddgdddgdd	d
gg}| |}t||jrntt|t| tt	|t	| d S )Nr   )_datar   rR   r   r   r   rN  r  r  )
scipy.sparser  r   r   r:   Z_minmax_mixinr   r;   rZ   rG   )rw   r  r   r   r.   r.   r/   test_numpy_minmaxf  s    

z_TestMinMax.test_numpy_minmaxc              
   C   s  t ddddgddddgddddgd	ddd
gd	dddgg}| }||fD ]}t|}t| t | t| t | t|jddtt j|dd t|jddtt j|dd t|jd	dtt j|d	ddd	 t|jd	dtt j|d	ddd	 qLt 	d}t 	d}dD ]0}| 
|}tt|j|d tt|j|d q*dD ]0}| 
|}tt|j|d tt|j|d q`d S )Nr   r   rR   r   r   r   r   r   r   r   rO  r  r6  rV   )Nr   )r;   r   r
   r   r   ZargmaxZargminr&   r$  r  r   r   r   )rw   r  ZD2r  rx   rP  r.   r.   r/   test_argmaxx  sD    








z_TestMinMax.test_argmaxN)r   r   r   r  r  r  r  r  r.   r.   r.   r/   r    s
   /Ar  c                   @   s   e Zd Zdd ZdS )_TestGetNnzAxisc                 C   s2  t ddgddgddgg}|t}| |}tjtjf}t|jd d|j	d d t| |	  t|jdd|j	dd t
|j	ddj| t|jdd|j	dd t
|j	ddj| t|jd	d|j	d	d t
|j	d	dj| t|jd
d|j	d
d t
|j	d
dj| tt|j	dd d S )Nr   rR   r   r   rN  r  rO  r   r   r   )r   r`   r   r   r;   rH   rS   r   rQ  getnnzr0   r2   r   r   )rw   r   Zbool_datr   Zaccepted_return_dtypesr.   r.   r/   test_getnnz_axis  s$    

z _TestGetNnzAxis.test_getnnz_axisN)r   r   r   r  r.   r.   r.   r/   r    s   r  Tc                 C   s\   |r| S dd }t | j}| j D ]\}}|dr$||||< q$t| jd | j|S dS )z
    Construct a class that either runs tests as usual (require=True),
    or each method skips if it encounters a common error.
    c                    s   t   fdd}|S )Nc                     s:   z | |W S  t ttttfk
r4   tdY nX d S )Nr}  )r   r%  r   rV  AttributeErrorr   r   )r>   rh   fcr.   r/   wrapper  s     z6_possibly_unimplemented.<locals>.wrap.<locals>.wrapper)	functoolswraps)r  r  r.   r  r/   wrap  s    z%_possibly_unimplemented.<locals>.wraptest_NotImplementedN)dictr8   r   
startswithr  r   	__bases__)r   requirer  Znew_dictrl   rg   r.   r.   r/   _possibly_unimplemented  s    


r  c	                 C   s   t tt| ttttt|tt|tt|tt	|tt
|o:|tt|oF|tt|tt|f}	i }
|	D ]L}|jD ]@}|ds~qn|
|}|dk	rtd|j||jf ||
|< qnqdtd|	i S )z
    Construct a base class, optionally converting some of the tests in
    the suite to check that the feature is not implemented.
    r  Nz-Test class %s overloads test %s defined in %sZTestBase)r   r  rR  rl  rF  r  rn  r  r  r  r  r  r  r  r8   r  getr   r   r  )getsetslicingslicing_assignfancy_indexingfancy_assignZfancy_multidim_indexingZfancy_multidim_assignminmaxnnz_axisbasesnamesr   rl   Zold_clsr.   r.   r/   sparse_test_class  sD    


  r  c                   @   s   e Zd Zedd Zejejejej	gZ
dd Zdd Zdd Zd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%S )&r   c              
   O   s4   t  $}|td t||W  5 Q R  S Q R X d S )Nz<Changing the sparsity structure of a csr_matrix is expensive)r   r   r"   r   r   argsr5   r   r.   r.   r/   r     s
    zTestCSR.spmatrixc                 C   s   t dddgdddgdddggd}t|}t|jdddg t|jdddg t|jddddg t| d t|	 d t|
 | d S )Nr   r   r   rR   r   r   r  )r   r   r   r  r   r  r  r   r  	getformatrq   rw   rC   r  r.   r.   r/   test_constructor1  s    
zTestCSR.test_constructor1c              	   C   sb   t dd}d|d< t|}t|jdg t|jdg t|jdddddddg t| | d S )Nr  r  r   r   r"  r   r   r   )r   r   r   r  r   r  r  rq   r
  r.   r.   r/   test_constructor2  s    
zTestCSR.test_constructor2c                 C   sn   t ddgddgddggd}t|}t|jdddg t|jdddg t|jddddg t| | d S r   )r   r   r   r  r   r  r  rq   r
  r.   r.   r/   test_constructor3"  s    zTestCSR.test_constructor3c                 C   s   t dddddddddddg}t dddddddddddg}t ddddd	d
dddddg}t||f}t||fd}ttddd|  tddgddgddgfftjd}t ddgddggtjd}t||  d S NrR   r   r   r         @      $@r{        "@r|  r        &@r}         @      @r  r  r  r   l           r   )	r   r   r   r   r   r$  rq   r;   uint64)rw   r  r  r  rD  r  r  r.   r.   r/   test_constructor4,  s        "zTestCSR.test_constructor4c                 C   sN   t ddddg}t ddddg}t ddddg}t|||f}t|jd d S Nr   r   r   r   rR   r   r  )r   r   r   r   rw   r  r  r  r  r.   r.   r/   test_constructor5<  s
    zTestCSR.test_constructor5c                 C   sV   ddddg}ddddg}ddddg}t |||f}t|jd tt|jtj d S r  )r   r   r   r   r;   rX   r2   signedintegerr  r.   r.   r/   test_constructor6D  s    zTestCSR.test_constructor6c                 C   s   t dd }tddddddgtjd}tddddgtjd}t|||fdd}tdddgdd	dgd
ddggd}t|jjttj t|j	jttj t
| | d S )Nr  r   rR   r   r   r   r   r   r   r   r   )r   r   r;   rS   r   r   r  r2   rH   r  r   rq   )rw   r  r  ptrr>   rC   r.   r.   r/   test_constructor_smallcolM  s    
z!TestCSR.test_constructor_smallcolc                 C   s   t dd }ttjjd }tddd||d |d gtjd}tddddgtjd}t|||f}t|j	j
t
tj t|jj
t
tj t|jdt|d f d S )	Nr  r   r  r   rR   r   r   r   )r   r;   rF   rH   rG   r   rS   r   r   r  r2   r  r   r   )rw   r  Zlarger  r  r>   r.   r.   r/   test_constructor_largecol]  s    "z!TestCSR.test_constructor_largecolc                 C   sv   t d}tdddddg}tdddg}t|||fdd	}| }|  t|jdddddg t| |  d S )
Nr   r  rR   r   r   r   r   rR   rE   r  )r   r   r   r   r  r   r  rq   rw   r  r  r  r  r  r.   r.   r/   test_sort_indicesj  s    zTestCSR.test_sort_indicesc              	   C   s   t ddddddddg}t dddddddd	g}t ddd	g}t|||fd
d}| }|  t|jd t|jdddg t| |  d S Nr   r   rR   r   r   r   r  r  r  r!  r  )r   r   r   eliminate_zerosr   r   r  rq   r"  r.   r.   r/   test_eliminate_zerost  s    zTestCSR.test_eliminate_zerosc                 C   s   t tdddd }dD ]f}ttt |d t|| }t|j|j t|j	|j	 t|j
|j
 t| tt||  qd S )Nr  r   r   r&  r(  r)  r*  r+  r,  r-  r.  r/  r0  r%  r1  r2  r3  r4  r5  r6  r7  r8  T)r   r;   r   r$  r   r  rf   r   r   r  r  rq   rw   r   r   r'  r.   r.   r/   test_ufuncs  s    zTestCSR.test_ufuncsc                 C   s   t d}tdddddg}tdddg}t|||fdd	}t d
}tddddddg}tddd
g}t|||fdd	}t||  | |   d S )Nr   r  rR   r   r   r   r   r!  r  r  r  )r   r   r   r   rq   r"  r.   r.   r/   test_unsorted_arithmetic  s    z TestCSR.test_unsorted_arithmeticc                 C   s   t dgdgdgg}t dddg}t jd tt jdd}| |}|||f }t|rj| }t	||||f  d S Nr   rR   r   r   rP   r   r  
r;   r   rn   rQ   r&   rU  r   r!   rq   r   rw   r  r  r  r  r  r.   r.   r/   test_fancy_indexing_broadcast  s    
z%TestCSR.test_fancy_indexing_broadcastc                 C   s   t ddg}t ddg}t ddg}t ddg}t|||f }td|j t|jtkshtt|||f }td|j |	  td|j t
|j| t|||f }d|_td|j t
|j| |	  t
|j| dS )z@Ensure has_sorted_indices memoizes sorted state for sort_indicesr   r   rR   TFN)r;   r   r   r   r   r  r  r   r_   r  r   r  )rw   Zsorted_indsZunsorted_indsr  r  r  r.   r.   r/   test_has_sorted_indices  s$    zTestCSR.test_has_sorted_indicesc                 C   s  t tdgtdgtddgf}td|j tddg}tddg}tddg}t |||f }td|j t|jtkst|	  td|j tdt
|j t |||f }d|_td|j tdt
|j |	  tdt
|j dS )z=Ensure has_canonical_format memoizes state for sum_duplicatesrR   r   r   TFN)r   r;   r   r   Zhas_canonical_formatr   r  r   r_   sum_duplicatesr   r  )rw   r  r  r  r  r.   r.   r/   test_has_canonical_format  s"    (z!TestCSR.test_has_canonical_formatc                 C   s  t jdt jd}t jdt jd}t d}t|||fdd}t|||fdd}t jdt jd}t||fdd}t||fdd}td}	td}
t|jjt j t|jjt j t|jjt j t|jjt j t|	jjt j t|
jjt j |||||	|
fD ]}||  qd S )NrR   r   r   r   r  r           r=  )r;   r   rH   r   r   r  r2   rS   rw   r  r  valsr>   rC   rD  r   r   r   r   r3   r.   r.   r/   test_scalar_idx_dtype  s$    
zTestCSR.test_scalar_idx_dtypec                 C   sF   t dddg}t dddg}|| jdks.t||jdksBtd S )Nr   r   rR   )r   r   r_   r  rw   r>   rC   r.   r.   r/   test_binop_explicit_zeros  s    z!TestCSR.test_binop_explicit_zerosN)r   r   r   rC  r   r;   r]  rO  r  r  r   r  r  r  r  r  r  r  r   r#  r&  r)  r*  r.  r/  r1  r8  r:  r.   r.   r.   r/   r     s(   
	
	
r   c                   @   s   e Zd Zedd Zejejejej	gZ
dd Zdd Zdd Zd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )r   c              
   O   s4   t  $}|td t||W  5 Q R  S Q R X d S )Nz<Changing the sparsity structure of a csc_matrix is expensive)r   r   r"   r   r  r.   r.   r/   r     s
    zTestCSC.spmatrixc                 C   s   t ddddgddddgddddggd}t|}t|jddddg t|jddddg t|jdddddg t| d t|j	|j	 t|
 d d S )Nr   r   rR   r   r   r   r  )r   r   r   r  r   r  r  r   r  r   r	  r
  r.   r.   r/   r  
  s    (zTestCSC.test_constructor1c              	   C   sT   t dd}d|d< t|}t|jdg t|jdg t|jdddddddg d S )Nr  r   r   )rR   r   rR   r   r   )r   r   r   r  r   r  r  r
  r.   r.   r/   r    s    
zTestCSC.test_constructor2c                 C   sZ   t ddgddgddggd}t|}t|jddg t|jddg t|jdddg d S )Nr   r   rR   r   )r   r   r   r  r   r  r  r
  r.   r.   r/   r    s
    zTestCSC.test_constructor3c                 C   s   t dddddddddddg}t dddddddddddg}t ddddd	d
dddddg}t||f}t||fd}ttddd|  d S )NrR   r   r   r   r  r  r{  r  r|  r  r  r}  r  r  r  r  r  r   )r   r   r   r   r   r$  rq   )rw   r  r  r  rD  r  r.   r.   r/   r  #  s        zTestCSC.test_constructor4c                 C   sN   t ddddg}t ddddg}t ddddg}t|||f}t|jd d S Nr   r   r   r   rR   r   )r  r   )r   r   r   r   rw   r  r  r  r  r.   r.   r/   r  .  s
    zTestCSC.test_constructor5c                 C   sV   ddddg}ddddg}ddddg}t |||f}t|jd tt|jtj d S r;  )r   r   r   r   r;   rX   r2   r  r<  r.   r.   r/   r  6  s    zTestCSC.test_constructor6c              	   C   s   t ddddddddg}t dddddddd	g}t ddd	g}t|||fd
d}| }|  t|jd t|jdddg t| |  d S )Nr   r   rR   r   r   r   r  r  r  rE   rR   r  )r   r   r   r%  r   r   r  rq   r"  r.   r.   r/   r&  ?  s    zTestCSC.test_eliminate_zerosc                 C   sr   t d}tdddddg}dddg}t|||fdd	}| }|  t|jdddddg t| |  d S )
Nr   r  rR   r   r   r   r   r=  r  )r   r   r   r   r  r   r  rq   )rw   r  r  r  r  r  r.   r.   r/   r#  J  s    
zTestCSC.test_sort_indicesc                 C   s   t tdddd }dD ]f}ttt|d t|| }t|j|j t	|j
|j
 t	|j|j t	| tt||  qd S )N   r  r   g      5@r'  T)r   r;   r   r$  r   r  r   rf   r   r   r  r  rq   r(  r.   r.   r/   r)  T  s    zTestCSC.test_ufuncsc                 C   s   t d}tdddddg}tdddg}t|||fdd	}t d
}tddddddg}tddd
g}t|||fdd	}t||  | |   d S )Nr   r  rR   r   r   r   r   r=  r  r  r  )r   r   r   r   rq   r"  r.   r.   r/   r*  `  s    z TestCSC.test_unsorted_arithmeticc                 C   s   t dgdgdgg}t dddg}t jd tt jdd}| |}|||f }t|rj| }t	||||f  d S r+  r,  r-  r.   r.   r/   r.  k  s    
z%TestCSC.test_fancy_indexing_broadcastc                 C   s  t jdt jd}t jdt jd}t d}t|||fdd}t|||fdd}t jdt jd}t||fdd}t||fdd}td}	td	}
t|jjt j t|jjt j t|jjt j t|jjt j t|	jjt j t|
jjt j |||||	|
fD ]}||  qd S )
NrR   r   r   )r3  r   r  )r5  r   r=  r2  r4  )	r;   r   rH   r   r   r   r  r2   rS   r6  r.   r.   r/   r8  y  s$    
zTestCSC.test_scalar_idx_dtypeN)r   r   r   rC  r   r;   r]  rO  r  r  r   r  r  r  r  r  r  r&  r#  r)  r*  r.  r8  r.   r.   r.   r/   r     s   

	
r   c                   @   sP   e Zd ZeZejejejgZ	dd Z
dd Zdd Zdd Zd	d
 Zdd ZdS )r   c                 C   s>   t d}d|d< d|d< ||j }||j }t|j|j d S )NrE   rE   rE   rU  r  r   r  )r   r   r  r   rA   )rw   rA   r  r  r.   r.   r/   	test_mult  s    

zTestDOK.test_multc                 C   sl   |  d}d|d< d|d< |d }tddgddgddgg}t| | |d	 }|d	 }t| | d S )
Nr:  r[  r  r=  rE   r   r  r	  )r   r   r   rq   r  r.   r.   r/   test_add_nonzero  s    
zTestDOK.test_add_nonzeroc                 C   sR   |  d}d|d< d|d< t|d  | d  t|d  | d  d S )Nr:  rB  r[  r  r=  r	  r  )r   r   rq   r   r.   r.   r/   test_dok_divide_scalar  s
    
zTestDOK.test_dok_divide_scalarc                 C   s  d\}}t ||f}d|d< d|d< d|d< d|d	< d
|d< d|d< t| d d |d f t| | }t| d d |d f t| || }}| }t|j||f t| |d d d f t| | }t| |d d d f t| d S )N)r  r  r   r  rR   r<  r   rm  r   r7  r   r  r  r  )	r   r   rq   r   r   r
   r   r   r   )rw   r   r)  r>   r  rC   r  r.   r.   r/   test_convert  s"    ""
"zTestDOK.test_convertc                 C   s   t tt tddddgddddgddddggd}t|}t|j|j t| | t|}t| |  dddgdddgg}t|tj	d}t|jtj	 | }t|jtj	 t
|| d S )Nr   r   rR   r   r   r   )r   r%  r   r   r   r2   rq   r   r;   r   r   )rw   rC   rA   r   r  r   dar.   r.   r/   	test_ctor  s    
(zTestDOK.test_ctorc                 C   sT   t d}d|d< td| kd t d}d|d d df< tt| dkd d S )Nr   r   r  zUnexpected entry (0,0) in keyszUnexpected entries in keys)r   r   keysr   r9  r.   r.   r/   test_ticket1160  s    zTestDOK.test_ticket1160N)r   r   r   r   r   r;   rO  r  r  r   rA  rC  rD  rE  rG  rI  r.   r.   r.   r/   r     s   r   )r  r  c                   @   s`   e Zd ZeZejejejgZ	dd Z
dd Zdd Zdd Zd	d
 Zdd Zdd Zdd ZdS )TestLILc                 C   s   t dtj}d|d< d|d< tdtjd}d|d< d|d< t dkr`t||j ||j   t||	 j ||j
   d S )Nr?  rE   rU  y              4@r@  r   ppc64le)r   r;   r   r   platformmachiner   r   rq   r   r  r  r.   r.   r/   test_dot  s    zTestLIL.test_dotc                 C   s@   t d}d|d< |d }t|d d |d }t|d d d S )Nr   rR   r  r   r   )r   r   )rw   r3   r.   r.   r/   test_scalar_mul  s    zTestLIL.test_scalar_mulc                 C   s   t dddgdddgg}t dddgdddgg}||| f||| fd|d fd}| D ]8\}\}}| }t|d| | t| |  q\t d	td
d}tdddg}|dd d f  |7  < t|dd d f  	 | d S )Nr   rR   r   r   r  r   )addsubmulz__i%s__rZ  r   r   g?)
r   r   r   rf   r   rq   r;   r2   r   Zsqueeze)rw   rA   rB   r  opotherr   r  r.   r.   r/   test_inplace_ops  s    


zTestLIL.test_inplace_opsc                 C   sP   dddgdddgg}t t|}t|D ]"\}}t| t|| dd q(d S )Nr   rR   r   r   r   r  )Zndmin)r   r   r  r   rq   )rw   Zrow_datarB   r3  r  r.   r.   r/   test_lil_iteration+  s    zTestLIL.test_lil_iterationc                 C   sR   t d}d|d< d|d< d|d< d|d	< d
|d< | }t |}t|j|j d S )Nr?  rE   rU  r  r@  r  )r  r   r
  )r   r  r  )r  r  )r   r   r   rA   )rw   rB   r  r  r.   r.   r/   test_lil_from_csr1  s    zTestLIL.test_lil_from_csrc                 C   sZ   t tddd}t|}t|tdddgddf  |tdddgddf  d S )Nr|  r   r   rR   r   )r&   r   r$  r   r   r   rq   )rw   r  rA   r.   r.   r/   test_fancy_indexing_lil>  s
    zTestLIL.test_fancy_indexing_lilc                 C   s   t d}d|d< d|d< d|d< d|d	< t d}d|d< d|d
< d|d< d|d	< d|d< t|| ||  t|| dddgdddgdddgdddgg d S )Nr  r   r  rR   rS  r   r;  r   rm  r[  r:  r   r  r  )r   r   r  rq   )rw   lr   r.   r.   r/   test_point_wise_multiplyE  s*    z TestLIL.test_point_wise_multiplyc                 C   s*   t td}|d9 }d|dd d f< d S )Nr   r}  r   )r   r;   r  )rw   r>   r.   r.   r/   test_lil_multiply_removal\  s    z!TestLIL.test_lil_multiply_removalN)r   r   r   r   r   r;   rO  r  r  r   rN  rO  rU  rV  rW  rX  rZ  r[  r.   r.   r.   r/   rJ    s   
rJ  )r  c                   @   s   e Zd ZeZejejejgZ	dd Z
dd Zdd Zdd Zd	d
 Zejjddddd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )TestCOOc                 C   s   t dddddddddddg}t dddddddddddg}t ddddd	d
dddddg}t|||ffd}ttddd|  tddgddgddgfftjd}t ddgddggtjd}t||  d S r  )r   r   r   r   r$  rq   r;   r  )rw   r  r  r  r  r  r.   r.   r/   r  l  s    "zTestCOO.test_constructor1c                 C   s   t ddddddddddg
}t ddddddddddg
}t dddddddddd	g
}t|||ffd
}t dddgdddgdddgg}t||  d S )Nr   r   rR   r  r   r   r  r   r   r   r   r   )r   r   r   rq   )rw   r  r  r  r  rx   r.   r.   r/   r  z  s     zTestCOO.test_constructor2c                 C   sN   t d}t|jd t|jg  t|jg  t|jg  t| td d S )Nr  )r   r   r   r  r  r  rq   r   rw   r  r.   r.   r/   r    s    zTestCOO.test_constructor3c              	   C   s   t ddddgddddgddddgg}t|}t| | t ddddg}t|}t| |dd tjtdd, tdd	d
dgddddgddddgf W 5 Q R X tjtdd tdd	d
dgdd W 5 Q R X d S )Nr   r   r  r   r   r   zobject cannot be interpreted)matchrv     !   rR   zinconsistent shapesr;  r  )	r   r   r   rq   r$  r   r   r%  r   )rw   rx   r  r.   r.   r/   r    s    

0zTestCOO.test_constructor4c                 C   s8   dg}t |dgdgffd d}|jt|jks4td S )Nr   r   r   )r   r2   r;   r   r_   )rw   r  r  r.   r.   r/   "test_constructor_data_ij_dtypeNone  s    z*TestCOO.test_constructor_data_ij_dtypeNoneFzCOO does not have a __getitem__runreasonc                 C   s   d S r1   r.   r   r.   r.   r/   r    s    zTestCOO.test_iteratorc                 C   s&   ddgg}t | }t|j| d S rV   )r   Ztodiar   rA   )rw   r   r  r.   r.   r/   test_todia_all_zeros  s    
zTestCOO.test_todia_all_zerosc                 C   s   t d}|  t ddgddgddgff}|  t|jddgddgg t ddgddgddgff}|  t|jddgddgg t|jdg t|jdg t|jdg d S )Nr  r   rR   r   r   )r   r0  r   rA   r  r  r  r]  r.   r.   r/   test_sum_duplicates  s    zTestCOO.test_sum_duplicatesc                 C   sB   t ddddgddddgddddgff}| }t|j|j d S )Nr   r   rR   )r   r  r   rA   )rw   r  r7   r.   r.   r/   test_todok_duplicates  s    (zTestCOO.test_todok_duplicatesc              	   C   s   t ddddddddg}t ddddddddg}t dddddddd	g}t|||ffd
d}| }|  t|jdk  t|j|j d S r$  )	r   r   r   r%  r   r  allr   rA   )rw   r  r  r  r  r  r.   r.   r/   r&    s    zTestCOO.test_eliminate_zerosc                 C   s   ddddgddddgddddgg}d}t |}||}t|j|jk |j|dd}t|j|jk |j|d	d}tt|j|j  d S )
Nr   rE   r  r  r
  r   Fr#  T)r   r$  r   r  r;   r@   )rw   r[   Z	new_shaper3   r4   r.   r.   r/   test_reshape_copy  s    "
zTestCOO.test_reshape_copyc                 C   sl   t dgdgdgffd}t dgdgdgffd}t|jddd|kjdk t|jdd	d|kjdk d S )
Nr   i- r  )-   )rk  rj  r  r  r   r  )r   r   r$  r   )rw   Zmat1Zmat2r.   r.   r/   test_large_dimensions_reshape  s    z%TestCOO.test_large_dimensions_reshapeN)r   r   r   r   r   r;   rO  r  r  r   r  r  r  r  ra  r   rD  xfailr  re  rf  rg  r&  ri  rl  r.   r.   r.   r/   r\  f  s   


r\  )r  r  r  r   r  c                   @   sn   e Zd ZeZejejejgZ	dd Z
ejjddddd Zedd	d
 Zejjdddd Zdd ZdS )TestDIAc                 C   s|   t ddddgddddgddddgddddgg}t ddddggjddd}t dddg}tt||fdd	 | d S )
Nr   r   r   rR   r   rO  r   r;  r  )r   r;   repeatr   r   rq   )rw   r  r  r  r.   r.   r/   r    s    


zTestDIA.test_constructor1FzDIA does not have a __getitem__rb  c                 C   s   d S r1   r.   r   r.   r.   r/   r    s    zTestDIA.test_iteratorr   c                 C   s|   t td}t|jjtj |jddd t|jjtj t td}t|jjtj |jddd t|jjtj d S )Nr   )r   rR   r  r   )	r   r;   r    r   r  r2   rH   r2  rS   rw   r   r.   r.   r/   test_setdiag_dtype  s    zTestDIA.test_setdiag_dtypezDIA stores extra zerosrd  c                 C   s   d S r1   r.   r   r.   r.   r/   r  
  s    zTestDIA.test_getnnz_axisc                 C   sJ   t dddggdgfdd}| }t|  | t|  | d S )Nr   r   r   r  r  )r   rq   r   r   r   )rw   r   r   r.   r.   r/   test_convert_gh14555  s    zTestDIA.test_convert_gh14555N)r   r   r   r   r   r;   rO  r  r  r   r  r   rD  rm  r  rp   rq  r   r  rs  r.   r.   r.   r/   rn    s   	


rn  )r  r  r  r   r  r  r  c                   @   s   e Zd ZeZejejejgZ	dd Z
dd Zdd Zdd Zd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zejjddddd Zejjddddd Zdd  Zejjdddd!d" Zejjed#d$d%d& Zd'S )(r   c                 C   s  t ddddg}t ddddg}td}t dddgdddgg|d< t dddgddd	gg|d< t ddd
gdddgg|d< t ddd	gdddgg|d< tddddgddddgddddggdddgdddgg}t|||fdd}t| | t|||f}t| | d S Nr   rR   r   r   )r   rR   r   r   r   r  rE   r  r  r  r  r|  r  r  r  )r   r   r   r   r   rq   )rw   r  r  r  rA   rH  r.   r.   r/   r     s(    







8zTestBSR.test_constructor1c                 C   s  dD ]}t |}tt| | qt d}tt|dd | tt|dd | tddddgddddgddd	d
ggdddgddd
gg}tt| | tt|dd | tt|dd | tt|dd | tt|dd | tt|dd | tt|dd | tt|dd | tddddgddddgddddggdddgddd
gg}tt|dd | d S )N)rS  r8  ro  )rE   r   )r   r  r  )r   r  r;  r  re  r   r   rR   r   r   r   ru  r  rS  r   )rR   r  )r   r  )r   r   r   rq   r   )rw   r   rA   r.   r.   r/   r  7  s"    88zTestBSR.test_constructor2c                 C   sL   dddgdddgdddgff}t ddgddgg}tt|dd | d S )Nr   rR   r   r   r;  r  )r   r   r   rq   )rw   argrA   r.   r.   r/   r  O  s    zTestBSR.test_constructor3c                 C   sZ   d}t j||dft jd}t jd|gt jd}t j|t jd}t|||f|dfdd d S )Nr  r   r   r   F)r  r   )r;   r  r   r   rH   r   r   )rw   r)  r  r  r  r.   r.   r/   r  U  s
    zTestBSR.test_constructor4c              	   C   s   d}t |}t |||f}t d|g}t |}tt t|||f W 5 Q R X tt t|||fdd W 5 Q R X tt t|||fdd W 5 Q R X d S )Nr  r   )r   r   r   r  rS  )r;   r  r   r   r   r   r   )rw   r)  Z	data_1dimr  r  r  r.   r.   r/   r  ^  s    




zTestBSR.test_constructor5c                 C   sl   dgdggdgdggg}t jddgt jd}t jddgt jd}t|||fdd}|jt |jkshtd S )Nr   r   rR   r   r  r  )r;   r   rH   r   r2   r_   )rw   r9   r  r  rC   r.   r.   r/   test_default_dtyper  s
    zTestBSR.test_default_dtypec                 C   s  t ddddg}t ddddg}td}t dddgdddgg|d< t dddgddd	gg|d< t ddd
gdddgg|d< t ddd	gdddgg|d< tddddgddddgddddggdddgdddgg}t|||fdd}| }|  }t| | t| |  d S rt  )r   r   r   r   r   r   r   rq   )rw   r  r  r  rA   ZAbsrZAcsrZAcsr_via_coor.   r.   r/   test_bsr_tocsrz  s.    







"zTestBSR.test_bsr_tocsrc              	   C   s   t ddddddddgddgddggj}|ddd}tddddddd	d
g}tddd
g}t|||fdd}| }|  t|jd t|	 |	  d S )Nr   r   rR   r   r   r   r   r  r  r  )r   r  r  r  )
r   r   r$  r   r   r   r%  r   r   rq   r"  r.   r.   r/   r&    s    (zTestBSR.test_eliminate_zerosc                 C   s   t jd tt jddd}d|j|jdk< |  t|jd t|jj	d d|j|jdk< |  t|jd t|jj	d	 t|
 t d |  t|jd t|jj	d	 t|
 t d d S )
Nr   )r  r  re  r  g?B   )rv  rR   r   r|  )r   rR   r   )r;   rn   rQ   r   r  r%  r   r   r   r   rq   r   rp  r.   r.   r/   test_eliminate_zeros_all_zero  s    z%TestBSR.test_eliminate_zeros_all_zeroc                 C   sH   t tddddd}t|jd dd}t|| | |  d S )Nx   r  r  r   r   r  r   r   r   r   r$  r   r   rq   r  r.   r.   r/   test_bsr_matvec  s    zTestBSR.test_bsr_matvecc                 C   sL   t tddddd}t|jd d dd}t|| | |  d S )	Nr{  r  r  r|  r  r   r  r   r}  r  r.   r.   r/   test_bsr_matvecs  s    zTestBSR.test_bsr_matvecsFzBSR does not have a __getitem__rb  c                 C   s   d S r1   r.   r   r.   r.   r/   r    s    zTestBSR.test_iteratorzBSR does not have a __setitem__c                 C   s   d S r1   r.   r   r.   r.   r/   r?    s    zTestBSR.test_setdiagc                 C   s   t ddddgddddgddddgg}| j|dd}t|dd k t|jddgddgddgg |d	 t|jddgddgg |d t|jddgddgddgg |d
 t|jddddgddddgddddgg tt|jd d S )Nr   r   r   r   rR   rZ  r  r:  r;  r"  re  r=  r  r.   r.   r/   test_resize_blocked  s2    






zTestBSR.test_resize_blockedc                 C   s   d S r1   r.   r   r.   r.   r/   r:    s    z"TestBSR.test_setdiag_comprehensivezexceeds memory limitrr  c              	   C   sB  t jdt jd}t jdt jd}t d}t|||fdd}t|||fdd}td}td}t|jjt j t|jjt j t|jjt j t|jjt j z\t d}t d	}	t|||fdd}
t|	||fdd}t|
jjt j t|jjt j W n" tt	fk
r   d}
d}Y nX |||||
|fD ]}||  q.d S )
NrR   r   r   )r   r   r   r2  r  r4  )r   r   r3  )r   r   r5  )
r;   r   rH   r   r   r  r2   rS   MemoryErrorr   )rw   r  r  r7  r>   rC   r   r   Zvals2Zvals3r   r   r3   r.   r.   r/   r8    s.    



zTestBSR.test_scalar_idx_dtypeN)r   r   r   r   r   r;   rO  r  r  r   r  r  r  r  r  rw  rx  r&  rz  r~  r  r   rD  rm  r  r?  r  r:  skipifIS_COLABr8  r.   r.   r.   r/   r     s,   	


r   )r  r  r  r   r  r  c                 O   s2  | dd}t| jtjs,t| jtjrN|dkr>| f| S | f| |f S | dk }| jddd} | ddd  d8  < d| ddd< |d jdkrt	dd |D }d|d  f|dd  }d|d  d f|dd  }d| |< d| |< t	d	d |D }|dkr| f| S | f| |d f S dS )
z-Duplicates entries to produce the same matrixr  Nr   rR   rO  r   c                 s   s   | ]}|d  V  qdS r  r.   )rC  pr.   r.   r/   	<genexpr>  s     z&_same_sum_duplicate.<locals>.<genexpr>c                 s   s   | ]}| d V  qdS )rR   N)ro  )rC  r  r.   r.   r/   r  "  s     )
popr;   rX   r2   r]  ZunsignedintegerrF  ro  rW   rA  )r  Zindsr5   r  Z	zeros_posposZpos1pos2r.   r.   r/   _same_sum_duplicate	  s*    


r  c                       s`   e Zd Zd fdd	Zejjdddd Zejjddd	d
 Zejjdddd Z	  Z
S )_NonCanonicalMixinFc              	      s   t  j}||f|}|jdk }|d jdk}|r~|d jd }t 0}	|	td | ||d | |d | }W 5 Q R X | 	||}
d|kr|j
|d< ||
f|}|jtjtjfkrd}nd}t|j|j|d |rt|jdk  |S )	zcReplace D with a non-canonical equivalent: containing
        duplicate elements and explicit zerosr   rR   r.  r   r   gh㈵>gHz>)rtol)superr   rA   rF  rW   r   r   r"   _insert_explicit_zero_arg1_for_noncanonicalr   r2   r;   r   r   r   r   r  any)rw   r  sorted_indicesr5   Z	constructr  Zzero_posZ	has_zerosr	  r   Zarg1ZNCr  r  r.   r/   r   +  s,    (
z_NonCanonicalMixin.spmatrixz"bool(matrix) counts explicit zerosrr  c                 C   s   d S r1   r.   r   r.   r.   r/   r   Q  s    z_NonCanonicalMixin.test_boolz!getnnz-axis counts explicit zerosc                 C   s   d S r1   r.   r   r.   r.   r/   r  U  s    z#_NonCanonicalMixin.test_getnnz_axisznnz counts explicit zerosc                 C   s   d S r1   r.   r   r.   r.   r/   r   Y  s    z_NonCanonicalMixin.test_empty)F)r   r   r   r   r   rD  r   r   r  r   __classcell__r.   r.   r  r/   r  *  s   &

r  c                   @   s   e Zd ZdddZdd ZdS )_NonCanonicalCompressedMixinFc                 C   s   t |j|j|jd\}}}|s~t||dd D ]L\}}||| ddd  |||< ||| ddd  |||< q0|||fS )5Return non-canonical constructor arg1 equivalent to M)r  r   Nr   )r  r  r  r  r  r   )rw   r  r  r  r  r  startstopr.   r.   r/   r  _  s    
"$z3_NonCanonicalCompressedMixin._arg1_for_noncanonicalc                 C   s   d|||f< |S rV   r.   rw   r  r*  r+  r.   r.   r/   r  i  s    z2_NonCanonicalCompressedMixin._insert_explicit_zeroN)F)r   r   r   r  r  r.   r.   r.   r/   r  ^  s   

r  c                   @   sL   e Zd Zdd Zdd Zejjddddd	 Zejjdd
ddd Z	dS )_NonCanonicalCSMixinc                    s4    fdd}t D ]}dD ]}|t|| qqd S )Nc           	         s   t dddgdddgdddgdddgg| d} j||d}|j\}}t| |D ]0}t| |D ]}t|||f |||f  q`qPdD ]}tttf|j| qd S )	Nr   r   r   r   rR   r   )r  rT  )	r   r   r   r   r   r   rV  r%  rW  )	r2   r  r  rA   r  r  r*  r+  rD  r   r.   r/   r   p  s    

z3_NonCanonicalCSMixin.test_getelement.<locals>.check)FTrX  )rw   r   r2   r  r.   r   r/   rY  o  s    z$_NonCanonicalCSMixin.test_getelementc              	   C   s   t d}| |}| dddgg}| |dd d f< t "}|td ||dd d f< W 5 Q R X t| | |  |d d df< t $}|td |j	|d d df< W 5 Q R X t| | d S )Nr   r   rR   r.  )
r;   r    r   rq   r   r   r"   r   r  r   )rw   r  rA   rB   r   r.   r.   r/   test_setitem_sparse  s"    

z(_NonCanonicalCSMixin.test_setitem_sparseFz(inverse broken with non-canonical matrixrb  c                 C   s   d S r1   r.   r   r.   r.   r/   r    s    z_NonCanonicalCSMixin.test_invz&solve broken with non-canonical matrixc                 C   s   d S r1   r.   r   r.   r.   r/   rm    s    z_NonCanonicalCSMixin.test_solveN)
r   r   r   rY  r  r   rD  rm  r  rm  r.   r.   r.   r/   r  n  s   
r  c                   @   s   e Zd ZdS )TestCSRNonCanonicalNr   r   r   r.   r.   r.   r/   r    s   r  c                   @   s   e Zd ZdS )TestCSCNonCanonicalNr  r.   r.   r.   r/   r    s   r  c                   @   sD   e Zd Zdd Zejjddddd Zejjdddd	d
 ZdS )TestBSRNonCanonicalc                 C   s"   |  }d|||f< |j|jdS )Nr   r  )r   r  r  )rw   r  r*  r+  r3   r.   r.   r/   r    s    z)TestBSRNonCanonical._insert_explicit_zeroFz&diagonal broken with non-canonical BSRrb  c                 C   s   d S r1   r.   r   r.   r.   r/   r    s    z!TestBSRNonCanonical.test_diagonalz"expm broken with non-canonical BSRc                 C   s   d S r1   r.   r   r.   r.   r/   r    s    zTestBSRNonCanonical.test_expmN)	r   r   r   r  r   rD  rm  r  r  r.   r.   r.   r/   r    s
   
r  c                   @   s&   e Zd ZdddZdd Zdd ZdS )	TestCOONonCanonicalNc                 C   s$   t |j|j|j\}}}|||ffS )r  )r  r  r  r  )rw   r  r  r  r  r  r.   r.   r/   r    s    z*TestCOONonCanonical._arg1_for_noncanonicalc                 C   sX   t j|jjd|jf |_t j|jj||jf |_t j|jj||jf |_|S rV   )r;   Zr_r  r2   r  r  r  r  r.   r.   r/   r    s    z)TestCOONonCanonical._insert_explicit_zeroc                 C   sP   |  td}|  |jddgdd |  ttt|jdk d S )Nr   rR   r   r  r   )	r   r;   r    r0  r2  r   rh  Zdiffr  rp  r.   r.   r/   test_setdiag_noncanonical  s
    z-TestCOONonCanonical.test_setdiag_noncanonical)N)r   r   r   r  r  r  r.   r.   r.   r/   r    s   
r  c            
      c   s  t ttttttg} dddddddd}| D ]}tt|D ]}t	||}|
dr:t	|d	d
s:g }||}t|r|tjj|dg7 }ttjtdkrt	|dg }|D ]}|jdk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  rm  r8  rl  r  r   r  rE  Frr  z3.6.0Z
pytestmark)r  r   rm  Zxslow)marks)r   r\  r   r   rn  r   rJ  sorteddirrf   r  r  r   r   rD  r   r   parse__version__Versionrl   r<   r  param)
ZTEST_CLASSESZ
SKIP_TESTSr   method_namemethodr  r,   markersrD  Zmnamer.   r.   r/   cases_64bit  s>    
 






r  c                   @   s   e Zd ZeeeeegZdd Z	dd Z
dd Zdd Zd	d
 Zejde dd Zejde dd Zejde dd Zejde dd Zejde dd Zdd ZdS )	Test64Bitc                 C   s   |t j||S r1   )r;   rn   rU  )rw   mat_clsr   r)  r.   r.   r/   _create_some_matrix  s    zTest64Bit._create_some_matrixc                 C   s|   t |}t|tttfr2|jj|ko0|jj|kS t|trT|j	j|koR|j
j|kS t|trj|jj|kS td|f d S )Nz matrix %r has no integer indices)r;   r2   r:   r   r   r   r  r  r   r  r  r   r  r   )rw   r   r2   r.   r.   r/   _compare_index_dtype  s    


zTest64Bit._compare_index_dtypec                    s.   t dd fdd} jD ]}|| qd S )NrE   r]   c                    sL   | t jdd}t |t j | t jdd}t |t j d S )NrE   r   rv  )r;   rn   rU  r   r  rH   rS   )r  r   r   r.   r/   r     s    z4Test64Bit.test_decorator_maxval_limit.<locals>.checkrp   MAT_CLASSESrw   r   r  r.   r   r/   test_decorator_maxval_limit  s    
z%Test64Bit.test_decorator_maxval_limitc                    s.   t dd fdd} jD ]}|| qd S )NTrn   c                    s`   d}d}t dD ]B} | dd}|p2 |tj}|pD |tj}|r|r q\qtdd S )NFr  r  z#both 32 and 64 bit indices not seen)r   r  r  r;   rH   rS   r_   )r  Zseen_32Zseen_64r	  r   r   r.   r/   r     s    z5Test64Bit.test_decorator_maxval_random.<locals>.checkr  r  r.   r   r/   test_decorator_maxval_random  s    
z&Test64Bit.test_decorator_maxval_randomc                 K   s    t f |dd }||| d S )Nc              	   S   sB   |  }t |dr|  zt||  W 5 t |dr<|  X d S )Nsetup_methodteardown_method)r  r  r  rf   )r   r  instancer.   r.   r/   r   )  s    

z*Test64Bit._check_resiliency.<locals>.check)rp   )rw   r   r  rh   r   r.   r.   r/   _check_resiliency%  s    

zTest64Bit._check_resiliencyzcls,method_namec                 C   s   | j ||dd d S )NrE   r]   r  rw   r   r  r.   r.   r/   test_resiliency_limit_106  s    z"Test64Bit.test_resiliency_limit_10c                 C   s   | j ||dd d S )NTr  r  r  r.   r.   r/   test_resiliency_random:  s    z Test64Bit.test_resiliency_randomc                 C   s   | j ||tjd d S NrN   )r  r;   rH   r  r.   r.   r/   test_resiliency_all_32A  s    z Test64Bit.test_resiliency_all_32c                 C   s   | j ||tjd d S r  )r  r;   rS   r  r.   r.   r/   test_resiliency_all_64E  s    z Test64Bit.test_resiliency_all_64c                 C   s   | j ||dd d S )NT)ro   r  r  r.   r.   r/   
test_no_64I  s    zTest64Bit.test_no_64c                 C   s:   t tjdddd }t tjddd }|  |  d S )Nr   )rO   ra   c                  S   s   t ddgddgddgg} tt| jdd tt| jdd tdddgdddgg} tt| jdd tdddgdddgg} tt| jdd d S 	Nr   rR   r   r   r   r  rO  r   )r   r   r_   r  rQ  r   r   rr   r.   r.   r/   check_limitedT  s    z3Test64Bit.test_downcast_intp.<locals>.check_limitedrN   c                  S   s~   t ddgddgddgg} | jdd | jdd tdddgdddgg} | jdd tdddgdddgg} | jdd d S r  )r   r  rQ  r   r   rr   r.   r.   r/   check_unlimitedb  s    z5Test64Bit.test_downcast_intp.<locals>.check_unlimited)rp   r;   rS   )rw   r  r  r.   r.   r/   test_downcast_intpM  s    


zTest64Bit.test_downcast_intpN)r   r   r   r   r   r   r   r   r  r  r  r  r  r  r   rD  Zparametrizer  r  r  r  r  r  r  r.   r.   r.   r/   r    s"   




r  )N)NFNNF)T)	TTTTTTTTT)orB  
contextlibr  r  rL  r  sysZ
scipy._libr   Znumpyr;   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   rn   Znumpy.testingr   r   r   r   r   r   r   r   r   r   Zscipy.linalgrc   r  rd   r   r   r   r   r   r   r   r    r!   r"   Zscipy.sparse._sputilsr#   r$   r%   r&   r'   Zscipy.sparse.linalgr(   r)   r*   Zscipy._lib.decoratorr+   rj   r  r0   r6   	frozensetr@  rD   r   r   rp   rq   rs   r   r   rF  rR  rl  rn  r  r  contextmanagerr  r  r  r  r  r  r  r  r  r   r   r   r   rJ  r\  rn  r   r  r  r  r  r  r  r  r  r  r  r.   r.   r.   r/   <module>   s   @$0



    
Q,              Pbj `  u
q#ca 9
          
, { bi     +   j!42)