o
    iB                    @   s  d Z ddlZddlZddlZddlZddlZddlZddlZddlmZ	 ddl
Zddl
mZmZmZmZmZmZmZmZmZmZmZmZmZ ddlZddlmZmZmZmZmZm Z m!Z! ddl"Z#ddl$m%Z% ddl$m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 ddl8m9Z9 ddl:m;Z;m<Z<m=Z=m>Z>m?Z? dd	l@mAZAmBZBmCZC dd
lDmEZE ddlFmGZG dejHv ZIdddZJdd ZKeLdgZMdd ZNe! ZOeOPeG 		dddZQdd ZRG dd dZSG dd dZTG dd dZUG dd  d ZVG d!d" d"ZWG d#d$ d$ZXG d%d& d&ZYejZj[G d'd( d(Z\G d)d* d*Z]G d+d, d,Z^G d-d. d.Z_ej`d/d0 ZaG d1d2 d2ZbG d3d4 d4ZcG d5d6 d6ZdG d7d8 d8ZeG d9d: d:ZfG d;d< d<Zgdd>d?Zh	=	=	=	=dd@dAZiG dBdC dCei Zjejk  G dDdE dEeVejZlelk  G dFdG dGei Zmemk  G dHdI dIeVemZnenk  G dJdK dKeidddLZoG dMdN dNeVeoZpeok  epk  G dOdP dPeiddQZqG dRdS dSeVeqZreqk  erk  G dTdU dUeiddddddVZsG dWdX dXeVesZtesk  etk  G dYdZ dZeidddddddd[ZuG d\d] d]eVeuZveuk  evk  G d^d_ d_eiddddddd`ZwG dadb dbeVewZxewk  exk  dcdd ZyG dedf dfZzG dgdh dhezZ{G didj dje{Z|G dkdl dle|ejZ}G dmdn dne}elZ~G dodp dpe|emZG dqdr dreenZG dsdt dte{ewZG dudv dveexZG dwdx dxezesZG dydz dzeetZd{d| ZG d}d~ d~ZG dd dZejZj[ejZjG dd deZejZj[G dd deZdd ZdS )z Test functions for sparse matrices. Each class in the "Matrix class
based tests" section become subclasses of the classes in the "Generic
tests" section. This is done by the functions in the "Tailored base
class for generic tests" section.

    N)raises)arangezerosarraydotasarrayvstackndarray	transposediagkroninf	conjugateint8)assert_equalassert_array_equalassert_array_almost_equalassert_almost_equalassert_assert_allclosesuppress_warnings)
csc_matrix
csr_matrix
dok_matrix
coo_matrix
lil_matrix
dia_matrix
bsr_matrix	csc_array	csr_array	dok_array	coo_array	lil_array	dia_array	bsr_arrayeyeissparseSparseEfficiencyWarningsparray)_formats)supported_dtypesisscalarlikeget_index_dtypeasmatrixmatrix)spluexpminv)	decorator)ComplexWarningzgoogle.colabc                 C   s.   |d ur|n| d|}t | |v |d d S )Nz not found in )msg)r   )memberZ
collectionr4   message r7   V/home/kim/smarthome/.venv/lib/python3.10/site-packages/scipy/sparse/tests/test_base.py	assert_in3   s   r9   c                 K   s&   t | j|jk t| |fi | d S N)r   dtyper   )xykwargsr7   r7   r8   assert_array_equal_dtype8   s   r?   dokc                 C   s<   dd }|| D ]}||D ]}t ||r  dS qqdS )Nc                 S   s4   g }| j  D ]}t|tjtjB r|| q|S r:   )__dict__values
isinstancenpr	   Zgenericappend)r<   arraysar7   r7   r8   _underlying_arraysB   s   
z3sparse_may_share_memory.<locals>._underlying_arraysTF)rD   may_share_memory)ABrH   rG   br7   r7   r8   sparse_may_share_memory?   s   
rM   Fc                    s   du r
t dnt |rdddn$dur#dfdd	n|r4t jjdd	 d fd
d	ndfdd	durEfddtfdd}|S )z
    Monkeypatch the maxval threshold at which scipy.sparse switches to
    64-bit index arrays, or make it (pseudo-)random.

    N
   r7   Fc                 S   sD   t | ||}tt|jttjj t|tjkp|tjk |S r:   )r,   r   rD   iinfomaxint32r   Zintc)rF   maxvalcheck_contentstpr7   r7   r8   new_get_index_dtypef   s   z4with_64bit_maxval_limit.<locals>.new_get_index_dtypec                    s    S r:   r7   rF   rR   rS   fixed_dtyper7   r8   rU   l        )seedc                    s   t jt jf d S )N   )rD   rQ   int64randintrV   )counterr7   r8   rU   q   s   c                    s   t j}|d ur| krt j}| D ]2}t |}|jt jkrB|r?|jdkr%qt |jt jr?| }|	 }|  kr?| kr?qt j}q|S Nr   )
rD   rQ   r]   r   r;   size
issubdtypeintegerrP   min)rF   rR   rS   r;   arrminvalmaxval_limitr7   r8   rU   t   s$   

c                    s    |    kr
td| tjS )Nzdowncast limited)rP   AssertionErrorastyperD   Zintp)re   )downcast_maxvalr7   r8   new_downcast_intp_index   s   z8with_64bit_maxval_limit.<locals>.new_downcast_intp_indexc                    s   g }t jjt jjt jjt jjt jjt jjt jjt jj	t jj
t jjg
}zG|D ]*}||dt|dd f t|d  d urO||dt|dd f t|d q%| |i |W |D ]\}}}|d urht||| qYS |D ]\}}}|d ur{t||| qlw )Nr,   Zdowncast_intp_index)scipysparseZ_bsrZ_cooZ_cscZ_csrZ_diaZ_dokZ_lilZ_sputilsZ_compressedZ
_constructrE   getattrsetattr)funcrG   kwbackupmodulesmodnameZoldfunc)rk   rl   rU   r7   r8   deco   s8   

z%with_64bit_maxval_limit.<locals>.deco)r7   NF)rD   r]   randomZRandomStater2   )rh   rx   rX   rk   assert_32bitrw   r7   )r_   rk   rX   rh   rl   rU   r8   with_64bit_maxval_limitW   s    
rz   c                 C   s    t | tjs
t| r| S |  S r:   )rC   rD   r	   r+   toarray)rG   r7   r7   r8   r{      s   r{   c                   @   L   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )BinopTesterc                 C      dS Nmatrix on the rightr7   selfmatr7   r7   r8   __add__   rY   zBinopTester.__add__c                 C   r~   r   r7   r   r7   r7   r8   __mul__   rY   zBinopTester.__mul__c                 C   r~   r   r7   r   r7   r7   r8   __sub__   rY   zBinopTester.__sub__c                 C   r~   Nmatrix on the leftr7   r   r7   r7   r8   __radd__   rY   zBinopTester.__radd__c                 C   r~   r   r7   r   r7   r7   r8   __rmul__   rY   zBinopTester.__rmul__c                 C   r~   r   r7   r   r7   r7   r8   __rsub__   rY   zBinopTester.__rsub__c                 C   r~   r   r7   r   r7   r7   r8   
__matmul__   rY   zBinopTester.__matmul__c                 C   r~   r   r7   r   r7   r7   r8   __rmatmul__   rY   zBinopTester.__rmatmul__N)__name__
__module____qualname__r   r   r   r   r   r   r   r   r7   r7   r7   r8   r}      s    r}   c                   @   sd   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )BinopTester_with_shapec                 C   
   || _ d S r:   _shape)r   shaper7   r7   r8   __init__      
zBinopTester_with_shape.__init__c                 C   s   | j S r:   r   r   r7   r7   r8   r      s   zBinopTester_with_shape.shapec                 C   s
   t | jS r:   )lenr   r   r7   r7   r8   ndim   r   zBinopTester_with_shape.ndimc                 C   r~   r   r7   r   r7   r7   r8   r      rY   zBinopTester_with_shape.__add__c                 C   r~   r   r7   r   r7   r7   r8   r      rY   zBinopTester_with_shape.__mul__c                 C   r~   r   r7   r   r7   r7   r8   r      rY   zBinopTester_with_shape.__sub__c                 C   r~   r   r7   r   r7   r7   r8   r      rY   zBinopTester_with_shape.__radd__c                 C   r~   r   r7   r   r7   r7   r8   r      rY   zBinopTester_with_shape.__rmul__c                 C   r~   r   r7   r   r7   r7   r8   r      rY   zBinopTester_with_shape.__rsub__c                 C   r~   r   r7   r   r7   r7   r8   r      rY   z!BinopTester_with_shape.__matmul__c                 C   r~   r   r7   r   r7   r7   r8   r      rY   z"BinopTester_with_shape.__rmatmul__N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r7   r7   r7   r8   r      s    r   c                   @   <   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )ComparisonTesterc                 C   r~   )Neqr7   r   otherr7   r7   r8   __eq__   rY   zComparisonTester.__eq__c                 C   r~   )Nner7   r   r7   r7   r8   __ne__   rY   zComparisonTester.__ne__c                 C   r~   )Nltr7   r   r7   r7   r8   __lt__   rY   zComparisonTester.__lt__c                 C   r~   )Nler7   r   r7   r7   r8   __le__   rY   zComparisonTester.__le__c                 C   r~   )Ngtr7   r   r7   r7   r8   __gt__   rY   zComparisonTester.__gt__c                 C   r~   )Nger7   r   r7   r7   r8   __ge__   rY   zComparisonTester.__ge__N)	r   r   r   r   r   r   r   r   r   r7   r7   r7   r8   r      s    r   c                   @   sL   e Zd ZdZeZeZeZ	e
ZeZeZeZeeZdd Zdd Zdd ZdS )	_MatrixMixinz8mixin to easily allow tests of both sparray and spmatrixc                 C   sP   t | jd | jdgd d f  t | jd | jdgd d f  d S N   )r   datspZgetrowr{   datr   r7   r7   r8   test_getrow     &*z_MatrixMixin.test_getrowc                 C   sP   t | jd | jd d dgf  t | jd | jd d dgf  d S r   )r   r   Zgetcolr{   r   r   r7   r7   r8   test_getcol  r   z_MatrixMixin.test_getcolc                 C   s   |  tddddd}t| jtd t| j|j t|d jtd t|d	 jtd	 | }| }t	||u  d S )
N   rQ   r;   r\      float64int16float32
complex128)
	spcreatorr   reshaper   Zasfptyper;   rD   formatrj   r   )r   rJ   rK   Cr7   r7   r8   test_asfptype  s   z_MatrixMixin.test_asfptypeN)r   r   r   __doc__r   bsr_containerr   coo_containerr   csc_containerr   csr_containerr   dia_containerr   dok_containerr   lil_containerstaticmethodr-   asdenser   r   r   r7   r7   r7   r8   r     s    r   c                   @   s  e Zd ZdZeZeZeZ	e
ZeZeZeZeZeZedd Zdd Zdd Zdd	 Zd
d Zdd Zdd Zdd Zdd Zdd Z dd Z!dd Z"dd Z#dd Z$dd Z%d d! Z&d"d# Z'd$d% Z(d&d' Z)d(d) Z*d*d+ Z+d,d- Z,d.d/ Z-d0d1 Z.d2d3 Z/e0j1j2d4d5 Z3d6d7 Z4d8d9 Z5d:d; Z6d<d= Z7d>d? Z8d@dA Z9dBdC Z:dDdE Z;dFdG Z<dHdI Z=dJdK Z>dLdM Z?dNdO Z@dPdQ ZAdRdS ZBeCdTdU ZDeCdVdW ZEeCdXdY ZFeCdZd[ ZGd\d] ZHd^d_ ZIeCd`da ZJeCdbdc ZKddde ZLdfdg ZMdhdi ZNdjdk ZOdldm ZPdndo ZQdpdq ZRdrds ZSdtdu ZTdvdw ZUdxdy ZVdzd{ ZWd|d} ZXd~d ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd Zbdd Zcdd Zddd Zedd Zfdd Zgdd Zhdd Zidd Zjdd Zkdd Zldd Zmdd Zndd Zodd Zpdd Zqdd ZrdS )_TestCommonz6test common functionality shared by all sparse formatsc                 C   s   t g dg dg dgd| _| | j| _tt| j| _i | _	i | _
| jD ]}| j|| j	|< | | j|| j
|< q(t| j| j	tj  t| j | j
tj   t| jt| _d S )N)r   r   r   r\   )r   r   r   r   )r   r\   r   r   d)r   r   r   r   setr*   unionmath_dtypeschecked_dtypes
dat_dtypesdatsp_dtypesrj   r   rD   r   r{   rC   r(   is_array_test)clsr;   r7   r7   r8   
init_class6  s   

z_TestCommon.init_classc                    s8    fdd}t  trtd  jD ]}|| qd S )Nc                    s@    j |  }ttt| t dgg t dgg  d S )Nr   r   )r   assert_raises
ValueErrorboolr   r   )r;   r   r   r7   r8   checkO  s   
z$_TestCommon.test_bool.<locals>.checkz%Cannot create a rank <= 2 DOK matrix.)rC   TestDOKpytestskipr   r   r   r;   r7   r   r8   	test_boolN  s   



z_TestCommon.test_boolc                 C   sH   t ddgg}| |}tdD ]
}|| }|| }qt||  d S )NTFrN   )r   r   ranger   r{   )r   r   r   _r7   r7   r8   test_bool_rollover[  s   

z_TestCommon.test_bool_rolloverc                    R   t  }|t |t fdd} jjdvrtd  jD ]}|| q d S )Nc           	         s(   j |  } j|  }| }d|d d df<  |} |} |} |} |}t||k||k	  t||k||k	  t||k||k	  t||k||k	  t||k||k	  t||k||k t|dk|dk	  t|dk|dk	  t|t
jk|t
jk	  d S Nr   r   )r   r   copyr   r   r   r   r   r?   r{   rD   nan)	r;   r   r   dat2datsp2datbsrdatcsrdatcscdatlilr   r7   r8   r   j  s(   







z"_TestCommon.test_eq.<locals>.checkbsrcsccsr8Bool comparisons only implemented for BSR, CSC, and CSR.	r   filterr'   sup_complexr   r   r   r   r   r   supr   r;   r7   r   r8   test_eqf  s   



z_TestCommon.test_eqc                    r   )Nc           	         sT   j |  } j|  }| }d|d d df<  |} |} |} |} |}t||k||k	  t||k||k	  t||k||k	  t||k||k	  t||k||k	  t||k||k t|dk|dk	  t|dk|dk	  td|kd|k	  td|kd|k	  t|t
jk|t
jk	  d S r   )r   r   r   r   r   r   r   r   r?   r{   rD   r   )	r;   r   r   r   r   r   r   r   r   r   r7   r8   r     s,   







z"_TestCommon.test_ne.<locals>.checkr   r   r   r   r7   r   r8   test_ne  s   



z_TestCommon.test_nec                    r   )Nc                    sT   j |  } j|  }| }d|d d df<  |}|t}d|d d df<  |} |} |} |}	 	|}
t
||k ||k   t
||k ||k   t
||k ||k   t
||k ||k   t
||k |	|k   t
||k |
|k   t
||k ||k   t
||k ||k   t
||k ||	k   t
||k ||
k   t
||k ||k  t
||k ||k  dD ]}t|}t
||k  ||k  t
||k  ||k  qtjdd t
|tjk  |tjk  W d    n1 sw   Y   j |  } j|  }| }d|d d df<  |}t
||k ||k  d S Nr         ?      ?)r\   r   r   r   ignoreinvalidr   r   r   r   rj   complexr   r   r   r   r?   r{   rD   r]   errstater   r;   r   r   r   r   Z
datcomplexZdatspcomplexr   r   r   r   valr   r7   r8   r     sR   













z"_TestCommon.test_lt.<locals>.checkr   r   r   r   r7   r   r8   test_lt  s   
4


z_TestCommon.test_ltc                    r   )Nc                    sT   j |  } j|  }| }d|d d df<  |}|t}d|d d df<  |} |} |} |}	 	|}
t
||k||k  t
||k||k  t
||k||k  t
||k||k  t
||k|	|k  t
||k|
|k  t
||k||k  t
||k||k  t
||k||	k  t
||k||
k  t
||k||k t
||k||k dD ]}t|}t
||k ||k t
||k ||k qtjdd t
|tjk |tjk W d    n1 sw   Y   j |  } j|  }| }d|d d df<  |}t
||k||k d S r   r   r   r   r7   r8   r     sR   













z"_TestCommon.test_gt.<locals>.checkr   r   r   r   r7   r   r8   test_gt  s   
3


z_TestCommon.test_gtc                    r   )Nc                    s   j |  } j|  }| }d|d d df<  |}|t}d|d d df<  |} |} |} |}	 	|}
t
||k||k  t
||k||k  t
||k ||k t
||k ||k t
|	|k ||k t
|
|k ||k t
||k ||k t
||k ||k t
||	k ||k t
||
k ||k t
||k||k t
||k||k dD ]}t|}t
||k ||k t
||k ||k qÈ j |  } j|  }| }d|d d df<  |}t
||k||k d S Nr   r   )r\   r   r   r   r   r   r   r   rj   r   r   r   r   r   r?   r{   rD   r]   r   r   r7   r8   r   3  H   













z"_TestCommon.test_le.<locals>.checkr   r   r   r   r7   r   r8   test_le/     
/


z_TestCommon.test_lec                    r   )Nc                    s   j |  } j|  }| }d|d d df<  |}|t}d|d d df<  |} |} |} |}	 	|}
t
||k||k  t
||k||k  t
||k ||k t
||k ||k t
|	|k ||k t
|
|k ||k t
||k ||k t
||k ||k t
||	k ||k t
||
k ||k t
||k||k t
||k||k dD ]}t|}t
||k ||k t
||k ||k qÈ j |  } j|  }| }d|d d df<  |}t
||k||k d S r  r  r   r   r7   r8   r   m  r  z"_TestCommon.test_ge.<locals>.checkr   r   r   r   r7   r   r8   test_gei  r  z_TestCommon.test_gec                 C   sr   t | d td t | djd t | d d | jjdv r7t | djddtg d d S d S )Nr   r   r   coor   r   lilaxisr   r   r   )	r   r   r{   r   nnzcount_nonzeror   r   r   r   r7   r7   r8   
test_empty  s   $z_TestCommon.test_emptyc                 C   s   | j jdv }|rg dnd g}| j | j jfD ]}|D ]}tj| |d}t|j|d| qq|sRttdd | j jdd W d    d S 1 sKw   Y  d S d S )Nr  )Nr   r   r   r   r  znot implemented .* formatmatchr   )	r   r   TrD   r  r{   r   r   NotImplementedError)r   Zaxis_supportaxesrJ   axexpectedr7   r7   r8   test_count_nonzero  s   "z_TestCommon.test_count_nonzeroc                 C   s.   t t| jd t t| jd t t| jd d S )Nr   r   r   r   r   r   )r   r   r   r   r7   r7   r8   test_invalid_shapes  s   z_TestCommon.test_invalid_shapesc                 C   s   |  g dg dg dg}|jdkrdn|jdkrdnd}t|j \}}| jr*d	nd
}d| d| d|j d|j d| d|j d}t||ksLJ d S )Nr   r   r   r  r   r   r   dia(1 diagonals) r   (blocksize=1x1)  r   r.   < sparse  of dtype ''
	with  stored elements 
and shape >)r   r   r)   r   r;   r  r   reprr   r   extrar   fmtZ
sparse_clsr  r7   r7   r8   	test_repr  s    z_TestCommon.test_reprc                 C   s$  |  tddd}|jdksJ tt|ddks J tddd}|  |}|jdkr5d	n|j	}| j |d
d}tt|d|d ksNJ tt|ddks[J | j |ddddd}| j |ddddd}t
jtdd |  |dddd W d    d S 1 sw   Y  d S )NK         2   
6   r   r"     r   )maxprintrN   )r3  r   iF   )r   r;   r   r9  z'positional argument|unpack non-iterabler  )r   rD   r   r   r9  r   strsplitr   r  r   r   	TypeError)r   r   r   Z	nnz_smallZ	datsp_mp6r7   r7   r8   test_str_maxprint  s   
"z_TestCommon.test_str_maxprintc                 C   s   |  g dg dg dg}|jdkrd S |jdkrdn|jdkr#dnd	}t|j \}}| jr1d
nd}d| d| d|j d|j d| d|j d}t||ksSJ d S )Nr   r  r!  r\   r"  r#  r   r$  r%  r   r.   r&  r'  r(  r)  r*  r+  z(>
  Coords	Values
  (0, 0)	1
  (2, 2)	-2)r   r  r   r)   r   r;   r   r<  r.  r7   r7   r8   test_str  s$   
z_TestCommon.test_strc           
      C   s   d}t dt dt dt dt dfD ]I}| j||d}|| }d| }||  }||  }||  }||||||fD ]}	t|	 | |   t|	j| t|	 j| qCqd S )	Nr3  r3  rQ   r   r   	complex64r   r   r\   )rD   r;   r   tocsctocsrtocoor   r{   )
r   r   ZmytyperG   rL   cr   efmr7   r7   r8   test_empty_arithmetic  s"   z!_TestCommon.test_empty_arithmeticc                 C   sB   t g dg dg dg dgd}tt|t| |  d S )Nr   r      r   r   r   r   r  r   )r   r   absr   r{   r   rJ   r7   r7   r8   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   rD   aroundroundr   r{   )r   decimalrJ   r7   r7   r8   
test_round
  s
   z_TestCommon.test_roundc                 C   sV   t g dg dg dgd}tt|d| |d  tt| |j| d S )N)rP  r   )r   r   r   r\   r   r;  r   r\   )r   r   rD   powerr   r{   r   r  rR  r7   r7   r8   test_elementwise_power  s   "z"_TestCommon.test_elementwise_powerc                 C   sd   t g dg dg dg dgd}t| | |   t g dg dg}tt| |j d S )NrK  rM  rO  r  r   )TFF)FFT)r   r   r   r{   r   r  __neg__rR  r7   r7   r8   test_neg  s   "z_TestCommon.test_negc                 C   .   t ddgg}| |}t|j |j d S N      ?      @y       @      )r   r   r   realr{   r   DrJ   r7   r7   r8   	test_real     
z_TestCommon.test_realc                 C   r_  r`  )r   r   r   imagr{   rc  r7   r7   r8   	test_imag$  rf  z_TestCommon.test_imagc                 C   s   g }| g dg | dgdgdgg | ddgddgddgg | g dg dg dg | ddgddgg | t|d ddgg | t|d dgdgg | t|d ddgdd	gg | t|d ddgdd	gg | t|d ddgdd	gg | t|d g d
g |D ]B}t|j\}}| |}t| d |d D ]}t|j|dt||d qt|jddt|dd t|jddt|dd qt| d t	
d t| d t	d t| d t	d t| ddt	d d S )Nr   r   r\   r   r   r\   r   r   r   r   )r   r   r\   r   r   r   r;  r   r\   r   r;  krN   i)(   i?  ro  r   r   )r4  r   r   r3  )rE   r   r   r   r   r   r   diagonalr   rD   r   empty)r   ZmatsrI  rowscolsZ
sparse_matrn  r7   r7   r8   test_diagonal)  s.      
 z_TestCommon.test_diagonalc                 C   s   t g dg dg dg}| |}tddD ]}t|j|d|j|d qt g dg dg}| |}tddD ]}t|j|d|j|d q=d S )Nr   r\   r   r;  r3  r   )      	   r   r   )offsetr   )rD   r   r   r   r   trace)r   rJ   rK   rn  r7   r7   r8   
test_traceJ  s   

z_TestCommon.test_tracec                 C   s  |  g dg dg dg dg}dD ]}dD ]}t|j||d | j||d qq|  g dg d	g d
g}|d}g dg dg}t| | |d}t| | |d}t| | tt|jd |dd}t| | tt|jdddd |d}t||u  |jddd}t||u t|jd | j	rtt
dd d|_W d    n1 sw   Y  n
d|_t| | tt|j|jf tt|jd|jdf d S )N)r   r   ry  r  rk  )r   r   r3  )r   F))   r   )r   r  orderr   rN   r   r   r   r   r   r   r         ro  r\   r   )r   rN   r   r   r   r   )r   r   r   r  r  ro  r\   r   )r   r   r  r\   r   r   )Z
not_an_argr   r;  Tr   zhas no setter|n't set attributer  )r   r   r   r{   r   r   r>  r   r   r   AttributeErrorra   )r   r<   r  sr=   Zdesiredr7   r7   r8   test_reshapeW  sB   "



z_TestCommon.test_reshapec                    s    fdd  fdd}t jd g d}t jt jfD ]G}|D ]B\}}t | d |d }|D ]0}t j||f|d}| j||f|d}	|||	| t jj|t	t
|d	d
D ]}
|||	|
 qXq1q qd S )Nc                    s   t |}|dkr>t| jd | jd | }|jdkr(t|t|}|d | }t d|}t ||| }|| ||f< d S |dk rL | j||  d S d S r   )rD   r   rd   r   r   r   r   r  )rG   vrn  nr:  jdense_setdiagr7   r8   r    s   

z=_TestCommon.test_setdiag_comprehensive.<locals>.dense_setdiagc              	      s  dt t| |ddfD ]u}|dk rtjtdd}n	tjjdd|d} | || t }|t	d |
|| W d    n1 sEw   Y  t| |}t|jdkr`t||d	d
 ntt |t |}t|d | |d | d	d
 t| | d	d
 qd S )Nr   r\   r  r   r   r  ra   zChanging the sparsity structuz	{msg} {r}err_msg)r   rD   r   rx   choicer   r^   r   r   r'   setdiagr   r   r   rd   r{   )rG   rL   rn  rr  r   r   r  r  r7   r8   check_setdiag  s    z=_TestCommon.test_setdiag_comprehensive.<locals>.check_setdiagrZ   )rq  r3  r   r   r3  r3  r   rA  r   r   r3  r  )rD   rx   r[   r   r   r   r   r   r  rd   r   )r   r  Zshapesr;   rI  r  ksrn  rG   rL   Zk2r7   r  r8   test_setdiag_comprehensive  s"   z&_TestCommon.test_setdiag_comprehensivec              	   C   s  |  td}|  d}g d}t }|td tt|j|dd || t	|
 | |j|dd t	| tg dg d	g d
g |j|dd t	| tg dg d	g dg |jddd t	| d d |jddd t	| d d |jdgdd t	| d g d |jddgdd t	| d d g dg dg W d    d S 1 sw   Y  d S )Nr   r;  r;  )r   r\   r   Changing the sparsity structurer;  rm  r   )r   r   r   )r   r\   r\   rj  r   r   r   r   )r{  r\   r   r\   r{  r\   r   r   r   r   r   r   )r   r   r   r   )r   rD   r%   r   r   r'   r   r   r  r   rr  r{   r   )r   rI  m2rB   r   r7   r7   r8   test_setdiag  s:   

"z_TestCommon.test_setdiagc                 C   s^   t g dg dg dg}| |}dd t| D }dd t| D }t|| d S )Nr   r   r   r   r   r   rj  c                 S      h | ]}t |qS r7   tuple.0ijr7   r7   r8   	<setcomp>      z+_TestCommon.test_nonzero.<locals>.<setcomp>c                 S   r  r7   r  r  r7   r7   r8   r    r  )r   r   r
   nonzeror   r   rJ   AspZA_nzZAsp_nzr7   r7   r8   test_nonzero  s
   
z_TestCommon.test_nonzeroc                 C   sb   t g dg dg dg}| |}dd tt|D }dd tt|D }t|| d S )Nr  r  rj  c                 S   r  r7   r  r  r7   r7   r8   r    r  z1_TestCommon.test_numpy_nonzero.<locals>.<setcomp>c                 S   r  r7   r  r  r7   r7   r8   r    r  )r   r   r
   rD   r  r   r  r7   r7   r8   test_numpy_nonzero  s
   
z_TestCommon.test_numpy_nonzeroc           	         s   t jd t g dg dg dg}t jdd}t g g}t d}tjdddd }|||||g  fd	d
}jD ]}t	t
 D ]}||| qIqAd S )NrZ   r   r   r\   r   rP  r3  ry  r{  r3  )ro  ro  g{Gz?)Zdensityc                    s  j  | | d}j|| d}tjdd t| |  t| j| j tt	|jd d t|jd d|jd d t|jd dj|jd dj t|jdd|jdd t|jddj|jddj t|jdd|jdd t|jddj|jddj t|jdd|jdd t|jddj|jddj t|jdd|jdd t|jddj|jddj W d    d S 1 sw   Y  d S )	Nr   r   )Zoverr  r   r   r   r   )
r   r   rD   r   r   sumr   r;   r   isscalar)r;   r  r   r   matricesr   r7   r8   r     s*   
 "z#_TestCommon.test_sum.<locals>.check)rD   rx   r[   r   randr   rn   r{   r   r   r   )	r   dat_1dat_2Zdat_3Zdat_4Zdat_5r   r;   r  r7   r  r8   test_sum  s    


z_TestCommon.test_sumc                 C   st   t d}tg dg dg dg}| |}tt|jdd tt|jdd tt|jdd tt|jd	|d
 d S Nr   r   r  r  r  r   r  r   r         ?r   r  out)rD   r   r   r   r   r   r  r>  r   r  r   r   r7   r7   r8   test_sum_invalid_params  s   

z#_TestCommon.test_sum_invalid_paramsc                    J   t g dg dg dg |   fdd}| jD ]}|| qd S )Nr  r  r  c                    4    j | d}j | d}t|| t|j|j d S Nr   )r  r   r   r;   )r;   dat_sum	datsp_sumr   r   r7   r8   r   #     
z)_TestCommon.test_sum_dtype.<locals>.checkr   r   r   r   r7   r  r8   test_sum_dtype     


z_TestCommon.test_sum_dtypec                 C   r  | j  }tg dg dg dg}| |}| j rtdntdgg}| j r*tdntdgg}|j||d |j|d t|| | j rJtdntd}| j rWtdnttd}|jd	||d
 |jd	|d t|| tt	dd |jtdgd W d    n1 sw   Y  tt	dd |jt| j rdggndd W d    d S 1 sw   Y  d S Nr  r  r  r   )r  keepdimsr  r   r   r   r   )r  r  r  r  z"output parameter.*wrong.*dimensionr  )
r   r   r   r.   r  r   rD   r   r   r   r   keepr   r   Zdat_outZ	datsp_outr7   r7   r8   test_sum_out-  ,   


 "z_TestCommon.test_sum_outc                 C   T   t g dg dg dg}| |}t|}t|}t|| t|j|j d S Nr  r  r  )r   r   rD   r  r   r   r;   )r   r   r   r  r  r7   r7   r8   test_numpy_sumH     



z_TestCommon.test_numpy_sumc                    s.   j    fdd}jD ]}|| qd S )Nc                    s  t g dg dg dg| d}j|| d}t| |  t| j| j tt|jd d t|jd  d|jd d t|jd dj|jd dj t|jd d|jdd t|jddj|jddj t|jd d|jdd t|jddj|jddj t|jd	 d|jd	d t|jd	dj|jd	dj t|jd
 d|jd
d t|jd
dj|jd
dj d S )Nr  r   r;  r3  )r   ry  r{  r   r  r  r  r   r   r   r   )	r   r   r   meanr   r;   r   rD   r  r;   r   r   r  r   r7   r8   r   W  s<   "z$_TestCommon.test_mean.<locals>.check)r   r   r   r7   r  r8   	test_meanU  s
   

z_TestCommon.test_meanc                 C   sz   |  td}tg dg dg dg}| |}tt|jdd tt|jdd tt|jdd tt|jd	|d
 d S r  )	r   rD   r   r   r   r   r   r  r>  r  r7   r7   r8   test_mean_invalid_paramsx  s   
z$_TestCommon.test_mean_invalid_paramsc                    r  )Nr  r  r  c                    r  r  )r  r   r   r;   )r;   dat_mean
datsp_meanr  r7   r8   r     r  z*_TestCommon.test_mean_dtype.<locals>.checkr  r   r7   r  r8   test_mean_dtype  r  z_TestCommon.test_mean_dtypec                 C   r  r  )
r   r   r   r.   r  r   rD   r   r   r   r  r7   r7   r8   test_mean_out  r  z_TestCommon.test_mean_outc                 C   r  r  )r   r   rD   r  r   r   r;   )r   r   r   r  r  r7   r7   r8   test_numpy_mean  r  z_TestCommon.test_numpy_meanc           
      C   s   t g dg dg dgt}| j|dtd}tj|}t g dg dg dg}| j|dtd}tj|}t &}|td	 |td
 |td t|	 }t|	 }	W d    n1 scw   Y  t
|| td t
|	| td d S )Nri  r   r   r   rP  r3  r   r
  r   r;   )      @              ?)r         @r  )r  r  r  &splu converted its input to CSC formatCspsolve is more efficient when sparse b is in the CSC matrix format.spsolve requires A be CSC or CSR matrix format)r   floatr   rm   linalgr0   r   r   r'   r{   r   r   )
r   MsMZMexpNZsNZNexpr   ZsMexpZsNexpr7   r7   r8   	test_expm  s0   z_TestCommon.test_expmc                    s$    fdd}t fD ]}|| q	d S )Nc                    s   t g dg dg dg| }t &}|td |td |td  j|d| d}t|}W d    n1 s:w   Y  t|| t	
d	 ttt| d S )
Nri  r  r  r  r  r  r
  r  r   )r   r   r   r'   r   r1   r   r   r{   rD   r%   r   r>  )r;   r  r   r  ZsMinvr   r7   r8   r     s    

z#_TestCommon.test_inv.<locals>.check)r  r   r7   r   r8   test_inv  s   

z_TestCommon.test_invc                 C   s   t g dg dg dg dg}t| | | t g dg dg dg}t| | | t| j|dd |d d S 	Nr   rZ  )r   r3  r   r  )ra  r   r   )r         @r   r   r   )r   r   r   r{   rj   rR  r7   r7   r8   test_from_array  s    "z_TestCommon.test_from_arrayc                 C   s   |  g dg dg dg dg}t| | | |  g dg dg dg}t| | | t| j|dd |d d S r   )r   r   r   todenserj   rR  r7   r7   r8   test_from_matrix  s   "
z_TestCommon.test_from_matrixc                 C   s   g dg dg dg dg}t | | | g dg dg dg}t | | t| t | j|dd t|d d S r   )r   r   r{   r   rj   rR  r7   r7   r8   test_from_list  s   z_TestCommon.test_from_listc                 C   s   t g dg dg dg dg}| |}t| | | | |}t| | | t g dg dg dg}| |}t| | | t| j|dd |d | |}t| | | t| j|dd |d d S r   )r   r   r   r   r{   rj   r   rd  Sr7   r7   r8   test_from_sparse  s&    



z_TestCommon.test_from_sparsec           
      C   s  | j  }t|| jrtjntjsJ t|| j t	|j
j|j
jk | j jdd}t|| j t	|j
j t	|j
j  | j jdd}t|| j t	|j
j  t	|j
j tj| j j| j jd}| j j|d}t| j| t| j| t||s}J | tj| j j| j jd}| j j|d}t| j| t| j| t||sJ tg dg}|| j }|| j   }t|| tg dgj}| j| }| j  | }t|| | j| jtd}| jt}	t| |	 d S )Nr   r  r  r   r  r  r  r  r  r  r        @)r   r  rC   r   rD   r	   r.   r   r   r   flagsc_contiguousf_contiguousr   r   r;   rI   r   r   r  r   r   rj   )
r   chkr  rG   dense_dot_denser   rL   check2spboolZmatboolr7   r7   r8   test_todense'  sB   




z_TestCommon.test_todensec                 C   sp  t | j}| j }t|| t|jj|jjk | jjdd}t|| t|jj t|jj  | jjdd}t|| t|jj  t|jj t	j
| jj| jjd}| jj|d t|| d|d< | jj|d t|| tg d}t||}t|| j }t|| tg d	}t||}t| j |}t|| | j| jtd}	|t}
t|	 |
 d S )
Nr   r  r  r   r  r  .r	  r
  )r   r   r   r{   r   r   r  r  r  rD   r   r   r;   r   r   r   r   rj   )r   r   r  r  rG   r  r   rL   r  r  Zarrboolr7   r7   r8   test_toarrayP  s:   











z_TestCommon.test_toarrayc                    s  t g dg dg dg}| |}tD ]s}||}dD ]}|j||d t j|j t  | t j|j qt j|dd u   j|ddt u  fdd	} jd
v rjdD ]}|| qbq jdkrydD ]}|| qqq jdkrdD ]}|| qqd S )Ny       @      @r   r   r   y      @      @r   r  )TFr  FTc                    sj   t  | }t | }t|| t||u d|j }|| }||  ||< t|| || k |||< d S )N)r   )ro   r   r   r   )	attributerG   rL   r:  Zb_iS_castedZS_copiedr7   r8   (check_equal_but_not_same_array_attribute  s   



zI_TestCommon.test_astype.<locals>.check_equal_but_not_same_array_attributer   r   r   )indicesindptrdatar  )rowcolr  r"  )offsetsr  )	r   r   r*   rj   r   r;   r{   r   r   )r   rd  r  r<   D_castedr   r  r  r7   r  r8   test_astypeu  s:   







z_TestCommon.test_astypec                 C   s   t g dg dg dg}| |}t|drd|jj_|jdv r+d|jj_d|jj_t	D ]}|
|}|
|}t|j|j q-d S )Nr  r  r  r  Fr  )r   r   hasattrr  r  Z	writeabler   r  r  r*   rj   r   r;   )r   rd  r  r<   r"  r  r7   r7   r8   test_astype_immutable  s   







z!_TestCommon.test_astype_immutablec                    $    fdd} j D ]}|| q	d S )Nc                    sD    j |  } j|  }t|d |d   t|d |d   d S Nr\   L1@r   r   r   r{   r  r   r7   r8   r        

z*_TestCommon.test_mul_scalar.<locals>.checkr   r   r7   r   r8   test_mul_scalar     

z_TestCommon.test_mul_scalarc                    r&  )Nc                    sD    j |  } j|  }td| d|   td| d|   d S r'  r)  r  r   r7   r8   r     r*  z+_TestCommon.test_rmul_scalar.<locals>.checkr+  r   r7   r   r8   test_rmul_scalar  r-  z_TestCommon.test_rmul_scalarc                 C   sB   | j tj }tt d |  W d    d S 1 sw   Y  d S r:   )r   rD   r   r   r>  )r   r   r7   r7   r8   test_rmul_scalar_type_error  s   

"z'_TestCommon.test_rmul_scalar_type_errorc                    r&  )Nc                    s    j |  } j|  }| }d|d< |}|| }t|| |  ||  }t| | |   ||d  }t|| |d   d S )Nr  r  r   )r   r   r   r   r{   rD  r;   r   r   rG   rL   rF  r   r7   r8   r     s   

z#_TestCommon.test_add.<locals>.checkr+  r   r7   r   r8   test_add  s   

z_TestCommon.test_addc                    r&  )Nc                    sF    j |  } j|  }| }d|d< |}|| }t|||   d S )Nr  r  )r   r   r   r   r{   r0  r   r7   r8   r     s   

z$_TestCommon.test_radd.<locals>.checkr+  r   r7   r   r8   	test_radd     


z_TestCommon.test_raddc                    4    fdd} j D ]}|tdkrq	|| q	d S )Nc                    s    j |  } j|  }t||  td t|d  |  tg dg dg dgd}t||  ||   t||  | |  t||d  ||d   d S )Nr  r   r   r   r   r;  r   r   r   r   r   rz  r   rN  r   )r   r   r   r{   rD   r   r   r   r;   r   r   rJ   r   r7   r8   r     s   

z#_TestCommon.test_sub.<locals>.checkr   r   rD   r;   r   r7   r   r8   test_sub  s   

z_TestCommon.test_subc                    r4  )Nc                    s   j |  } j|  }t|| g dg dg dg t|| g dg dg dg td|  |   jg dg dg dgdd}t|| ||   t|| | |  t| | | |  t||  ||   t|d | |d |  d S )Nr  r   r5  r6  r7  r   r   )r   r   r   r{   r   r8  r   r7   r8   r     s   

   z$_TestCommon.test_rsub.<locals>.checkr   r9  r   r7   r   r8   	test_rsub  s   

z_TestCommon.test_rsubc                    r&  )Nc                    sp   j |   j|  td    tfddtddD }t fddtddD }t| | d S )Nr   c                       g | ]}|  qS r7   r7   r  rn  )r   r7   r8   
<listcomp>'  r  z8_TestCommon.test_add0.<locals>.check.<locals>.<listcomp>r   r   c                    r<  r7   r7   r=  )r   r7   r8   r>  (  r  )r   r   r   r{   r  r   r   )r;   ZsumSZsumDr   r  r8   r      s   

z$_TestCommon.test_add0.<locals>.checkr+  r   r7   r   r8   	test_add0  s   

z_TestCommon.test_add0c           	      C   s  t g dg dg}t g dg dg}| |}| |}t|| ||  t|| ||  t g dg dg}t g dg dg}| |}| |}t|| ||  t|| ||  t|| ||  t|| ||  d S )	N)r;  r   r{  )r\   rY  r3  )r   ry  r   )r   rP  r   y      ?       y              @y              y      @      y            @r3  y      @       @y      @      y             ?y              y             @r{  )r   r   r   multiplyr{   )	r   rJ   rK   r  Bspr   rd  ZCspDspr7   r7   r8   test_elementwise_multiply.  s   



z%_TestCommon.test_elementwise_multiplyc                 C   s  t dg}t dgg}t g d}t g dg}t dgdgdgg}t g dg d	g d
g}g d}td}|j}	t dgg}
t ddgddggg}| |}| |}| |}| |}| |}| |d }| |	}| |	d d dd f }| |
}|||||||||	|
|g}|||||||||g	}|D ].}|D ])}z
| |  }W n ty   tt|j| Y qw ||}t	| | qq|D ]?}|D ]:}z| | }W n t
y   Y q ty   tt|j| Y qw ||}t|rt	| | qt	|| qqd S )Nr;  r   r   r   )ry  r{  rH  r   r\   r   )rz  r   r   )rP  r   r\   )r   r   r   rw  r  r   r   N)r   rD   onesr  r   r{   r   r   rD  r   r>  r&   )r   rJ   rK   r   rd  Er  GHJKLrE  rF  ZEspZFspZHspZHsppZJspZJsppZKspr  Z
spmatricesr:  r  Z
dense_multZsp_multr7   r7   r8   #test_elementwise_multiply_broadcastC  sb   












z/_TestCommon.test_elementwise_multiply_broadcastc                 C   s  dt jt jdgdt jdt jgt jdt jt jgg}tt| j| j | | jg dg dg dgdd}dt jt jdgdt jtt jgt jd	t jd
gg}tt| j| | tg dg dg}tg dg dg}| |}| |}tt|| ||  tg dg dg}tg dg dg}| |}| |}t j	dd tt|| ||  W d    n1 sw   Y  td
dgdd
gg}tdd
gdd
gg}| |}| |}t j	ddd tt t|| ||  W d    d S 1 sw   Y  d S )Nr   r5  r6  r7  r   r         ?rY  g      ?r   r@  rA  rB  rC  rw  )rY  r\   r   r  )r   r   r   r   )divide)rT  r   )
rD   r   r   r{   r   r   r   r   r   r   )r   r  denomrJ   rK   r  rE  r7   r7   r8   test_elementwise_dividez  s<    





"z#_TestCommon.test_elementwise_dividec                 C   s6  t g dg dg dg dg}| |}| jr[dD ]}|| }|| }t| | t|j|j qtt|j	d tt
|j	d | |d dd d f }t|d	  |  d S d
D ]}|| }tj||}t| | t|j|j q]dD ]	}tt
|j	| q{| |d dd d f }tt|j	d	 d S )Nr   r   r\   r   )r   r   r;  r   )r   r3  r   r   )r   r   ry  rz  )r   r\   皙@r   r   r   r   r   r   r   r\   r   )r   rX  ra  )r   r   r   r   r{   r   r;   r   r  __pow__r   rD   r  Zmatrix_powerr>  )r   rJ   rK   exponentZret_spZret_npr7   r7   r8   test_pow  s*    
z_TestCommon.test_powc                 C   sj   |  g dg dg dg dg}tg d| tg d|  tg dg}t|| ||   d S )Nr   r   r   r   r   r   r\   r   r  r\   r   r   rl  )r   r   r   r{   r   )r   r  r  r7   r7   r8   test_rmatvec  s   " z_TestCommon.test_rmatvecc                 C   s   |  dgdgdgg}tt|td  t|td  dgdgdgg t|tdg tg d t|tdgg tdgdgdgg t|td tdgdgdgg t|td td d S )Nr   r\   r   rw  r   r   r   r   r   r   )r   r   r&   r   r   r{   rD   rK  rR  r7   r7   r8   test_small_multiplication  s   "&$z%_TestCommon.test_small_multiplicationc                 C   s   t dgdgdgg}| |}| jr.t|t d  | t|tdgg  | d S t|tdg tg d t|tdgg tdgdgdgg t|t d t d d S )Nr   r\   r   r  rw  rc  rd  )rD   r   r   r   r   rK  r{   r   )r   rJ   r  r7   r7   r8   -test_star_vs_at_sign_for_sparray_and_spmatrix  s   
&z9_TestCommon.test_star_vs_at_sign_for_sparray_and_spmatrixc                 C   s   |  dgdgdgg}t }t|| d t|| d t|| d t|| d t|| d t|| d t|| d t|| d d S )Nr   r\   r   r   r   )r   r}   r   r   rJ   rK   r7   r7   r8   test_binop_custom_type  s   z"_TestCommon.test_binop_custom_typec                 C   s   |  dgdgdgg}td}t|| d t|| d t|| d t|| d t|| d t|| d t|| d t|| d d S )Nr   r\   r   r  r   r   )r   r   r   rg  r7   r7   r8   !test_binop_custom_type_with_shape  s   z-_TestCommon.test_binop_custom_type_with_shapec                 C   sd   G dd d}d}|  dgdgdgg}||}|| }|| }t| |  t|j|j d S )Nc                   @   s   e Zd Zdd Zdd ZdS )z0_TestCommon.test_mul_custom_type.<locals>.Customc                 S   r   r:   scalar)r   rk  r7   r7   r8   r     r   z9_TestCommon.test_mul_custom_type.<locals>.Custom.__init__c                 S   s
   || j  S r:   rj  r   r7   r7   r8   r     r   z9_TestCommon.test_mul_custom_type.<locals>.Custom.__rmul__N)r   r   r   r   r   r7   r7   r7   r8   Custom  s    rl  r\   r   r   )r   r?   r{   r   r   )r   rl  rk  rJ   rF  ZA_scalarZA_cr7   r7   r8   test_mul_custom_type  s   z _TestCommon.test_mul_custom_typec                 C   st   |  dgdgdgg}t }t||kd t||kd t||kd t||kd t||k d t||kd	 d S )
Nr   r\   r   r   r   r   r   r   r   )r   r   r   rg  r7   r7   r8   test_comparisons_custom_type  s   z(_TestCommon.test_comparisons_custom_typec                 C   sR   |  tg dg dg dg dg}d}||}|| }t| |  d S )Nr]  r^  r_  r`  rN   )r   r   r   r   r{   )r   r  rk  actualr  r7   r7   r8   test_dot_scalar  s
   &
z_TestCommon.test_dot_scalarc                 C   s   |  tg dg dg dg dg}|  tddgddgddggd}tg d	gj}tj}t|||| |  t||| ||   t|| |||   t||| ||   tt||d tt|d| d S )
Nr]  r^  r_  r`  r   r   r\   r   rw  )	r   r   r  operatormatmulr   r{   r   r   )r   r  rK   r   rr  r7   r7   r8   test_matmul#  s   &"z_TestCommon.test_matmulc                 C   s  |  g dg dg dg dg}tg dgj}t|| | |  t|tg d jd t|tdgdgd	gg jd
 t|tdgdgd	gg jd
 tt	|tg d t
 | jrbt
ntj}tt	|tg dj | tddgtg dtdgdggtg dtdgdggg}|D ]	}tt|j| qt|tg d t| g d t|dgdgd	gg tt| g dj d S )Nr]  r^  r_  r`  rw  )r;  r   r\   r   )r;  r   rl  )r   r   r  r   r{   r   r   r.   r   rC   r	   r   rD   r   r   r   r   r   Z
atleast_2d)r   r  r   Zmatrix_or_arrayZbad_vecsr<   r7   r7   r8   test_matvec5  s    "  "$4z_TestCommon.test_matvecc                 C   s  t g dg dg dg dg}tg dg dg dg dg}t ddgddgddggd}| |}| |}t||  ||  t|| ||  t|| ||  t|| ||  | }|}|| }t||  | t|| | t|| | t|| | | }t||  | t|| | t|| | t|| | | }t||  | t|| | t|| | t|| | d	}	d
}
t	d t
|	df}t|	D ]}tdD ]}t }||
k r||
 |||f< qq| |}||j }t| | |j   t| | | j  | ddgddgg}| ddgddgddgg}tt|j| | jrJtt|j| d S d S )Nr]  r^  r_  r`  r   r   r\   r   r  g333333?r   r;  r3  r   )r.   r   r   r   r{   rC  rD  rE  rx   r[   r   r   r  r   r   r   r   r   )r   rG   Za2rL   aspbspcsprF  ZwantrQ  fracrJ   r:  r  r  rK   r7   r7   r8   test_matmat_sparseT  s^     




z_TestCommon.test_matmat_sparsec                 C   s   g dg dg dg dg}|  |}tddgddgd	d
ggtddgddgd	d
ggg}|D ]"}|| }tt|| jr=tnt| t|j	d t|t
|| q/d S )Nr]  r^  r_  r`  r   r\   r   r;  r3  r   r;  r\   )r   r   r.   r   rC   r   r	   typer   r   r   )r   rG   ru  bsrL   resultr7   r7   r8   test_matmat_dense  s   
4z_TestCommon.test_matmat_densec                 C   s
  t g dg dg dgddgddgg}| }| |}dD ]B}||}t|j| t| | | |d	 |}t|j| t| |d	  | ||}t|j| t| | q d
D ]}||}t|| | |d	 |}t||d	  qed S )Nri  r   r   r;  )r3  r   r   r   r\   r   r   )r   r  r   r   r"  r@   r                @)r   dense)rn   r   r{   r   asformatr   r   r   )r   rJ   rd  r   rG   rL   rF  r7   r7   r8   test_sparse_format_conversions  s&   *



z*_TestCommon.test_sparse_format_conversionsc           	      C   s   t g dg dg dg}t g dg dg}t||}| |}dD ]}t|d| }dD ]}d	D ]}t|||fd
 | q2q.q#d S )NrW  r  r   r   r;  r3  r  r   r   r3  )r   to)r   r\   r   r   )r   r\   r   r;  r   r  	blocksize)r   r   r   ro   r   r{   )	r   r<   r=   rJ   r  r   fnXYr7   r7   r8   
test_tobsr  s   

z_TestCommon.test_tobsrc                    s   j }tg g}||g  fdd}d}tt| ttd t|j td t	t
|jdd jD ]}tt D ]}||| qEq=d S )Nc                    sr   t  | | d}|}| }| }t| | t|  | t|jdd | t|j|j d S )Nr   rc  r  )r   r   r
   r   r{   r   r;   )r;   r  r   r   rG   rL   r  r7   r8   r     s   
z)_TestCommon.test_transpose.<locals>.checkr  r;  r   r   r  )r   rD   r   r   r   r
   r{   r   r  r   r   r   r   r   )r   r  r  r   rs  r;   r  r7   r  r8   test_transpose  s   

z_TestCommon.test_transposec                    r&  )Nc                    sD    j |  } j|  }|| }t|||  || }t|||  d S r:   )r   r   r   r;   r   r   Zsum1Zsum2r   r7   r8   r     s   

z)_TestCommon.test_add_dense.<locals>.checkr+  r   r7   r   r8   test_add_dense  r3  z_TestCommon.test_add_densec                    r4  )Nc                    s    j |  } j|  }|jtkr'|| }t|||  || }t|||  d S || | | }t|||  || | | }t|||  d S r:   )r   r   r;   r   r   r  r   r7   r8   r     s   


z)_TestCommon.test_sub_dense.<locals>.checkr   r9  r   r7   r   r8   test_sub_dense  s   

z_TestCommon.test_sub_densec                    s   t g dg dg dg t g dg dg dgt g dg dg dg fd	d
}jD ]}t jt jt jfD ]}dD ]}|t |t || qDq@q6d S )N)r   r   r   )r   r;  r3  r  )r   r   r\   )r   r   r   rI  )r   y      @       @r3  )r                 ?y             c           
         s6  t | t jr| }n | }|dkr"|d}n$|dkr,|d}n|dkr6|}n|dkrC|}nt t }|t	d |
|}||}W d    n1 sdw   Y  t 
t|t|}tt|| t|j|j t t|t|}	tt||	 t|j|	j d S )Nrk  r   scalar2r   r  rn   zHTaking maximum .minimum. with > 0 .< 0. number results to a dense matrix)rD   rb   complexfloatingr   rj   r{  r   r   r   r'   maximumminimumr{   r   r   r;   )
r;   dtype2btyperJ   rK   r   Zmax_sZmin_sZmax_dZmin_dZA_denseZA_dense_cpxZB_denser   r7   r8   r   	  s2   
z/_TestCommon.test_maximum_minimum.<locals>.check)rk  r  r  rn   )rD   r   r   r   r   r   r;   )r   r   r;   r  r  r7   r  r8   test_maximum_minimum  s   
 z _TestCommon.test_maximum_minimumc                 C   s
  | j }t| j|j t|j|ddj|j t|j|ddj|j t|  |  t|j|dd |  t|j|dd |  t|d|j }t| |u  t|dd|u  t|ddj|j t|dd |  tt| |  d S )NTr  Fr  )	r   r   r   r   	__class__r{   ro   r   rM   )r   rJ   Ztoselfr7   r7   r8   	test_copy.  s   z_TestCommon.test_copyc                 C   sH   |  tddd}| |}t||D ]\}}t| | qd S )Nr5  r3  rN   )r   rD   r   r   r   zipr   r{   )r   rK   rJ   r<   r=   r7   r7   r8   test_iteratorF  s
   
z_TestCommon.test_iteratorc                 C   s  t g }|d}|d}|d}|d}|d}tddg}| |}| |}	| |}
| |}| |}| |}t|| t|| t|	| t|| t||	 t|| t|
| t|| t|
| t|| t||
 t|| t||
 t|| t|| t|| tt	|j| tt	|j| t|
| t
|| t|	
|	 t
|| t|
| t
|| t|
| t
|| t|	
| t
|| t|
| t
|| t|
d t
|d t|	
d t
|d t|
d t
|d tt	|j
| tt	|j
| t|| || t|	|	 || t|| || tt	|j| tt	|	j| d S )Nrp  r  rq  rc  r  r3  r   )r   r   rD   rK  r   r   r   r{   r   r   rD  r   )r   r   rG   rL   rF  r   rG  rH  ru  rv  rw  ZdspZespZfspr7   r7   r8    test_size_zero_matrix_arithmeticM  sN   










z,_TestCommon.test_size_zero_matrix_arithmeticc                 C   s   t g }|d}|d}|d}|||fD ]=}| |}t|  | t|  | t|  | t|  | t|	  | t|
  | qd S )Nrp  rq  r  )r   r   r   r   rE  r{   rD  rC  Ztoliltodoktobsr)r   r   rG   rL   rF  rI  Zspmr7   r7   r8   test_size_zero_conversions  s   



z&_TestCommon.test_size_zero_conversionsc                 C   s   t jg dg dgt jd}ttdd | | W d    n1 s$w   Y  | |t j}ttdd | j|t jd W d    d S 1 sLw   Y  d S )N)g      @r   g?r  r   zdoes not support dtyper  )rD   r   Zfloat16r   r   r   rj   r   )r   rG   ZA32r7   r7   r8   test_dtype_check  s   "z_TestCommon.test_dtype_checkc                    s4   dd l  t }|t | fdd}|  d S )Nr   c                     s   j  } t jD ]]}  j| |d}t| j|j t| 	 |	  t| j
|j
 | j D ]4\}}t|tjrEt||j|  q2t|tr]|r]t|d tjr]t||j|  q2t||j| k q2q
d S )N)protocolr   )r   r   r   HIGHEST_PROTOCOLloadsdumpsr   r   r   r{   r   rA   itemsrC   rD   r	   r  r   )r   r  Zsploadedkeyr  pickler   r7   r8   r     s    
z&_TestCommon.test_pickle.<locals>.check)r  r   r   r'   )r   r   r   r7   r  r8   test_pickle  s   

z_TestCommon.test_picklec                    s"    fdd}dD ]}|| qd S )Nc                    st   | dkr	t d  jjdv rt d tt| } tdddd }||	 }||}t
|	 | d S )	Nsignz2sign conflicts with comparison op support on Numpy)r@   r  z%Unary ops not implemented for dok/lilr  r;  r3        4@)r   r   r   r   ro   rD   r   r   r   r{   r   )rv   Zufuncr  ZX0X2r   r7   r8   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sqrtrQ  r7   )r   r   rv   r7   r   r8   test_unary_ufunc_overrides  s   
z&_TestCommon.test_unary_ufunc_overridesc                 C   sr  t g dg dg dg}| |}t|dd u  t| ddgddgddgg |d	 t| ddgddgg |d t| ddgddgddgg |d
 t| g dg dg dg |d
 t| g dg dg dg |dd t| ddgddgddgg | jr|jdv r|d n
t	t
ttf|jd dD ]	}t	t
|j| qd S )N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  rw  )rD   r   r   r   resizer   r{   r   r   r   r   r  
IndexError)r   rd  r  Z	bad_shaper7   r7   r8   test_resize  sP   





z_TestCommon.test_resizec                 C   sB  | j }|j}|j|dd}t| |  |tvr!tt|| |j||jdd}t| |  |tvr>tt|| |j|t	j
dd}t| |  |j|dd}t| |  tt||  dD ]4}||krqqj||}|j|dd}t| |  |j|dd}t| |  tt||  qjd S )NFr  )r;   r   T)r   r   r  r"  r@   r  )r   r   r  r?   r{   NON_ARRAY_BACKED_FORMATSr   rM   r;   rD   r   r   r  )r   rJ   Zself_formatr   Zother_formatrK   r7   r7   r8   test_constructor1_base  s2   
z"_TestCommon.test_constructor1_baseN)sr   r   r   r   r*   r   r$   r   r!   r   r   r   r   r   r#   r   r    r   r"   r   r   r   classmethodr   r   r   r   r   r  r  r  r	  r  r  r  r1  r?  r@  rJ  rS  rX  r\  r^  re  rh  rv  r~  r  r   markslowr  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/  r1  r2  r:  r;  r?  rG  rR  rV  r\  ra  re  rf  rh  ri  rm  rn  rp  rs  rt  ry  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r7   r7   r7   r8   r   )  s    
%'?>::!/
6	
##




)%
(
7#'
8+:	)r   c                   @   ,   e Zd Zdd Zdd Zdd Zdd Zd	S )
_TestInplaceArithmeticc                 C   s   t d}| |}| }| }||7 }||7 }t|| | }| }||8 }||8 }t|| | jrj| }| }ttdd ||j9 }W d    n1 sUw   Y  || }||9 }t||	  n2| }| }ttdd ||9 }W d    n1 sw   Y  |
|j}||j9 }t|| | }z||j }W n	 ty   Y n3w | }| }ttdd || }W d    n1 sw   Y  |
|j}||j }t|| ttdd || }W d    d S 1 sw   Y  d S )Nr  inconsistent shapesr  zdimension mismatchunsupported operand)rD   rK  r   r   r   r   r   r   r  r{   r   r>  )r   rG   rL   r<   r=   r7   r7   r8   test_inplace_dense	  s\   










"z)_TestInplaceArithmetic.test_inplace_densec                    r&  )Nc                    s    j |  } j|  }tjt| ddr)| }|d9 }| }|d9 }t||  tjt| ddrJ| }|d9 }| }|d9 }t||  d S d S NZ	same_kind)Zcastingr\   r(  	r   r   rD   can_castintr   r   r{   r  r;   r   r   rG   rL   r   r7   r8   r   U	  s   

z6_TestInplaceArithmetic.test_imul_scalar.<locals>.checkr+  r   r7   r   r8   test_imul_scalarT	  s   

z'_TestInplaceArithmetic.test_imul_scalarc                    s6    fdd} j D ]}t|tts|| q	d S )Nc                    s    j |  } j|  }tjt| ddr)| }|d }| }|d }t||  tjt| ddrJ| }|d }| }|d }t||  d S d S r  r  r  r   r7   r8   r   l	  s   

z6_TestInplaceArithmetic.test_idiv_scalar.<locals>.check)r   rD   r  r;   r  r   r7   r   r8   test_idiv_scalark	  s   
z'_TestInplaceArithmetic.test_idiv_scalarc                 C   s   |  td}|  td}|  td}||7 }|| }t| |  | jr=||9 }|| }t| |  || }|| }t| |  ||8 }|| }t| |  ttdd || }W d    d S 1 suw   Y  d S )Nr3  r  r  )r   rD   r%   r   r{   r   r   r>  )r   rG   rL   bpr7   r7   r8   test_inplace_success	  s&   
"z+_TestInplaceArithmetic.test_inplace_successN)r   r   r   r  r  r  r  r7   r7   r7   r8   r  	  s
    8r  c                   @   4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )_TestGetSetc                    (    fdd}t D ]	}|t| qd S )Nc                    s   t g dg dg dg dg| d} |}|j\}}t| |D ]}t| |D ]}t|||f |||f  q*q"tt|d |  dD ]}tttf|j	| qFd S )Nr   r;  r   r   r   r\   r   r  r   rb  r   r   r  )r;  r   r  )r;  r   rw  )
r   r   r   r   r   r{  r   r  r>  __getitem__)r;   rd  rJ   r  r  r:  r  r  r   r7   r8   r   	  s"   

z*_TestGetSet.test_getelement.<locals>.checkr*   rD   r;   r   r7   r   r8   test_getelement	  s   z_TestGetSet.test_getelementc                    r  )Nc                    sN   j d| d}t ?}|td | d|d< | d|d< | d|d	< | d
|d< | d|d< | d|d< | d|d	< W d    n1 sLw   Y  | tjkrft| g dg dg dg dD ]
}t	t
|j|d qhg dtg dfD ]
}t	t|jd| q}t| tjs| tjkrdD ]}t	t|jd| qd S d S d S )Nr  r   r  r   rp  r  r   r\   r   r  r  r  rz  r   r   ry  r   r   r3  )r   r3  r   rz  )r   r   r;  r   )r\   r   ry  r   ))r   r;  )r   r;  rd  r  r  g     ^@rw  )r  )r   r   r   r'   r{  rD   bool_r   r{   r   r  __setitem__r   r   rb   r  r>  )r;   rJ   r   r  r  r   r7   r8   r   	  s<   

	
z*_TestGetSet.test_setelement.<locals>.checkr  r   r7   r   r8   test_setelement	  s   !z_TestGetSet.test_setelementc                    s*    fdd} j D ]	}|t| q	d S )Nc                    sZ    j d| d}t }|td d|d< W d    n1 sw   Y  t|d d d S )N)r   rN   r   r  r   )r   rP  )r   r   r   r'   r   r;   rJ   r   r   r7   r8   r   	  s   
z9_TestGetSet.test_negative_index_assignment.<locals>.checkr9  r   r7   r   r8   test_negative_index_assignment	  s   
z*_TestGetSet.test_negative_index_assignmentc                    s^   d\  fdd}dddt ddfdt dft dt dffD ]
\}}|||d	 q"d S )
Nr3  rN   c                    s   | d|d|}  f}t }|td d|| |f< W d    n1 s+w   Y  t| ||d t|| |f d|d d S )Nz ; r  r   r  )r   r   r   r'   r   r  )r:  r  Znitemsr4   rJ   r   rI  r  r   r7   r8   	_test_set	  s   z3_TestGetSet.test_scalar_assign_2.<locals>._test_setr\   r   r   rz  r  r   r   r   )r   r   r  r:  r  r7   r  r8   test_scalar_assign_2	  s   
z _TestGetSet.test_scalar_assign_2c                 C   s~   |  d}td}t !}|td ||fD ]}d|d< d|d< d|d< qW d    n1 s1w   Y  t| | d S )NrA  r  r   r  r;  rd  r{  r   rD   r   r   r   r'   r   r{   r   rJ   rK   r   r   r7   r7   r8   test_index_scalar_assign	  s   


z$_TestGetSet.test_index_scalar_assignN)r   r   r   r  r  r  r  r  r7   r7   r7   r8   r  	  s    %r  c                   @      e Zd Zdd ZdS )
_TestSolvec                 C   s  d}t jd t||ftd}t j|}t j|d dt j|d   }t j|}tt|D ]
}|| |||f< q4tt|D ]}|| |||d f< t|| ||d |f< qE| 	|}t
 }|td t||}W d    n1 s~w   Y  t|| | d S )Nr  r   r   r   r  r  )rD   rx   r[   r   r   r  r   r   r   r   r   r   r'   r/   Zsolver   )r   r  rJ   r<   r=   r  r:  r   r7   r7   r8   
test_solve
  s&   $
z_TestSolve.test_solveN)r   r   r   r  r7   r7   r7   r8   r  
  s    r  c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	e
jddd Zdd Zdd Zdd Zdd Zdd ZdS )_TestSlicingc                 C   s   t | jdtjddddf jtj t | jdtjddddf jtj t | jdtjddddf jtj t | jdtjddddf jtj d S )Nr   rN   r   r   r   r3  )r   r   rD   r   r;   rQ   r   r   r   r7   r7   r8   test_dtype_preservation
  s   &&&*z$_TestSlicing.test_dtype_preservationc                 C   s   t jt jt jt jfD ]A}| jd|d}t|d d dddf j| t|dddd d f j| t|ddddf j| t|ddddf j| q
d S )Nr  r   r   r\   rD   r   rQ   r   r   r   r   r;   r   dtrJ   r7   r7   r8   #test_dtype_preservation_empty_slice%
  s   z0_TestSlicing.test_dtype_preservation_empty_slicec           
      C   s  |  tddd}| |}| jrdndgdgdgf\}}}t||d d f |dd d f   t||ddf |dddf   |  g dg d	g d
g dg}| |}t||ddf |dddf   |  g dg dg d
g dg}| |}	t||ddf |	dddf   t||dd f |	ddd f   tt|j	t
d df tt|j	dt
ddf d S )N      I@r3  rN   r  r   r   r\   r   r\   r   r;  r   r   r  rj  r   r;  r   r   r      r   ry  )r   r   r   r   r   r   r{   r   r  r  slice)
r   rK   rJ   Zr0r1r2r   rd  rL  r  r7   r7   r8   test_get_horiz_slice/
  s   
 &&"
&"
&&z!_TestSlicing.test_get_horiz_slicec           
      C   s  t ddd}| |}| jrdndgdgdgf\}}}t|dd|f |dddf   t|d d |f |d d df   tg dg d	g d
g dg}| |}t|dd|f |dddf   t|d d |f |d d df   tg dg dg d
g dg}| |}	t|d d |f |	d d df   t|dd |f |	dd df   tt|j	t
d df tt|j	dt
ddf d S )Nr  r3  rN   r  r   r   r\   r  r  r  rj  r   r  r  r   r  r   ry  )r   r   r   r   r   r{   r   r   r  r  r	  )
r   rK   rJ   Zc0c1c2r   rd  rL  r  r7   r7   r8   test_get_vert_sliceD
  s   
 && 
&& 
&&z _TestSlicing.test_get_vert_slicec                 C   s.  t ddd}| |}t|ddddf  |ddddf  t|dd d df  |dd d df  t|d ddd f  |d ddd f  tg d	g d
g dg dg}| |}t|ddddf |ddddf   t|d d dd f |d d dd f   d S )Nr  r3  rN   r\   r   r   r   r   r  r  r  rj  )r   r   r   r   r{   r   )r   rK   rJ   rL  r  r7   r7   r8   test_get_slicesZ
  s   
... 
.2z_TestSlicing.test_get_slicesc                 C   sp   t jdd}z| |ddddddf }W n ty$   tdw t| |ddddddf  d S )Nr5  r      r\   r  r   feature not implemented)	rD   rx   r  r   r   r   r   r   r{   )r   Zv0r  r7   r7   r8    test_non_unit_stride_2d_indexingg
  s   "
&z-_TestSlicing.test_non_unit_stride_2d_indexingc                 C   s  |  tddd}| |}t|d |d  t|d |d  t|d |d  t|tddf |d  t|dtdf |d  t|tdtdf |d  t|d	d d f  |d	d d f  t|d	ddf  |d	ddf  t|td	ddf  |d	ddf  t|d d d	f  |d d d	f  t|d
ddf  |d
ddf  t|dddf  |dddf  t|d	dd
f  |d	dd
f  t|d	dtd
f  |d	dd
f  t|dd	dd	f  |dd	dd	f  t|dd d
d f  |dd d
d f  t|d dd df  |d dd df  t|d	dd df  |d	dd df  t|dd d f  |dd d f  t|dd d f  |dd d f  t|tdd d f  |dd d f  t|dd  |dd  t|dd  |dd  ttd	tdd }t||d d f  |d	dd d f  t|d d |f  |d d d	df  d S )Nr5  r3  rN   r  r  r  r   r   r\   r   r;  r{  r   rN  )	r   r   r   r   r   r   r{   r	  r   )r   rK   rJ   r  r7   r7   r8   test_slicing_2r
  s8   
&&*&&&&*....&&**.z_TestSlicing.test_slicing_2r\   c                    s  |  tddd|  tj}|d d |dd |dd  |dd d |dd |dd |d	dd
 |dd d |d dd
 dd|d d  |dd d
ddtd
tdg} fdd}t|D ]\}}|| qg fdd}t|D ]\}}t|D ]	\}}||| qq{g }	t	j
dgd  D ]\}}}
|
dkrq|	t|||
 q|	D ]}||| ||d |d| qd S )Nr5  r3  rN   r\   r   r   r4  r  rz  r   r;  r   r   rN  rY  c                    s^    |  }|  }|j dkrt||t|  d S |jdkr#|jdkr#d S t| |t|  d S Nr7   r   )r   r   r-  ra   r   r{   )rG   r<   r=   rJ   rK   r7   r8   check_1
  s   
z,_TestSlicing.test_slicing_3.<locals>.check_1c                    s   t | tjrt| }n| }t |tjrt|}n|} | |f }||f }|jdkr7t||t| |f d S |jdkrC|jdkrCd S t|	 |t| |f d S r  )
rC   rD   r	   r  r   r   r-  ra   r   r{   )rG   rL   ZaiZbir<   r=   r  r7   r8   check_2
  s   


z,_TestSlicing.test_slicing_3.<locals>.check_2)
Nr   r   r\   r3  r4  r   r   r3  i)r   r   r   r   rD   s_r   r   	enumerate	itertoolsproductrE   r	  )r   r  slicesr  r  rG   r  r:  rL   Zextra_slicesrF  r7   r  r8   test_slicing_3
  s:   
*$


z_TestSlicing.test_slicing_3c                 C   sP  |  tddd}| |}|d jdksJ |d dddf jdks'J |d	 jd
ks0J |d jdks9J |d jdksBJ |d dd d f jdksPJ |dd d d f jdks^J |dd d d f jdkslJ |d dddf j|d dddf j  krdksJ  J |ddd df j|ddd df j  krdksJ  J |dddd f j|dddd f j  krdksJ  J |d dddf j|d dddf j  krdksJ  J |dd ddf j|dd ddf j  krdksJ  J |dddd f j|dddd f j  kr!dks$J  J | jr|dddf j|dddf j  krCdksFJ  J |dddf j|dddf j  kradksdJ  J |d j|d j  krwdkszJ  J |d j|d j  krdksJ  J |d j|d j  krdksJ  J d S |dddf j|dddf j  krdksJ  J |dddf j|dddf j  krdksJ  J |d j|d j  krd
ksJ  J |d j|d j  krd
ksJ  J |d j|d j  kr#d
ks&J  J d S )Nr5  r3  rN   r  r   r   r\   r;  )Nr   r\   Nrb  )Nr   r  )r   N)rN   r   r   r\   r   )r\   )Nr   r\   )r   )r   Nr\   )r   r\   N)r   r   r   r   r   r   r   )r   rK   rJ   r7   r7   r8   test_None_slicing
  s6   
<<<<@@<<,,0<<,,0z_TestSlicing.test_None_slicingc                 C   s  |  tddd}| |}t|d  |d  t|d  |d  t|d  |d  t|d  |d  t|d  |d  tjtd	d
 |d  W d    n1 s]w   Y  tjtdd
 |d  W d    n1 sxw   Y  tjtd	d
 |j	d  W d    n1 sw   Y  t|dd df  |dd df  t|ddd f  |ddd f  t|d ddf  |d ddf  t|dd df  |dd df  t|d ddf  |d ddf  t|dd df  |dd df  t|dd df  |dd df  t|ddd f  |ddd f  t|dd df  |dd df  t|ddd f  |ddd f  t|dd ddf  |dd ddf  t|dddd f  |dddd f  t|dddd f  |dddd f  t|d dddf  |d dddf  t|ddd df  |ddd df  t|ddd df  |ddd df  t
|d |d  t
|d |d  d S )Nr5  r3  rN   .).)r;  .).r;  ).r3  zindex .5. out of ranger  )r3  .zindex .10. out of range).rN   r   r\   )r   r   .)r   .r   )r   r   r   r   r   r{   r   r   r  r  r   r   rL   rG   r7   r7   r8   test_ellipsis_slicing  sD   


&&&&&&&&&&******z"_TestSlicing.test_ellipsis_slicingc                 C   sd  |  tddd}| |}g d}dgd | }|| }|gd }tt||df ||df  tt|d|f |d|f  tt||df ||df  tt|d|f |d|f  tt||d|f ||d|f  tt|d||f |d||f  tt|||df |||df  ttdd |||f  W d    d S 1 sw   Y  d S )	Nr5  r3  rN   )TFTFTF.zshape mismatchr  )r   r   r   r   r   r{   r   r   )r   Znumpy_arG   Zix5Zix10Z
ix10_6TrueZfull_ixr7   r7   r8   test_ellipsis_fancy_bool/  s    

""""z%_TestSlicing.test_ellipsis_fancy_boolc                 C   s  |  tddd}| |}t|dgdf  |dgdf  t|ddgdf  |ddgdf  t|ddgf  |ddgf  t|dddgf  |dddgf  t|dgddf  |dgddf  t|ddgddf  |ddgddf  t|dgddf  |dgddf  t|ddgdf  |ddgdf  tt|ddgdddgf |ddgdddgf  tt|dddgddgf |dddgddgf  d S )Nr5  r3  rN   r;  .r\   r   )r   r   r   r   r   r{   r!  r7   r7   r8   test_ellipsis_fancy_slicingE  s   
"&"&&*&&26z(_TestSlicing.test_ellipsis_fancy_slicingc                 C   s   |  tddd}tjtdd |d  W d    n1 s!w   Y  tjtdd |d  W d    d S 1 s=w   Y  d S )Nr   r   r\   z(an index can only have a single ellipsisr  )..).r   .)r   r   r   r   r   r  r   rG   r7   r7   r8   test_multiple_ellipsis_slicingV  s   

"z+_TestSlicing.test_multiple_ellipsis_slicingN)r   r   r   r  r  r  r  r  r  r  r   r  	fail_slowr  r   r"  r#  r$  r&  r7   r7   r7   r8   r  
  s    

-
B$)r  c                   @   r|   )_TestSlicingAssignc                 C   s   |  d}td}t @}|td ||fD ]-}d|dddf< d|dddf< d|dddf< d|ddd f< d|dd ddd f< qW d    n1 sPw   Y  t| | d S )	NrA  r  r   r   r;  r   r{  r   r  r  r7   r7   r8   test_slice_scalar_assignb  s   

z+_TestSlicingAssign.test_slice_scalar_assignc                    sh   d\  fdd}dt dfdt d ddfdt dd	ftdt dd	ffD ]	\}}||| q(d S )
Nr  c                    s   d| d|}  f}t }|td d|| |f< W d    n1 s)w   Y  t f}d|| |f< t| ||d d S )Nzi=z; j=r  r   r  )r   r   r   r'   rD   r   r   r{   )r:  r  r4   rJ   r   rK   r  r7   r8   r  r  s   z9_TestSlicingAssign.test_slice_assign_2.<locals>._test_setr\   r   rN   r;  r3  r   )r	  r   r  r7   r  r8   test_slice_assign_2o  s   $
z&_TestSlicingAssign.test_slice_assign_2c                 C   sL  |  d}t }|td d|d< d|d< d|d< d	|d
< |d	 }|dd d f |dd d f< t|dd d f  |dd d f   |d	 }|d dd df |d d d d f< ttd|d  |  |d	 }|d dd d f j|d ddf< t|dd d f  j|d ddf   W d    d S 1 sw   Y  d S )Nr  r  r\   rp  ry  r  r   r  rN   rd  r   r   r   )	r   r   r   r'   r   r{   rD   r   r  )r   rK   r   rJ   r7   r7   r8   test_self_self_assignment  s"   
*$ ."z,_TestSlicingAssign.test_self_self_assignmentc                 C   s   |  d}tg dg dg dg dg}ddgddgg}t L}|td	 d
|d< d|d< d|d< || |d d d d f< t| | | t||d dd df< t| d dd df | W d    d S 1 sow   Y  d S )Nr  rN   r   r   )r   r   r   )r   r8  r   r  r   r   r;  r  r3  rp  r   r  ry  r  r\   )r   r   r   r   r'   r   r{   r   )r   rK   r  blockr   r7   r7   r8   test_slice_assignment  s"   
 "z(_TestSlicingAssign.test_slice_assignmentc                 C   s   |  d}t *}|td d|d< d|d< d|d< d	|d
< | td|d d< W d    n1 s5w   Y  tg dg dg dg dg}t|	 | d S )Nr  r  r3  rp  r   r  ry  r  rN   rd  r   r^  rj  r,  )
r   r   r   r'   r   rD   r%   r   r   r{   )r   rK   r   r  r7   r7   r8   "test_sparsity_modifying_assignment  s   
 z5_TestSlicingAssign.test_sparsity_modifying_assignmentc           
      C   s$  |  d}ttdt}tj}|d d |dd |dd  |dd d |ddd |dd d |d d	d d
d|d d  |dd	 dddtdtdg}t }|t	d t
|D ]\}}|||< |||< t| |t| q\t
|D ]5\}}t
|D ],\}}	d| d|d   |||	f< d| d|d   |||	f< t| |t||	f qqwtddd|d
dddf< tddd|d
dddf< t| | tdd	dd d d f |dd	dd
f< tdd	dd d  |dd	dd
f< t| | W d    n	1 sw   Y  tt|jdttd tt|jdtd tt|jd
td fttd tt|jtd dfttd tt|jtd df|  tt|jg dg dgg dfg d tt|jg dg dg dgg dg dgfg d tt|jtdd
fddgddgg d S )Nr  r\   r   r   rz  r   r;  r   r3  r   rN  rY  r  rN     rp  d   rw  r  rl  )r;  r   r   r   r\   r;  )r   r   r   rZ  )r   r   r   r  rD   r  r   r   r   r'   r  r   r{   r-  r   r   r   r   r  listr	  r   )
r   rJ   rK   r  r  r   r  rG   r:  rL   r7   r7   r8   test_set_slice  s`   
*$($

z!_TestSlicingAssign.test_set_slicec                 C   sH   |  td}|  d}||dd df< t| g dg dg d S )Nr  r  r   r\   r   r   r   rj  )r   rD   rK  r   r{   rg  r7   r7   r8   test_assign_empty  s   
z$_TestSlicingAssign.test_assign_emptyc                 C   s^   |  td}td}||d d df< ||dd d f< t| g dg dg dg d S )Nr
  r   r   r   r  r  )r   rD   rK  r   r   r{   r   rJ   r<   r7   r7   r8   test_assign_1d_slice  s
   
$z'_TestSlicingAssign.test_assign_1d_sliceN)r   r   r   r)  r*  r+  r.  r/  r4  r6  r8  r7   r7   r7   r8   r(  a  s    -r(  c                   @   sh   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd ZdS )_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|g dd d f j| t|d d g f j| t|g d d f j| q
d S )Nr  r   F)FFFr   r  r7   r7   r8   #test_dtype_preservation_empty_index  s   z6_TestFancyIndexing.test_dtype_preservation_empty_indexc                 C   s^   |  tddg}ttttf|jd ttttf|jd tttf|jg dg df d S )Nr3  foor\   r;  rw  rl  )r   rD   r   r   r  r   r>  r  rR  r7   r7   r8   test_bad_index   s   z!_TestFancyIndexing.test_bad_indexc                 C   sd
  |  tddd}| |}t|dg  |dg  t|ddg  |ddg  t|ddgf  |ddgf  t|dddgf  |dddgf  t|dddgf  |dddgf  t|tdddgf  |dddgf  t|dtddgf  |dddgf  t|tdtddgf  |dddgf  t|d d g d	f  |d d g d	f  t|dd
dgf  |dd
dgf  t|dd
ddgf  |dd
ddgf  t|dd
tddgf  |dd
ddgf  t|dgdf  |dgdf  t|ddgdf  |ddgdf  t|ddgdf  |ddgdf  t|tddgdf  |ddgdf  t|ddgtdf  |ddgdf  t|tddgtdf  |ddgdf  t|dgd d f  |dgd d f  t|ddgd d f  |ddgd d f  t|ddgddf  |ddgddf  t|tddgddf  |ddgddf  tt|dgd
gf |dgd
gf  tt|ddgdd
gf |ddgdd
gf  tt|ddgddgf |ddgddgf  tt|tddgddgf |ddgddgf  tt|ddgtddgf |ddgddgf  tt|tddgtddgf |ddgddgf  t|dgdggdd
gf  |dgdggdd
gf  t|dgdgdggddgf  |dgdgdggddgf  t|tdgdgdggddgf  |dgdgdggddgf  t|dgdgdggtddgf  |dgdgdggddgf  t|tdgdgdggtddgf  |dgdgdggddgf  t|ddg  |ddg  t|ddg  |ddg  t|tddg  |ddg  t|dgd d f d d d
gf  |dgd d f d d d
gf  t|ddgd d f d d dd
gf  |ddgd d f d d dd
gf  t|ddgd d f d d ddgf  |ddgd d f d d ddgf  t|tddgd d f d d tddgf  |ddgd d f d d ddgf  t|dddggf ddggdf  |dddggf ddggdf  t|dddggf ddggdf  |dddggf ddggdf  tjt	dd |d dddggf  W d    n	1 s0w   Y  tjt	dd |ddggd df  W d    n	1 sSw   Y  t|d d ddgf dd
gd d f  |d d ddgf dd
gd d f  t|d d ddgf ddgd d f  |d d ddgf ddgd d f  t|d d tddgf tddgd d f  |d d ddgf ddgd d f  t
tdtd
d }t||d d f  |dd
d d f  t|d d |f  |d d dd
f  tjdggtd}t|||f  |||f  t|g gg gf  |g gg gf  d S )Nr5  r3  rN   r   r   r   r\   rN  )r\   rz  r   r   r;  r{  rP  rz  rY  r   r   zOnly 1D or 2D arrays allowedr  r   )r   r   r   r   r   r{   r   r   r   r  r	  r   rD   r  )r   rK   rJ   r  r:  r7   r7   r8   test_fancy_indexing  s   
"&&**..*.2"&&**.*..2&..,,06""&"FHH."@@HH."***z&_TestFancyIndexing.test_fancy_indexingc                 C   s   t jd d}d}d}| t j||}t ||dk}t jj| d ||d}t jj| d ||d}| |}|||f }t|rI|	 }t
||||f  || }	|| }
tt|j|	|f tt|j||
f d S )NrZ   r5  r   r;  rS  r   r  )rD   rx   r[   r   r  rD  r^   r   r&   r{   r   r   r  r  )r   ZNUM_SAMPLESr  r  rd  IrO  r  SIJI_badJ_badr7   r7   r8   test_fancy_indexing_randomized  s"   
z1_TestFancyIndexing.test_fancy_indexing_randomizedc              	   C   s   d\}}|  t|| ||}| |}tj|d td}tj|d td}tj|d td}tj|d td}d}	t||t	d f||t	d fD ],\}
}t
|
t	r[t
|t	r[qLtjt|	d ||
|f }W d    n1 ssw   Y  qLd S )Nr  r   r   r\   z(bool index .* has shape .* instead of .*r  )r   r   r   r   rD   rK  r   r  r  r	  rC   r   r   r  )r   r  r  rK   rJ   Zrow_longZ	row_shortZcol_longZ	col_shortr  r:  r  r   r7   r7   r8   test_missized_masking  s&   
z(_TestFancyIndexing.test_missized_maskingc           	      C   s  t jd | tddd}| |}t jt jjddddt	d}t jt jjddddt	d}t jt jjddd	dt	d}t
t|| ||  t
t|d d |f |d d |f  t
t|| ||  t
t||d
k ||d
k  t g d}t g d}t
t|||f |||f  t jdt	d}t jdt	d}d|d< t jdt	d}d|d< tt|j| tt|j| tt|j| tttf|j|df d S )NrZ   r5  r3  rN   r   r\   r  r   r  r{  )TFTTF)
FTTFTFFFFF)r   r  Tr  )r   r   r   )rD   rx   r[   r   r   r   r   r   r^   r   r   r{   r   r   r  r  r   )	r   rK   rJ   r?  rO  r  ZZ1ZZ2ZZ3r7   r7   r8   test_fancy_indexing_boolean  s,   
&z._TestFancyIndexing.test_fancy_indexing_booleanc           	      C   s  t jd | tddd}| |}t jt jjddddt	d	}| 
|}tt|| ||  tt||d
k ||d
k  t jt jjddddt	d	}t jt jjddddt	d	}| 
|}| 
|}tt|j| tt|j| tttf|j|df d S )NrZ   r5  r3  rN   r   r\   r  r  r   r{  )r3  r  )r   rN   r   )rD   rx   r[   r   r   r   r   r   r^   r   r   r   r{   r   r  r  r   )	r   rK   rJ   r  ZXspZr  ZZspZYspr7   r7   r8   "test_fancy_indexing_sparse_boolean  s   



z5_TestFancyIndexing.test_fancy_indexing_sparse_booleanc                 C   sd   |  tg dg dg dg}t|ddk}t|d d |f  ddgddgddgg d S )Nr   r^  r   r   )r   r   rD   ravelr  r   r{   )r   r   Zdesired_colsr7   r7   r8   #test_fancy_indexing_regression_3087  s    0z6_TestFancyIndexing.test_fancy_indexing_regression_3087c                 C   s8   |  tddgddgg}tt|jdtddg d S )Nr   r   rp  r\   )r   r   r   r   r  rD   r   r7   r7   r8   test_fancy_indexing_seq_assign  s   z1_TestFancyIndexing.test_fancy_indexing_seq_assignc                 C   s   |  tddgddgg}t  }|td |ddgddgf |ddgddgf< W d    n1 s3w   Y  tt|tddgddgg d S )Nr   r   r\   r   r  )r   r   r   r   r'   r   r{   )r   r   r   r7   r7   r8   test_fancy_indexing_2d_assign  s   &"z0_TestFancyIndexing.test_fancy_indexing_2d_assignc                 C   s  |  tddd}d|dd d f< d|d d df< d|d< | |}tg d}tt|| ||  tjg td	}tt|| ||  tt|||f |||f  tjg d
td	d d d f }tt|||f |||f  tt|||f |||f  d S )Nr5  r3  rN   r   r   r\   r   r   FFFFFr   r   r   r\   r   r;  	r   r   r   r   rD   r   r   r{   r  r   rK   rJ   rP  rO  r7   r7   r8   test_fancy_indexing_empty  s   
"z,_TestFancyIndexing.test_fancy_indexing_emptyN)r   r   r   r   r:  r=  r>  rC  rD  rE  rG  rI  rJ  rK  rQ  r7   r7   r7   r8   r9    s    
} r9  c                 c   sL    t | dr	| jsdV  dS dV  | j }d| _|   t|| jd dS )zIChecks that sorted indices property is retained through an operation
    has_sorted_indicesNFz'Expected sorted indices, found unsorted)r$  rR  r  r   sort_indicesr   )r  r  r7   r7   r8   check_remains_sorted  s   
rT  c                   @   r  )_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 )Nr3  r;  r\   r<  )r   rD   r   r   r  r   r>  r  rR  r7   r7   r8   test_bad_index_assign  s   z._TestFancyIndexingAssign.test_bad_index_assignc                    s   d\  fdd}dt d ddftdt dd	ft d
dt dd	ffD ]	\}}||| q'tdtdfdfD ]	\}}||| q=d S )Nr  c              	      s     f}t f}t .}|td d|| |f< t| d|| |f< W d    n1 s6w   Y  W d    n1 sEw   Y  t|	 | d S Nr  r   )
r   r   rD   r   r   r   r'   rT  r   r{   )r:  r  rJ   rK   r   r  r7   r8   _test_set_slice%  s   
zI_TestFancyIndexingAssign.test_fancy_indexing_set.<locals>._test_set_slicerZ  rN   r;  r   r3  r   r\   )r  r2  )r	  rD   r   r   rX  r:  r  r7   r  r8   test_fancy_indexing_set"  s   
 z0_TestFancyIndexingAssign.test_fancy_indexing_setc                    r  )Nc                    s    j d| d}t Y}|td | d|ddgddgf< t| | dd  | d|ddddf< t| | dd  | d|d	< t| | dd | d  W d    d S 1 sfw   Y  d S )
NrA  r   r  r   r   r\   r  r;  r  )r   r   r   r'   r{  r   r  r  r   r7   r8   r   7  s   $"zD_TestFancyIndexingAssign.test_fancy_assignment_dtypes.<locals>.checkr  r   r7   r   r8   test_fancy_assignment_dtypes6  s   z5_TestFancyIndexingAssign.test_fancy_assignment_dtypesc              	   C   s  |  d}|  tdd}g d}d}t|}t *}|td t|) ||df j|d|f< ||df j|d|f< ||df j|d|f< W d    n1 sRw   Y  t|	 |j	  |  d	}t| d
dg|dddf< W d    n1 sw   Y  t|	 g dg dg |  d}t| d
gdgg|dddf< W d    n1 sw   Y  t|	 ddgdd
gddgg |  d}| 
td}t| ||fD ]}g d|g dg df< qW d    n1 sw   Y  t|	 | |  d}t| g d|d< W d    n	1 sw   Y  t| d | 
td}g d|d< t|	 | W d    d S 1 sIw   Y  d S )Nr  r   r;  r  r  r   r   r\   r  rN   r  r  )r   rN   r  r  r
  rx  rw  )rw  r  r   )r   r%   r   r   r   r'   rT  r  r   r{   r   rD   r   r   r  )r   rJ   rK   Zi0i1i2r   r   r7   r7   r8   test_sequence_assignmentE  sP   






 



$z1_TestFancyIndexingAssign.test_sequence_assignmentc                 C   s   |  tddd}d|dd d f< d|d d df< d|d< | |}tg d}d	||< tt|| tjg td
}d	||< tt|| d	|||f< tt|| tjg dtd
d d d f }d	|||f< tt|| d	|||f< tt|| d S )Nr5  r3  rN   r   r   r\   rL  rM  *   r   rN  rO  rP  r7   r7   r8   test_fancy_assign_emptyr  s$   
z0_TestFancyIndexingAssign.test_fancy_assign_emptyN)r   r   r   rV  rZ  r[  r^  r`  r7   r7   r7   r8   rU    s    -rU  c                   @   r  )_TestFancyMultidimc           	   
   C   s  t dgdgdggt g dft dgdgdggt g dgft g dgt dgdgdggft g dt dgdgdggft g dg dgt g dg dgfg}|D ]d\}}t jd	 | t jd
d}| |}|||f }t|r| }t	||||f  |d
 }|d }t
t|j||f t
t|j||f t
t|j||gtd f t
t|jtd ||gf q_d S )Nr   r\   r   r   r;  r\   rw  r;  r3  r   r   r\   r   r   rZ   r3  ry  )rD   r   rx   r[   r   r  r   r&   r{   r   r   r  r  r	  )	r   Zsetsr?  rO  rd  r  r@  rA  rB  r7   r7   r8   test_fancy_indexing_ndarray  s.   "$$"
z._TestFancyMultidim.test_fancy_indexing_ndarrayN)r   r   r   re  r7   r7   r7   r8   ra        ra  c                   @   r  )
_TestFancyMultidimAssignc           	      C   s  t jd | t jdd}| |}t jdd}t g dg dg}t g dg d	g}t| ||||f< W d    n1 sGw   Y  ||||f< t|	 | |d }|d }g d}t| ||||f< W d    n1 szw   Y  ||||f< t|	 | t| d|||f< W d    n1 sw   Y  d|||f< t|	 | t
t|j||f| t
t|j||f| d S )
NrZ   r3  ry  r\   r   rw  rb  rc  rd  )rD   rx   r[   r   r  r   r   rT  r   r{   r   r  r  	r   rd  r  r  r?  rO  rA  rB  r   r7   r7   r8   test_fancy_assign_ndarray  s4   



z2_TestFancyMultidimAssign.test_fancy_assign_ndarrayc                    s   d\  fdd}t ddgddggddgft ddgddgddggfg d	g d
gg dg dgffD ]	\}}||| q9d S )Nr  c              	      s     f}t|' t }|td d|| |f< W d    n1 s&w   Y  W d    n1 s5w   Y  t f}d|| |f< t|	 | d S rW  )
r   rT  r   r   r'   r   rD   r   r   r{   )r:  r  rJ   r   rK   r  r7   r8   rX    s    zR_TestFancyMultidimAssign.test_fancy_indexing_multidim_set.<locals>._test_set_slicer   r\   r   r   r;  rw  r   r\   r;  )r   r;  r   )r;  r   r\   )rD   r   rY  r7   r  r8    test_fancy_indexing_multidim_set  s   	z9_TestFancyMultidimAssign.test_fancy_indexing_multidim_setc           	      C   s  t jd | t jdd}| |}t jdd}g dg dg}g dg d	g}||||f< ||||f< t| | d
d |D }dd |D }g d}||||f< ||||f< t| | d|||f< d|||f< t| | tt	|j
||f| tt	|j
||f| d S )NrZ   r3  ry  r\   r   rw  rb  rc  rd  c                 S      g | ]	}d d |D qS )c                 S      g | ]}|d  qS r3  r7   r  iir7   r7   r8   r>    r  N_TestFancyMultidimAssign.test_fancy_assign_list.<locals>.<listcomp>.<listcomp>r7   )r  r:  r7   r7   r8   r>        zC_TestFancyMultidimAssign.test_fancy_assign_list.<locals>.<listcomp>c                 S   rl  )c                 S   rm  ry  r7   r  Zjjr7   r7   r8   r>    r  rq  r7   )r  r  r7   r7   r8   r>    rr  )rD   rx   r[   r   r  r   r   r{   r   r  r  rh  r7   r7   r8   test_fancy_assign_list  s(   
z/_TestFancyMultidimAssign.test_fancy_assign_listc           	      C   s   t jd | t jdd}| |}g d}g d}dd |D }dd |D }g d	}t dd d d f }tt|j	|t
d f| tt|j	t
d |f| d S )
NrZ   r3  ry  )r   r\   r   r   r;  r\   )r3  r   r   r\   r   r   c                 S   rm  rn  r7   ro  r7   r7   r8   r>    r  zD_TestFancyMultidimAssign.test_fancy_assign_slice.<locals>.<listcomp>c                 S   rm  rs  r7   rt  r7   r7   r8   r>    r  )r   r\   r   r;  r3  r   ry  )rD   rx   r[   r   r  r   r   r   r  r  r	  )	r   rd  r  r?  rO  rA  rB  ZC1ZC2r7   r7   r8   test_fancy_assign_slice  s   
z0_TestFancyMultidimAssign.test_fancy_assign_sliceN)r   r   r   ri  rk  ru  rv  r7   r7   r7   r8   rg    s
    !rg  c                   @   s4   e Zd ZdZdd Zejddd Zdd Z	d	S )
_TestArithmeticz&
    Test real/complex arithmetic
    c                 C   s   t g dg dg dg dgd}t g dg dg dg d	gd
}t g dg dg dg dgd|_t|d dd|  t|jd dd|j  t|jd dd|j  | |}| |}||||fS )N)g      g      @r         @r   r   )g      	@g     g      ?r   r   r   )r   r         r  r   r   )r   r   g      @r   r   r   r   )g      ?r   r   r   rN  g      @)g     ,@g      r   r   ry  r   )r   g      @r   r   r   r   )g     2@      r   r   r   r   r   )g      ?r   r   r   r   g      )rx       @r   r   r   g      @)r   r{  r   r   r   r   )rz  r   r   r   r   r      rQ   )r   rg  r   rj   rb  r   )r   _TestArithmetic__A_TestArithmetic__B_TestArithmetic__Asp_TestArithmetic__Bspr7   r7   r8   Z__arith_init  s6   

z_TestArithmetic.__arith_initr  c              
   C   s~  |   \}}}}t||  ||  tD ]}tjdd ||}W d    n1 s-w   Y  | |}tD ]}t|tj	s_tjdd |j
|}	W d    n1 sYw   Y  n||}	| |	}
||	 }||
 }t|j|j t| | t||	 | t||
 | td||fv rq9||	 }||
 }t|j|j t| | t||	 | t||
 | q9qd S )Nr   r   r   )_TestArithmetic__arith_initr   r{   r*   rD   r   rj   r   rb   r  rb  r   r;   r   r}  r~  r  r  r<   rJ   r  r=   rK   rE  D1ZS1r7   r7   r8   test_add_sub+  sB   


z_TestArithmetic.test_add_subc              
   C   s  |   \}}}}t||j  ||j  tD ]u}tjdd ||}W d    n1 s/w   Y  | |}tD ]P}t	|tj
rJ||}	ntjdd |j|}	W d    n1 saw   Y  | |	}
||	j }||
j }t| |dt|  d t|j|j q;qd S )Nr   r   g+=)Zatol)r  r   r  r{   r*   rD   r   rj   r   rb   r  rb  r   rQ  rP   r   r;   r  r7   r7   r8   test_muW  s0   




z_TestArithmetic.test_muN)
r   r   r   r   r  r   r  r'  r  r  r7   r7   r7   r8   rw    s    

+rw  c                   @   r   )_TestMinMaxc                 C   s  t jt jt jt jt jfD ]^}t jd|ddd}| |}t	|
 d t	| d t	|
 j| t	| j| |d9 }| |}t	|
 d t	| d |d7 }| |}t	|
 d	 t	| d q| t d
ddd}t	|
 d
 t	|
 j|j | }t	| d | t d}t	|
 d t	| d t	| j|j t jdtddd}d|ddd d f< | |}t	|
 d t	| d t dt dt dfD ]}| |}tt|j
 tt|j qd S )Nr  r   r3  r;  r      r   iir   rN   r   rb  r\   rp  r   rN   rN   r   )rD   r   r   rQ   r]   r   r   r   r   r   rd   rP   r;   r   r  r   r   )r   r;   rd  r  rF  r7   r7   r8   test_minmaxs  sD   



 
z_TestMinMax.test_minmaxc                 C   s  | j  }tddd}d|dd d f< d|d d df< d|d< d|d	< | |}dd
g}ddg}|| D ]"}t|j|d |j||d t|j|d |j||d q6|D ]6}t	|j|dd | 
g d t|jdkr~| 
g d}n| 
g d}t	|j|dd | q[|D ]5}tg d}tg d}	| j s|d}|	d}	t	|j|dd | t	|j|dd |	 qtdddd}| |}|| D ]"}t|j|d |j||d t|j|d |j||d q|D ]A}|dd d f }|dd d f }	| j s*|d dd d f }|d dd d f }	t	|j|dd | t	|j|dd |	 q|D ]A}|d d df }|d d df }	| j sn|d d dd f }|d d dd f }	t	|j|dd | t	|j|dd |	 qF| 
td}| |}|| D ]#}t	|j|dd |j|d t	|j|dd |j|d q| 
td}| |}ddg}
tt||
}tt||
}|D ]\}}tt|j||d tt|j||d q|D ]%\}}t	|j||d |j|d t	|j||d |j|d q| 
td}| |}|D ]\}}tt|j||d tt|j||d q/|D ]%\}}t	|j||d |j|d t	|j||d |j|d qId S )Nr5  r3  rN   r   r   r{  r
  r   r  r   r  r  Tr  Zexplicit)
ro  )   r_  +   ,   -   .   /   0   r   )
r  r   r   r   r;  r3  r   ry  rz  r   )
r  r   r   r   r;  r3  r   ry  rz  r   )rz  r      &   r  )r   r   r   r  ro  r  3   )rN   r3  r  Fr  )r   rD   r   r   r   r   rP   r{   rd   r   r   anyr  r   r   r3  r  r  r   r   )r   r  rd  r  Z	axes_evenZaxes_oddr  r  expected_maxexpected_minZexplicit_valuesZeven_explicit_pairsZodd_explicit_pairsexr7   r7   r8   test_minmax_axis  s   




 $
 $
 $z_TestMinMax.test_minmax_axisc           	      C   s8  | j tdddtd}d|dd d f< d|d d df< d|d< d	|d
< tj|d< tj|d< | |}| }t|s@J |t|ksIJ |	 }t|sTJ |t	|ks]J g d}|D ]6}|j|d}t
| tj||d t|| jsJ |j	|d}t
| tj	||d t|| jsJ qcd S )Nr5  r3  rN   r   r   r   r{  r
  r   r  rz  )r   r;  )r   r   r   r   r  )r   rD   r   r   r  r   r   Znanmaxr  Znanminr   r{   rC   r   )	r   rd  r  ZX_nan_maximumZX_nan_minimumr  r  ZX_nan_maximaZX_nan_minimar7   r7   r8   test_nanminmax  s.   


z_TestMinMax.test_nanminmaxc                 C   sv   t g dg dg dg}| |}dD ]$}t||}tt|dd tt|dd tt|dd tt|d	d	d
 qd S )Nr  r  r  )rd   rP   r   r  r  r  r   r  )r   r   ro   r   r   r>  )r   r   r   fnamerq   r7   r7   r8   test_minmax_invalid_params#  s   

z&_TestMinMax.test_minmax_invalid_paramsc                 C   sp   ddl m} tg dg dg dg}| |}t||jr6tt|t| tt	|t	| d S d S )Nr   _datar  r  r  )
scipy.sparser  r   r   rC   _minmax_mixinr   rD   rd   rP   )r   r  r   r   r7   r7   r8   test_numpy_minmax0  s   
z_TestMinMax.test_numpy_minmaxc              	   C   s  ddl m} tg dg dg dg dg dg}| }tdd	gd
dgg}tdd	gd
dgg}tg dg dg dg}|||||fD ]_}| |}| |}t||js\qIt	|
 t
| t	| t| t	|j
ddtj
|dd t	|jddtj|dd t	|j
ddtj
|dd t	|jddtj|dd qI| td}	| td}
ddg}t|	|
gg d|D ]y\}}}|d u s|j| dkrtjtdd |j
||d W d    n1 sw   Y  tjtdd |j||d W d    n	1 sw   Y  q| jr!td}nt|dkr*dnd}t	|j||d| t	|j
||d| q| |}t	|j
ddd| g d t	|jddd| g d tg d}tg d}|jdkr}d |d!< | js|d"}|d"}t	|j
ddd| t	t|jddd| td#}| |}|jdkrt	|jd ddd t	|j
d ddd d S tjtdd |jd dd W d    n	1 sw   Y  tjtdd |j
d dd W d    d S 1 sw   Y  d S )$Nr   r  )r   r3  r\   r   )r   r   r   r   )r   r   rY  rP  rl  )r   r\   r   r   r;  r   ry  r3  )r3  r3  r   )r;  r{  rN   )r   r;  r{  r  r   rq  r  TFr   zCannot applyr  r  r  rc  )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  rD   r   r
   r   r   rC   r  r   ZargmaxZargminrs  r  r  r   r   r   r   r   r   r  r   r   )r   r  r  ZD2ZD3ZD4ZD5rd  r   ZD6ZD7Z	explicitsr  r  r  r  r  r7   r7   r8   test_argmaxB  s~   

 




$z_TestMinMax.test_argmaxN)	r   r   r   r  r  r  r  r  r  r7   r7   r7   r8   r  r  s    /er  c                   @   r  )_TestGetNnzAxisc                 C   s.  t ddgddgddgg}|t}| |}tjtjf}| jr#|jn|j	}t
|jd d|d d t
| |  t
|jdd|dd t|ddj| t
|jdd|dd t|ddj| t
|jd	d|d	d t|d	dj| t
|jd
d|d
d t|d
dj| tt|dd d S )Nr   r\   r   r3  r  r{  r  r   r   r   )r   rj   r   r   rD   rQ   r]   r   r  getnnzr   r  r9   r;   r   r   )r   r   Zbool_datr   Zaccepted_return_dtypesr  r7   r7   r8   test_getnnz_axis  s&   

z _TestGetNnzAxis.test_getnnz_axisN)r   r   r   r  r7   r7   r7   r8   r    rf  r  Tc                 C   sX   |r| S dd }t | j}| j D ]\}}|dr!||||< qt| jd | j|S )z
    Construct a class that either runs tests as usual (require=True),
    or each method skips if it encounters a common error.
    c                    s   t   fdd}|S )Nc                     s4   z | i |W S  t ttttfy   tdw )Nr  )r  r>  r   r  r  r   r   )rG   rr   fcr7   r8   wrapper  s   

z6_possibly_unimplemented.<locals>.wrap.<locals>.wrapper)	functoolswraps)r  r  r7   r  r8   wrap  s   z%_possibly_unimplemented.<locals>.wraptest_NotImplemented)dictrA   r  
startswithr{  r   	__bases__)r   requirer  Znew_dictrv   rq   r7   r7   r8   _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|o#|tt|tt|f}	i }
|	D ]*}|jD ]$}|ds?q7|
|}|durWtd|j d| d|j ||
|< q7q2td|	i S )z
    Construct a base class, optionally converting some of the tests in
    the suite to check that the feature is not implemented.
    r  NzTest class z overloads test z defined in ZTestBase)r   r  r  r  r  rw  r  r(  r9  rU  ra  rg  r  r  rA   r  getr   r   r{  )getsetslicingslicing_assignfancy_indexingfancy_assignZfancy_multidim_indexingZfancy_multidim_assignminmaxnnz_axisbasesnamesr   rv   Zold_clsr7   r7   r8   sparse_test_class  sF   



	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%d& Zd'S )(TestCSRc                 O   D   t  }|td t|i |W  d    S 1 sw   Y  d S Nr  )r   r   r'   r   r   argsr>   r   r7   r7   r8   r        $zTestCSR.spcreatorc                 C   s   t g dg dg dgd}| |}t|jg d t|jg d t|jg d t|jd t|j	d	 t|
 | d S )
N)r   r;  r   r]  r  r   )r;  r   r\   r  rY  r   r   )r   r   r   r  r   r  r  r   r  r   r{   r   rL   rv  r7   r7   r8   test_constructor1  s   
zTestCSR.test_constructor1c                 C   sZ   t dd}d|d< | |}t|jdg t|jdg t|jg d t| | d S )Nr   r   r   r3  r  r;  )r   r   r   r   r   r   r   )r   r   r   r  r   r  r  r{   r  r7   r7   r8   test_constructor2  s   

zTestCSR.test_constructor2c                 C   sh   t ddgddgddggd}| |}t|jg d t|jg d t|jg d t| | d S )	Nr   r   r\   r   r   rw  r^  rY  )r   r   r   r  r   r  r  r{   r  r7   r7   r8   test_constructor3  s   
zTestCSR.test_constructor3c                 C   s   t g d}t g d}t g d}t||f}| ||fd}ttddd|  | jdd	gd
d	gd
d	gfftjd}t dd
gd
d	ggtjd}t||  | g dg dg dff}|j	dksiJ d S )Nr\   r   r   r   r   r   r   r   r\   r   r\   r   r   r   r   r   r   r\   r\   r\   r\   r   g      @g      $@r  g      "@r  r  g      &@r  g       @g      @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{   rD   uint64r  )r   r  r   r  r  r   r  r7   r7   r8   test_constructor4  s   $zTestCSR.test_constructor4c                 C   D   t g d}t g d}t g d}| |||f}t|jd d S Nr   r   r   r   r   r3  r   r\   rl  rL  )r   r   r   r   r   r  r  r  r   r7   r7   r8   test_constructor52  
   zTestCSR.test_constructor5c                 C   L   g d}g d}g d}|  |||f}t|jd tt|jtj d S r  )r   r   r   r   rD   rb   r;   signedintegerr  r7   r7   r8   test_constructor6:     zTestCSR.test_constructor6c                 C   s   t dd }tg dtjd}tg dtjd}| j|||fdd}tg dg d	g d
gd}t| jr8tjntj}t|j	j| t|j
j| t| | d S )Nr   r   )r   r\   r   r   r   r\   r   r   r\   r;  r   r
  r   r  r  )r3  r   r   r   )r   r   rD   r]   r   r;   r   rQ   r   r  r  r   r{   )r   r  r   ptrrG   rL   Zexpected_dtyper7   r7   r8   test_constructor_smallcolC  s   z!TestCSR.test_constructor_smallcolc                 C   s   t dd }ttjjd }tddd||d |d gtjd}tg dtjd}| |||f}t|j	j
t
tj t|jj
t
tj t|jdt|d f d S )	Nr   r   r1  r   r\   r   r  r   )r   rD   rO   rQ   rP   r   r]   r   r   r  r;   r  r   r   )r   r  Zlarger   r  rG   r7   r7   r8   test_constructor_largecolU  s   "z!TestCSR.test_constructor_largecolc                 C   sj   t d}tg d}tg d}| j|||fdd}| }|  t|jg d t| |  d S )Nr3  ry  r\   r   r3  r;  r   r   r3  r\   rN   r  r   r\   ry  r;  r3  )r   r   r   r   rS  r   r  r{   r   r  r  r  ru  rv  r7   r7   r8   test_sort_indicesb  s   zTestCSR.test_sort_indicesc                 C   z   t g d}t g d}t g d}| j|||fdd}| }|  t|jd t|jg d t| |  d S )Nr   r   r   r   r\   r   r   r   r   r\   r   r;  r3  r   ry  rz  r   r   rz  r  r  r   rw  )r   r   r   eliminate_zerosr   r  r  r{   r  r7   r7   r8   test_eliminate_zerosl     zTestCSR.test_eliminate_zerosc                 C      |  tdddd }dD ]4}tt| j|d t|| }t|j|j t	|j
|j
 t	|j|j t	| tt||  qd S )Nr  r;  r3  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  T)r   rD   r   r   r   r$  r   ro   r   r   r  r  r{   r   r  rH  r  r7   r7   r8   test_ufuncsw     zTestCSR.test_ufuncsc                 C      t d}tg d}tg d}| j|||fdd}t d}tg d}tg d}| j|||fdd}t||  | |   d S )	Nr3  r  r  r  r  r   rz  r   r3  ry  r\   r;  r   r\   r   )r   r   r   r   r{   r  r7   r7   r8   test_unsorted_arithmetic     "z TestCSR.test_unsorted_arithmeticc                 C      t dgdgdgg}t g d}t jd | t jdd}| |}|||f }t|r5| }t	||||f  d S Nr   r\   r   rb  rZ   r3  ry  
rD   r   rx   r[   r   r  r   r&   r{   r   r   r?  rO  rd  r  r@  r7   r7   r8   test_fancy_indexing_broadcast     
z%TestCSR.test_fancy_indexing_broadcastc                 C   s   t ddg}t ddg}t ddg}t ddg}| |||f }td|j t|jts4J | |||f }td|j |  td|j t	|j
| | |||f }d|_td|j t	|j
| |  t	|j
| dS )z@Ensure has_sorted_indices memoizes sorted state for sort_indicesr   r   r\   TFN)rD   r   r   r   r   rR  rC   r   rS  r   r  )r   Zsorted_indsZunsorted_indsr  r  r  r7   r7   r8   test_has_sorted_indices  s$   zTestCSR.test_has_sorted_indicesc                 C   s  |  tdgtdgtddgf}td|j tddg}tddg}tddg}|  |||f }td|j t|jtsHJ |  td|j tdt	|j
 |  |||f }d|_td|j tdt	|j
 |  tdt	|j
 dS )z=Ensure has_canonical_format memoizes state for sum_duplicatesr\   r   r   TFN)r   rD   r   r   has_canonical_formatr   rC   r   sum_duplicatesr   r  )r   r  r  r  r  r7   r7   r8   test_has_canonical_format  s"   *z!TestCSR.test_has_canonical_formatc                 C   s  t jdt jd}t jdt jd}t d}| j|||fdd}| j|||fdd}t jdt jd}| j||fdd}| j||fdd}| d}	| d}
t|jjt j t|jjt j t|jjt j t|jjt j t|	jjt j t|
jjt j |||||	|
fD ]}||  qd S )Nr\   r   r   r   r  r           r  )rD   r   rQ   r   r   r  r;   r]   r   r  r  valsrG   rL   r  rF  r   rG  rH  r<   r7   r7   r8   test_scalar_idx_dtype  &   



zTestCSR.test_scalar_idx_dtypec                 C   T   | j tdgdgfdd}| |}|dt|jd   |d dks(J d S N  r   )r  r  r  r3  r  r   rD   r   r   r  rK  r   rc  r7   r7   r8   test_setdiag_csr     
zTestCSR.test_setdiag_csrc                 C   sJ   |  g dg}|  g dg}|| jdksJ ||jdks#J d S )Nr^  r   r   r   r\   r   )r   r  rD  r   rG   rL   r7   r7   r8   test_binop_explicit_zeros  s   z!TestCSR.test_binop_explicit_zerosN)r   r   r   r  r   rD   r  int_r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r
  r  r  r7   r7   r7   r8   r    s,    
	
	
r  c                   @      e Zd Zedd ZdS )TestCSRMatrixc                 O   r  r  )r   r   r'   r   r  r7   r7   r8   r     r  zTestCSRMatrix.spcreatorNr   r   r   r  r   r7   r7   r7   r8   r         r  c                   @   s   e Zd Zedd Zejejejej	gZ
dd Zdd Zdd Zd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )TestCSCc                 O   r  r  )r   r   r'   r   r  r7   r7   r8   r     r  zTestCSC.spcreatorc                 C   s   t g dg dg dgd}| |}t|jg d t|jg d t|jg d t|jd t|j	|j	 t|j
d	 d S )
Nr   r   r   r   r  r   r\   r   r   r   )r   r\   r   r   )r   r\   r   r\   rN  r;  r   )r   r   r   r  r   r  r  r   r  r   r   r  r7   r7   r8   r    s   
zTestCSC.test_constructor1c                 C   sL   t dd}d|d< | |}t|jdg t|jdg t|jg d d S )Nr  r   r3  r\   r;  r\   )r   r   r   r   r   r   r   )r   r   r   r  r   r  r  r  r7   r7   r8   r    s   

zTestCSC.test_constructor2c                 C   sZ   t ddgddgddggd}| |}t|jddg t|jddg t|jg d d S )Nr   r   r\   r   r  )r   r   r   r  r   r  r  r  r7   r7   r8   r  %  s
   
zTestCSC.test_constructor3c                 C   s   t g d}t g d}t g d}t||f}| ||fd}ttddd|  | g dg d	g d
ff}|jdksCJ d S )Nr  r  r  r  r  r;  r   r  r  r  r\   )r   r   r   r   r   r   r{   r  )r   r  r   r  r  r   r7   r7   r8   r  ,  s   zTestCSC.test_constructor4c                 C   r  Nr  r  rl  )r   r   )r   r   r   r   r   r  r  r  r   r7   r7   r8   r  :  r  zTestCSC.test_constructor5c                 C   r  r  )r   r   r   r   rD   rb   r;   r  r  r7   r7   r8   r  B  r  zTestCSC.test_constructor6c                 C   r  )Nr  r  r  rN   r\   r  r   rw  )r   r   r   r  r   r  r  r{   r  r7   r7   r8   r  K  r  zTestCSC.test_eliminate_zerosc                 C   sf   t d}tg d}g d}| j|||fdd}| }|  t|jg d t| |  d S )Nr3  r  r  r   r  r  )r   r   r   r   rS  r   r  r{   )r   r  r  r  ru  rv  r7   r7   r8   r  V  s   zTestCSC.test_sort_indicesc                 C   r  )N   ry  r   g      5@r  T)r   rD   r   r   r   r$  r   ro   r   r   r  r  r{   r  r7   r7   r8   r  `  r  zTestCSC.test_ufuncsc                 C   r  )	Nr3  r  r  r   r  r   r  r  )r   r   r   r   r{   r  r7   r7   r8   r  l  r  z TestCSC.test_unsorted_arithmeticc                 C   r  r  r  r  r7   r7   r8   r  w  r  z%TestCSC.test_fancy_indexing_broadcastc                 C   s  t jdt jd}t jdt jd}t d}| j|||fdd}| j|||fdd}t jdt jd}| j||fdd}| j||fdd}| d}	| d	}
t|jjt j t|jjt j t|jjt j t|jjt j t|	jjt j t|
jjt j |||||	|
fD ]}||  qd S )
Nr\   r   r   )r  r   r  )r  r   r  r  r  )	rD   r   rQ   r   r   r   r  r;   r]   r  r7   r7   r8   r
    r  zTestCSC.test_scalar_idx_dtypec                 C   r  r  r  rc  r7   r7   r8   test_setdiag_csc  r  zTestCSC.test_setdiag_cscN)r   r   r   r  r   rD   r  r  r   r   r   r  r  r  r  r  r  r  r  r  r  r  r
  r"  r7   r7   r7   r8   r    s"    

	
r  c                   @   r  )TestCSCMatrixc                 O   r  r  )r   r   r'   r   r  r7   r7   r8   r     r  zTestCSCMatrix.spcreatorNr  r7   r7   r7   r8   r#    r  r#  c                   @   sP   e Zd ZeZejejejgZ	dd Z
dd Zdd Zdd Zd	d
 Zdd ZdS )r   c                 C   sH   |  d}d|d< d|d< ||j }||j  }t| |  d S )N)rN   r  rN   r  r  r3  r   )r   r  r   r   r{   )r   rJ   rd  rL  r7   r7   r8   	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  rN   r   r  r  )r   r   r   r{   rg  r7   r7   r8   test_add_nonzero  s   
zTestDOK.test_add_nonzeroc                 C   R   |  d}d|d< d|d< t|d  | d  t|d  | d  d S Nr  r&  r  r  r  r  r{  r   r   r{   rR  r7   r7   r8   test_dok_divide_scalar  
   
zTestDOK.test_dok_divide_scalarc                 C   s  d\}}|  ||f}d|d< d|d< d|d< d|d	< d
|d< d|d< t| d d |d f t| | }t| d d |d f t| ||}}| }t|j||f t| |d d d f t| | }t| |d d d f t| d S )N)r   ry  r   r  r\   r  r   r  r;  r  r3  r  r   rz  )	r   r   r{   r   rC  r
   r   r   rD  )r   rI  r  rG   r   rL   r   r7   r7   r8   test_convert  s"   ""
"&zTestDOK.test_convertc                 C   s   t t| j tg dg dg dgd}| |}t|j|j t| | | |}t| |  g dg dg}| j|tj	d}t|jtj	 | }t|jtj	 t
|| d S )Nr  r  r  r   r  r]  r   )r   r>  r   r   r   r;   r{   r   rD   r   r   )r   rL   rJ   rF  r  r   dar7   r7   r8   	test_ctor  s   

zTestDOK.test_ctorc                 C   sX   |  d}d|d< td| vd |  d}d|d d df< tt| dkd d S )Nr
  r   rp  zUnexpected entry (0,0) in keyszUnexpected entries in keys)r   r   keysr   r  r7   r7   r8   test_ticket1160  s   

zTestDOK.test_ticket1160N)r   r   r   r    r   rD   r  r   r   r   r%  r'  r+  r-  r/  r1  r7   r7   r7   r8   r     s    r   )r  r  c                   @      e Zd ZeZdS )TestDOKMatrixN)r   r   r   r   r   r7   r7   r7   r8   r3        r3  c                   @   sh   e Zd ZeZejejejgZ	dd Z
dd Zdd Zdd Zd	d
 Zdd Zdd Zdd Zdd ZdS )TestLILc                 C   s   t dtj}d|d< d|d< | jdtjd}d|d< d|d< t dkr1t||j ||j   t||	 j ||	 j   d S )NrN   rN   rN   r  y              4@r$  r   ppc64le)
r   rD   r   r   platformmachiner   r  r{   r   rg  r7   r7   r8   test_dot!  s   &zTestLIL.test_dotc                 C   sB   |  d}d|d< |d }t|d d |d }t|d d d S )Nr
  r\   rp  r;  r   )r   r   )r   r<   r7   r7   r8   test_scalar_mul0  s   
zTestLIL.test_scalar_mulc                 C   r(  r)  r*  rR  r7   r7   r8   test_truediv_scalar:  r,  zTestLIL.test_truediv_scalarc                 C   s   |  g dg dg}|  g dg dg}||| f||| fd|d fd}| D ]\}\}}| }t|d| d| t| |  q,| j dtd	d
}| g d}|dd d f  |7  < t|dd d f  | d S )Nr   r\   r   r  r^  r   )addsubmulZ__i__r  r   r   )皙?rB  rB  r   )	r   r  r   ro   r   r{   rD   r;   r   )r   rJ   rK   r  opr   r  r}  r7   r7   r8   test_inplace_opsB  s   


zTestLIL.test_inplace_opsc                 C   sP   g dg dg}|  t|}t|D ]\}}t| t|| |jd qd S )Nrw  rx  )Zndmin)r   r   r  r   r{   r   )r   Zrow_datarK   r  r  r7   r7   r8   test_lil_iterationV  s
   zTestLIL.test_lil_iterationc                 C   sZ   |  d}d|d< d|d< d|d< d|d	< d
|d< | }|  |}t| |  d S )Nr6  rN   r  r  r$  r  )rz  r   ro  )r   rz  r5  )rz  r{  )r   rD  r   r{   )r   rK   r   rd  r7   r7   r8   test_lil_from_csr\  s   

zTestLIL.test_lil_from_csrc                 C   sZ   |  tddd}| |}t|tg dddf  |tg dddf  d S )Nr  r3  rw  r\   r   )r   r   r   r   r   r   r{   )r   r  rJ   r7   r7   r8   test_fancy_indexing_lilh  s
   
zTestLIL.test_fancy_indexing_lilc                 C   s   |  d}d|d< d|d< d|d< d|d	< |  d}d|d< d|d
< d|d< d|d	< d|d< t|| ||  t|| g dg dg dg dg d S )Nr  r   rp  r\   rb  r   r  r;  r  r  r  r   r  r   r   r{  )r   r|  r   )r   r   rD  r{   )r   lrI  r7   r7   r8   test_point_wise_multiplyo  s*   

z TestLIL.test_point_wise_multiplyc                 C   s,   |  td}|d9 }d|dd d f< d S )Nr
  r  r   )r   rD   rK  r%  r7   r7   r8   test_lil_multiply_removal  s   z!TestLIL.test_lil_multiply_removalN)r   r   r   r"   r   rD   r  r   r   r   r:  r;  r<  rD  rE  rF  rG  rJ  rK  r7   r7   r7   r8   r5    s    
r5  )r  c                   @   r2  )TestLILMatrixN)r   r   r   r   r   r7   r7   r7   r8   rL    r4  rL  c                   @   s   e Zd ZeZejejejgZ	dd Z
dd Zdd Zdd Zd	d
 Zejjddddd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )TestCOOc                 C   s   t g d}t g d}t g d}| |||ffd}ttddd|  | jdd	gd
d	gd
d	gfftjd}t dd
gd
d	ggtjd}t||  d S )Nr  r  r  r  r  r;  r   r  r   r   r   )r   r   r   r   r   r{   rD   r  )r   r  r   r  r  r  r7   r7   r8   r    s   $zTestCOO.test_constructor1c                 C   sd   t g d}t g d}t g d}| |||ffd}t g dg dg dg}t||  d S )N)
r   r   r\   r\   r\   r\   r   r   r\   r\   )
r   r\   r   r\   r   r   r   r   r   r\   )
r\   r{  rP  r3  ry  r   r   r\   r   rN  r
  )r;  r   r   rH  )rY  ry  r   )r   r   r   r{   )r   r  r   r  r  r   r7   r7   r8   r    s   zTestCOO.test_constructor2c                 C   sP   |  d}t|jd t|jg  t|jg  t|jg  t| td d S )Nr  )r   r   r   r  r   r  r{   r   r   r  r7   r7   r8   r    s   
zTestCOO.test_constructor3c                 C   s   t g dg dg dg}| |}t| | t g d}| |}| jr)|n|dd}t| | tjtdd | g dg d	g d
f W d    n1 sVw   Y  tjt	dd | jg ddd W d    d S 1 sww   Y  d S )Nr   r   r   r   )ry  r   r   r   )r   r;  r   r   r   r   zobject cannot be interpretedr  )r   r     !   rY  r  r  r  r  )
r   r   r   r{   r   r   r   r   r>  r   )r   r   r  r  r7   r7   r8   r    s    

"zTestCOO.test_constructor4c                 C   s:   dg}| j |dgdgffd d}|jt|jksJ d S )Nr   r   r   )r   r;   rD   r   )r   r  r  r7   r7   r8   "test_constructor_data_ij_dtypeNone  s   z*TestCOO.test_constructor_data_ij_dtypeNoneFzCOO does not have a __getitem__runreasonc                 C      d S r:   r7   r   r7   r7   r8   r       zTestCOO.test_iteratorc                 C   s*   ddgg}|  | }t| | d S r`   )r   Ztodiar   r{   )r   r   r"  r7   r7   r8   test_todia_all_zeros  s   
zTestCOO.test_todia_all_zerosc                 C   s   |  d}|  |  ddgddgddgff}|  t| ddgddgg |  ddgddgddgff}|  t| ddgddgg t|jdg t|jdg t|jdg d S )Nr  r   r\   r   r   )r   r  r   r{   r  r   r  rN  r7   r7   r8   test_sum_duplicates  s   
zTestCOO.test_sum_duplicatesc                 C   s<   |  g dg dg dff}| }t| |  d S )Nr  r  r  )r   r  r   r{   )r   r  r@   r7   r7   r8   test_todok_duplicates  s   zTestCOO.test_todok_duplicatesc                 C   sV   |  g dg dg dff}| }t|jd |j | }t|jd |j d S )Nr  r  r  r\   )r   rD  r   r  rC  )r   r  r   r   r7   r7   r8   test_tocompressed_duplicates  s
   z$TestCOO.test_tocompressed_duplicatesc                 C   sr   t g d}t g d}t g d}| j|||ffdd}| }|  t|jdk  t| |  d S )Nr  )r   r   r   r   r   r   r   r   r  r  r  r   )	r   r   r   r  r   r  allr   r{   )r   r  r  r   ru  rv  r7   r7   r8   r    s   zTestCOO.test_eliminate_zerosc                 C   s   g dg dg dg}d}|  |}||}t|j|ju  |j|dd}t|j|ju  |j|dd}tt|j|j  d S )Nr  r  r  r  Fr  T)r   r   r   r  rD   rI   )r   re   Z	new_shaper<   r=   r7   r7   r8   test_reshape_copy  s   

zTestCOO.test_reshape_copyc                 C   sp   |  dgdgdgffd}|  dgdgdgffd}t|jddd|kjdk t|jdd	d|kjdk d S )
Nr   i- r0  )-   )r_  r^  r   r  r   r  )r   r   r   r  )r   Zmat1Zmat2r7   r7   r8   test_large_dimensions_reshape  s    z%TestCOO.test_large_dimensions_reshapeN)r   r   r   r!   r   rD   r  r   r   r   r  r  r  r  rR  r   r  xfailr  rX  rY  rZ  r[  r  r]  r`  r7   r7   r7   r8   rM    s"    


rM  )r  r  r  r  r  c                   @   r2  )TestCOOMatrixN)r   r   r   r   r   r7   r7   r7   r8   rb    r4  rb  c                   @   s   e Zd ZeZejejejgZ	dd Z
ejjddddd Zedd	d
 Zejjdddd Zdd Zdd Zdd Zdd ZdS )TestDIAc                 C   sh   t g dg dg dg dg}t g dgjddd}t g d	}t| j||fd
d | d S )N)r   r   r   r   )r   r\   r   r;  )r   r\   r   r   )r   r   r   r;  rl  r   r   r  r   r   r\   r  r  )r   rD   repeatr   r   r{   )r   rd  r  r!  r7   r7   r8   r  -  s    zTestDIA.test_constructor1FzDIA does not have a __getitem__rS  c                 C   rV  r:   r7   r   r7   r7   r8   r  6  rW  zTestDIA.test_iteratorr   c                 C   s   |  td}t|jjtj |jddd t|jjtj |  td}t|jjtj |jddd t|jjtj d S )Nr   r  r\   rm  r;  )	r   rD   r%   r   r!  r;   rQ   r  r]   r   rI  r7   r7   r8   test_setdiag_dtype:  s   zTestDIA.test_setdiag_dtypezDIA stores extra zerosrU  c                 C   rV  r:   r7   r   r7   r7   r8   r  F  rW  zTestDIA.test_getnnz_axisc                 C   sJ   | j g dgdgfdd}| }t|  | t|  | d S )Nr  r   rz  r  )r   r{   r   rC  rD  )r   rI  r  r7   r7   r8   test_convert_gh14555J  s   zTestDIA.test_convert_gh14555c                 C   sV   |  ddgddgg }t|j|jf|j}tt|dk}|j	|ks)J d S )Nr   r\   r   r;  r   )
r   rE  rD   Zravel_multi_indexr  r   r   r\  diffr  )r   rI  Z	flat_indsZinds_are_sortedr7   r7   r8   test_tocoo_gh10050Q  s   zTestDIA.test_tocoo_gh10050c                 C   s   t g dgjddd}t jg dt jd}tj||fdd}| }|jjt jks-J |	 }|j
jt jks:J | }|j
jt jksGJ d S )	Nrl  r   r   r  rd  r   r  r  )rD   r   re  rQ   rn   r#   rE  r   r;   rD  r  rC  )r   r  r!  r"  r  r   r   r7   r7   r8   test_tocoo_tocsr_tocsc_gh19245X  s   z&TestDIA.test_tocoo_tocsr_tocsc_gh19245c                 C   s   |  ddgddgg}|d }t||jsJ t| ddgddgg |d}t||js1J t| ddgddgg d S )Nr   r\   r   r;  r   r   r  )r   rC   r  r   r{   rD  )r   rI  resZres2r7   r7   r8   r,  e  s   
zTestDIA.test_mul_scalarN)r   r   r   r#   r   rD   r  r   r   r   r  r   r  ra  r  rz   rg  r   r  ri  rk  rl  r,  r7   r7   r7   r8   rc  '  s    	


rc  )r  r  r  r  r  r  r  c                   @   r2  )TestDIAMatrixN)r   r   r   r   r   r7   r7   r7   r8   rn  q  r4  rn  c                   @   s   e Zd ZeZejejejgZ	dd Z
dd Zdd Zdd Zd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zejjddddd Zejjddddd Zdd  Zejjdddd!d" Zejjed#d$d%d& Zd'S )(TestBSRc                 C   s   t g d}t g d}td}t g dg dg|d< t g dg dg|d	< t g d
g dg|d< t g dg dg|d< tg dg dg dgg dg dg}| j|||fdd}t| | | |||f}t| | d S N)r   r\   r\   r;  )r   r\   r\   r   )r;  r\   r   r  r  r   rj  )r   r   rN   r   )r   r;  rz  )r  r   r  r\   )r   r3  rN   )r4  r   r  r   rW  r  r  r   r  r  )r   r   r   r   r   r{   )r   r  r  r  rJ   r  r7   r7   r8   r    s(   



(zTestBSR.test_constructor1c                 C   s  dD ]}t |}t| | | qt d}t| j|dd | t| j|dd | tg dg dg dgg d	g d
g}t| | | t| j|dd | t| j|dd | t| j|dd | t| j|dd | t| j|dd | t| j|dd | t| j|dd | tg dg dg dgg d	g d
g}t| j|dd | d S )N)rb  r  r  )rN   r;  )r   ry  r  )r;  r   r  r  r  rW  r  r  r  r  rq  r  rb  r  )r\   r  )r   r  rO  )r   r   r   r{   r   )r   r   rJ   r7   r7   r8   r    s"   ((zTestBSR.test_constructor2c                 C   sH   g dg dg dff}t ddgddgg}t| j|dd	 | d S )
Nrw  r  rj  r   r   r\   r   r  r  )r   r   r   r{   )r   argrJ   r7   r7   r8   r    s   zTestBSR.test_constructor3c                 C   s\   d}t j||dft jd}t jd|gt jd}t j|t jd}| j|||f|dfdd d S )Nrz  r   r   r   F)r  r   )rD   rK  r   r   rQ   r   r   )r   r  r  r  r  r7   r7   r8   r    s
   zTestBSR.test_constructor4c                 C   s   d}t |}t |||f}t d|g}t |}tt | |||f W d    n1 s2w   Y  tt | j|||fdd W d    n1 sPw   Y  tt | j|||fdd W d    d S 1 sow   Y  d S )Nrz  r   r5  r  rb  )rD   rK  r   r   r   r   r   )r   r  Z	data_1dimr  r  r  r7   r7   r8   r    s   




"zTestBSR.test_constructor5c                 C   sn   dgdggdgdggg}t jddgt jd}t jddgt jd}| j|||fdd}|jt |jks5J d S )Nr   r   r\   r   r  r  )rD   r   rQ   r   r;   )r   rB   r  r  rL   r7   r7   r8   test_default_dtype  s
   zTestBSR.test_default_dtypec                 C   s   t g d}t g d}td}t g dg dg|d< t g dg dg|d	< t g d
g dg|d< t g dg dg|d< tg dg dg dgg dg dg}| j|||fdd}| }|  }t| | t| |  d S rp  )r   r   r   r   rD  rE  r   r{   )r   r  r  r  rJ   ZAbsrZAcsrZAcsr_via_coor7   r7   r8   test_bsr_tocsr  s.   



zTestBSR.test_bsr_tocsrc                 C   s   t g dddgddggj}|ddd}tg d}tg d}| j|||fdd}| }|  t|jd	 t|	 |	  d S )
Nr  r   r   r\   r  r  )r;  r  r  r  )
r   r  r   r   r   r   r  r   r  r{   r  r7   r7   r8   r    s   zTestBSR.test_eliminate_zerosc                 C   s   t jd | jt jddd}d|j|jdk< |  t|jd t|jj	d d|j|jdk< |  t|jd t|jj	d	 t|
 t d |  t|jd t|jj	d	 t|
 t d d S )
Nr   )r  r  r  r  g?B   )r  r\   r   r  r=  )rD   rx   r[   r   r  r  r   r  r   r   r{   r   rf  r7   r7   r8   test_eliminate_zeros_all_zero  s   z%TestBSR.test_eliminate_zeros_all_zeroc                 C   sJ   | j tddddd}t|jd dd}t|| | |  d S )Nx   rz  r4  r;  r3  r  r   r   r   r   r   r   r   r{   r7  r7   r7   r8   test_bsr_matvec  s   zTestBSR.test_bsr_matvecc                 C   sN   | j tddddd}t|jd d dd}t|| | |  d S )	Nrw  rz  r4  rx  r  r   r   r   ry  r7  r7   r7   r8   test_bsr_matvecs  s   zTestBSR.test_bsr_matvecsFzBSR does not have a __getitem__rS  c                 C   rV  r:   r7   r   r7   r7   r8   r    rW  zTestBSR.test_iteratorzBSR does not have a __setitem__c                 C   rV  r:   r7   r   r7   r7   r8   r  "  rW  zTestBSR.test_setdiagc                 C   s   t g dg dg dg}| j|dd}t|dd u  t| ddgd	dgd
dgg |d t| ddgd	dgg |d t| ddgd	dgddgg |d t| g dg dg dg tt|jd d S )Nr  r  r  r  r  r  r   r   r\   r   r  r  r  r  r  )	rD   r   r   r   r  r   r{   r   r   r  r7   r7   r8   test_resize_blocked&  s2   



zTestBSR.test_resize_blockedc                 C   rV  r:   r7   r   r7   r7   r8   r  =  rW  z"TestBSR.test_setdiag_comprehensivezexceeds memory limitrh  c              	   C   sH  t jdt jd}t jdt jd}t d}| j|||fdd}| j|||fdd}| d}| d}t|jjt j t|jjt j t|jjt j t|jjt j z0t d}t d	}	| j|||fdd}
| j|	||fdd}t|
jjt j t|jjt j W n tt	fy   d}
d}Y nw |||||
|fD ]}||  qd S )
Nr\   r   r   r  r  r  r  )r   r   r  )r   r   r  )
rD   r   rQ   r   r   r  r;   r]   MemoryErrorr   )r   r  r  r	  rG   rL   rF  r   Zvals2Zvals3rG  rH  r<   r7   r7   r8   r
  A  s2   





zTestBSR.test_scalar_idx_dtypeN)r   r   r   r$   r   rD   r  r   r   r   r  r  r  r  r  rs  rt  r  rv  rz  r{  r   r  ra  r  r  r|  r  skipifIS_COLABr
  r7   r7   r7   r8   ro  y  s.    	


ro  )r  r  r  r  r  r  c                   @   r2  )TestBSRMatrixN)r   r   r   r   r   r7   r7   r7   r8   r  b  r4  r  c                 O   s,  | dd}t| jtjst| jtjr'|du r| f| S | f| |f S | dk }| jddd} | ddd  d8  < d| ddd< |d jdkrzt	dd |D }d|d  f|dd  }d|d  d f|dd  }d| |< d| |< t	d	d |D }|du r| f| S | f| |d f S )
z-Duplicates entries to produce the same matrixr  Nr   r\   r  r   c                 s   s    | ]}|d  V  qdS rJ  r7   )r  pr7   r7   r8   	<genexpr>  s    z&_same_sum_duplicate.<locals>.<genexpr>c                 s   s    | ]}| d V  qdS )r\   N)re  )r  r  r7   r7   r8   r    s    )
poprD   rb   r;   r  Zunsignedintegerr  re  ra   r  )r  Zindsr>   r  Z	zeros_posposZpos1pos2r7   r7   r8   _same_sum_duplicaten  s*   

r  c                       sd   e Zd Zdd fdd
Zejjdddd Zejjd	dd
d Zejjdddd Z	  Z
S )_NonCanonicalMixinFsorted_indicesc                   s  t  j}||g|R i |}| dk }|d jdk}|rO|d jd }	t }
|
td | ||d |	 |d |	 }W d   n1 sJw   Y  | 	||}d|vr^|j
|d< ||fi |}|jtjtjfv rrd}nd}t| | |d	 |rt|jdk  |S )
zcReplace D with a non-canonical equivalent: containing
        duplicate elements and explicit zerosr   r\   r  r   Nr   gh㈵>gHz>)rtol)superr   r{   r  ra   r   r   r'   _insert_explicit_zero_arg1_for_noncanonicalr   r;   rD   r   rB  r   r   r  r  )r   rd  r  r  r>   Z	constructr  Zzero_posZ	has_zerosrn  r   Zarg1ZNCr  r  r7   r8   r     s*    
z_NonCanonicalMixin.spcreatorz"bool(matrix) counts explicit zerosrh  c                 C   rV  r:   r7   r   r7   r7   r8   r     rW  z_NonCanonicalMixin.test_boolz!getnnz-axis counts explicit zerosc                 C   rV  r:   r7   r   r7   r7   r8   r    rW  z#_NonCanonicalMixin.test_getnnz_axisznnz counts explicit zerosc                 C   rV  r:   r7   r   r7   r7   r8   r    rW  z_NonCanonicalMixin.test_empty)r   r   r   r   r   r  r   r   r  r  __classcell__r7   r7   r  r8   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 ]&\}}||| ddd  |||< ||| ddd  |||< q|||fS )5Return non-canonical constructor arg1 equivalent to M)r  r   Nr   )r  r  r  r  r  r   )r   r  r  r  r  r  startstopr7   r7   r8   r    s   
"$
z3_NonCanonicalCompressedMixin._arg1_for_noncanonicalc                 C   s   d|||f< |S r`   r7   r   r  r:  r  r7   r7   r8   r    s   z2_NonCanonicalCompressedMixin._insert_explicit_zeroN)F)r   r   r   r  r  r7   r7   r7   r8   r    s    

r  c                   @   sL   e Zd Zdd Zdd Zejjddddd	 Zejjdd
ddd Z	dS )_NonCanonicalCSMixinc                    s4    fdd}t D ]}dD ]
}|t|| qqd S )Nc           	         s   t g dg dg dg dg| d} j||d}|j\}}t| |D ]}t| |D ]}t|||f |||f  q,q$dD ]}tttf|j| q?d S )Nr   r  r  r  r   r  r  )	r   r   r   r   r   r   r  r>  r  )	r;   r  rd  rJ   r  r  r:  r  r  r   r7   r8   r     s    
z3_NonCanonicalCSMixin.test_getelement.<locals>.check)FTr  )r   r   r;   r  r7   r   r8   r    s   z$_NonCanonicalCSMixin.test_getelementc                 C   s   t d}| |}| g dg}| |dd d f< t }|td ||dd d f< W d    n1 s8w   Y  t| | |  |d d df< t }|td |j	|d d df< W d    n1 smw   Y  t| | d S )Nr   rw  r   r  r\   )
rD   r%   r   r{   r   r   r'   r   rH  r  )r   rd  rJ   rK   r   r7   r7   r8   test_setitem_sparse  s   

z(_NonCanonicalCSMixin.test_setitem_sparseFz(inverse broken with non-canonical matrixrS  c                 C   rV  r:   r7   r   r7   r7   r8   r    rW  z_NonCanonicalCSMixin.test_invz&solve broken with non-canonical matrixc                 C   rV  r:   r7   r   r7   r7   r8   r    rW  z_NonCanonicalCSMixin.test_solveN)
r   r   r   r  r  r   r  ra  r  r  r7   r7   r7   r8   r    s    
r  c                   @      e Zd ZdS )TestCSRNonCanonicalNr   r   r   r7   r7   r7   r8   r        r  c                   @   r  )TestCSRNonCanonicalMatrixNr  r7   r7   r7   r8   r    r  r  c                   @   r  )TestCSCNonCanonicalNr  r7   r7   r7   r8   r  
  r  r  c                   @   r  )TestCSCNonCanonicalMatrixNr  r7   r7   r7   r8   r    r  r  c                   @   sD   e Zd Zdd Zejjddddd Zejjdddd	d
 ZdS )TestBSRNonCanonicalc                 C   s"   |  }d|||f< |j|jdS )Nr   r  )rD  r  r  )r   r  r:  r  r<   r7   r7   r8   r    s   z)TestBSRNonCanonical._insert_explicit_zeroFz&diagonal broken with non-canonical BSRrS  c                 C   rV  r:   r7   r   r7   r7   r8   rv    rW  z!TestBSRNonCanonical.test_diagonalz"expm broken with non-canonical BSRc                 C   rV  r:   r7   r   r7   r7   r8   r    rW  zTestBSRNonCanonical.test_expmN)	r   r   r   r  r   r  ra  rv  r  r7   r7   r7   r8   r    s    
r  c                   @   r  )TestBSRNonCanonicalMatrixNr  r7   r7   r7   r8   r  !  r  r  c                   @   s&   e Zd ZdddZdd Zdd ZdS )	TestCOONonCanonicalNc                 C   s$   t |j|j|j\}}}|||ffS )r  )r  r  r  r   )r   r  r  r  r  r   r7   r7   r8   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 r`   )rD   Zr_r  r;   r{  r  r   r  r7   r7   r8   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   r\   r   rm  r   )	r   rD   r%   r  r  r   r\  rj  r   rf  r7   r7   r8   test_setdiag_noncanonical1  s
   z-TestCOONonCanonical.test_setdiag_noncanonicalr:   )r   r   r   r  r  r  r7   r7   r7   r8   r  %  s    
r  c                   @   r  )TestCOONonCanonicalMatrixNr  r7   r7   r7   r8   r  9  r  r  c           
   	   c   s   | dkrt ttttttg}n| dkrttt	t
tttg}ntd| ddddddd	d
d	d}|D ]N}tt|D ]E}t||}|drt|ddsg }||}t|ra|tjj|dg7 }t|dg }|D ]}	|	jdv ru||	 qitj|||dV  q:q2dS )a  Yield all tests for all formats that use get_index_dtype

    This is more than testing get_index_dtype. It allows checking whether upcasting
    or downcasting the index dtypes affects test results. The approach used here
    does not try to figure out which tests might fail due to 32/64-bit issues.
    We just run them all.
    So, each test method in that uses cases_64bit reruns most of the test suite!
    r(   spmatrixzparameter sp_api=z& is not one of 'sparray' or 'spmatrix'z%expm for 64-bit indices not availablez)linsolve for 64-bit indices not availableztest implemented in base classz%test actually requires 64-bit to workztest verifies int32 indexesztest verifies int64 indexes)r  r  r  r
  r`  r  r  rl  r  r  Frh  Z
pytestmark)r~  r   ra  Zxslow)marksN)ro  rM  r  r  rc  r   r5  r  rb  r#  r  rn  r3  rL  r   sorteddirro   r  r  r   r   r  r   rv   rE   param)
Zsp_apiZTEST_CLASSESZ
SKIP_TESTSr   method_namemethodr  r4   markersr  r7   r7   r8   cases_64bit>  sN   	






r  c                
   @   s\   e Zd Zeeeeeee	e
eeg
Zdd Zejjdd Zejjdd Zejjdd Zd	S )
	Test64Bitc                 C   st   t |}|jdv r|jj|ko|jj|kS |jdkr'|jj|ko&|jj|kS |jdkr2|jj|kS td|d)N)r   r   r   r  r"  zmatrix z has no integer indices)	rD   r;   r   r  r  r  r   r!  r   )r   rI  r;   r7   r7   r8   _compare_index_dtype~  s   



zTest64Bit._compare_index_dtypec                    .   t dd fdd} jD ]}|| qd S )NrN   rg   c                    sL   | t jdd}t |t j | t jdd}t |t j d S )NrN   r   r  )rD   rx   r  r   r  rQ   r]   )mat_clsrI  r   r7   r8   r     s   z4Test64Bit.test_decorator_maxval_limit.<locals>.checkrz   MAT_CLASSESr   r   r  r7   r   r8   test_decorator_maxval_limit  s
   

z%Test64Bit.test_decorator_maxval_limitc                    r  )NTrx   c                    sb   d}d}t dD ]$}| tjdd}|p |tj}|p$ |tj}|r,|r, d S qtd)NFr1  r{  z#both 32 and 64 bit indices not seen)r   rD   rx   r  r  rQ   r]   ri   )r  Zseen_32Zseen_64rn  rI  r   r7   r8   r     s   z5Test64Bit.test_decorator_maxval_random.<locals>.checkr  r  r7   r   r8   test_decorator_maxval_random  s
   

z&Test64Bit.test_decorator_maxval_randomc                 C   s^   t tjdddd }t tjddd }|ttt |ttt |ttt |ttt d S )Nr   )rX   rk   c                 S   s   | ddgddgddgg}t t|jdd t t|jdd |g d	g d
g}t t|jdd t t|jdd |g d	g dg}t t|jdd d|_t t|j d S Nr   r\   r   r;  r3  r   r  r   rw  )r   r;  r   r  F)r   ri   r  r  r  r  r   r   r   rG   r7   r7   r8   check_limited  s   z3Test64Bit.test_downcast_intp.<locals>.check_limitedrW   c                 S   s   | ddgddgddgg}|j dd |jdd |g d	g d
g}|j dd |jdd |g d	g dg}|j dd d|_|  d S r  )r  r  r  r  r  r7   r7   r8   check_unlimited  s   z5Test64Bit.test_downcast_intp.<locals>.check_unlimited)	rz   rD   r]   r   r   r!   r   r   r   )r   r  r  r7   r7   r8   test_downcast_intp  s   


zTest64Bit.test_downcast_intpN)r   r   r   r   r   r   r   r   r$   r!   r   r   r#   r  r  r   r  thread_unsafer  r  r  r7   r7   r7   r8   r  w  s    



r  c                   @   r  )RunAll64Bitc                 K   s$   t di |dd }||| d S )Nc              	   S   sX   |  }t |dr|  zt||  W t |dr|  d S d S t |dr+|  w w )Nsetup_methodteardown_method)r$  r  ro   r  )r   r  instancer7   r7   r8   r     s   


z,RunAll64Bit._check_resiliency.<locals>.checkr7   )rz   )r   r   r  rr   r   r7   r7   r8   _check_resiliency  s   

zRunAll64Bit._check_resiliencyN)r   r   r   r  r7   r7   r7   r8   r    rf  r  c                   @   s   e Zd Zejdeddd Zejdejdeddd Z	ejdeddd	 Z
ejdedd
d ZdS )Test64BitArraycls,method_namer(   c                 C      | j ||dd d S NrN   rg   r  r   r   r  r7   r7   r8   test_resiliency_limit_10     z'Test64BitArray.test_resiliency_limit_10r\   c                 C   r  NTr  r  r  r7   r7   r8   test_resiliency_random     z%Test64BitArray.test_resiliency_randomc                 C      | j ||tjd d S NrW   r  rD   rQ   r  r7   r7   r8   test_resiliency_all_32     z%Test64BitArray.test_resiliency_all_32c                 C   r  r  r  rD   r]   r  r7   r7   r8   test_resiliency_all_64  r  z%Test64BitArray.test_resiliency_all_64N)r   r   r   r   r  parametrizer  r  r'  r  r  r  r7   r7   r7   r8   r    s    


r  c                   @   s   e Zd Zejdejdeddd Zejdeddd Z	ejdejdedd	d
 Z
ejdeddd Zejdeddd ZdS )Test64BitMatrixr3  r  r  c                 C   r  )NT)ry   r  r  r7   r7   r8   
test_no_64  s   zTest64BitMatrix.test_no_64c                 C   r  r  r  r  r7   r7   r8   r    r  z(Test64BitMatrix.test_resiliency_limit_10r\   c                 C   r  r  r  r  r7   r7   r8   r    r  z&Test64BitMatrix.test_resiliency_randomc                 C   r  r  r  r  r7   r7   r8   r    r  z&Test64BitMatrix.test_resiliency_all_32c                 C   r  r  r  r  r7   r7   r8   r  "  r  z&Test64BitMatrix.test_resiliency_all_64N)r   r   r   r   r  r'  r  r  r  r  r  r  r  r7   r7   r7   r8   r    s    



r  c               	   C   s  t g dg} t dgdgdgg}t g dg dg}t dgg}t dgg}t g dg}ttttfD ]}|| d}||d	}||d}	||d
}
||d}||d}t| t 	| d t| t 	|d	 t|	 | t|
 t 	|d
 t| t 	|d t| t 	|d t
jtdd |g dg dgjdd W d    n1 sw   Y  t
jtdd |g dgjdd W d    n1 sw   Y  q:d S )Nri  r   r   r\   rk  ry  r  r  r  r  r$  r  zcannot be broadcastr  )r   r\   r   r  r  r  r  r  )rD   r   r   r   r   r   Z_broadcast_tor   r{   Zbroadcast_tor   r   r   )rG   rL   rF  r   rG  rH  	containerZres_aZres_bZres_cZres_dZres_eZres_fr7   r7   r8   test_broadcast_to&  s6   r  r:   )NFNNF)T)	TTTTTTTTT)r   
contextlibr  rq  r8  r  sysr   r   r   numpyrD   r   r   r   r   r   r   r	   r
   r   r   r   r   r   rx   Znumpy.testingr   r   r   r   r   r   r   Zscipy.linalgrm   r  rn   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   Zscipy.sparse._baser)   Zscipy.sparse._sputilsr*   r+   r,   r-   r.   Zscipy.sparse.linalgr/   r0   r1   Zscipy._lib.decoratorr2   Zscipy._lib._utilr3   rt   r  r9   r?   	frozensetr  rM   r   r   rz   r{   r}   r   r   r   r   r  r  r  r  r  r  r(  r9  contextmanagerrT  rU  ra  rg  rw  r  r  r  r  r  r   r  r  r#  r   r3  r5  rL  rM  rb  rc  rn  ro  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r7   r7   r7   r8   <module>   s$  <$P




Q$"                 f  E   
n#bc  "

,   bp J j!309d